module AlgebraDB::Value::Operations::Definition

Base class that provides a DSL to quickly define things.

Public Instance Methods

binop(name, pg_name, ret_val) click to toggle source
# File lib/algebra_db/value/operations/definition.rb, line 7
def binop(name, pg_name, ret_val) # rubocop:disable Metrics/MethodLength
  method_body =
    if ret_val == :self
      proc do |rhs|
        op = ::AlgebraDB::Build::Op.new(pg_name, self, rhs)
        self.class.new(op)
      end
    else
      ret_type = ::AlgebraDB::Value.const_get(ret_val)
      proc { |rhs| ret_type.new(::AlgebraDB::Build::Op.new(pg_name, self, rhs)) }
    end
  define_method(name, &method_body)
end