Class: Origen::Parameters::Set
- Inherits:
-
Hash
show all
- Defined in:
- lib/origen/parameters/set.rb
Instance Attribute Summary collapse
Instance Method Summary
collapse
Methods inherited from Hash
#filter, #ids, #intersect?, #intersections, #longest_key, #longest_value, #update_common
Constructor Details
#initialize(options = {}) ⇒ Set
Returns a new instance of Set.
8
9
10
11
12
13
14
|
# File 'lib/origen/parameters/set.rb', line 8
def initialize(options = {})
if options[:top_level]
@top_level = self
@path = ''
@owner = options[:owner]
end
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *args, &block) ⇒ Object
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
# File 'lib/origen/parameters/set.rb', line 40
def method_missing(method, *args, &block)
if defining?
if args.length == 0
self[method] ||= new_subset(method)
elsif args.length > 1
super
else
m = method.to_s.sub('=', '').to_sym
self[m] = args.first
end
else
if args.length != 0
super
else
val = self[method]
if !val
super
else
if val.is_a?(Set)
val
else
if live?
Live.new(owner: owner, path: path, name: method)
else
if val.is_a?(Proc)
val.call(*args)
else
val
end
end
end
end
end
end
end
|
Instance Attribute Details
Returns the value of attribute name.
5
6
7
|
# File 'lib/origen/parameters/set.rb', line 5
def name
@name
end
|
Returns the value of attribute path.
6
7
8
|
# File 'lib/origen/parameters/set.rb', line 6
def path
@path
end
|
#top_level ⇒ Object
Returns the value of attribute top_level.
4
5
6
|
# File 'lib/origen/parameters/set.rb', line 4
def top_level
@top_level
end
|
Instance Method Details
86
87
88
89
|
# File 'lib/origen/parameters/set.rb', line 86
def [](key)
val = super
val.is_a?(Proc) ? val.call : val
end
|
#context ⇒ Object
Also known as:
current_context
Returns the current parameter context
24
25
26
|
# File 'lib/origen/parameters/set.rb', line 24
def context
owner._parameter_current
end
|
#copy_defaults_from(set) ⇒ Object
29
30
31
32
33
34
35
36
37
38
|
# File 'lib/origen/parameters/set.rb', line 29
def copy_defaults_from(set)
set.each do |name, val|
if val.is_a?(Set)
self[name] = new_subset(name)
self[name].copy_defaults_from(val)
else
self[name] = val
end
end
end
|
#define(parent = nil) {|_self, parent| ... } ⇒ Object
16
17
18
19
20
21
|
# File 'lib/origen/parameters/set.rb', line 16
def define(parent = nil, &_block)
@defining = true
yield self, parent
@defining = false
finalize
end
|
#defining? ⇒ Boolean
97
98
99
100
101
102
103
|
# File 'lib/origen/parameters/set.rb', line 97
def defining?
if top_level?
@defining
else
top_level.defining?
end
end
|
76
77
78
79
80
81
82
83
84
|
# File 'lib/origen/parameters/set.rb', line 76
def each
super do |key, val|
if val.is_a?(Proc)
yield key, val.call
else
yield key, val
end
end
end
|
117
118
119
120
|
# File 'lib/origen/parameters/set.rb', line 117
def finalize
freeze
each { |_name, val| val.finalize if val.is_a? Set }
end
|
138
139
140
141
|
# File 'lib/origen/parameters/set.rb', line 138
def live
owner._request_live_parameter
self
end
|
#live? ⇒ Boolean
134
135
136
|
# File 'lib/origen/parameters/set.rb', line 134
def live?
owner._live_parameter_requested?
end
|
#new_subset(name) ⇒ Object
122
123
124
125
126
127
128
129
130
131
132
|
# File 'lib/origen/parameters/set.rb', line 122
def new_subset(name)
set = Set.new
set.name = name
set.top_level = top_level
if path == ''
set.path = name.to_s
else
set.path = "#{path}.#{name}"
end
set
end
|
105
106
107
108
109
110
111
|
# File 'lib/origen/parameters/set.rb', line 105
def owner
if top_level?
@owner
else
top_level.owner
end
end
|
#test(*args, &block) ⇒ Object
Test seems to be some kind of reserved word, that doesn’t trigger the method_missing, so re-defining it here to allow a param group called ‘test’
93
94
95
|
# File 'lib/origen/parameters/set.rb', line 93
def test(*args, &block)
method_missing(:test, *args, &block)
end
|
#top_level? ⇒ Boolean
113
114
115
|
# File 'lib/origen/parameters/set.rb', line 113
def top_level?
top_level == self
end
|