Class: Unimatrix::Resource
- Inherits:
-
Object
- Object
- Unimatrix::Resource
show all
- Defined in:
- lib/unimatrix/resource.rb
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(attributes = {}, associations = {}) {|_self| ... } ⇒ Resource
Returns a new instance of Resource.
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
# File 'lib/unimatrix/resource.rb', line 80
def initialize( attributes={}, associations={} )
self.nested_fields.each do | key, value |
self.send( "#{ key }=", Struct.new( *value ).new )
end
self.type_name = self.class.name.split( '::' ).last.underscore rescue nil
attributes.each do | key, value |
send( "#{ key }=", value ) if self.respond_to?( "#{ key }=" )
end
associations.each do | key, value |
self.instance_variable_set( "@_#{ key }", value )
end
yield self if block_given?
end
|
Class Method Details
.field(name, options = {}) ⇒ Object
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
# File 'lib/unimatrix/resource.rb', line 29
def field( name, options = {} )
if name.is_a?( Hash )
nested_field_key = name.keys.first
self.nested_fields[ nested_field_key ] = name[ nested_field_key ]
name = nested_field_key
end
self.fields[ name.to_sym ] = options.merge( name: name )
class_eval(
"def #{ name }(); " +
"@#{ name }.is_a?( FalseClass ) ? @#{ name } : (" +
"@#{ name } || " +
( options[ :default ].nil? ?
"nil" :
( options[ :default ].is_a?( String ) ?
"'#{ options[ :default ] }'" :
"#{ options[ :default ] }" ) ) + ");" +
"end;" +
" " +
"attr_writer :#{ name };",
__FILE__,
__LINE__
)
end
|
.find_by_type_name(type_name) ⇒ Object
16
17
18
19
20
21
22
23
24
25
26
27
|
# File 'lib/unimatrix/resource.rb', line 16
def find_by_type_name( type_name )
@descendants_by_type_name = begin
result = {}
descendants.each do | descendant |
descendant_type_name = descendant.type_name
result[ descendant_type_name ] = descendant \
unless descendant_type_name.blank?
end
result
end
@descendants_by_type_name[ type_name ]
end
|
.has_many(name, options = {}) ⇒ Object
62
63
64
65
66
67
|
# File 'lib/unimatrix/resource.rb', line 62
def has_many( name, options = {} )
define_method name do
self.instance_variable_get( "@_#{ name }" ) ||
options[ :default ] || []
end
end
|
.has_one(name, options = {}) ⇒ Object
55
56
57
58
59
60
|
# File 'lib/unimatrix/resource.rb', line 55
def has_one( name, options = {} )
define_method name do
associations = self.instance_variable_get( "@_#{ name.to_s.pluralize }" )
associations.present? ? associations.first : options[ :default ]
end
end
|
.inherited(subclass) ⇒ Object
7
8
9
10
|
# File 'lib/unimatrix/resource.rb', line 7
def inherited( subclass )
subclass.nested_fields = {}.merge( self.nested_fields )
subclass.fields = {}.merge( self.fields )
end
|
.type_name ⇒ Object
12
13
14
|
# File 'lib/unimatrix/resource.rb', line 12
def type_name
name.present? ? name.split( '::' ).last.underscore : nil
end
|