Class: RedGrape::Element
Instance Method Summary
collapse
Constructor Details
#initialize(graph, opts = {}) ⇒ Element
Returns a new instance of Element.
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
# File 'lib/red_grape/element.rb', line 5
def initialize(graph, opts={})
@graph = graph
@property = {}
if opts[:property_description]
@property_description = opts[:property_description]
(opts[:property] || {}).each do |k, v|
self[k] = v
end
else
@property_description = {}
opts.each do |k, v|
self[k] = v
end
end
@property_description.each do |k ,v|
if v.is_a? Array
v = PropertyDescription.new(*v)
elsif v.is_a? Hash
v = PropertyDescription.new v[:name], v[:type], v[:default]
end
@property_description[k] = v
set_property k, v.default if v.has_default?
end
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(name, *args, &block) ⇒ Object
101
102
103
104
105
106
107
108
109
110
111
112
|
# File 'lib/red_grape/element.rb', line 101
def method_missing(name, *args, &block)
if name.to_s =~ /(.*)=$/
name = $1
if self[name]
self[name] = args.first
else
raise NoMethodError.new(name.to_s)
end
else
self[name.to_s] or raise NoMethodError.new(name.to_s)
end
end
|
Instance Method Details
#<=>(other) ⇒ Object
78
79
80
|
# File 'lib/red_grape/element.rb', line 78
def <=>(other)
self.id <=> other.id
end
|
74
75
76
|
# File 'lib/red_grape/element.rb', line 74
def ==(obj)
self.class == obj.class && self.id == obj.id
end
|
66
67
68
|
# File 'lib/red_grape/element.rb', line 66
def [](k)
@property[k.to_s]
end
|
#[]=(k, v) ⇒ Object
set property value without type checking
62
63
64
|
# File 'lib/red_grape/element.rb', line 62
def []=(k, v)
@property[k.to_s] = v
end
|
#directed_value(direction, out_value, in_value, error = true) ⇒ Object
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
# File 'lib/red_grape/element.rb', line 82
def directed_value(direction, out_value, in_value, error=true)
case direction.to_s
when 'out'
if out_value.is_a? Proc
out_value.call
else
out_value
end
when 'in'
if in_value.is_a? Proc
in_value.call
else
in_value
end
else error
raise ArgumentError.new '"out" or "in"'
end
end
|
#pass_through(pipe, context) ⇒ Object
70
71
72
|
# File 'lib/red_grape/element.rb', line 70
def pass_through(pipe, context)
pipe.pass self, context
end
|
#property(k = nil) ⇒ Object
49
50
51
52
53
54
55
|
# File 'lib/red_grape/element.rb', line 49
def property(k=nil)
if k
self[k]
else
@property
end
end
|
#property_keys ⇒ Object
30
31
32
|
# File 'lib/red_grape/element.rb', line 30
def property_keys
@property.keys
end
|
#remove_property(k) ⇒ Object
57
58
59
|
# File 'lib/red_grape/element.rb', line 57
def remove_property(k)
@property.delete k.to_s
end
|
#set_property(kid, v) ⇒ Object
set property value with type checking if its definition exists
35
36
37
38
39
40
41
42
43
44
45
46
47
|
# File 'lib/red_grape/element.rb', line 35
def set_property(kid, v)
if @property_description && desc = @property_description[kid]
if desc.accessible? v
self[desc.name] = v
elsif desc.convertable? v
self[desc.name] = desc.convert v
else
raise ArgumentError.new "#{kid} should be #{desc.type}."
end
else
self[kid] = v
end
end
|