carlosbrando-remarkable 2.2.4 → 2.2.5

Sign up to get free protection for your applications and to get access to all the features.
data/Manifest.txt CHANGED
@@ -42,7 +42,7 @@ lib/remarkable/controller/macros/metadata_matcher.rb
42
42
  lib/remarkable/controller/macros/render_with_layout_matcher.rb
43
43
  lib/remarkable/controller/macros/respond_with_content_type_matcher.rb
44
44
  lib/remarkable/controller/macros/respond_with_matcher.rb
45
- lib/remarkable/controller/macros/return_from_session_matcher.rb
45
+ lib/remarkable/controller/macros/set_session_matcher.rb
46
46
  lib/remarkable/controller/macros/route_matcher.rb
47
47
  lib/remarkable/controller/macros/set_the_flash_to_matcher.rb
48
48
  lib/remarkable/dsl.rb
data/Rakefile CHANGED
@@ -34,3 +34,9 @@ Dir['tasks/**/*.rake'].each { |t| load t }
34
34
 
35
35
  # TODO - want other tests/tasks run by default? Add them to the list
36
36
  task :default => [:spec, :features]
37
+ require 'spec/rake/spectask'
38
+ desc "Run the specs under spec/models"
39
+ Spec::Rake::SpecTask.new do |t|
40
+ t.spec_opts = ['--options', "spec/spec.opts"]
41
+ t.spec_files = FileList['spec/**/*_spec.rb']
42
+ end
@@ -28,7 +28,7 @@ module Remarkable # :nodoc:
28
28
 
29
29
  protected
30
30
 
31
- def after_initialize!
31
+ def after_initialize
32
32
  @expected_uniqueness = @options[:unique] ? 'unique' : 'non-unique'
33
33
  end
34
34
 
@@ -92,7 +92,7 @@ module Remarkable # :nodoc:
92
92
  # Before make the assertions, convert the subject into a instance, if
93
93
  # it's not already.
94
94
  #
95
- def before_assert!
95
+ def before_assert
96
96
  @subject = get_instance_of(@subject)
97
97
  end
98
98
 
@@ -18,7 +18,7 @@ module Remarkable # :nodoc:
18
18
  # Before make the assertions, convert the subject into a instance, if
19
19
  # it's not already.
20
20
  #
21
- def before_assert!
21
+ def before_assert
22
22
  @subject = get_instance_of(@subject)
23
23
  end
24
24
 
@@ -59,7 +59,7 @@ module Remarkable # :nodoc:
59
59
  end
60
60
 
61
61
  # Reassign messages properly
62
- def after_initialize!
62
+ def after_initialize
63
63
  # Set the values, for example:
64
64
  # send(:within, 0..10)
65
65
  send(@behavior, @range)
@@ -40,7 +40,7 @@ module Remarkable # :nodoc:
40
40
  # Before make the assertions, convert the subject into a instance, if
41
41
  # it's not already.
42
42
  #
43
- def before_assert!
43
+ def before_assert
44
44
  @subject = get_instance_of(@subject)
45
45
  end
46
46
 
@@ -48,7 +48,7 @@ module Remarkable # :nodoc:
48
48
  { :message => :taken }
49
49
  end
50
50
 
51
- def after_initialize!
51
+ def after_initialize
52
52
  if @options[:scoped_to] # TODO Deprecate scoped_to
53
53
  warn "[DEPRECATION] :scoped_to is deprecated. Use :scope instead."
54
54
  @options[:scope] = [*@options.delete(:scoped_to)].compact
@@ -9,18 +9,19 @@ Macro that creates a test asserting that the controller assigned to each of the
9
9
  Options:
10
10
 
11
11
  * :class - The expected class of the instance variable being checked.
12
- * :equals - A string which is evaluated and compared for equality with the instance variable being checked.
12
+ * :equals - A string or a proc which is evaluated and compared with the instance variable being checked.
13
13
 
14
14
  Example:
15
15
 
16
16
  <pre><code> should_assign_to :user, :posts
17
17
  should_assign_to :user, :class => User
18
- should_assign_to :user, :equals => '@user'
18
+ should_assign_to :user, :equals => proc { @user }
19
+ should_assign_to(:user){ @user }
19
20
  should_not_assign_to :user, :posts
