shoulda-matchers 2.4.0 → 2.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +7 -4
- data/Appraisals +19 -7
- data/Gemfile.lock +1 -1
- data/NEWS.md +35 -0
- data/README.md +1204 -46
- data/features/step_definitions/rails_steps.rb +1 -1
- data/gemfiles/3.0.gemfile.lock +1 -1
- data/gemfiles/3.1.gemfile.lock +1 -1
- data/gemfiles/3.2.gemfile.lock +1 -1
- data/gemfiles/{4.0.gemfile → 4.0.0.gemfile} +4 -4
- data/gemfiles/{4.0.gemfile.lock → 4.0.0.gemfile.lock} +24 -24
- data/gemfiles/4.0.1.gemfile +19 -0
- data/gemfiles/4.0.1.gemfile.lock +161 -0
- data/lib/shoulda/matchers/action_controller.rb +1 -0
- data/lib/shoulda/matchers/action_controller/filter_param_matcher.rb +4 -2
- data/lib/shoulda/matchers/action_controller/redirect_to_matcher.rb +6 -3
- data/lib/shoulda/matchers/action_controller/render_template_matcher.rb +6 -3
- data/lib/shoulda/matchers/action_controller/render_with_layout_matcher.rb +4 -2
- data/lib/shoulda/matchers/action_controller/rescue_from_matcher.rb +4 -2
- data/lib/shoulda/matchers/action_controller/respond_with_matcher.rb +4 -2
- data/lib/shoulda/matchers/action_controller/route_matcher.rb +13 -19
- data/lib/shoulda/matchers/action_controller/route_params.rb +47 -0
- data/lib/shoulda/matchers/action_controller/set_session_matcher.rb +4 -2
- data/lib/shoulda/matchers/action_controller/set_the_flash_matcher.rb +4 -2
- data/lib/shoulda/matchers/active_model.rb +4 -3
- data/lib/shoulda/matchers/active_model/allow_mass_assignment_of_matcher.rb +9 -6
- data/lib/shoulda/matchers/active_model/allow_value_matcher.rb +4 -2
- data/lib/shoulda/matchers/active_model/disallow_value_matcher.rb +6 -4
- data/lib/shoulda/matchers/active_model/ensure_inclusion_of_matcher.rb +4 -1
- data/lib/shoulda/matchers/active_model/ensure_length_of_matcher.rb +8 -1
- data/lib/shoulda/matchers/active_model/have_secure_password_matcher.rb +4 -2
- data/lib/shoulda/matchers/active_model/numericality_matchers/comparison_matcher.rb +59 -0
- data/lib/shoulda/matchers/active_model/numericality_matchers/odd_even_number_matcher.rb +51 -0
- data/lib/shoulda/matchers/active_model/numericality_matchers/only_integer_matcher.rb +41 -0
- data/lib/shoulda/matchers/active_model/validate_absence_of_matcher.rb +77 -0
- data/lib/shoulda/matchers/active_model/validate_numericality_of_matcher.rb +14 -12
- data/lib/shoulda/matchers/active_model/validate_uniqueness_of_matcher.rb +6 -6
- data/lib/shoulda/matchers/active_model/validation_matcher.rb +10 -7
- data/lib/shoulda/matchers/active_record.rb +2 -0
- data/lib/shoulda/matchers/active_record/accept_nested_attributes_for_matcher.rb +4 -2
- data/lib/shoulda/matchers/active_record/association_matcher.rb +11 -3
- data/lib/shoulda/matchers/active_record/association_matchers/model_reflection.rb +80 -0
- data/lib/shoulda/matchers/active_record/association_matchers/model_reflector.rb +20 -55
- data/lib/shoulda/matchers/active_record/association_matchers/source_matcher.rb +40 -0
- data/lib/shoulda/matchers/active_record/have_db_column_matcher.rb +4 -2
- data/lib/shoulda/matchers/active_record/have_db_index_matcher.rb +4 -2
- data/lib/shoulda/matchers/active_record/have_readonly_attribute_matcher.rb +7 -4
- data/lib/shoulda/matchers/active_record/serialize_matcher.rb +4 -2
- data/lib/shoulda/matchers/integrations/test_unit.rb +3 -3
- data/lib/shoulda/matchers/rails_shim.rb +14 -6
- data/lib/shoulda/matchers/version.rb +1 -1
- data/spec/shoulda/matchers/action_controller/filter_param_matcher_spec.rb +1 -1
- data/spec/shoulda/matchers/action_controller/rescue_from_matcher_spec.rb +2 -2
- data/spec/shoulda/matchers/action_controller/route_matcher_spec.rb +5 -0
- data/spec/shoulda/matchers/action_controller/route_params_spec.rb +30 -0
- data/spec/shoulda/matchers/active_model/allow_mass_assignment_of_matcher_spec.rb +1 -1
- data/spec/shoulda/matchers/active_model/allow_value_matcher_spec.rb +1 -1
- data/spec/shoulda/matchers/active_model/disallow_value_matcher_spec.rb +2 -2
- data/spec/shoulda/matchers/active_model/ensure_inclusion_of_matcher_spec.rb +10 -0
- data/spec/shoulda/matchers/active_model/ensure_length_of_matcher_spec.rb +7 -0
- data/spec/shoulda/matchers/active_model/{comparison_matcher_spec.rb → numericality_matchers/comparison_matcher_spec.rb} +2 -2
- data/spec/shoulda/matchers/active_model/{odd_even_number_matcher_spec.rb → numericality_matchers/odd_even_number_matcher_spec.rb} +4 -4
- data/spec/shoulda/matchers/active_model/{only_integer_matcher_spec.rb → numericality_matchers/only_integer_matcher_spec.rb} +3 -3
- data/spec/shoulda/matchers/active_model/validate_absence_of_matcher_spec.rb +139 -0
- data/spec/shoulda/matchers/active_model/validate_numericality_of_matcher_spec.rb +7 -7
- data/spec/shoulda/matchers/active_model/validate_uniqueness_of_matcher_spec.rb +48 -38
- data/spec/shoulda/matchers/active_record/accept_nested_attributes_for_matcher_spec.rb +6 -6
- data/spec/shoulda/matchers/active_record/association_matcher_spec.rb +21 -8
- data/spec/shoulda/matchers/active_record/association_matchers/model_reflection_spec.rb +247 -0
- data/spec/shoulda/matchers/active_record/have_readonly_attributes_matcher_spec.rb +1 -1
- data/spec/shoulda/matchers/active_record/serialize_matcher_spec.rb +3 -3
- data/spec/spec_helper.rb +9 -15
- data/spec/support/active_resource_builder.rb +2 -0
- data/spec/support/controller_builder.rb +4 -10
- data/spec/support/model_builder.rb +6 -2
- data/spec/support/rails_versions.rb +18 -0
- data/spec/support/shared_examples/numerical_submatcher_spec.rb +4 -4
- data/spec/support/test_application.rb +97 -0
- metadata +30 -14
- data/lib/shoulda/matchers/active_model/comparison_matcher.rb +0 -57
- data/lib/shoulda/matchers/active_model/odd_even_number_matcher.rb +0 -47
- data/lib/shoulda/matchers/active_model/only_integer_matcher.rb +0 -37
@@ -1,7 +1,4 @@
|
|
1
1
|
module ControllerBuilder
|
2
|
-
TMP_VIEW_PATH = File.expand_path(File.join(TESTAPP_ROOT, 'tmp',
|
3
|
-
'views')).freeze
|
4
|
-
|
5
2
|
def self.included(example_group)
|
6
3
|
example_group.class_eval do
|
7
4
|
after do
|
@@ -18,8 +15,7 @@ module ControllerBuilder
|
|
18
15
|
end
|
19
16
|
|
20
17
|
def define_routes(&block)
|
21
|
-
|
22
|
-
@routes = Rails.application.routes
|
18
|
+
@routes = $test_app.draw_routes(&block)
|
23
19
|
class << self
|
24
20
|
include ActionDispatch::Assertions
|
25
21
|
end
|
@@ -33,7 +29,7 @@ module ControllerBuilder
|
|
33
29
|
layout false
|
34
30
|
define_method(action, &block)
|
35
31
|
end
|
36
|
-
controller_class.view_paths = [
|
32
|
+
controller_class.view_paths = [ $test_app.temp_views_dir_path ]
|
37
33
|
|
38
34
|
define_routes do
|
39
35
|
get 'examples', :to => "examples##{action}"
|
@@ -59,15 +55,13 @@ module ControllerBuilder
|
|
59
55
|
end
|
60
56
|
|
61
57
|
def create_view(path, contents)
|
62
|
-
|
63
|
-
FileUtils.mkdir_p(File.dirname(full_path))
|
64
|
-
File.open(full_path, 'w') { |file| file.write(contents) }
|
58
|
+
$test_app.create_temp_view(path, contents)
|
65
59
|
end
|
66
60
|
|
67
61
|
private
|
68
62
|
|
69
63
|
def delete_temporary_views
|
70
|
-
|
64
|
+
$test_app.delete_temp_views
|
71
65
|
end
|
72
66
|
|
73
67
|
def restore_original_routes
|
@@ -48,8 +48,12 @@ module ModelBuilder
|
|
48
48
|
class_name = name.to_s.pluralize.classify
|
49
49
|
table_name = class_name.tableize
|
50
50
|
table_block = lambda do |table|
|
51
|
-
columns.each do |name,
|
52
|
-
|
51
|
+
columns.each do |name, specification|
|
52
|
+
if specification.is_a?(Hash)
|
53
|
+
table.column name, specification[:type], specification[:options]
|
54
|
+
else
|
55
|
+
table.column name, specification
|
56
|
+
end
|
53
57
|
end
|
54
58
|
end
|
55
59
|
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module RailsVersions
|
2
|
+
def rails_version
|
3
|
+
Gem::Version.new(Rails::VERSION::STRING)
|
4
|
+
end
|
5
|
+
|
6
|
+
def rails_3_x?
|
7
|
+
Gem::Requirement.new('~> 3.0').satisfied_by?(rails_version)
|
8
|
+
end
|
9
|
+
|
10
|
+
def rails_4_x?
|
11
|
+
Gem::Requirement.new('~> 4.0').satisfied_by?(rails_version)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
RSpec.configure do |config|
|
16
|
+
config.include(RailsVersions)
|
17
|
+
config.extend(RailsVersions)
|
18
|
+
end
|
@@ -13,11 +13,11 @@ shared_examples 'a numerical submatcher' do
|
|
13
13
|
subject.should respond_to(:matches?).with(1).arguments
|
14
14
|
end
|
15
15
|
|
16
|
-
it 'implements the
|
17
|
-
subject.should respond_to(:
|
16
|
+
it 'implements the failure_message method' do
|
17
|
+
subject.should respond_to(:failure_message).with(0).arguments
|
18
18
|
end
|
19
19
|
|
20
|
-
it 'implements the
|
21
|
-
subject.should respond_to(:
|
20
|
+
it 'implements the failure_message_when_negated method' do
|
21
|
+
subject.should respond_to(:failure_message_when_negated).with(0).arguments
|
22
22
|
end
|
23
23
|
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
|
3
|
+
class TestApplication
|
4
|
+
ROOT_DIR = File.expand_path('../../../tmp/aruba/testapp', __FILE__)
|
5
|
+
|
6
|
+
def create
|
7
|
+
clean
|
8
|
+
generate
|
9
|
+
within_app { install_gems }
|
10
|
+
end
|
11
|
+
|
12
|
+
def load
|
13
|
+
load_environment
|
14
|
+
run_migrations
|
15
|
+
end
|
16
|
+
|
17
|
+
def gemfile_path
|
18
|
+
File.join(ROOT_DIR, 'Gemfile')
|
19
|
+
end
|
20
|
+
|
21
|
+
def environment_file_path
|
22
|
+
File.join(ROOT_DIR, 'config/environment')
|
23
|
+
end
|
24
|
+
|
25
|
+
def temp_views_dir_path
|
26
|
+
File.join(ROOT_DIR, 'tmp/views')
|
27
|
+
end
|
28
|
+
|
29
|
+
def create_temp_view(path, contents)
|
30
|
+
full_path = temp_view_path_for(path)
|
31
|
+
FileUtils.mkdir_p(File.dirname(full_path))
|
32
|
+
File.open(full_path, 'w') { |file| file.write(contents) }
|
33
|
+
end
|
34
|
+
|
35
|
+
def delete_temp_views
|
36
|
+
FileUtils.rm_rf(temp_views_dir_path)
|
37
|
+
end
|
38
|
+
|
39
|
+
def draw_routes(&block)
|
40
|
+
Rails.application.routes.draw(&block)
|
41
|
+
Rails.application.routes
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def migrations_dir_path
|
47
|
+
File.join(ROOT_DIR, 'db/migrate')
|
48
|
+
end
|
49
|
+
|
50
|
+
def temp_view_path_for(path)
|
51
|
+
File.join(temp_views_dir_path, path)
|
52
|
+
end
|
53
|
+
|
54
|
+
def clean
|
55
|
+
FileUtils.rm_rf(ROOT_DIR)
|
56
|
+
end
|
57
|
+
|
58
|
+
def generate
|
59
|
+
`rails new #{ROOT_DIR} --skip-bundle`
|
60
|
+
end
|
61
|
+
|
62
|
+
def load_environment
|
63
|
+
require environment_file_path
|
64
|
+
end
|
65
|
+
|
66
|
+
def run_migrations
|
67
|
+
ActiveRecord::Migration.verbose = false
|
68
|
+
ActiveRecord::Migrator.migrate(migrations_dir_path)
|
69
|
+
end
|
70
|
+
|
71
|
+
def install_gems
|
72
|
+
retrying('bundle install') do |command|
|
73
|
+
Bundler.with_clean_env { `#{command}` }
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def within_app(&block)
|
78
|
+
Dir.chdir(ROOT_DIR, &block)
|
79
|
+
end
|
80
|
+
|
81
|
+
def retrying(command, &runner)
|
82
|
+
runner ||= -> { `#{command}` }
|
83
|
+
|
84
|
+
retry_count = 0
|
85
|
+
loop do
|
86
|
+
output = runner.call("#{command} 2>&1")
|
87
|
+
if $? == 0
|
88
|
+
break
|
89
|
+
else
|
90
|
+
retry_count += 1
|
91
|
+
if retry_count == 3
|
92
|
+
raise "Command '#{command}' failed:\n#{output}"
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shoulda-matchers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tammer Saleh
|
@@ -13,7 +13,7 @@ authors:
|
|
13
13
|
autorequire:
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
|
-
date:
|
16
|
+
date: 2014-01-10 00:00:00.000000000 Z
|
17
17
|
dependencies:
|
18
18
|
- !ruby/object:Gem::Dependency
|
19
19
|
name: activesupport
|
@@ -172,8 +172,10 @@ files:
|
|
172
172
|
- gemfiles/3.1.gemfile.lock
|
173
173
|
- gemfiles/3.2.gemfile
|
174
174
|
- gemfiles/3.2.gemfile.lock
|
175
|
-
- gemfiles/4.0.gemfile
|
176
|
-
- gemfiles/4.0.gemfile.lock
|
175
|
+
- gemfiles/4.0.0.gemfile
|
176
|
+
- gemfiles/4.0.0.gemfile.lock
|
177
|
+
- gemfiles/4.0.1.gemfile
|
178
|
+
- gemfiles/4.0.1.gemfile.lock
|
177
179
|
- lib/shoulda-matchers.rb
|
178
180
|
- lib/shoulda/matchers.rb
|
179
181
|
- lib/shoulda/matchers/action_controller.rb
|
@@ -184,12 +186,12 @@ files:
|
|
184
186
|
- lib/shoulda/matchers/action_controller/rescue_from_matcher.rb
|
185
187
|
- lib/shoulda/matchers/action_controller/respond_with_matcher.rb
|
186
188
|
- lib/shoulda/matchers/action_controller/route_matcher.rb
|
189
|
+
- lib/shoulda/matchers/action_controller/route_params.rb
|
187
190
|
- lib/shoulda/matchers/action_controller/set_session_matcher.rb
|
188
191
|
- lib/shoulda/matchers/action_controller/set_the_flash_matcher.rb
|
189
192
|
- lib/shoulda/matchers/active_model.rb
|
190
193
|
- lib/shoulda/matchers/active_model/allow_mass_assignment_of_matcher.rb
|
191
194
|
- lib/shoulda/matchers/active_model/allow_value_matcher.rb
|
192
|
-
- lib/shoulda/matchers/active_model/comparison_matcher.rb
|
193
195
|
- lib/shoulda/matchers/active_model/disallow_value_matcher.rb
|
194
196
|
- lib/shoulda/matchers/active_model/ensure_exclusion_of_matcher.rb
|
195
197
|
- lib/shoulda/matchers/active_model/ensure_inclusion_of_matcher.rb
|
@@ -198,8 +200,10 @@ files:
|
|
198
200
|
- lib/shoulda/matchers/active_model/exception_message_finder.rb
|
199
201
|
- lib/shoulda/matchers/active_model/have_secure_password_matcher.rb
|
200
202
|
- lib/shoulda/matchers/active_model/helpers.rb
|
201
|
-
- lib/shoulda/matchers/active_model/
|
202
|
-
- lib/shoulda/matchers/active_model/
|
203
|
+
- lib/shoulda/matchers/active_model/numericality_matchers/comparison_matcher.rb
|
204
|
+
- lib/shoulda/matchers/active_model/numericality_matchers/odd_even_number_matcher.rb
|
205
|
+
- lib/shoulda/matchers/active_model/numericality_matchers/only_integer_matcher.rb
|
206
|
+
- lib/shoulda/matchers/active_model/validate_absence_of_matcher.rb
|
203
207
|
- lib/shoulda/matchers/active_model/validate_acceptance_of_matcher.rb
|
204
208
|
- lib/shoulda/matchers/active_model/validate_confirmation_of_matcher.rb
|
205
209
|
- lib/shoulda/matchers/active_model/validate_numericality_of_matcher.rb
|
@@ -212,9 +216,11 @@ files:
|
|
212
216
|
- lib/shoulda/matchers/active_record/association_matcher.rb
|
213
217
|
- lib/shoulda/matchers/active_record/association_matchers/counter_cache_matcher.rb
|
214
218
|
- lib/shoulda/matchers/active_record/association_matchers/dependent_matcher.rb
|
219
|
+
- lib/shoulda/matchers/active_record/association_matchers/model_reflection.rb
|
215
220
|
- lib/shoulda/matchers/active_record/association_matchers/model_reflector.rb
|
216
221
|
- lib/shoulda/matchers/active_record/association_matchers/option_verifier.rb
|
217
222
|
- lib/shoulda/matchers/active_record/association_matchers/order_matcher.rb
|
223
|
+
- lib/shoulda/matchers/active_record/association_matchers/source_matcher.rb
|
218
224
|
- lib/shoulda/matchers/active_record/association_matchers/through_matcher.rb
|
219
225
|
- lib/shoulda/matchers/active_record/have_db_column_matcher.rb
|
220
226
|
- lib/shoulda/matchers/active_record/have_db_index_matcher.rb
|
@@ -233,11 +239,11 @@ files:
|
|
233
239
|
- spec/shoulda/matchers/action_controller/rescue_from_matcher_spec.rb
|
234
240
|
- spec/shoulda/matchers/action_controller/respond_with_matcher_spec.rb
|
235
241
|
- spec/shoulda/matchers/action_controller/route_matcher_spec.rb
|
242
|
+
- spec/shoulda/matchers/action_controller/route_params_spec.rb
|
236
243
|
- spec/shoulda/matchers/action_controller/set_session_matcher_spec.rb
|
237
244
|
- spec/shoulda/matchers/action_controller/set_the_flash_matcher_spec.rb
|
238
245
|
- spec/shoulda/matchers/active_model/allow_mass_assignment_of_matcher_spec.rb
|
239
246
|
- spec/shoulda/matchers/active_model/allow_value_matcher_spec.rb
|
240
|
-
- spec/shoulda/matchers/active_model/comparison_matcher_spec.rb
|
241
247
|
- spec/shoulda/matchers/active_model/disallow_value_matcher_spec.rb
|
242
248
|
- spec/shoulda/matchers/active_model/ensure_exclusion_of_matcher_spec.rb
|
243
249
|
- spec/shoulda/matchers/active_model/ensure_inclusion_of_matcher_spec.rb
|
@@ -245,8 +251,10 @@ files:
|
|
245
251
|
- spec/shoulda/matchers/active_model/exception_message_finder_spec.rb
|
246
252
|
- spec/shoulda/matchers/active_model/have_secure_password_matcher_spec.rb
|
247
253
|
- spec/shoulda/matchers/active_model/helpers_spec.rb
|
248
|
-
- spec/shoulda/matchers/active_model/
|
249
|
-
- spec/shoulda/matchers/active_model/
|
254
|
+
- spec/shoulda/matchers/active_model/numericality_matchers/comparison_matcher_spec.rb
|
255
|
+
- spec/shoulda/matchers/active_model/numericality_matchers/odd_even_number_matcher_spec.rb
|
256
|
+
- spec/shoulda/matchers/active_model/numericality_matchers/only_integer_matcher_spec.rb
|
257
|
+
- spec/shoulda/matchers/active_model/validate_absence_of_matcher_spec.rb
|
250
258
|
- spec/shoulda/matchers/active_model/validate_acceptance_of_matcher_spec.rb
|
251
259
|
- spec/shoulda/matchers/active_model/validate_confirmation_of_matcher_spec.rb
|
252
260
|
- spec/shoulda/matchers/active_model/validate_numericality_of_matcher_spec.rb
|
@@ -255,6 +263,7 @@ files:
|
|
255
263
|
- spec/shoulda/matchers/active_model/validation_message_finder_spec.rb
|
256
264
|
- spec/shoulda/matchers/active_record/accept_nested_attributes_for_matcher_spec.rb
|
257
265
|
- spec/shoulda/matchers/active_record/association_matcher_spec.rb
|
266
|
+
- spec/shoulda/matchers/active_record/association_matchers/model_reflection_spec.rb
|
258
267
|
- spec/shoulda/matchers/active_record/have_db_column_matcher_spec.rb
|
259
268
|
- spec/shoulda/matchers/active_record/have_db_index_matcher_spec.rb
|
260
269
|
- spec/shoulda/matchers/active_record/have_readonly_attributes_matcher_spec.rb
|
@@ -269,7 +278,9 @@ files:
|
|
269
278
|
- spec/support/i18n_faker.rb
|
270
279
|
- spec/support/mailer_builder.rb
|
271
280
|
- spec/support/model_builder.rb
|
281
|
+
- spec/support/rails_versions.rb
|
272
282
|
- spec/support/shared_examples/numerical_submatcher_spec.rb
|
283
|
+
- spec/support/test_application.rb
|
273
284
|
homepage: http://thoughtbot.com/community/
|
274
285
|
licenses:
|
275
286
|
- MIT
|
@@ -290,7 +301,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
290
301
|
version: '0'
|
291
302
|
requirements: []
|
292
303
|
rubyforge_project:
|
293
|
-
rubygems_version: 2.0.
|
304
|
+
rubygems_version: 2.0.14
|
294
305
|
signing_key:
|
295
306
|
specification_version: 4
|
296
307
|
summary: Making tests easy on the fingers and eyes
|
@@ -305,11 +316,11 @@ test_files:
|
|
305
316
|
- spec/shoulda/matchers/action_controller/rescue_from_matcher_spec.rb
|
306
317
|
- spec/shoulda/matchers/action_controller/respond_with_matcher_spec.rb
|
307
318
|
- spec/shoulda/matchers/action_controller/route_matcher_spec.rb
|
319
|
+
- spec/shoulda/matchers/action_controller/route_params_spec.rb
|
308
320
|
- spec/shoulda/matchers/action_controller/set_session_matcher_spec.rb
|
309
321
|
- spec/shoulda/matchers/action_controller/set_the_flash_matcher_spec.rb
|
310
322
|
- spec/shoulda/matchers/active_model/allow_mass_assignment_of_matcher_spec.rb
|
311
323
|
- spec/shoulda/matchers/active_model/allow_value_matcher_spec.rb
|
312
|
-
- spec/shoulda/matchers/active_model/comparison_matcher_spec.rb
|
313
324
|
- spec/shoulda/matchers/active_model/disallow_value_matcher_spec.rb
|
314
325
|
- spec/shoulda/matchers/active_model/ensure_exclusion_of_matcher_spec.rb
|
315
326
|
- spec/shoulda/matchers/active_model/ensure_inclusion_of_matcher_spec.rb
|
@@ -317,8 +328,10 @@ test_files:
|
|
317
328
|
- spec/shoulda/matchers/active_model/exception_message_finder_spec.rb
|
318
329
|
- spec/shoulda/matchers/active_model/have_secure_password_matcher_spec.rb
|
319
330
|
- spec/shoulda/matchers/active_model/helpers_spec.rb
|
320
|
-
- spec/shoulda/matchers/active_model/
|
321
|
-
- spec/shoulda/matchers/active_model/
|
331
|
+
- spec/shoulda/matchers/active_model/numericality_matchers/comparison_matcher_spec.rb
|
332
|
+
- spec/shoulda/matchers/active_model/numericality_matchers/odd_even_number_matcher_spec.rb
|
333
|
+
- spec/shoulda/matchers/active_model/numericality_matchers/only_integer_matcher_spec.rb
|
334
|
+
- spec/shoulda/matchers/active_model/validate_absence_of_matcher_spec.rb
|
322
335
|
- spec/shoulda/matchers/active_model/validate_acceptance_of_matcher_spec.rb
|
323
336
|
- spec/shoulda/matchers/active_model/validate_confirmation_of_matcher_spec.rb
|
324
337
|
- spec/shoulda/matchers/active_model/validate_numericality_of_matcher_spec.rb
|
@@ -327,6 +340,7 @@ test_files:
|
|
327
340
|
- spec/shoulda/matchers/active_model/validation_message_finder_spec.rb
|
328
341
|
- spec/shoulda/matchers/active_record/accept_nested_attributes_for_matcher_spec.rb
|
329
342
|
- spec/shoulda/matchers/active_record/association_matcher_spec.rb
|
343
|
+
- spec/shoulda/matchers/active_record/association_matchers/model_reflection_spec.rb
|
330
344
|
- spec/shoulda/matchers/active_record/have_db_column_matcher_spec.rb
|
331
345
|
- spec/shoulda/matchers/active_record/have_db_index_matcher_spec.rb
|
332
346
|
- spec/shoulda/matchers/active_record/have_readonly_attributes_matcher_spec.rb
|
@@ -341,4 +355,6 @@ test_files:
|
|
341
355
|
- spec/support/i18n_faker.rb
|
342
356
|
- spec/support/mailer_builder.rb
|
343
357
|
- spec/support/model_builder.rb
|
358
|
+
- spec/support/rails_versions.rb
|
344
359
|
- spec/support/shared_examples/numerical_submatcher_spec.rb
|
360
|
+
- spec/support/test_application.rb
|
@@ -1,57 +0,0 @@
|
|
1
|
-
module Shoulda # :nodoc:
|
2
|
-
module Matchers
|
3
|
-
module ActiveModel # :nodoc:
|
4
|
-
# Examples:
|
5
|
-
# it { should validate_numericality_of(:attr).
|
6
|
-
# is_greater_than(6).
|
7
|
-
# less_than(20)...(and so on) }
|
8
|
-
class ComparisonMatcher < ValidationMatcher
|
9
|
-
def initialize(value, operator)
|
10
|
-
@value = value
|
11
|
-
@operator = operator
|
12
|
-
@message = nil
|
13
|
-
end
|
14
|
-
|
15
|
-
def for(attribute)
|
16
|
-
@attribute = attribute
|
17
|
-
self
|
18
|
-
end
|
19
|
-
|
20
|
-
def matches?(subject)
|
21
|
-
@subject = subject
|
22
|
-
disallows_value_of(value_to_compare, @message)
|
23
|
-
end
|
24
|
-
|
25
|
-
def allowed_types
|
26
|
-
'integer'
|
27
|
-
end
|
28
|
-
|
29
|
-
def with_message(message)
|
30
|
-
@message = message
|
31
|
-
end
|
32
|
-
|
33
|
-
private
|
34
|
-
|
35
|
-
def value_to_compare
|
36
|
-
case @operator
|
37
|
-
when :> then [@value, @value - 1].sample
|
38
|
-
when :>= then @value - 1
|
39
|
-
when :== then @value + 1
|
40
|
-
when :< then [@value, @value + 1].sample
|
41
|
-
when :<= then @value + 1
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
def expectation
|
46
|
-
case @operator
|
47
|
-
when :> then "greater than"
|
48
|
-
when :>= then "greater than or equal to"
|
49
|
-
when :== then "equal to"
|
50
|
-
when :< then "less than"
|
51
|
-
when :<= then "less than or equal to"
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
@@ -1,47 +0,0 @@
|
|
1
|
-
module Shoulda # :nodoc:
|
2
|
-
module Matchers
|
3
|
-
module ActiveModel # :nodoc:
|
4
|
-
class OddEvenNumberMatcher # :nodoc:
|
5
|
-
NON_EVEN_NUMBER_VALUE = 1
|
6
|
-
NON_ODD_NUMBER_VALUE = 2
|
7
|
-
|
8
|
-
def initialize(attribute, options = {})
|
9
|
-
@attribute = attribute
|
10
|
-
options[:odd] ||= true
|
11
|
-
options[:even] ||= false
|
12
|
-
|
13
|
-
if options[:odd] && !options[:even]
|
14
|
-
@disallow_value_matcher = DisallowValueMatcher.new(NON_ODD_NUMBER_VALUE).
|
15
|
-
for(@attribute).
|
16
|
-
with_message(:odd)
|
17
|
-
else
|
18
|
-
@disallow_value_matcher = DisallowValueMatcher.new(NON_EVEN_NUMBER_VALUE).
|
19
|
-
for(@attribute).
|
20
|
-
with_message(:even)
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
def matches?(subject)
|
25
|
-
@disallow_value_matcher.matches?(subject)
|
26
|
-
end
|
27
|
-
|
28
|
-
def with_message(message)
|
29
|
-
@disallow_value_matcher.with_message(message)
|
30
|
-
self
|
31
|
-
end
|
32
|
-
|
33
|
-
def allowed_types
|
34
|
-
'integer'
|
35
|
-
end
|
36
|
-
|
37
|
-
def failure_message_for_should
|
38
|
-
@disallow_value_matcher.failure_message_for_should
|
39
|
-
end
|
40
|
-
|
41
|
-
def failure_message_for_should_not
|
42
|
-
@disallow_value_matcher.failure_message_for_should_not
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|