Module: OOP

Defined in:
lib/oop.rb,
lib/oop/cell.rb,
lib/oop/tools.rb,
lib/oop/value.rb,
lib/oop/version.rb,
lib/oop/boundary.rb,
lib/oop/basic_rules.rb,
lib/oop/cell_object.rb,
lib/oop/value_object.rb,
lib/oop/non_value_arg.rb,
lib/oop/value_provider.rb

Defined Under Namespace

Modules: CellObject, Tools, ValueObject Classes: BasicRules, Boundary, Cell, NonValueArg, Value, ValueProvider

Constant Summary collapse

VERSION =
"2.0.0"

Class Method Summary collapse

Class Method Details

.Cell(*rules_and_name_to_klass) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/oop/cell.rb', line 12

def Cell(*rules_and_name_to_klass)
  rules, name_to_klass = if rules_and_name_to_klass.size > 1
                           rules_and_name_to_klass
                         else
                           [BasicRules, rules_and_name_to_klass.first]
                         end

  c = Class.new(Cell)
  c.class_exec do
    define_method(:_rules) { rules.new }
  end
  name_to_klass.each do |name, klass|
    c.class_exec do
      define_method(name) { klass }
    end
  end
  c
end

.Value(*rules_and_name_to_klass) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/oop/value.rb', line 19

def Value(*rules_and_name_to_klass)
  rules, name_to_klass = if rules_and_name_to_klass.size > 1
                           rules_and_name_to_klass
                         else
                           [BasicRules, rules_and_name_to_klass.first]
                         end
  c = Class.new(Value)
  c.class_exec do
    define_method(:_rules) { rules.new }
  end
  name_to_klass.each do |name, klass|
    if !(klass.is_a?(Value) || klass.ancestors.include?(Value) || rules.new.trusted_values.include?(klass))
      raise "imported non-value #{klass}"
    end
    c.class_exec do
      define_method(name) { klass }
    end
  end
  c
end