20
21
 
21
22
  it { should assign_to(:user, :posts) }
22
23
  it { should assign_to(:user, :class => User) }
23
- it { should assign_to(:user, :equals => '@user') }
24
+ it { should assign_to(:user, :equals => @user) }
24
25
  it { should_not assign_to(:user, :posts) }</code></pre>
25
26
 
26
27
  h2. filter_params
@@ -89,14 +90,15 @@ Example:
89
90
  it { should respond_with_content_type(:rss) }
90
91
  it { should respond_with_content_type(/rss/) }</code></pre>
91
92
 
92
- h2. return_from_session
93
+ h2. set_session
93
94
 
94
- Macro that creates a test asserting that a value returned from the session is correct. The given string is evalued to produce the resulting redirect path. All of the instance variables set by the controller are available to the evalued string.
95
+ Macro that creates a test asserting that a value returned from the session is correct. You can given a string to compare to or a proc which will be evaluated.
95
96
 
96
97
  Example:
97
98
 
98
- should_return_from_session(:user_id, "@user.id")
99
- it { should return_from_session(:message, '"Free stuff"') }
99
+ should_set_session(:user_id, proc { @user.id })
100
+ should_set_session(:user_id){ @user.id }
101
+ it { should set_session(:message, 'Free stuff') }
100
102
 
101
103
  h2. route
102
104
 
@@ -137,11 +139,9 @@ Macro that creates a test asserting that the controller returned a redirect to t
137
139
 
138
140
  Example:
139
141
 
140
- <pre><code> should_redirect_to "user_post_url(@post.user, @post)"
141
- should_redirect_to "user_url(@user)"
142
- should_redirect_to "users_url"
142
+ <pre><code> should_redirect_to "http://test.host/users/1/post/1"
143
+ should_redirect_to { user_url(@user) }
143
144
 
144
145
  it { should redirect_to(user_post_url(@post.user, @post)) }
145
- it { should redirect_to(user_url(@user)) }
146
146
  it { should redirect_to(users_url) }</code></pre>
147
147
 
@@ -15,16 +15,32 @@ module Remarkable # :nodoc:
15
15
  end
16
16
  end
17
17
 
18
- def should_redirect_to(url)
18
+ def should_redirect_to(url=nil, &block)
19
19
  it "should redirect to #{url.inspect}" do
20
- redirect_url = self.instance_eval(url) rescue url
20
+ redirect_url = if block_given?
21
+ self.instance_eval &block
22
+ elsif url.is_a?(Proc)
23
+ self.instance_eval &url
24
+ else
25
+ warn "[DEPRECATION] Strings given to redirect_to won't be evaluated anymore. Give a proc or a block instead." if url.is_a?(String)
26
+ self.instance_eval(url) rescue url
27
+ end
28
+
21
29
  response.should redirect_to(redirect_url)
22
30
  end
23
31
  end
24
32
 
25
- def should_not_redirect_to(url)
33
+ def should_not_redirect_to(url=nil, &block)
26
34
  it "should not redirect to #{url.inspect}" do
27
- redirect_url = self.instance_eval(url) rescue url
35
+ redirect_url = if block_given?
36
+ self.instance_eval &block
37
+ elsif url.is_a?(Proc)
38
+ self.instance_eval &url
39
+ else
40
+ warn "[DEPRECATION] Strings given to redirect_to won't be evaluated anymore. Give a proc or a block instead." if url.is_a?(String)
41
+ self.instance_eval(url) rescue url
42
+ end
43
+
28
44
  response.should_not redirect_to(redirect_url)
29
45
  end
30
46
  end
@@ -35,11 +51,11 @@ module Remarkable # :nodoc:
35
51
 
36
52
  def method_missing_with_remarkable(method_id, *args, &block)
37
53
  if method_id.to_s =~ /^should_not_(.*)/
38
- should_not_method_missing($1, *args)
54
+ should_not_method_missing($1, *args, &block)
39
55
  elsif method_id.to_s =~ /^should_(.*)/
40
- should_method_missing($1, *args)
56
+ should_method_missing($1, *args, &block)
41
57
  elsif method_id.to_s =~ /^xshould_(not_)?(.*)/
