Sha256: 73630de52b91441b00b3b25ffd90efb9bc25cec2520719f6067c0b8390a45a39

Contents?: true

Size: 1.16 KB

Versions: 6

Compression:

Stored size: 1.16 KB

Contents

# frozen_string_literal: true

module Grumlin
  module Tools
    module P
      class << self
        class Predicate < TypedValue
          def initialize(name, args:, arg_type: nil)
            super(type: "P")
            @name = name
            @args = args
            @arg_type = arg_type
          end

          def value
            @value ||= {
              predicate: @name,
              value: TypedValue.new(type: @arg_type, value: @args).to_bytecode
            }
          end
        end

        # TODO: support more predicates
        %i[eq neq].each do |predicate|
          define_method predicate do |*args|
            Predicate.new(predicate, args: args[0])
          end
        end

        %i[within without].each do |predicate|
          define_method predicate do |*args|
            args = if args.count == 1 && args[0].is_a?(Array)
                     args[0]
                   elsif args.count == 1 && args[0].is_a?(Set)
                     args[0].to_a
                   else
                     args.to_a
                   end
            Predicate.new(predicate, args: args, arg_type: "List")
          end
        end
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
grumlin-0.12.5 lib/grumlin/tools/p.rb
grumlin-0.12.4 lib/grumlin/tools/p.rb
grumlin-0.12.3 lib/grumlin/tools/p.rb
grumlin-0.12.2 lib/grumlin/tools/p.rb
grumlin-0.12.1 lib/grumlin/tools/p.rb
grumlin-0.12.0 lib/grumlin/tools/p.rb