Class: Lab42::DataClass::Proxy
- Inherits:
-
Object
- Object
- Lab42::DataClass::Proxy
show all
- Includes:
- Constraints, Derived, Memos, Validations
- Defined in:
- lib/lab42/data_class/proxy.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/proxy/constraints.rb,
lib/lab42/data_class/proxy/validations.rb,
lib/lab42/data_class/proxy/constraints/maker.rb
Defined Under Namespace
Modules: Constraints, Derived, Memos, Mixin, Validations
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
#check_constraints_against_defaults, #define_constraints
Methods included from Memos
#all_attributes, #constraints, #defaults, #derived_attributes, #members, #members!, #positionals, #setter_attributes, #validations
#validate!
Instance Attribute Details
#actual_params ⇒ Object
Returns the value of attribute actual_params.
14
15
16
|
# File 'lib/lab42/data_class/proxy.rb', line 14
def actual_params
@actual_params
end
|
#block ⇒ Object
Returns the value of attribute block.
14
15
16
|
# File 'lib/lab42/data_class/proxy.rb', line 14
def block
@block
end
|
#klass ⇒ Object
Returns the value of attribute klass.
14
15
16
|
# File 'lib/lab42/data_class/proxy.rb', line 14
def klass
@klass
end
|
#klass_defined ⇒ Object
Returns the value of attribute klass_defined.
14
15
16
|
# File 'lib/lab42/data_class/proxy.rb', line 14
def klass_defined
@klass_defined
end
|
Class Method Details
.from_parent(parent, klass) ⇒ Object
16
17
18
19
20
21
22
23
|
# File 'lib/lab42/data_class/proxy.rb', line 16
def self.from_parent(parent, klass)
new(klass).tap do |proxy|
proxy.positionals.push(*parent.positionals)
proxy.defaults.update(parent.defaults)
proxy.constraints.update(parent.constraints)
proxy.validations.push(*parent.validations)
end
end
|
Instance Method Details
#access(data_class_instance, key) ⇒ Object
25
26
27
28
29
30
31
|
# File 'lib/lab42/data_class/proxy.rb', line 25
def access(data_class_instance, key)
if all_attributes.member?(key)
data_class_instance.send(key)
else
raise KeyError, "#{key} is not an attribute of #{data_class_instance}"
end
end
|
#check!(params, merge_with = defaults) ⇒ Object
33
34
35
36
37
38
|
# File 'lib/lab42/data_class/proxy.rb', line 33
def check!(params, merge_with = defaults)
raise ArgumentError, "missing initializers for #{_missing_initializers}" unless _missing_initializers.empty?
raise ArgumentError, "illegal initializers #{_illegal_initializers}" unless _illegal_initializers.empty?
_check_constraints!(merge_with.merge(params))
end
|
#define_class! ⇒ Object
40
41
42
43
44
45
46
47
48
49
50
|
# File 'lib/lab42/data_class/proxy.rb', line 40
def define_class!
return if @klass_defined
@klass_defined = true
klass.module_eval(&_define_attr_reader)
klass.module_eval(&_define_initializer) if Class === klass
_define_methods
klass.include(Mixin)
klass.module_eval(&block) if block
klass
end
|
#define_derived_attribute(name, &blk) ⇒ Object
52
53
54
55
56
57
58
59
|
# File 'lib/lab42/data_class/proxy.rb', line 52
def define_derived_attribute(name, &blk)
positionals.delete(name)
defaults.delete(name)
derived_attributes.update(name => true) do |_key, _old,|
raise DuplicateDefinitionError, "Redefinition of derived attribute #{name.inspect}"
end
klass.module_eval(&_define_derived_attribute(name, &blk))
end
|
#init(data_class, **params) ⇒ Object
61
62
63
|
# File 'lib/lab42/data_class/proxy.rb', line 61
def init(data_class, **params)
_init(data_class, defaults.merge(params))
end
|
#set_actual_params(params) ⇒ Object
65
66
67
|
# File 'lib/lab42/data_class/proxy.rb', line 65
def set_actual_params(params)
@actual_params = params
end
|
#to_hash(data_class_instance) ⇒ Object
69
70
71
72
|
# File 'lib/lab42/data_class/proxy.rb', line 69
def to_hash(data_class_instance)
all_attributes
.inject({}) { |result, (k, _)| result.merge(k => data_class_instance[k]) }
end
|
#update!(with_positionals, with_keywords) ⇒ Object
74
75
76
77
|
# File 'lib/lab42/data_class/proxy.rb', line 74
def update!(with_positionals, with_keywords)
positionals.push(*with_positionals)
defaults.update(with_keywords)
end
|