Module: RSpec::Core::Subject::ExampleMethods
- Included in:
- ExampleGroup
- Defined in:
- lib/rspec/core/subject.rb
Instance Method Summary collapse
- #_attribute_chain(attribute) ⇒ Object
- #_nested_attribute(subject, attribute) ⇒ Object
-
#subject ⇒ Object
Returns the subject defined by the example group.
Instance Method Details
#_attribute_chain(attribute) ⇒ Object
86 87 88 |
# File 'lib/rspec/core/subject.rb', line 86 def _attribute_chain(attribute) attribute.to_s.split('.') end |
#_nested_attribute(subject, attribute) ⇒ Object
90 91 92 93 94 |
# File 'lib/rspec/core/subject.rb', line 90 def _nested_attribute(subject, attribute) _attribute_chain(attribute).inject(subject) do |inner_subject, attr| inner_subject.send(attr) end end |
#subject ⇒ Object
Note:
subject
was contributed by Joe Ferris to support the one-liner
syntax embraced by shoulda matchers:
describe Widget do
it { should validate_presence_of(:name) }
end
While the examples below demonstrate how to use subject
explicitly in specs, we think it works best for extensions like
shoulda, custom matchers, and shared example groups, where it is
not referenced explicitly in specs.
Returns the subject defined by the example group. The subject block
is only executed once per example, the result of which is cached and
returned by any subsequent calls to subject
.
If a class is passed to describe
and no subject is explicitly
declared in the example group, then subject
will return a new
instance of that class.
47 48 49 50 51 52 53 |
# File 'lib/rspec/core/subject.rb', line 47 def subject if defined?(@original_subject) @original_subject else @original_subject = instance_eval(&self.class.subject) end end |