Sha256: 9a070561856f88cc7bae6408176e6ce83fafce6617878f377934f0047cf13a1a

Contents?: true

Size: 1.06 KB

Versions: 26

Compression:

Stored size: 1.06 KB

Contents

# frozen_string_literal: true

class Code
  class Object
    class Boolean < ::Code::Object
      def initialize(*args, **_kargs, &_block)
        raw = args.first || Nothing.new
        raw = raw.raw if raw.is_a?(Object)
        @raw = !!raw
      end

      def call(**args)
        operator = args.fetch(:operator, nil)
        arguments = args.fetch(:arguments, List.new)
        value = arguments.code_first

        case operator.to_s
        when "&", "bitwise_and"
          sig(args) { Boolean }
          code_bitwise_and(value)
        when "^", "bitwise_xor"
          sig(args) { Boolean }
          code_bitwise_xor(value)
        when "|", "bitwise_or"
          sig(args) { Boolean }
          code_bitwise_or(value)
        else
          super
        end
      end

      def code_bitwise_and(value)
        Boolean.new(raw & value.raw)
      end

      def code_bitwise_or(value)
        Boolean.new(raw | value.raw)
      end

      def code_bitwise_xor(value)
        Boolean.new(raw ^ value.raw)
      end

      def truthy?
        raw
      end
    end
  end
end

Version data entries

26 entries across 26 versions & 1 rubygems

Version Path
code-ruby-1.0.0 lib/code/object/boolean.rb
code-ruby-0.15.16 lib/code/object/boolean.rb
code-ruby-0.15.15 lib/code/object/boolean.rb
code-ruby-0.15.14 lib/code/object/boolean.rb
code-ruby-0.15.13 lib/code/object/boolean.rb
code-ruby-0.15.12 lib/code/object/boolean.rb
code-ruby-0.15.11 lib/code/object/boolean.rb
code-ruby-0.15.10 lib/code/object/boolean.rb
code-ruby-0.15.9 lib/code/object/boolean.rb
code-ruby-0.15.8 lib/code/object/boolean.rb
code-ruby-0.15.7 lib/code/object/boolean.rb
code-ruby-0.15.6 lib/code/object/boolean.rb
code-ruby-0.15.5 lib/code/object/boolean.rb
code-ruby-0.15.4 lib/code/object/boolean.rb
code-ruby-0.15.3 lib/code/object/boolean.rb
code-ruby-0.15.2 lib/code/object/boolean.rb
code-ruby-0.15.0 lib/code/object/boolean.rb
code-ruby-0.14.9 lib/code/object/boolean.rb
code-ruby-0.14.8 lib/code/object/boolean.rb
code-ruby-0.14.6 lib/code/object/boolean.rb