Class: Bed::Flex::Builder
Instance Method Summary
collapse
Constructor Details
#initialize(*args, **kwargs, &blk) ⇒ Builder
Returns a new instance of Builder.
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
# File 'lib/bed/flex/builder.rb', line 4
def initialize(*args, **kwargs, &blk)
@whitelisted_attributes = []
@attributes = {}
@locked = false
@converged = false
result = if block_given?
block = blk
if block.arity.zero?
instance_eval(&block)
else
yield self
end
end
converge(result) if should_converge?(result)
@locked = true
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(name, *args, &block) ⇒ Object
102
103
104
105
106
107
108
109
110
111
|
# File 'lib/bed/flex/builder.rb', line 102
def method_missing(name, *args, &block)
return super if !@whitelisted_attributes.empty? && !@whitelisted_attributes.include?(name)
if name.end_with?('=')
attribute_name = name.to_s.chomp('=').to_sym
set_attribute(attribute_name, args.first)
else
get_or_set_attribute(name, *args, &block)
end
end
|
Instance Method Details
#[]=(name, value) ⇒ Object
75
76
77
|
# File 'lib/bed/flex/builder.rb', line 75
def []=(name, value)
set_attribute(name, value)
end
|
#converge(value) ⇒ Object
22
23
24
25
|
# File 'lib/bed/flex/builder.rb', line 22
def converge(value)
@converged = true
@attributes[:_converged] = value
end
|
39
40
41
42
43
44
45
|
# File 'lib/bed/flex/builder.rb', line 39
def deep_dup
self.class.new.tap do |new_builder|
@attributes.each do |key, value|
new_builder.send(:"#{key}=", value.is_a?(Builder) ? value.deep_dup : value.dup)
end
end
end
|
#get(path) ⇒ Object
27
28
29
|
# File 'lib/bed/flex/builder.rb', line 27
def get(path)
path.to_s.split('.').inject(self) { |obj_self, attr| obj_self.public_send(attr) }
end
|
63
64
65
66
67
68
69
70
|
# File 'lib/bed/flex/builder.rb', line 63
def inspect
case @attributes
in {} then '{}'
in { _converged: value } then value
else
old_inspect
end
end
|
#old_inspect ⇒ Object
61
|
# File 'lib/bed/flex/builder.rb', line 61
alias_method :old_inspect, :inspect
|
#pretty_print(pp) ⇒ Object
47
48
49
50
51
52
53
54
55
56
57
58
59
|
# File 'lib/bed/flex/builder.rb', line 47
def pretty_print(pp)
pp.object_address_group(self) do
pp.seplist(@attributes, -> { pp.text ',' }) do |k, v|
pp.breakable
pp.group(1) do
pp.text k.to_s
pp.text ':'
pp.breakable
pp.pp v
end
end
end
end
|
#to_h ⇒ Object
Also known as:
to_s
31
32
33
34
|
# File 'lib/bed/flex/builder.rb', line 31
def to_h
return @attributes[:_converged] if @converged
@attributes.transform_values { |v| v.is_a?(Builder) ? v.to_h : v }
end
|