Module: Lab42::DataClass

Defined in:
lib/lab42/data_class.rb,
lib/lab42/data_class/proxy.rb,
lib/lab42/data_class/version.rb,
lib/lab42/data_class/proxy/memos.rb,
lib/lab42/data_class/proxy/mixin.rb,
lib/lab42/data_class/proxy/derived.rb,
lib/lab42/data_class/constraint_error.rb,
lib/lab42/data_class/validation_error.rb,
lib/lab42/data_class/proxy/constraints.rb,
lib/lab42/data_class/proxy/validations.rb,
lib/lab42/data_class/builtin_constraints.rb,
lib/lab42/data_class/constraints/constraint.rb,
lib/lab42/data_class/undefined_setter_error.rb,
lib/lab42/data_class/proxy/constraints/maker.rb,
lib/lab42/data_class/undefined_attribute_error.rb,
lib/lab42/data_class/duplicate_definition_error.rb,
lib/lab42/data_class/constraints/setter_constraint.rb,
lib/lab42/data_class/constraints/list_of_constraint.rb,
lib/lab42/data_class/constraints/pair_of_constraint.rb,
lib/lab42/data_class/constraints/triple_of_constraint.rb,
lib/lab42/data_class/constraints/attribute_setters/attribute_setter.rb,
lib/lab42/data_class/constraints/attribute_setters/list_of_attribute_setter.rb,
lib/lab42/data_class/constraints/attribute_setters/pair_of_attribute_setter.rb,
lib/lab42/data_class/constraints/attribute_setters/triple_of_attribute_setter.rb

Defined Under Namespace

Modules: BuiltinConstraints, Constraints Classes: ConstraintError, DuplicateDefinitionError, Proxy, UndefinedAttributeError, UndefinedSetterError, ValidationError

Constant Summary collapse

VERSION =
"0.9.0"

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.extended(extendee) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/lab42/data_class.rb', line 17

def self.extended(extendee)
  base_proxy =
    extendee
    .ancestors
    .grep(self)
    .drop(1)
    .first
      &.__data_class_proxy__

  proxy = base_proxy ? Proxy.from_parent(base_proxy, extendee) : Proxy.new(extendee)

  extendee.module_eval do
    define_singleton_method(:__data_class_proxy__){ proxy }
  end
end

Instance Method Details

#attributes(*args, **kwds) ⇒ Object



33
34
35
36
37
38
# File 'lib/lab42/data_class.rb', line 33

def attributes(*args, **kwds)
  __data_class_proxy__.tap do |proxy|
    proxy.update!(args, kwds)
    proxy.define_class!
  end
end

#constraint(member, constraint = nil, &block) ⇒ Object

Raises:

  • (ArgumentError)


45
46
47
48
49
50
# File 'lib/lab42/data_class.rb', line 45

def constraint(member, constraint = nil, &block)
  raise ArgumentError, "must not provide constraint (2nd argument) and a block" if block && constraint

  __data_class_proxy__.define_constraints(member => constraint || block)
  __data_class_proxy__.define_class!
end

#derive(att_name, &blk) ⇒ Object



40
41
42
43
# File 'lib/lab42/data_class.rb', line 40

def derive(att_name, &blk)
  __data_class_proxy__.define_derived_attribute(att_name, &blk)
  __data_class_proxy__.define_class!
end