42
- pending_method_missing($2, $1, *args)
58
+ pending_method_missing($2, $1, *args, &block)
43
59
  else
44
60
  method_missing_without_remarkable(method_id, *args, &block)
45
61
  end
@@ -48,24 +64,24 @@ module Remarkable # :nodoc:
48
64
 
49
65
  private
50
66
 
51
- def should_method_missing(method, *args)
52
- matcher = send(method, *args)
67
+ def should_method_missing(method, *args, &block)
68
+ matcher = send(method, *args, &block)
53
69
  it "should #{matcher.description}" do
54
70
  matcher.spec(self)
55
71
  assert_accepts(matcher, subject_class)
56
72
  end
57
73
  end
58
74
 
59
- def should_not_method_missing(method, *args)
60
- matcher = send(method, *args)
75
+ def should_not_method_missing(method, *args, &block)
76
+ matcher = send(method, *args, &block)
61
77
  it "should not #{matcher.description}" do
62
78
  matcher.spec(self).negative
63
79
  assert_rejects(matcher, subject_class)
64
80
  end
65
81
  end
66
82
 
67
- def pending_method_missing(method, negative, *args)
68
- matcher = send(method, *args)
83
+ def pending_method_missing(method, negative, *args, &block)
84
+ matcher = send(method, *args, &block)
69
85
  matcher.negative if negative
70
86
  description = matcher.description
71
87
  xit "should #{'not ' if negative}#{description}"
@@ -4,9 +4,12 @@ module Remarkable # :nodoc:
4
4
  class AssignMatcher < Remarkable::Matcher::Base
5
5
  include Remarkable::Controller::Helpers
6
6
 
7
- def initialize(*names)
8
- @options = names.extract_options!
9
- @names = names
7
+ def initialize(*names, &block)
8
+ @options = names.extract_options!
9
+ @names = names
10
+ @options[:equals] = block if block_given?
11
+
12
+ warn "[DEPRECATION] Strings given in :equals to assign_to won't be evaluated anymore. You can give procs or use blocks instead." if @options[:equals].is_a?(String)
10
13
  end
11
14
 
12
15
  def matches?(subject)
@@ -58,6 +61,8 @@ module Remarkable # :nodoc:
58
61
 
59
62
  expected_value = if @options[:equals].is_a?(String)
60
63
  @spec.instance_eval(@options[:equals]) rescue @options[:equals]
64
+ elsif @options[:equals].is_a?(Proc)
65
+ @spec.instance_eval &@options[:equals]
61
66
  else
62
67
  @options[:equals]
63
68
  end
@@ -70,7 +75,7 @@ module Remarkable # :nodoc:
70
75
  def expectation
71
76
  expectation = "assign @#{@name}"
72
77
  expectation << " as class #{@options[:class]}" if @options[:class]
73
- expectation << " which is equal to #{@options[:equals].inspect}" if @options[:equals]
78
+ expectation << " which is equal to #{@options[:equals].inspect}" if @options[:equals] && !@options[:equals].is_a?(Proc)
74
79
  expectation
75
80
  end
76
81
 
@@ -1,12 +1,13 @@
1
1
  module Remarkable # :nodoc:
2
2
  module Controller # :nodoc:
3
3
  module Matchers # :nodoc:
4
- class ReturnFromSession < Remarkable::Matcher::Base
4
+ class SetSessionMatcher < Remarkable::Matcher::Base
5
5
  include Remarkable::Controller::Helpers
6
6
 
7
- def initialize(key, expected)
7
+ def initialize(key, expected=nil, &block)
8
8
  @key = key
9
9
  @expected = expected
10
+ @expected = block if block_given?
10
11
  end
11
12
 
12
13
  def matches?(subject)
@@ -30,7 +31,12 @@ module Remarkable # :nodoc:
30
31
  private
31
32
 
32
33
  def has_session_key?
33
- expected_value = @spec.instance_eval(@expected) rescue @expected
34
+ expected_value = if @expected.is_a?(Proc)
35
+ @spec.instance_eval &@expected
36
+ else
37
+ warn "[DEPRECATION] Strings given to set_session won't be evaluated anymore. Give a block or a proc instead."
38
+ @spec.instance_eval(@expected) rescue @expected
39
+ end
34
40
  return true if @session[@key] == expected_value
