shoulda 3.4.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +9 -7
- data/.hound.yml +3 -0
- data/.rubocop.yml +192 -0
- data/.ruby-version +1 -0
- data/.travis.yml +33 -2
- data/Appraisals +109 -8
- data/CHANGELOG.md +10 -0
- data/CONTRIBUTING.md +6 -1
- data/Gemfile +13 -0
- data/README.md +67 -74
- data/Rakefile +24 -10
- data/gemfiles/rails_4_2.gemfile +34 -0
- data/gemfiles/rails_4_2.gemfile.lock +240 -0
- data/gemfiles/rails_5_0.gemfile +32 -0
- data/gemfiles/rails_5_0.gemfile.lock +232 -0
- data/gemfiles/rails_5_1.gemfile +33 -0
- data/gemfiles/rails_5_1.gemfile.lock +247 -0
- data/gemfiles/rails_5_2.gemfile +35 -0
- data/gemfiles/rails_5_2.gemfile.lock +266 -0
- data/gemfiles/rails_6_0.gemfile +37 -0
- data/gemfiles/rails_6_0.gemfile.lock +291 -0
- data/lib/shoulda/version.rb +1 -1
- data/script/install_gems_in_all_appraisals +16 -0
- data/script/run_all_tests +16 -0
- data/script/supported_ruby_versions +7 -0
- data/script/update_gem_in_all_appraisals +17 -0
- data/script/update_gems_in_all_appraisals +16 -0
- data/shoulda.gemspec +23 -23
- data/test/acceptance/integrates_with_rails_test.rb +580 -0
- data/test/acceptance_test_helper.rb +43 -0
- data/test/support/acceptance/add_shoulda_to_project.rb +73 -0
- data/test/support/acceptance/helpers/array_helpers.rb +13 -0
- data/test/support/acceptance/helpers/pluralization_helpers.rb +13 -0
- data/test/support/acceptance/matchers/have_output.rb +33 -0
- data/test/support/acceptance/matchers/indicate_that_tests_were_run.rb +109 -0
- data/test/support/acceptance/rails_application_with_shoulda.rb +47 -0
- data/test/support/current_bundle.rb +61 -0
- data/test/support/snowglobe.rb +5 -0
- data/test/test_helper.rb +23 -0
- metadata +61 -153
- data/features/rails_integration.feature +0 -87
- data/features/step_definitions/rails_steps.rb +0 -77
- data/features/support/env.rb +0 -14
- data/gemfiles/3.0.gemfile +0 -7
- data/gemfiles/3.0.gemfile.lock +0 -127
- data/gemfiles/3.1.gemfile +0 -9
- data/gemfiles/3.1.gemfile.lock +0 -149
- data/gemfiles/3.2.gemfile +0 -9
- data/gemfiles/3.2.gemfile.lock +0 -146
@@ -0,0 +1,43 @@
|
|
1
|
+
require_relative 'support/current_bundle'
|
2
|
+
|
3
|
+
Tests::CurrentBundle.instance.assert_appraisal!
|
4
|
+
|
5
|
+
#---
|
6
|
+
|
7
|
+
require 'test_helper'
|
8
|
+
|
9
|
+
require_relative 'support/acceptance/rails_application_with_shoulda'
|
10
|
+
require_relative 'support/acceptance/matchers/have_output'
|
11
|
+
require_relative 'support/acceptance/matchers/indicate_that_tests_were_run'
|
12
|
+
|
13
|
+
class AcceptanceTest < Minitest::Test
|
14
|
+
include AcceptanceTests::Matchers
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def app
|
19
|
+
@app ||= AcceptanceTests::RailsApplicationWithShoulda.new
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
begin
|
24
|
+
require 'rails/test_unit/reporter'
|
25
|
+
|
26
|
+
# Patch Rails' reporter for Minitest so that it looks for the test
|
27
|
+
# correctly under Minitest 5.11
|
28
|
+
# See: <https://github.com/rails/rails/pull/31624>
|
29
|
+
Rails::TestUnitReporter.class_eval do
|
30
|
+
def format_rerun_snippet(result)
|
31
|
+
location, line =
|
32
|
+
if result.respond_to?(:source_location)
|
33
|
+
result.source_location
|
34
|
+
else
|
35
|
+
result.method(result.name).source_location
|
36
|
+
end
|
37
|
+
|
38
|
+
"#{executable} #{relative_path_for(location)}:#{line}"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
rescue LoadError
|
42
|
+
# Okay, rails/test_unit/reporter isn't a thing, no big deal
|
43
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
module AcceptanceTests
|
2
|
+
class AddShouldaToProject
|
3
|
+
ROOT_DIRECTORY = Pathname.new('../../..').expand_path(__FILE__)
|
4
|
+
|
5
|
+
def self.call(app, options)
|
6
|
+
new(app, options).call
|
7
|
+
end
|
8
|
+
|
9
|
+
def initialize(app, options)
|
10
|
+
@app = app
|
11
|
+
@options = options
|
12
|
+
end
|
13
|
+
|
14
|
+
def call
|
15
|
+
app.add_gem 'shoulda', gem_options
|
16
|
+
|
17
|
+
unless options[:with_configuration] === false
|
18
|
+
add_configuration_block_to_test_helper
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
attr_reader :app, :options
|
25
|
+
|
26
|
+
def test_framework
|
27
|
+
options[:test_framework]
|
28
|
+
end
|
29
|
+
|
30
|
+
def libraries
|
31
|
+
options.fetch(:libraries, [])
|
32
|
+
end
|
33
|
+
|
34
|
+
def gem_options
|
35
|
+
gem_options = { path: ROOT_DIRECTORY }
|
36
|
+
|
37
|
+
if options[:manually]
|
38
|
+
gem_options[:require] = false
|
39
|
+
end
|
40
|
+
|
41
|
+
gem_options
|
42
|
+
end
|
43
|
+
|
44
|
+
def add_configuration_block_to_test_helper
|
45
|
+
content = <<-CONTENT
|
46
|
+
Shoulda::Matchers.configure do |config|
|
47
|
+
config.integrate do |with|
|
48
|
+
#{test_framework_config}
|
49
|
+
#{library_config}
|
50
|
+
end
|
51
|
+
end
|
52
|
+
CONTENT
|
53
|
+
|
54
|
+
if options[:manually]
|
55
|
+
content = "require 'shoulda'\n#{content}"
|
56
|
+
end
|
57
|
+
|
58
|
+
app.append_to_file('test/test_helper.rb', content)
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_framework_config
|
62
|
+
if test_framework
|
63
|
+
"with.test_framework :#{test_framework}\n"
|
64
|
+
else
|
65
|
+
''
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def library_config
|
70
|
+
libraries.map { |library| "with.library :#{library}" }.join("\n")
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module AcceptanceTests
|
2
|
+
module PluralizationHelpers
|
3
|
+
def pluralize(count, singular_version, plural_version = nil)
|
4
|
+
plural_version ||= singular_version + 's'
|
5
|
+
|
6
|
+
if count == 1
|
7
|
+
"#{count} #{singular_version}"
|
8
|
+
else
|
9
|
+
"#{count} #{plural_version}"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module AcceptanceTests
|
2
|
+
module Matchers
|
3
|
+
# rubocop:disable Naming/PredicateName
|
4
|
+
def have_output(output)
|
5
|
+
HaveOutputMatcher.new(output)
|
6
|
+
end
|
7
|
+
# rubocop:enable Naming/PredicateName
|
8
|
+
|
9
|
+
class HaveOutputMatcher
|
10
|
+
def initialize(output)
|
11
|
+
@output = output
|
12
|
+
end
|
13
|
+
|
14
|
+
def matches?(runner)
|
15
|
+
@runner = runner
|
16
|
+
runner.has_output?(output)
|
17
|
+
end
|
18
|
+
|
19
|
+
def failure_message
|
20
|
+
"Expected command to have output, but did not.\n\n" +
|
21
|
+
"Command: #{runner.formatted_command}\n\n" +
|
22
|
+
"Expected output:\n" +
|
23
|
+
output.inspect + "\n\n" +
|
24
|
+
"Actual output:\n" +
|
25
|
+
runner.output
|
26
|
+
end
|
27
|
+
|
28
|
+
protected
|
29
|
+
|
30
|
+
attr_reader :output, :runner
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,109 @@
|
|
1
|
+
require_relative '../helpers/array_helpers'
|
2
|
+
require_relative '../helpers/pluralization_helpers'
|
3
|
+
|
4
|
+
module AcceptanceTests
|
5
|
+
module Matchers
|
6
|
+
def indicate_that_tests_were_run(series)
|
7
|
+
IndicateThatTestsWereRunMatcher.new(series)
|
8
|
+
end
|
9
|
+
|
10
|
+
class IndicateThatTestsWereRunMatcher
|
11
|
+
include ArrayHelpers
|
12
|
+
include PluralizationHelpers
|
13
|
+
|
14
|
+
def initialize(expected_numbers)
|
15
|
+
@expected_numbers = expected_numbers
|
16
|
+
end
|
17
|
+
|
18
|
+
def matches?(runner)
|
19
|
+
@runner = runner
|
20
|
+
Set.new(expected_numbers).subset?(Set.new(actual_numbers))
|
21
|
+
end
|
22
|
+
|
23
|
+
def failure_message
|
24
|
+
"Expected output to indicate that #{some_tests_were_run}.\n" +
|
25
|
+
"#{formatted_expected_numbers}\n" +
|
26
|
+
"#{formatted_actual_numbers}\n\n" +
|
27
|
+
"Output:\n\n" +
|
28
|
+
actual_output
|
29
|
+
end
|
30
|
+
|
31
|
+
protected
|
32
|
+
|
33
|
+
attr_reader :expected_numbers, :runner
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def some_tests_were_run
|
38
|
+
if some_tests_were_run_clauses.size > 1
|
39
|
+
"#{to_sentence(some_tests_were_run_clauses)} were run"
|
40
|
+
else
|
41
|
+
"#{some_tests_were_run_clauses} was run"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def some_tests_were_run_clauses
|
46
|
+
expected_numbers.map do |type, number|
|
47
|
+
if number == 1
|
48
|
+
"#{number} #{type.to_s.chop}"
|
49
|
+
else
|
50
|
+
"#{number} #{type}"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def formatted_expected_numbers
|
56
|
+
"Expected numbers: #{format_hash(expected_numbers)}"
|
57
|
+
end
|
58
|
+
|
59
|
+
def formatted_actual_numbers
|
60
|
+
report_line = find_report_line_in(actual_output)
|
61
|
+
|
62
|
+
if report_line
|
63
|
+
"Actual numbers: #{report_line.inspect}"
|
64
|
+
else
|
65
|
+
'Actual numbers: (n/a)'
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def actual_numbers
|
70
|
+
numbers = parse(
|
71
|
+
actual_output,
|
72
|
+
[:tests, :assertions, :failures, :errors, :skips],
|
73
|
+
)
|
74
|
+
numbers || {}
|
75
|
+
end
|
76
|
+
|
77
|
+
def actual_output
|
78
|
+
runner.output
|
79
|
+
end
|
80
|
+
|
81
|
+
def parse(text, pieces)
|
82
|
+
report_line = find_report_line_in(text)
|
83
|
+
|
84
|
+
if report_line
|
85
|
+
pieces.inject({}) do |hash, piece|
|
86
|
+
number = report_line.match(/(\d+) #{piece}/)[1].to_i
|
87
|
+
hash.merge(piece => number)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def find_report_line_in(text)
|
93
|
+
lines = text.split(/\n/)
|
94
|
+
|
95
|
+
index_of_line_with_time = lines.find_index do |line|
|
96
|
+
line =~ /\AFinished in \d\.\d+s\Z/
|
97
|
+
end
|
98
|
+
|
99
|
+
if index_of_line_with_time
|
100
|
+
lines[index_of_line_with_time + 1]
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
def format_hash(hash)
|
105
|
+
'{' + hash.map { |k, v| "#{k}: #{v.inspect}" }.join(', ') + '}'
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require_relative 'add_shoulda_to_project'
|
2
|
+
require_relative '../snowglobe'
|
3
|
+
|
4
|
+
module AcceptanceTests
|
5
|
+
class RailsApplicationWithShoulda < Snowglobe::RailsApplication
|
6
|
+
def create
|
7
|
+
super
|
8
|
+
|
9
|
+
bundle.updating do
|
10
|
+
bundle.add_gem 'minitest-reporters'
|
11
|
+
AddShouldaToProject.call(
|
12
|
+
self,
|
13
|
+
test_framework: :minitest,
|
14
|
+
libraries: [:rails],
|
15
|
+
)
|
16
|
+
end
|
17
|
+
|
18
|
+
fs.append_to_file 'test/test_helper.rb', <<-FILE
|
19
|
+
require 'minitest/autorun'
|
20
|
+
require 'minitest/reporters'
|
21
|
+
|
22
|
+
Minitest::Reporters.use!(Minitest::Reporters::SpecReporter.new)
|
23
|
+
|
24
|
+
begin
|
25
|
+
require "rails/test_unit/reporter"
|
26
|
+
|
27
|
+
# Patch Rails' reporter for Minitest so that it looks for the test
|
28
|
+
# correctly under Minitest 5.11
|
29
|
+
# See: <https://github.com/rails/rails/pull/31624>
|
30
|
+
Rails::TestUnitReporter.class_eval do
|
31
|
+
def format_rerun_snippet(result)
|
32
|
+
location, line = if result.respond_to?(:source_location)
|
33
|
+
result.source_location
|
34
|
+
else
|
35
|
+
result.method(result.name).source_location
|
36
|
+
end
|
37
|
+
|
38
|
+
"\#{executable} \#{relative_path_for(location)}:\#{line}"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
rescue LoadError
|
42
|
+
# Okay, rails/test_unit/reporter isn't a thing, no big deal
|
43
|
+
end
|
44
|
+
FILE
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'bundler'
|
2
|
+
require 'appraisal'
|
3
|
+
|
4
|
+
module Tests
|
5
|
+
class CurrentBundle
|
6
|
+
AppraisalNotSpecified = Class.new(ArgumentError)
|
7
|
+
|
8
|
+
include Singleton
|
9
|
+
|
10
|
+
def assert_appraisal!
|
11
|
+
unless appraisal_in_use?
|
12
|
+
message = <<MSG
|
13
|
+
|
14
|
+
|
15
|
+
Please run tests starting with `appraisal <appraisal_name>`.
|
16
|
+
Possible appraisals are: #{available_appraisals}
|
17
|
+
|
18
|
+
MSG
|
19
|
+
raise AppraisalNotSpecified, message
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def appraisal_in_use?
|
24
|
+
path.dirname == root.join('gemfiles')
|
25
|
+
end
|
26
|
+
|
27
|
+
def current_or_latest_appraisal
|
28
|
+
current_appraisal || latest_appraisal
|
29
|
+
end
|
30
|
+
|
31
|
+
def latest_appraisal
|
32
|
+
available_appraisals.max
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def available_appraisals
|
38
|
+
appraisals = []
|
39
|
+
|
40
|
+
Appraisal::AppraisalFile.each do |appraisal|
|
41
|
+
appraisals << appraisal.name
|
42
|
+
end
|
43
|
+
|
44
|
+
appraisals
|
45
|
+
end
|
46
|
+
|
47
|
+
def current_appraisal
|
48
|
+
if appraisal_in_use?
|
49
|
+
File.basename(path, '.gemfile')
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def path
|
54
|
+
Bundler.default_gemfile
|
55
|
+
end
|
56
|
+
|
57
|
+
def root
|
58
|
+
Pathname.new('../../..').expand_path(__FILE__)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'bundler/setup'
|
2
|
+
require 'pry'
|
3
|
+
require 'pry-byebug'
|
4
|
+
require 'minitest/autorun'
|
5
|
+
require 'minitest/reporters'
|
6
|
+
require 'warnings_logger'
|
7
|
+
|
8
|
+
require_relative '../lib/shoulda'
|
9
|
+
|
10
|
+
Minitest::Reporters.use!(Minitest::Reporters::SpecReporter.new)
|
11
|
+
|
12
|
+
WarningsLogger::Spy.call(
|
13
|
+
project_name: 'shoulda',
|
14
|
+
project_directory: Pathname.new('../..').expand_path(__FILE__),
|
15
|
+
)
|
16
|
+
|
17
|
+
Shoulda::Matchers.configure do |config|
|
18
|
+
config.integrate do |with|
|
19
|
+
with.test_framework :minitest
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
$VERBOSE = true
|
metadata
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shoulda
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
version: 3.4.0
|
4
|
+
version: 4.0.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Tammer Saleh
|
@@ -13,207 +12,116 @@ authors:
|
|
13
12
|
autorequire:
|
14
13
|
bindir: bin
|
15
14
|
cert_chain: []
|
16
|
-
date:
|
15
|
+
date: 2020-06-13 00:00:00.000000000 Z
|
17
16
|
dependencies:
|
18
17
|
- !ruby/object:Gem::Dependency
|
19
|
-
prerelease: false
|
20
18
|
name: shoulda-context
|
21
|
-
type: :runtime
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - ~>
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '1.0'
|
27
|
-
- - ! '>='
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: 1.0.1
|
30
|
-
none: false
|
31
19
|
requirement: !ruby/object:Gem::Requirement
|
32
20
|
requirements:
|
33
|
-
- - ~>
|
34
|
-
- !ruby/object:Gem::Version
|
35
|
-
version: '1.0'
|
36
|
-
- - ! '>='
|
21
|
+
- - "~>"
|
37
22
|
- !ruby/object:Gem::Version
|
38
|
-
version:
|
39
|
-
none: false
|
40
|
-
- !ruby/object:Gem::Dependency
|
41
|
-
prerelease: false
|
42
|
-
name: shoulda-matchers
|
23
|
+
version: '2.0'
|
43
24
|
type: :runtime
|
44
|
-
version_requirements: !ruby/object:Gem::Requirement
|
45
|
-
requirements:
|
46
|
-
- - ~>
|
47
|
-
- !ruby/object:Gem::Version
|
48
|
-
version: '1.0'
|
49
|
-
- - ! '>='
|
50
|
-
- !ruby/object:Gem::Version
|
51
|
-
version: 1.4.1
|
52
|
-
none: false
|
53
|
-
requirement: !ruby/object:Gem::Requirement
|
54
|
-
requirements:
|
55
|
-
- - ~>
|
56
|
-
- !ruby/object:Gem::Version
|
57
|
-
version: '1.0'
|
58
|
-
- - ! '>='
|
59
|
-
- !ruby/object:Gem::Version
|
60
|
-
version: 1.4.1
|
61
|
-
none: false
|
62
|
-
- !ruby/object:Gem::Dependency
|
63
|
-
prerelease: false
|
64
|
-
name: appraisal
|
65
|
-
type: :development
|
66
|
-
version_requirements: !ruby/object:Gem::Requirement
|
67
|
-
requirements:
|
68
|
-
- - ~>
|
69
|
-
- !ruby/object:Gem::Version
|
70
|
-
version: 0.4.0
|
71
|
-
none: false
|
72
|
-
requirement: !ruby/object:Gem::Requirement
|
73
|
-
requirements:
|
74
|
-
- - ~>
|
75
|
-
- !ruby/object:Gem::Version
|
76
|
-
version: 0.4.0
|
77
|
-
none: false
|
78
|
-
- !ruby/object:Gem::Dependency
|
79
|
-
prerelease: false
|
80
|
-
name: rails
|
81
|
-
type: :development
|
82
|
-
version_requirements: !ruby/object:Gem::Requirement
|
83
|
-
requirements:
|
84
|
-
- - '='
|
85
|
-
- !ruby/object:Gem::Version
|
86
|
-
version: 3.0.12
|
87
|
-
none: false
|
88
|
-
requirement: !ruby/object:Gem::Requirement
|
89
|
-
requirements:
|
90
|
-
- - '='
|
91
|
-
- !ruby/object:Gem::Version
|
92
|
-
version: 3.0.12
|
93
|
-
none: false
|
94
|
-
- !ruby/object:Gem::Dependency
|
95
|
-
prerelease: false
|
96
|
-
name: sqlite3
|
97
|
-
type: :development
|
98
|
-
version_requirements: !ruby/object:Gem::Requirement
|
99
|
-
requirements:
|
100
|
-
- - ~>
|
101
|
-
- !ruby/object:Gem::Version
|
102
|
-
version: 1.3.2
|
103
|
-
none: false
|
104
|
-
requirement: !ruby/object:Gem::Requirement
|
105
|
-
requirements:
|
106
|
-
- - ~>
|
107
|
-
- !ruby/object:Gem::Version
|
108
|
-
version: 1.3.2
|
109
|
-
none: false
|
110
|
-
- !ruby/object:Gem::Dependency
|
111
25
|
prerelease: false
|
112
|
-
name: rspec-rails
|
113
|
-
type: :development
|
114
26
|
version_requirements: !ruby/object:Gem::Requirement
|
115
27
|
requirements:
|
116
|
-
- - ~>
|
117
|
-
- !ruby/object:Gem::Version
|
118
|
-
version: 2.7.0
|
119
|
-
none: false
|
120
|
-
requirement: !ruby/object:Gem::Requirement
|
121
|
-
requirements:
|
122
|
-
- - ~>
|
28
|
+
- - "~>"
|
123
29
|
- !ruby/object:Gem::Version
|
124
|
-
version: 2.
|
125
|
-
none: false
|
30
|
+
version: '2.0'
|
126
31
|
- !ruby/object:Gem::Dependency
|
127
|
-
|
128
|
-
name: cucumber
|
129
|
-
type: :development
|
130
|
-
version_requirements: !ruby/object:Gem::Requirement
|
131
|
-
requirements:
|
132
|
-
- - ~>
|
133
|
-
- !ruby/object:Gem::Version
|
134
|
-
version: 1.1.0
|
135
|
-
none: false
|
32
|
+
name: shoulda-matchers
|
136
33
|
requirement: !ruby/object:Gem::Requirement
|
137
34
|
requirements:
|
138
|
-
- - ~>
|
35
|
+
- - "~>"
|
139
36
|
- !ruby/object:Gem::Version
|
140
|
-
version:
|
141
|
-
|
142
|
-
- !ruby/object:Gem::Dependency
|
37
|
+
version: '4.0'
|
38
|
+
type: :runtime
|
143
39
|
prerelease: false
|
144
|
-
name: aruba
|
145
|
-
type: :development
|
146
40
|
version_requirements: !ruby/object:Gem::Requirement
|
147
41
|
requirements:
|
148
|
-
- - ~>
|
149
|
-
- !ruby/object:Gem::Version
|
150
|
-
version: 0.4.11
|
151
|
-
none: false
|
152
|
-
requirement: !ruby/object:Gem::Requirement
|
153
|
-
requirements:
|
154
|
-
- - ~>
|
42
|
+
- - "~>"
|
155
43
|
- !ruby/object:Gem::Version
|
156
|
-
version:
|
157
|
-
none: false
|
44
|
+
version: '4.0'
|
158
45
|
description: Making tests easy on the fingers and eyes
|
159
46
|
email: support@thoughtbot.com
|
160
47
|
executables: []
|
161
48
|
extensions: []
|
162
49
|
extra_rdoc_files: []
|
163
50
|
files:
|
164
|
-
- .autotest
|
165
|
-
- .gitignore
|
166
|
-
- .
|
51
|
+
- ".autotest"
|
52
|
+
- ".gitignore"
|
53
|
+
- ".hound.yml"
|
54
|
+
- ".rubocop.yml"
|
55
|
+
- ".ruby-version"
|
56
|
+
- ".travis.yml"
|
167
57
|
- Appraisals
|
58
|
+
- CHANGELOG.md
|
168
59
|
- CONTRIBUTING.md
|
169
60
|
- Gemfile
|
170
61
|
- MIT-LICENSE
|
171
62
|
- README.md
|
172
63
|
- Rakefile
|
173
|
-
-
|
174
|
-
-
|
175
|
-
-
|
176
|
-
- gemfiles/
|
177
|
-
- gemfiles/
|
178
|
-
- gemfiles/
|
179
|
-
- gemfiles/
|
180
|
-
- gemfiles/
|
181
|
-
- gemfiles/
|
64
|
+
- gemfiles/rails_4_2.gemfile
|
65
|
+
- gemfiles/rails_4_2.gemfile.lock
|
66
|
+
- gemfiles/rails_5_0.gemfile
|
67
|
+
- gemfiles/rails_5_0.gemfile.lock
|
68
|
+
- gemfiles/rails_5_1.gemfile
|
69
|
+
- gemfiles/rails_5_1.gemfile.lock
|
70
|
+
- gemfiles/rails_5_2.gemfile
|
71
|
+
- gemfiles/rails_5_2.gemfile.lock
|
72
|
+
- gemfiles/rails_6_0.gemfile
|
73
|
+
- gemfiles/rails_6_0.gemfile.lock
|
182
74
|
- lib/shoulda.rb
|
183
75
|
- lib/shoulda/version.rb
|
76
|
+
- script/install_gems_in_all_appraisals
|
77
|
+
- script/run_all_tests
|
78
|
+
- script/supported_ruby_versions
|
79
|
+
- script/update_gem_in_all_appraisals
|
80
|
+
- script/update_gems_in_all_appraisals
|
184
81
|
- shoulda.gemspec
|
82
|
+
- test/acceptance/integrates_with_rails_test.rb
|
83
|
+
- test/acceptance_test_helper.rb
|
84
|
+
- test/support/acceptance/add_shoulda_to_project.rb
|
85
|
+
- test/support/acceptance/helpers/array_helpers.rb
|
86
|
+
- test/support/acceptance/helpers/pluralization_helpers.rb
|
87
|
+
- test/support/acceptance/matchers/have_output.rb
|
88
|
+
- test/support/acceptance/matchers/indicate_that_tests_were_run.rb
|
89
|
+
- test/support/acceptance/rails_application_with_shoulda.rb
|
90
|
+
- test/support/current_bundle.rb
|
91
|
+
- test/support/snowglobe.rb
|
92
|
+
- test/test_helper.rb
|
185
93
|
homepage: https://github.com/thoughtbot/shoulda
|
186
94
|
licenses:
|
187
95
|
- MIT
|
96
|
+
metadata: {}
|
188
97
|
post_install_message:
|
189
98
|
rdoc_options: []
|
190
99
|
require_paths:
|
191
100
|
- lib
|
192
101
|
required_ruby_version: !ruby/object:Gem::Requirement
|
193
102
|
requirements:
|
194
|
-
- -
|
103
|
+
- - ">="
|
195
104
|
- !ruby/object:Gem::Version
|
196
|
-
segments:
|
197
|
-
- 0
|
198
|
-
hash: 1378977218323282975
|
199
105
|
version: '0'
|
200
|
-
none: false
|
201
106
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
202
107
|
requirements:
|
203
|
-
- -
|
108
|
+
- - ">="
|
204
109
|
- !ruby/object:Gem::Version
|
205
|
-
segments:
|
206
|
-
- 0
|
207
|
-
hash: 1378977218323282975
|
208
110
|
version: '0'
|
209
|
-
none: false
|
210
111
|
requirements: []
|
211
|
-
|
212
|
-
rubygems_version: 1.8.23
|
112
|
+
rubygems_version: 3.1.2
|
213
113
|
signing_key:
|
214
|
-
specification_version:
|
114
|
+
specification_version: 4
|
215
115
|
summary: Making tests easy on the fingers and eyes
|
216
116
|
test_files:
|
217
|
-
-
|
218
|
-
-
|
219
|
-
-
|
117
|
+
- test/acceptance/integrates_with_rails_test.rb
|
118
|
+
- test/acceptance_test_helper.rb
|
119
|
+
- test/support/acceptance/add_shoulda_to_project.rb
|
120
|
+
- test/support/acceptance/helpers/array_helpers.rb
|
121
|
+
- test/support/acceptance/helpers/pluralization_helpers.rb
|
122
|
+
- test/support/acceptance/matchers/have_output.rb
|
123
|
+
- test/support/acceptance/matchers/indicate_that_tests_were_run.rb
|
124
|
+
- test/support/acceptance/rails_application_with_shoulda.rb
|
125
|
+
- test/support/current_bundle.rb
|
126
|
+
- test/support/snowglobe.rb
|
127
|
+
- test/test_helper.rb
|