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/proxy/constraints/maker.rb,
lib/lab42/data_class/duplicate_definition_error.rb
Defined Under Namespace
Classes: ConstraintError, DuplicateDefinitionError, Proxy, ValidationError
Constant Summary
collapse
- VERSION =
"0.7.0"
Class Method Summary
collapse
Instance Method Summary
collapse
Class Method Details
.extended(extendee) ⇒ Object
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
# File 'lib/lab42/data_class.rb', line 13
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
29
30
31
32
33
34
|
# File 'lib/lab42/data_class.rb', line 29
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
41
42
43
44
45
46
|
# File 'lib/lab42/data_class.rb', line 41
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
36
37
38
39
|
# File 'lib/lab42/data_class.rb', line 36
def derive(att_name, &blk)
__data_class_proxy__.define_derived_attribute(att_name, &blk)
__data_class_proxy__.define_class!
end
|