Class: RSpec::Core::Metadata
- Inherits:
-
Hash
- Object
- Hash
- RSpec::Core::Metadata
show all
- Defined in:
- lib/rspec/core/metadata.rb
Overview
Each ExampleGroup class and Example instance owns an instance of Metadata, which is Hash extended to support lazy evaluation of values associated with keys that may or may not be used by any example or group.
In addition to metadata that is used internally, this also stores user-supplied metadata, e.g.
describe Something, :type => :ui do
it "does something", :slow => true do
end
end
‘:type => :ui` is stored in the Metadata owned by the example group, and `:slow => true` is stored in the Metadata owned by the example. These can then be used to select which examples are run using the `–tag` option on the command line, or several methods on `Configuration` used to filter a run (e.g. `filter_run_including`, `filter_run_excluding`, etc).
Defined Under Namespace
Modules: ExampleMetadataHash, GroupMetadataHash, MetadataHash
Instance Method Summary
collapse
Constructor Details
#initialize(parent_group_metadata = nil) {|_self| ... } ⇒ Metadata
Returns a new instance of Metadata.
133
134
135
136
137
138
139
140
141
142
|
# File 'lib/rspec/core/metadata.rb', line 133
def initialize(parent_group_metadata=nil)
if parent_group_metadata
update(parent_group_metadata)
store(:example_group, {:example_group => parent_group_metadata[:example_group].extend(GroupMetadataHash)}.extend(GroupMetadataHash))
else
store(:example_group, {}.extend(GroupMetadataHash))
end
yield self if block_given?
end
|
Instance Method Details
#all_apply?(filters) ⇒ Boolean
166
167
168
|
# File 'lib/rspec/core/metadata.rb', line 166
def all_apply?(filters)
filters.all? {|k,v| filter_applies?(k,v)}
end
|
#any_apply?(filters) ⇒ Boolean
161
162
163
|
# File 'lib/rspec/core/metadata.rb', line 161
def any_apply?(filters)
filters.any? {|k,v| filter_applies?(k,v)}
end
|
#filter_applies?(key, value, metadata = self) ⇒ Boolean
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
|
# File 'lib/rspec/core/metadata.rb', line 171
def filter_applies?(key, value, metadata=self)
return metadata.filter_applies_to_any_value?(key, value) if Array === metadata[key] && !(Proc === value)
return metadata.line_number_filter_applies?(value) if key == :line_numbers
return metadata.location_filter_applies?(value) if key == :locations
return metadata.filters_apply?(key, value) if Hash === value
case value
when Regexp
metadata[key] =~ value
when Proc
if value.arity == 2
value.call(metadata[key], metadata) rescue false
else
value.call(metadata[key]) rescue false
end
else
metadata[key].to_s == value.to_s
end
end
|
#filter_applies_to_any_value?(key, value) ⇒ Boolean
203
204
205
|
# File 'lib/rspec/core/metadata.rb', line 203
def filter_applies_to_any_value?(key, value)
self[key].any? {|v| filter_applies?(key, v, {key => value})}
end
|
#filters_apply?(key, value) ⇒ Boolean
198
199
200
|
# File 'lib/rspec/core/metadata.rb', line 198
def filters_apply?(key, value)
value.all? {|k, v| filter_applies?(k, v, self[key])}
end
|
#for_example(description, user_metadata) ⇒ Object
156
157
158
|
# File 'lib/rspec/core/metadata.rb', line 156
def for_example(description, user_metadata)
dup.extend(ExampleMetadataHash).configure_for_example(description, user_metadata)
end
|
#line_number_filter_applies?(line_numbers) ⇒ Boolean
215
216
217
218
|
# File 'lib/rspec/core/metadata.rb', line 215
def line_number_filter_applies?(line_numbers)
preceding_declaration_lines = line_numbers.map {|n| RSpec.world.preceding_declaration_line(n)}
!(relevant_line_numbers & preceding_declaration_lines).empty?
end
|
#location_filter_applies?(locations) ⇒ Boolean
208
209
210
211
212
|
# File 'lib/rspec/core/metadata.rb', line 208
def location_filter_applies?(locations)
line_number = example_group_declaration_line(locations)
line_number ? line_number_filter_applies?(line_number) : true
end
|
#process(*args) ⇒ Object
145
146
147
148
149
150
151
152
153
|
# File 'lib/rspec/core/metadata.rb', line 145
def process(*args)
user_metadata = args.last.is_a?(Hash) ? args.pop : {}
ensure_valid_keys(user_metadata)
self[:example_group].store(:description_args, args)
self[:example_group].store(:caller, user_metadata.delete(:caller) || caller)
update(user_metadata)
end
|