# File lib/rspec/core/subject.rb, line 86 86: def _attribute_chain(attribute) 87: attribute.to_s.split('.') 88: end
# File lib/rspec/core/subject.rb, line 90 90: def _nested_attribute(subject, attribute) 91: _attribute_chain(attribute).inject(subject) do |inner_subject, attr| 92: inner_subject.send(attr) 93: end 94: end
When should is called with no explicit receiver, the call is delegated to the object returned by subject. Combined with an implicit subject (see subject), this supports very concise expressions.
@example
describe Person do it { should be_eligible_to_vote } end
# File lib/rspec/core/subject.rb, line 68 68: def should(matcher=nil, message=nil) 69: RSpec::Expectations::PositiveExpectationHandler.handle_matcher(subject, matcher, message) 70: end
Just like should, should_not delegates to the subject (implicit or explicit) of the example group.
@example
describe Person do it { should_not be_eligible_to_vote } end
# File lib/rspec/core/subject.rb, line 80 80: def should_not(matcher=nil, message=nil) 81: RSpec::Expectations::NegativeExpectationHandler.handle_matcher(subject, matcher, message) 82: end
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.
@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.
@example
# explicit declaration of subject describe Person do subject { Person.new(:birthdate => 19.years.ago) } it "should be eligible to vote" do subject.should be_eligible_to_vote end end # implicit subject => { Person.new } describe Person do it "should be eligible to vote" do subject.should be_eligible_to_vote end end describe Person do # one liner syntax - should is invoked on subject it { should be_eligible_to_vote } end
# File lib/rspec/core/subject.rb, line 47 47: def subject 48: if defined?(@original_subject) 49: @original_subject 50: else 51: @original_subject = instance_eval(&self.class.subject) 52: end 53: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.