mirror of
https://github.com/thoughtbot/shoulda-matchers.git
synced 2022-11-09 12:01:38 -05:00
modified the calling structure of should_have_named_scope for flexibility
This commit is contained in:
parent
90ca9944a1
commit
d84209b8af
2 changed files with 19 additions and 16 deletions
|
@ -603,9 +603,10 @@ module ThoughtBot # :nodoc:
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Ensures that the model has a named scope named scope_name that matches the definition given.
|
# Ensures that the model has a method named scope_name that returns a NamedScope object with the
|
||||||
# You can optionally specify the arguments that will be passed into the named_scope after the
|
# proxy options set to the options you supply. scope_name can be either a symbol, or a method
|
||||||
# scope name.
|
# call which will be evaled against the model. The eval'd method call has access to all the same
|
||||||
|
# instance variables that a should statement would.
|
||||||
#
|
#
|
||||||
# Options: Any of the options that the named scope would pass on to find.
|
# Options: Any of the options that the named scope would pass on to find.
|
||||||
#
|
#
|
||||||
|
@ -625,8 +626,8 @@ module ThoughtBot # :nodoc:
|
||||||
#
|
#
|
||||||
# You can test lambdas or methods that return ActiveRecord#scoped calls:
|
# You can test lambdas or methods that return ActiveRecord#scoped calls:
|
||||||
#
|
#
|
||||||
# should_have_named_scope :recent, 5, :limit => 5
|
# should_have_named_scope 'recent(5)', :limit => 5
|
||||||
# should_have_named_scope :recent, 1, :limit => 1
|
# should_have_named_scope 'recent(1)', :limit => 1
|
||||||
#
|
#
|
||||||
# Passes for
|
# Passes for
|
||||||
# named_scope :recent, lambda {|c| {:limit => c}}
|
# named_scope :recent, lambda {|c| {:limit => c}}
|
||||||
|
@ -637,18 +638,14 @@ module ThoughtBot # :nodoc:
|
||||||
# scoped(:limit => c)
|
# scoped(:limit => c)
|
||||||
# end
|
# end
|
||||||
#
|
#
|
||||||
def should_have_named_scope(scope_name, *args)
|
def should_have_named_scope(scope_call, *args)
|
||||||
klass = model_class
|
klass = model_class
|
||||||
scope_opts = args.extract_options!
|
scope_opts = args.extract_options!
|
||||||
scope_args = args
|
scope_call = scope_call.to_s
|
||||||
|
|
||||||
context_name = "#{model_class}.#{scope_name}"
|
context scope_call do
|
||||||
context_name << "(#{scope_args.map(&:inspect).join(', ')})" unless scope_args.empty?
|
|
||||||
|
|
||||||
context context_name do
|
|
||||||
setup do
|
setup do
|
||||||
assert_respond_to klass, scope_name
|
@scope = eval("#{klass}.#{scope_call}")
|
||||||
@scope = klass.send(scope_name, *scope_args)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
should "return a scope object" do
|
should "return a scope object" do
|
||||||
|
|
|
@ -13,9 +13,15 @@ class UserTest < Test::Unit::TestCase
|
||||||
|
|
||||||
should_have_named_scope :old, :conditions => "age > 50"
|
should_have_named_scope :old, :conditions => "age > 50"
|
||||||
should_have_named_scope :eighteen, :conditions => { :age => 18 }
|
should_have_named_scope :eighteen, :conditions => { :age => 18 }
|
||||||
should_have_named_scope :recent, 5, :limit => 5
|
|
||||||
should_have_named_scope :recent, 1, :limit => 1
|
should_have_named_scope 'recent(5)', :limit => 5
|
||||||
should_have_named_scope :recent_via_method, 7, :limit => 7
|
should_have_named_scope 'recent(1)', :limit => 1
|
||||||
|
should_have_named_scope 'recent_via_method(7)', :limit => 7
|
||||||
|
|
||||||
|
context "when given an instance variable" do
|
||||||
|
setup { @count = 2 }
|
||||||
|
should_have_named_scope 'recent(@count)', :limit => 2
|
||||||
|
end
|
||||||
|
|
||||||
should_not_allow_values_for :email, "blah", "b lah"
|
should_not_allow_values_for :email, "blah", "b lah"
|
||||||
should_allow_values_for :email, "a@b.com", "asdf@asdf.com"
|
should_allow_values_for :email, "a@b.com", "asdf@asdf.com"
|
||||||
|
|
Loading…
Add table
Reference in a new issue