Class: Appfuel::Domain::Entity
Instance Attribute Summary
Attributes included from Dsl
#defaults, #equalizer, #schema
Instance Method Summary
collapse
Methods included from Dsl
attribute, attribute_conflict?, attribute_exists?, attribute_names, build_type, container_class_type, create, default?, disable_value_object, empty_hash, enable_value_object, enum, extended, inherited, strict_enum, try, type, valid?
#app_container, #feature_name, included, #qualify_container_key
Constructor Details
#initialize(inputs = {}) ⇒ Entity
Returns a new instance of Entity.
16
17
18
19
20
21
22
23
24
25
26
|
# File 'lib/appfuel/domain/entity.rb', line 16
def initialize(inputs = {})
setup_attributes(inputs)
hide_undefined
@is_global = domain_name.count('.') == 0
rescue Dry::Types::ConstraintError => e
msg = "#{self.class.name} could not initialize: #{e.message}"
error = RuntimeError.new(msg)
error.set_backtrace(e.backtrace)
raise error
end
|
Instance Method Details
#attr_typed!(name, value) ⇒ Object
67
68
69
|
# File 'lib/appfuel/domain/entity.rb', line 67
def attr_typed!(name, value)
self.class.schema[name.to_sym][value]
end
|
#collection? ⇒ Boolean
32
33
34
|
# File 'lib/appfuel/domain/entity.rb', line 32
def collection?
false
end
|
#data_type(type_name) ⇒ Object
75
76
77
|
# File 'lib/appfuel/domain/entity.rb', line 75
def data_type(type_name)
self.class.type(type_name)
end
|
#data_typed!(type_name, value) ⇒ Object
71
72
73
|
# File 'lib/appfuel/domain/entity.rb', line 71
def data_typed!(type_name, value)
data_type(type_name)[value]
end
|
#domain_basename ⇒ Object
88
89
90
|
# File 'lib/appfuel/domain/entity.rb', line 88
def domain_basename
self.class.domain_basename
end
|
#domain_name ⇒ Object
84
85
86
|
# File 'lib/appfuel/domain/entity.rb', line 84
def domain_name
self.class.domain_name
end
|
#enable_undefined ⇒ Object
48
49
50
51
52
53
54
|
# File 'lib/appfuel/domain/entity.rb', line 48
def enable_undefined
show_undefined
@undefined_as_nil = false
each_entity do |entity|
entity.enable_undefined
end
end
|
#global? ⇒ Boolean
28
29
30
|
# File 'lib/appfuel/domain/entity.rb', line 28
def global?
@is_global
end
|
#has?(key) ⇒ Boolean
128
129
130
131
|
# File 'lib/appfuel/domain/entity.rb', line 128
def has?(key)
value = send(key)
!value.nil? && value != Types::Undefined
end
|
#hide_undefined ⇒ Object
40
41
42
|
# File 'lib/appfuel/domain/entity.rb', line 40
def hide_undefined
@hide_undefined = true
end
|
#hide_undefined? ⇒ Boolean
36
37
38
|
# File 'lib/appfuel/domain/entity.rb', line 36
def hide_undefined?
@hide_undefined
end
|
#show_undefined ⇒ Object
44
45
46
|
# File 'lib/appfuel/domain/entity.rb', line 44
def show_undefined
@hide_undefined = false
end
|
#to_h ⇒ Object
124
125
126
|
# File 'lib/appfuel/domain/entity.rb', line 124
def to_h
to_hash
end
|
#to_hash ⇒ Object
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
# File 'lib/appfuel/domain/entity.rb', line 92
def to_hash
data = {}
self.class.schema.each do |key, type|
fail "no getter defined for #{key}" unless respond_to?(key)
value = send(key)
case
when value.is_a?(Array)
list = []
value.each do |item|
list << (item.is_a?(Entity) ? item.to_hash : item)
end
value = list
when value.is_a?(Hash)
dict = {}
value.each do |value_key, item|
dict[value_key] = item.is_a?(Entity) ? item.to_hash : item
end
value = dict
when value.respond_to?(:to_hash)
value = value.to_hash
when value == Types::Undefined
if type.respond_to?(:domain_name)
value = type.empty_hash(undefined_as_nil? ? true : false)
end
next if hide_undefined?
end
data[key] = value
end
data.deep_symbolize_keys
end
|
#undefined_as_nil ⇒ Object
56
57
58
59
60
61
|
# File 'lib/appfuel/domain/entity.rb', line 56
def undefined_as_nil
@undefined_as_nil = true
each_entity do |entity|
entity.undefined_as_nil
end
end
|
#undefined_as_nil? ⇒ Boolean
63
64
65
|
# File 'lib/appfuel/domain/entity.rb', line 63
def undefined_as_nil?
@undefined_as_nil
end
|
#validate_type!(value, type_str, **options) ⇒ Object
79
80
81
82
|
# File 'lib/appfuel/domain/entity.rb', line 79
def validate_type!(value, type_str, **options)
type = self.class.build_type(type_str, **options)
type[value]
end
|