Module: AlgebraDB::Value::Operations::Definition

Included in:
AlgebraDB::Value, Array::ArrayOps, Numeric
Defined in:
lib/algebra_db/value/operations/definition.rb

Overview

Base class that provides a DSL to quickly define things.

Instance Method Summary collapse

Instance Method Details

#binop(name, pg_name, ret_val) ⇒ Object

rubocop:disable Metrics/MethodLength



7
8
9
10
11
12
13
14
15
16
17
18
19
# 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