35
41
 
36
42
  @missing = "Expected #{expected_value.inspect} but was #{@session[@key]}"
@@ -50,8 +56,13 @@ module Remarkable # :nodoc:
50
56
  end
51
57
  end
52
58
 
53
- def return_from_session(key, expected)
54
- ReturnFromSession.new(key, expected)
59
+ def set_session(key, expected=nil, &block)
60
+ SetSessionMatcher.new(key, expected, &block)
61
+ end
62
+
63
+ def return_from_session(*args, &block)
64
+ warn "[DEPRECATION] return_from_session is deprecated. Use set_session instead."
65
+ set_session(*args, &block)
55
66
  end
56
67
  end
57
68
  end
@@ -157,7 +157,7 @@ def initialize(#{args})
157
157
  #{assignments}
158
158
  @options = default_options.merge(#{self.loop_argument}.extract_options!)
159
159
  @#{self.loop_argument} = #{self.loop_argument}
160
- after_initialize!
160
+ after_initialize
161
161
  end
162
162
  END
163
163
  end
@@ -166,8 +166,7 @@ END
166
166
  def matches?(subject)
167
167
  @subject = subject
168
168
 
169
- # Execute before_assert! callback
170
- before_assert!
169
+ before_assert
171
170
 
172
171
  # Gets the loop_argument and loops it setting the singular name of
173
172
  # loop argument. For example, if loop_argument is :good_values, we
@@ -208,12 +207,12 @@ END
208
207
 
209
208
  # Callback called after initialization.
210
209
  #
211
- def after_initialize!
210
+ def after_initialize
212
211
  end
213
212
 
214
213
  # Callback before begin assertions.
215
214
  #
216
- def before_assert!
215
+ def before_assert
217
216
  end
218
217
 
219
218
  end
@@ -1,5 +1,7 @@
1
1
  if defined?(RAILS_ROOT)
2
2
 
3
+ require "remarkable/rails/extract_options"
4
+
3
5
  def create_macro_methods(macro)
4
6
  method_name = File.basename(macro, ".rb")
5
7
  Spec::Example::ExampleGroupMethods::send(:define_method, "should_#{method_name}") { instance_eval(IO.read(macro)) }
data/remarkable.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{remarkable}
5
- s.version = "2.2.4"
5
+ s.version = "2.2.5"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Carlos Brando", "Jos\303\251 Valim", "Diego Carrion"]
@@ -10,7 +10,7 @@ Gem::Specification.new do |s|
10
10
  s.description = %q{}
11
11
  s.email = ["eduardobrando@gmail.com", "jose.valim@gmail.com", "dc.rec1@gmail.com"]
12
12
  s.extra_rdoc_files = ["History.txt", "Manifest.txt", "PostInstall.txt", "README.rdoc"]
13
- s.files = ["History.txt", "Manifest.txt", "PostInstall.txt", "README.rdoc", "Rakefile", "init.rb", "lib/remarkable.rb", "lib/remarkable/active_record/README.markdown", "lib/remarkable/active_record/active_record.rb", "lib/remarkable/active_record/helpers.rb", "lib/remarkable/active_record/macros.rb", "lib/remarkable/active_record/macros/associations/association_matcher.rb", "lib/remarkable/active_record/macros/callbacks/callback_matcher.rb", "lib/remarkable/active_record/macros/database/have_db_column_matcher.rb", "lib/remarkable/active_record/macros/database/index_matcher.rb", "lib/remarkable/active_record/macros/validations/allow_mass_assignment_of_matcher.rb", "lib/remarkable/active_record/macros/validations/ensure_value_in_list_matcher.rb", "lib/remarkable/active_record/macros/validations/ensure_value_in_range_matcher.rb", "lib/remarkable/active_record/macros/validations/have_class_methods_matcher.rb", "lib/remarkable/active_record/macros/validations/have_instance_methods_matcher.rb", "lib/remarkable/active_record/macros/validations/have_named_scope_matcher.rb", "lib/remarkable/active_record/macros/validations/have_readonly_attributes_matcher.rb", "lib/remarkable/active_record/macros/validations/protect_attributes_matcher.rb", "lib/remarkable/active_record/macros/validations/validate_acceptance_of_matcher.rb", "lib/remarkable/active_record/macros/validations/validate_associated_matcher.rb", "lib/remarkable/active_record/macros/validations/validate_confirmation_of_matcher.rb", "lib/remarkable/active_record/macros/validations/validate_exclusion_of_matcher.rb", "lib/remarkable/active_record/macros/validations/validate_format_of_matcher.rb", "lib/remarkable/active_record/macros/validations/validate_inclusion_of_matcher.rb", "lib/remarkable/active_record/macros/validations/validate_length_of_matcher.rb", "lib/remarkable/active_record/macros/validations/validate_numericality_of_matcher.rb", "lib/remarkable/active_record/macros/validations/validate_presence_of_matcher.rb", "lib/remarkable/active_record/macros/validations/validate_uniqueness_of_matcher.rb", "lib/remarkable/assertions.rb", "lib/remarkable/controller/README.markdown", "lib/remarkable/controller/controller.rb", "lib/remarkable/controller/helpers.rb", "lib/remarkable/controller/macros.rb", "lib/remarkable/controller/macros/assign_matcher.rb", "lib/remarkable/controller/macros/filter_params_matcher.rb", "lib/remarkable/controller/macros/metadata_matcher.rb", "lib/remarkable/controller/macros/render_with_layout_matcher.rb", "lib/remarkable/controller/macros/respond_with_content_type_matcher.rb", "lib/remarkable/controller/macros/respond_with_matcher.rb", "lib/remarkable/controller/macros/return_from_session_matcher.rb", "lib/remarkable/controller/macros/route_matcher.rb", "lib/remarkable/controller/macros/set_the_flash_to_matcher.rb", "lib/remarkable/dsl.rb", "lib/remarkable/example/example_methods.rb", "lib/remarkable/helpers.rb", "lib/remarkable/matcher_base.rb", "lib/remarkable/private_helpers.rb", "lib/remarkable/rails.rb", "rails/init.rb", "remarkable.gemspec", "script/console", "script/destroy", "script/generate", "tasks/rspec.rake"]
13
+ s.files = ["History.txt", "Manifest.txt", "PostInstall.txt", "README.rdoc", "Rakefile", "init.rb", "lib/remarkable.rb", "lib/remarkable/active_record/README.markdown", "lib/remarkable/active_record/active_record.rb", "lib/remarkable/active_record/helpers.rb", "lib/remarkable/active_record/macros.rb", "lib/remarkable/active_record/macros/associations/association_matcher.rb", "lib/remarkable/active_record/macros/callbacks/callback_matcher.rb", "lib/remarkable/active_record/macros/database/have_db_column_matcher.rb", "lib/remarkable/active_record/macros/database/index_matcher.rb", "lib/remarkable/active_record/macros/validations/allow_mass_assignment_of_matcher.rb", "lib/remarkable/active_record/macros/validations/ensure_value_in_list_matcher.rb", "lib/remarkable/active_record/macros/validations/ensure_value_in_range_matcher.rb", "lib/remarkable/active_record/macros/validations/have_class_methods_matcher.rb", "lib/remarkable/active_record/macros/validations/have_instance_methods_matcher.rb", "lib/remarkable/active_record/macros/validations/have_named_scope_matcher.rb", "lib/remarkable/active_record/macros/validations/have_readonly_attributes_matcher.rb", "lib/remarkable/active_record/macros/validations/protect_attributes_matcher.rb", "lib/remarkable/active_record/macros/validations/validate_acceptance_of_matcher.rb", "lib/remarkable/active_record/macros/validations/validate_associated_matcher.rb", "lib/remarkable/active_record/macros/validations/validate_confirmation_of_matcher.rb", "lib/remarkable/active_record/macros/validations/validate_exclusion_of_matcher.rb", "lib/remarkable/active_record/macros/validations/validate_format_of_matcher.rb", "lib/remarkable/active_record/macros/validations/validate_inclusion_of_matcher.rb", "lib/remarkable/active_record/macros/validations/validate_length_of_matcher.rb", "lib/remarkable/active_record/macros/validations/validate_numericality_of_matcher.rb", "lib/remarkable/active_record/macros/validations/validate_presence_of_matcher.rb", "lib/remarkable/active_record/macros/validations/validate_uniqueness_of_matcher.rb", "lib/remarkable/assertions.rb", "lib/remarkable/controller/README.markdown", "lib/remarkable/controller/controller.rb", "lib/remarkable/controller/helpers.rb", "lib/remarkable/controller/macros.rb", "lib/remarkable/controller/macros/assign_matcher.rb", "lib/remarkable/controller/macros/filter_params_matcher.rb", "lib/remarkable/controller/macros/metadata_matcher.rb", "lib/remarkable/controller/macros/render_with_layout_matcher.rb", "lib/remarkable/controller/macros/respond_with_content_type_matcher.rb", "lib/remarkable/controller/macros/respond_with_matcher.rb", "lib/remarkable/controller/macros/set_session_matcher.rb", "lib/remarkable/controller/macros/route_matcher.rb", "lib/remarkable/controller/macros/set_the_flash_to_matcher.rb", "lib/remarkable/dsl.rb", "lib/remarkable/example/example_methods.rb", "lib/remarkable/helpers.rb", "lib/remarkable/matcher_base.rb", "lib/remarkable/private_helpers.rb", "lib/remarkable/rails.rb", "rails/init.rb", "remarkable.gemspec", "script/console", "script/destroy", "script/generate", "tasks/rspec.rake"]
14
14
  s.has_rdoc = true
15
15
  s.homepage = %q{http://www.nomedojogo.com/2008/11/18/shoulda-for-rspec-is-remarkable/}
16
16
  s.post_install_message = %q{PostInstall.txt}
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: carlosbrando-remarkable
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.4
4
+ version: 2.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Carlos Brando
@@ -16,6 +16,7 @@ default_executable:
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: rspec
19
+ type: :runtime
19
20
  version_requirement:
20
21
  version_requirements: !ruby/object:Gem::Requirement
21
22
  requirements:
@@ -25,6 +26,7 @@ dependencies:
25
26
  version:
26
27
  - !ruby/object:Gem::Dependency
27
28
  name: rspec-rails
29
+ type: :runtime
28
30
  version_requirement:
29
31
  version_requirements: !ruby/object:Gem::Requirement
30
32
  requirements:
@@ -34,6 +36,7 @@ dependencies:
34
36
  version:
35
37
  - !ruby/object:Gem::Dependency
36
38
  name: newgem
39
+ type: :development
37
40
  version_requirement:
38
41
  version_requirements: !ruby/object:Gem::Requirement
39
42
  requirements:
@@ -43,6 +46,7 @@ dependencies:
43
46
  version:
44
47
  - !ruby/object:Gem::Dependency
45
48
  name: hoe
49
+ type: :development
46
50
  version_requirement:
47
51
  version_requirements: !ruby/object:Gem::Requirement
48
52
  requirements:
@@ -109,7 +113,7 @@ files:
109
113
  - lib/remarkable/controller/macros/render_with_layout_matcher.rb
110
114
  - lib/remarkable/controller/macros/respond_with_content_type_matcher.rb
111
115
  - lib/remarkable/controller/macros/respond_with_matcher.rb
112
- - lib/remarkable/controller/macros/return_from_session_matcher.rb
116
+ - lib/remarkable/controller/macros/set_session_matcher.rb
113
117
  - lib/remarkable/controller/macros/route_matcher.rb
114
118
  - lib/remarkable/controller/macros/set_the_flash_to_matcher.rb
115
119
  - lib/remarkable/dsl.rb
data/tasks/rspec.rake DELETED
@@ -1,21 +0,0 @@
1
- begin
2
- require 'spec'
3
- rescue LoadError
4
- require 'rubygems'
5
- require 'spec'
6
- end
7
- begin
8
- require 'spec/rake/spectask'
9
- rescue LoadError
10
- puts <<-EOS
11
- To use rspec for testing you must install rspec gem:
12
- gem install rspec
13
- EOS
14
- exit(0)
15
- end
16
-
17
- desc "Run the specs under spec/models"
18
- Spec::Rake::SpecTask.new do |t|
19
- t.spec_opts = ['--options', "spec/spec.opts"]
20
- t.spec_files = FileList['spec/**/*_spec.rb']
21
- end