assert_difference 0.5.0 → 1.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: b34e885247309d6118cead7f0a46ff70e3a64b79
4
+ data.tar.gz: d5eeac964ef12fcc60c4e4b2724773b30dc090e7
5
+ SHA512:
6
+ metadata.gz: 57daed323e1d1ff3a16f7c4272ba567220c2dadb526211167d204bb8fa35b6b8445948516425fbfa653651703475979a7827ce1d901ea0aef37e441a7ec08d9a
7
+ data.tar.gz: bf9a480f6319c9a325d843d5f2e1b6480c5a9fc1540d263b5525d8a2a795130073d468e736a648c0f9f1b102c0a1451ae1ccdacae50605f73bf50dc71c67de4e
@@ -0,0 +1,17 @@
1
+ language: ruby
2
+ rvm:
3
+ - "1.9.3"
4
+ - "2.0.0"
5
+ - "2.1.1"
6
+ - "2.1.2"
7
+ - "2.1.3"
8
+ gemfile:
9
+ - gemfiles/activesupport_3_0.gemfile
10
+ - gemfiles/activesupport_3_1.gemfile
11
+ - gemfiles/activesupport_3_2.gemfile
12
+ - gemfiles/activesupport_4_0.gemfile
13
+ - gemfiles/activesupport_4_1.gemfile
14
+ addons:
15
+ code_climate:
16
+ repo_token:
17
+ secure: "drMasDnIxU1N0UN/0OvJI+nxaj6IsJsPnreodr2VxP2hCI2uHzybk78q5X7LnQVaPd8BBQiXLqmCx0KkyiTb1GbXO0kS992w4C4wbQBwraWs+Ifd18SCCUTCJ84zS3vgh62sHTv/LlLcPLo9yjkPfHYsprVgkK0HryEYNNmEhI4="
@@ -0,0 +1,21 @@
1
+ # Copyright © 2014, Watu
2
+
3
+ appraise "activesupport-3_0" do
4
+ gem "activesupport", "~> 3.0.0"
5
+ end
6
+
7
+ appraise "activesupport-3_1" do
8
+ gem "activesupport", "~> 3.1.0"
9
+ end
10
+
11
+ appraise "activesupport-3_2" do
12
+ gem "activesupport", "~> 3.2.0"
13
+ end
14
+
15
+ appraise "activesupport-4_0" do
16
+ gem "activesupport", "~> 4.0.0"
17
+ end
18
+
19
+ appraise "activesupport-4_1" do
20
+ gem "activesupport", "~> 4.1.0"
21
+ end
@@ -0,0 +1,33 @@
1
+ Authoritative changelog in README.md.
2
+
3
+ ## Next version
4
+ - Modernization of the gem.
5
+ - Test with 100% code coverage.
6
+ - Started using Travis-CI for continuous testing.
7
+ - Started testing in various versions of active support and ruby.
8
+ - Improved documentation.
9
+
10
+ ## Version 0.5.0 (Aug 6, 2012)
11
+ - Expectations can be ranges.
12
+
13
+ ## Version 0.4.2 (Aug 6, 2012)
14
+ - Fixed important typo.
15
+
16
+ ## Version 0.4.1 (Aug 6, 2012)
17
+ - Better error reporting (all unmatching counters).
18
+
19
+ ## Version 0.4.0 (Feb 21, 2012)
20
+ - Fix crash on missing gems.
21
+ - Return what the blocks returns.
22
+
23
+ ## Version 0.3.1 (Aug 25, 2011)
24
+ - Fixed documentation.
25
+
26
+ ## Version 0.3.0 (Aug 24, 2011)
27
+ - Better organization of code with modules.
28
+ - Switched to bundler from jeweler.
29
+ - Removed unneeded dependencies.
30
+ - Cleaned up documentation.
31
+
32
+ ## Version 0.1.0 (Oct 2, 2010)
33
+ - Initial release. Code extracted from a personal project.
data/Gemfile CHANGED
@@ -1,7 +1,6 @@
1
- # -*- encoding: utf-8 -*-
1
+ # encoding: UTF-8
2
2
  # Copyright © 2011, José Pablo Fernández
3
3
 
4
- source "http://rubygems.org"
4
+ source "https://rubygems.org"
5
5
 
6
- # Install the dependencies defined on assert_difference.gemspec
7
6
  gemspec
data/README.md CHANGED
@@ -1,15 +1,20 @@
1
- assert_difference
2
- =================
1
+ # assert_difference
3
2
 
4
- A nice assert_difference method similar to the one provided by Rails but with
5
- some improvements. For example:
3
+ [![Build Status](https://travis-ci.org/pupeno/assert_difference.png?branch=master)](https://travis-ci.org/pupeno/assert_difference)
4
+ [![Coverage Status](https://coveralls.io/repos/pupeno/assert_difference/badge.png)](https://coveralls.io/r/pupeno/assert_difference)
5
+ [![Code Climate](https://codeclimate.com/github/pupeno/assert_difference.png)](https://codeclimate.com/github/pupeno/assert_difference)
6
+ [![Test Coverage](https://codeclimate.com/github/pupeno/assert_difference/badges/coverage.svg)](https://codeclimate.com/github/pupeno/assert_difference)
7
+ [![Inline docs](http://inch-ci.org/github/pupeno/assert_difference.png)](http://inch-ci.org/github/pupeno/assert_difference)
8
+ [![Gem Version](https://badge.fury.io/rb/assert_difference.png)](http://badge.fury.io/rb/assert_difference)
9
+ [![Dependency Status](https://gemnasium.com/pupeno/assert_difference.svg)](https://gemnasium.com/pupeno/assert_difference)
10
+
11
+ A nice assert_difference method similar to the one provided by Rails but with some improvements. For example:
6
12
 
7
13
  assert_difference "Company.count" => +1, "User.count" => +5, "Slot.count" => -1 do
8
14
  post :something
9
15
  end
10
16
 
11
- will assert that a company and 5 users were create (the plus sign is only for
12
- the visual aid) and a slot was removed.
17
+ will assert that a company and 5 users were create (the plus sign is only for the visual aid) and a slot was removed.
13
18
 
14
19
  [Rails' assert_difference](http://api.rubyonrails.org/classes/ActiveSupport/Testing/Assertions.html#method-i-assert_difference)
15
20
  would require a more verbose syntax:
@@ -28,7 +33,7 @@ Expectations can also be ranges, for example:
28
33
  post :create
29
34
  end
30
35
 
31
- On top of that, error reporting is improved by displaying all the counters that didn't match except only one.
36
+ On top of that, error reporting is improved by displaying all the counters that didn't match.
32
37
 
33
38
  To use it with Test::Unit add this code:
34
39
 
@@ -49,25 +54,59 @@ and to use it with RSpec:
49
54
  config.include AssertDifference
50
55
  end
51
56
 
52
- For more information read http://pupeno.com/blog/better-assert-difference
57
+ This gem should work without Rails but it does depend on active support >= 3.0.0 and it's [tested with active support 3.0, 3.1, 3.2, 4.0 and 4.1 as well as Ruby 1.9.3, 2.0 and 2.1](https://travis-ci.org/pupeno/assert_difference).
58
+
59
+ ## Users
60
+
61
+ This gem is being used by:
62
+
63
+ - [Watu](https://watuapp.com)
64
+ - You? please, let us know if you are using this gem.
65
+
66
+ ## Changelog
67
+
68
+ ### Next version
69
+ - Modernization of the gem.
70
+ - Test with 100% code coverage.
71
+ - Started using Travis-CI for continuous testing.
72
+ - Started testing in various versions of active support and ruby.
73
+ - Improved documentation.
74
+
75
+ ### Version 0.5.0 (Aug 6, 2012)
76
+ - Expectations can be ranges.
77
+
78
+ ### Version 0.4.2 (Aug 6, 2012)
79
+ - Fixed important typo.
80
+
81
+ ### Version 0.4.1 (Aug 6, 2012)
82
+ - Better error reporting (all unmatching counters).
83
+
84
+ ### Version 0.4.0 (Feb 21, 2012)
85
+ - Fix crash on missing gems.
86
+ - Return what the blocks returns.
87
+
88
+ ### Version 0.3.1 (Aug 25, 2011)
89
+ - Fixed documentation.
90
+
91
+ ### Version 0.3.0 (Aug 24, 2011)
92
+ - Better organization of code with modules.
93
+ - Switched to bundler from jeweler.
94
+ - Removed unneeded dependencies.
95
+ - Cleaned up documentation.
53
96
 
54
- Notes on contributing
55
- ---------------------
97
+ ### Version 0.1.0 (Oct 2, 2010)
98
+ - Initial release. Code extracted from a personal project.
56
99
 
57
- * Fork the project.
58
- * Make your feature addition or bug fix.
59
- * Add tests for it. This is important so I don't break it in a
60
- future version unintentionally.
61
- * Commit, do not mess with rakefile, version, or history.
62
- (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
63
- * Send me a pull request. Bonus points for topic branches.
64
- * Document any new options and verify the documentation looks correct by running:
100
+ ## Contributing
65
101
 
66
- yard server --reload
102
+ 1. Fork it
103
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
104
+ 3. Commit your changes (`git commit -am "Add some feature"`)
105
+ 4. Push to the branch (`git push origin my-new-feature`)
106
+ 5. Create new Pull Request
67
107
 
68
- and going to http://localhost:8808
69
108
 
70
109
  Copyright
71
110
  ---------
72
111
 
73
- Copyright (c) 2010, 2011, 2012 José Pablo Fernández. See LICENSE for details.
112
+ Copyright (c) 2010, 2011, 2012, 2014 José Pablo Fernández. See LICENSE for details.
data/Rakefile CHANGED
@@ -1,39 +1,14 @@
1
- # -*- encoding: utf-8 -*-
2
- # Copyright © 2011, José Pablo Fernández
1
+ # encoding: UTF-8
2
+ # Copyright © 2011, 2014 José Pablo Fernández
3
3
 
4
- require "rake"
5
- require "rake/testtask"
4
+ require "rubygems"
5
+ require "bundler/setup"
6
6
  require "bundler/gem_tasks"
7
7
 
8
- desc "Default: run unit tests."
9
- task :default => :test
10
-
11
- desc "Test the table_builder plugin."
12
- Rake::TestTask.new(:test) do |t|
8
+ require "rake/testtask"
9
+ Rake::TestTask.new do |t|
13
10
  t.libs << "lib"
14
- t.pattern = "test/**/*_test.rb"
15
- t.verbose = true
11
+ t.test_files = FileList["test/**/*_test.rb"]
16
12
  end
17
13
 
18
- begin
19
- require "rcov/rcovtask"
20
- Rcov::RcovTask.new do |test|
21
- test.libs << "test"
22
- test.pattern = "test/**/test_*.rb"
23
- test.verbose = true
24
- end
25
- rescue LoadError => e
26
- puts "rcov is not installed, oh well"
27
- end
28
-
29
- begin
30
- require "yard"
31
- YARD::Rake::YardocTask.new do |yard|
32
- # Use Markdown for documentation.
33
- yard.options << "--markup" << "markdown"
34
- # Extra file(s).
35
- yard.options << "-" << "LICENSE"
36
- end
37
- rescue LoadError => e
38
- puts "yard is not installed, oh well"
39
- end
14
+ task :default => :test
@@ -1,24 +1,34 @@
1
- # -*- encoding: utf-8 -*-
2
- # Copyright © 2011, José Pablo Fernández
1
+ # encoding: UTF-8
2
+ # Copyright © 2011, 2014 José Pablo Fernández
3
3
 
4
- $:.unshift File.expand_path("../lib", __FILE__)
5
- require "assert_difference"
4
+ lib = File.expand_path("../lib", __FILE__)
5
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
6
+ require "assert_difference/version"
6
7
 
7
- Gem::Specification.new do |s|
8
- s.name = "assert_difference"
9
- s.version = AssertDifference::VERSION
10
- s.platform = Gem::Platform::RUBY
11
- s.authors = ["J. Pablo Fernández"]
12
- s.email = ["pupeno@pupeno.com"]
13
- s.homepage = "http://pupeno.github.com/assert_difference/"
14
- s.summary = "Like Rails' assert_difference, but more powerful"
15
- s.description = "Like Rails' assert_difference, but more compact and readable syntax through hashes, testing ranges and improved error reporting."
8
+ Gem::Specification.new do |spec|
9
+ spec.name = "assert_difference"
10
+ spec.version = AssertDifference::VERSION
11
+ spec.authors = ["J. Pablo Fernández"]
12
+ spec.email = ["pupeno@pupeno.com"]
13
+ spec.homepage = "https://github.com/pupeno/assert_difference"
14
+ spec.summary = "Like Rails' assert_difference, but more powerful"
15
+ spec.description = "Like Rails' assert_difference, but more compact and readable syntax through hashes, testing ranges and improved error reporting."
16
+ spec.license = "MIT"
16
17
 
17
- s.required_rubygems_version = ">= 1.3.6"
18
- s.rubyforge_project = "assert_difference"
18
+ spec.files = `git ls-files`.split($/)
19
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
20
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
21
+ spec.require_paths = ["lib"]
19
22
 
20
- s.add_development_dependency "yard"
23
+ spec.required_ruby_version = ">= 1.9.3"
24
+ spec.add_dependency "activesupport", ">= 3.0.0"
21
25
 
22
- s.files = `git ls-files`.split("\n")
23
- s.test_files = `git ls-files -- {test}/*`.split("\n")
26
+ spec.add_development_dependency "appraisal"
27
+ spec.add_development_dependency "bundler"
28
+ spec.add_development_dependency "codeclimate-test-reporter"
29
+ spec.add_development_dependency "coveralls" #, require: false
30
+ spec.add_development_dependency "minitest"
31
+ spec.add_development_dependency "minitest-reporters"
32
+ spec.add_development_dependency "rake"
33
+ spec.add_development_dependency "shoulda"
24
34
  end
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activesupport", "~> 3.0.0"
6
+
7
+ gemspec :path => "../"
@@ -0,0 +1,69 @@
1
+ PATH
2
+ remote: ../
3
+ specs:
4
+ assert_difference (0.5.0)
5
+ activesupport (>= 3.0.0)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ activesupport (3.0.20)
11
+ ansi (1.4.3)
12
+ appraisal (1.0.2)
13
+ bundler
14
+ rake
15
+ thor (>= 0.14.0)
16
+ builder (3.2.2)
17
+ codeclimate-test-reporter (0.4.1)
18
+ simplecov (>= 0.7.1, < 1.0.0)
19
+ coveralls (0.7.1)
20
+ multi_json (~> 1.3)
21
+ rest-client
22
+ simplecov (>= 0.7)
23
+ term-ansicolor
24
+ thor
25
+ docile (1.1.5)
26
+ mime-types (2.4.3)
27
+ minitest (5.4.3)
28
+ minitest-reporters (1.0.7)
29
+ ansi
30
+ builder
31
+ minitest (>= 5.0)
32
+ ruby-progressbar
33
+ multi_json (1.10.1)
34
+ netrc (0.8.0)
35
+ rake (10.3.2)
36
+ rest-client (1.7.2)
37
+ mime-types (>= 1.16, < 3.0)
38
+ netrc (~> 0.7)
39
+ ruby-progressbar (1.7.0)
40
+ shoulda (3.5.0)
41
+ shoulda-context (~> 1.0, >= 1.0.1)
42
+ shoulda-matchers (>= 1.4.1, < 3.0)
43
+ shoulda-context (1.2.1)
44
+ shoulda-matchers (2.7.0)
45
+ activesupport (>= 3.0.0)
46
+ simplecov (0.9.1)
47
+ docile (~> 1.1.0)
48
+ multi_json (~> 1.0)
49
+ simplecov-html (~> 0.8.0)
50
+ simplecov-html (0.8.0)
51
+ term-ansicolor (1.3.0)
52
+ tins (~> 1.0)
53
+ thor (0.19.1)
54
+ tins (1.3.3)
55
+
56
+ PLATFORMS
57
+ ruby
58
+
59
+ DEPENDENCIES
60
+ activesupport (~> 3.0.0)
61
+ appraisal
62
+ assert_difference!
63
+ bundler
64
+ codeclimate-test-reporter
65
+ coveralls
66
+ minitest
67
+ minitest-reporters
68
+ rake
69
+ shoulda
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activesupport", "~> 3.1.0"
6
+
7
+ gemspec :path => "../"
@@ -0,0 +1,70 @@
1
+ PATH
2
+ remote: ../
3
+ specs:
4
+ assert_difference (0.5.0)
5
+ activesupport (>= 3.0.0)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ activesupport (3.1.12)
11
+ multi_json (~> 1.0)
12
+ ansi (1.4.3)
13
+ appraisal (1.0.2)
14
+ bundler
15
+ rake
16
+ thor (>= 0.14.0)
17
+ builder (3.2.2)
18
+ codeclimate-test-reporter (0.4.1)
19
+ simplecov (>= 0.7.1, < 1.0.0)
20
+ coveralls (0.7.1)
21
+ multi_json (~> 1.3)
22
+ rest-client
23
+ simplecov (>= 0.7)
24
+ term-ansicolor
25
+ thor
26
+ docile (1.1.5)
27
+ mime-types (2.4.3)
28
+ minitest (5.4.3)
29
+ minitest-reporters (1.0.7)
30
+ ansi
31
+ builder
32
+ minitest (>= 5.0)
33
+ ruby-progressbar
34
+ multi_json (1.10.1)
35
+ netrc (0.8.0)
36
+ rake (10.3.2)
37
+ rest-client (1.7.2)
38
+ mime-types (>= 1.16, < 3.0)
39
+ netrc (~> 0.7)
40
+ ruby-progressbar (1.7.0)
41
+ shoulda (3.5.0)
42
+ shoulda-context (~> 1.0, >= 1.0.1)
43
+ shoulda-matchers (>= 1.4.1, < 3.0)
44
+ shoulda-context (1.2.1)
45
+ shoulda-matchers (2.7.0)
46
+ activesupport (>= 3.0.0)
47
+ simplecov (0.9.1)
48
+ docile (~> 1.1.0)
49
+ multi_json (~> 1.0)
50
+ simplecov-html (~> 0.8.0)
51
+ simplecov-html (0.8.0)
52
+ term-ansicolor (1.3.0)
53
+ tins (~> 1.0)
54
+ thor (0.19.1)
55
+ tins (1.3.3)
56
+
57
+ PLATFORMS
58
+ ruby
59
+
60
+ DEPENDENCIES
61
+ activesupport (~> 3.1.0)
62
+ appraisal
63
+ assert_difference!
64
+ bundler
65
+ codeclimate-test-reporter
66
+ coveralls
67
+ minitest
68
+ minitest-reporters
69
+ rake
70
+ shoulda
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activesupport", "~> 3.2.0"
6
+
7
+ gemspec :path => "../"
@@ -0,0 +1,72 @@
1
+ PATH
2
+ remote: ../
3
+ specs:
4
+ assert_difference (0.5.0)
5
+ activesupport (>= 3.0.0)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ activesupport (3.2.19)
11
+ i18n (~> 0.6, >= 0.6.4)
12
+ multi_json (~> 1.0)
13
+ ansi (1.4.3)
14
+ appraisal (1.0.2)
15
+ bundler
16
+ rake
17
+ thor (>= 0.14.0)
18
+ builder (3.2.2)
19
+ codeclimate-test-reporter (0.4.1)
20
+ simplecov (>= 0.7.1, < 1.0.0)
21
+ coveralls (0.7.1)
22
+ multi_json (~> 1.3)
23
+ rest-client
24
+ simplecov (>= 0.7)
25
+ term-ansicolor
26
+ thor
27
+ docile (1.1.5)
28
+ i18n (0.6.11)
29
+ mime-types (2.4.3)
30
+ minitest (5.4.3)
31
+ minitest-reporters (1.0.7)
32
+ ansi
33
+ builder
34
+ minitest (>= 5.0)
35
+ ruby-progressbar
36
+ multi_json (1.10.1)
37
+ netrc (0.8.0)
38
+ rake (10.3.2)
39
+ rest-client (1.7.2)
40
+ mime-types (>= 1.16, < 3.0)
41
+ netrc (~> 0.7)
42
+ ruby-progressbar (1.7.0)
43
+ shoulda (3.5.0)
44
+ shoulda-context (~> 1.0, >= 1.0.1)
45
+ shoulda-matchers (>= 1.4.1, < 3.0)
46
+ shoulda-context (1.2.1)
47
+ shoulda-matchers (2.7.0)
48
+ activesupport (>= 3.0.0)
49
+ simplecov (0.9.1)
50
+ docile (~> 1.1.0)
51
+ multi_json (~> 1.0)
52
+ simplecov-html (~> 0.8.0)
53
+ simplecov-html (0.8.0)
54
+ term-ansicolor (1.3.0)
55
+ tins (~> 1.0)
56
+ thor (0.19.1)
57
+ tins (1.3.3)
58
+
59
+ PLATFORMS
60
+ ruby
61
+
62
+ DEPENDENCIES
63
+ activesupport (~> 3.2.0)
64
+ appraisal
65
+ assert_difference!
66
+ bundler
67
+ codeclimate-test-reporter
68
+ coveralls
69
+ minitest
70
+ minitest-reporters
71
+ rake
72
+ shoulda
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activesupport", "~> 4.0.0"
6
+
7
+ gemspec :path => "../"
@@ -0,0 +1,80 @@
1
+ PATH
2
+ remote: ../
3
+ specs:
4
+ assert_difference (0.5.0)
5
+ activesupport (>= 3.0.0)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ activesupport (4.0.9)
11
+ i18n (~> 0.6, >= 0.6.9)
12
+ minitest (~> 4.2)
13
+ multi_json (~> 1.3)
14
+ thread_safe (~> 0.1)
15
+ tzinfo (~> 0.3.37)
16
+ ansi (1.4.3)
17
+ appraisal (1.0.2)
18
+ bundler
19
+ rake
20
+ thor (>= 0.14.0)
21
+ builder (3.2.2)
22
+ codeclimate-test-reporter (0.4.1)
23
+ simplecov (>= 0.7.1, < 1.0.0)
24
+ coveralls (0.7.1)
25
+ multi_json (~> 1.3)
26
+ rest-client
27
+ simplecov (>= 0.7)
28
+ term-ansicolor
29
+ thor
30
+ docile (1.1.5)
31
+ hashie (3.3.1)
32
+ i18n (0.6.11)
33
+ mime-types (2.4.3)
34
+ minitest (4.7.5)
35
+ minitest-reporters (0.14.24)
36
+ ansi
37
+ builder
38
+ minitest (>= 2.12, < 5.0)
39
+ powerbar
40
+ multi_json (1.10.1)
41
+ netrc (0.8.0)
42
+ powerbar (1.0.11)
43
+ ansi (~> 1.4.0)
44
+ hashie (>= 1.1.0)
45
+ rake (10.3.2)
46
+ rest-client (1.7.2)
47
+ mime-types (>= 1.16, < 3.0)
48
+ netrc (~> 0.7)
49
+ shoulda (3.5.0)
50
+ shoulda-context (~> 1.0, >= 1.0.1)
51
+ shoulda-matchers (>= 1.4.1, < 3.0)
52
+ shoulda-context (1.2.1)
53
+ shoulda-matchers (2.7.0)
54
+ activesupport (>= 3.0.0)
55
+ simplecov (0.9.1)
56
+ docile (~> 1.1.0)
57
+ multi_json (~> 1.0)
58
+ simplecov-html (~> 0.8.0)
59
+ simplecov-html (0.8.0)
60
+ term-ansicolor (1.3.0)
61
+ tins (~> 1.0)
62
+ thor (0.19.1)
63
+ thread_safe (0.3.4)
64
+ tins (1.3.3)
65
+ tzinfo (0.3.41)
66
+
67
+ PLATFORMS
68
+ ruby
69
+
70
+ DEPENDENCIES
71
+ activesupport (~> 4.0.0)
72
+ appraisal
73
+ assert_difference!
74
+ bundler
75
+ codeclimate-test-reporter
76
+ coveralls
77
+ minitest
78
+ minitest-reporters
79
+ rake
80
+ shoulda
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activesupport", "~> 4.1.0"
6
+
7
+ gemspec :path => "../"
@@ -0,0 +1,79 @@
1
+ PATH
2
+ remote: ../
3
+ specs:
4
+ assert_difference (0.5.0)
5
+ activesupport (>= 3.0.0)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ activesupport (4.1.5)
11
+ i18n (~> 0.6, >= 0.6.9)
12
+ json (~> 1.7, >= 1.7.7)
13
+ minitest (~> 5.1)
14
+ thread_safe (~> 0.1)
15
+ tzinfo (~> 1.1)
16
+ ansi (1.4.3)
17
+ appraisal (1.0.2)
18
+ bundler
19
+ rake
20
+ thor (>= 0.14.0)
21
+ builder (3.2.2)
22
+ codeclimate-test-reporter (0.4.1)
23
+ simplecov (>= 0.7.1, < 1.0.0)
24
+ coveralls (0.7.1)
25
+ multi_json (~> 1.3)
26
+ rest-client
27
+ simplecov (>= 0.7)
28
+ term-ansicolor
29
+ thor
30
+ docile (1.1.5)
31
+ i18n (0.6.11)
32
+ json (1.8.1)
33
+ mime-types (2.4.3)
34
+ minitest (5.4.3)
35
+ minitest-reporters (1.0.7)
36
+ ansi
37
+ builder
38
+ minitest (>= 5.0)
39
+ ruby-progressbar
40
+ multi_json (1.10.1)
41
+ netrc (0.8.0)
42
+ rake (10.3.2)
43
+ rest-client (1.7.2)
44
+ mime-types (>= 1.16, < 3.0)
45
+ netrc (~> 0.7)
46
+ ruby-progressbar (1.7.0)
47
+ shoulda (3.5.0)
48
+ shoulda-context (~> 1.0, >= 1.0.1)
49
+ shoulda-matchers (>= 1.4.1, < 3.0)
50
+ shoulda-context (1.2.1)
51
+ shoulda-matchers (2.7.0)
52
+ activesupport (>= 3.0.0)
53
+ simplecov (0.9.1)
54
+ docile (~> 1.1.0)
55
+ multi_json (~> 1.0)
56
+ simplecov-html (~> 0.8.0)
57
+ simplecov-html (0.8.0)
58
+ term-ansicolor (1.3.0)
59
+ tins (~> 1.0)
60
+ thor (0.19.1)
61
+ thread_safe (0.3.4)
62
+ tins (1.3.3)
63
+ tzinfo (1.2.2)
64
+ thread_safe (~> 0.1)
65
+
66
+ PLATFORMS
67
+ ruby
68
+
69
+ DEPENDENCIES
70
+ activesupport (~> 4.1.0)
71
+ appraisal
72
+ assert_difference!
73
+ bundler
74
+ codeclimate-test-reporter
75
+ coveralls
76
+ minitest
77
+ minitest-reporters
78
+ rake
79
+ shoulda
@@ -1,9 +1,9 @@
1
- # -*- encoding: utf-8 -*-
2
- # Copyright © 2010, 2011, 2012 José Pablo Fernández
1
+ # encoding: UTF-8
2
+ # Copyright © 2010, 2011, 2012, 2014 José Pablo Fernández
3
3
 
4
- module AssertDifference
5
- VERSION = "0.5.0" unless defined?(::AssertDifference::VERSION)
4
+ require "active_support/core_ext/array/wrap"
6
5
 
6
+ module AssertDifference
7
7
  # Test numeric difference between the return value of an expression as a result of what is evaluated
8
8
  # in the yielded block.
9
9
  #
@@ -64,43 +64,61 @@ module AssertDifference
64
64
  # post :something
65
65
  # end
66
66
  #
67
- # @param [Array, Hash] expressions array of expressions to evaluate or hash
68
- # table of expressions and expected difference.
67
+ # @param [Array, Hash] expectations array of expectations to evaluate or hash
68
+ # table of expectations and expected difference.
69
69
  # @param [Integer or Range] expected_difference expected difference when using an array or single expression.
70
- # @param [String, nil] message error message to display. One would be constructed if nil.
71
- # @return whatever the block returned
72
- def assert_difference(expressions, expected_difference = 1, message = nil, &block)
73
- b = block.send(:binding)
74
- if !expressions.is_a? Hash
75
- exps = Array.wrap(expressions)
76
- expressions = {}
77
- exps.each { |e| expressions[e] = expected_difference }
70
+ # @param [String, nil] message error message to display on top of the description of the expectation failed.
71
+ # @return Object whatever the block returned
72
+ def assert_difference(expectations, expected_difference = 1, message = nil, &block)
73
+ binding = block.send(:binding)
74
+ expectations = expectations_as_hash(expected_difference, expectations) unless expectations.is_a? Hash
75
+ before = expectations.keys.each_with_object({}) { |expression, before| before[expression] = eval(expression, binding) }
76
+
77
+ result = yield
78
+
79
+ after = expectations.keys.each_with_object({}) { |expression, after| after[expression] = eval(expression, binding) }
80
+ error_messages = generate_error_messages(after, before, expectations, message)
81
+ if error_messages.any?
82
+ fail error_messages.join("\n\n").strip
78
83
  end
79
84
 
80
- before = {}
81
- expressions.each { |exp, _| before[exp] = eval(exp, b) }
85
+ return result
86
+ end
82
87
 
83
- result = yield
88
+ private
84
89
 
85
- error_messages = []
86
- expressions.each do |exp, diff|
87
- expected = if diff.is_a? Range
88
- (before[exp] + diff.first)..(before[exp] + diff.end)
89
- else
90
- before[exp] + diff
91
- end
92
- actual = eval(exp, b)
93
- if expected.is_a?(Range) ? !expected.include?(actual) : expected != actual
94
- error = "#{exp.inspect} didn't change by #{diff} (expecting #{expected}, but got #{actual})"
90
+ # Turn an array or a single expression into a hash of expectations and expectations.
91
+ def expectations_as_hash(expected_difference, expressions)
92
+ Array.wrap(expressions).each_with_object({}) { |expression, expressions| expressions[expression] = expected_difference }
93
+ end
94
+
95
+ # For the cases in which there isn't a match, generate an error message.
96
+ def generate_error_messages(after, before, expressions, message)
97
+ expressions.map do |expression, expected_difference|
98
+ expected_value = generate_expected_value(before[expression], expected_difference)
99
+ if !expression_passes?(after[expression], expected_value)
100
+ error = "#{expression.inspect} didn't change by #{expected_difference} (expecting #{expected_value}, but got #{after[expression]})"
95
101
  error = "#{message}.\n#{error}" if message
96
- error_messages << error
102
+ error
97
103
  end
98
- end
104
+ end.compact
105
+ end
99
106
 
100
- if error_messages.any?
101
- fail error_messages.join(error_messages.any? { |m| m.include? "\n" } ? "\n\n" : ". ").strip
107
+ # Generate the expected value or range based of the value before and the expected difference.
108
+ def generate_expected_value(before, expected_difference)
109
+ if expected_difference.is_a? Range
110
+ (before + expected_difference.first)..(before + expected_difference.end)
111
+ else
112
+ before + expected_difference
102
113
  end
114
+ end
103
115
 
104
- return result
116
+ # Do the appropriate comparison depending on whether the expectation is a range or a value
117
+ def expression_passes?(actual_difference, expected_value)
118
+ if expected_value.is_a?(Range)
119
+ expected_value.include?(actual_difference)
120
+ else
121
+ expected_value == actual_difference
122
+ end
105
123
  end
106
124
  end
@@ -0,0 +1,6 @@
1
+ # encoding: UTF-8
2
+ # Copyright © 2010, 2011, 2012, 2014 José Pablo Fernández
3
+
4
+ module AssertDifference
5
+ VERSION = "1.0.0"
6
+ end
@@ -0,0 +1,81 @@
1
+ # Copyright © 2010, José Pablo Fernández
2
+
3
+ require_relative "test_helper"
4
+
5
+ require "assert_difference"
6
+
7
+ class AssertDifferenceTest < MiniTest::Unit::TestCase
8
+ include AssertDifference
9
+
10
+ should "pass when change is implicit" do
11
+ value = [1, 2, 3]
12
+ assert_difference "value.count" do
13
+ value << 4
14
+ end
15
+ end
16
+
17
+ should "pass when change is explicit" do
18
+ value = [1, 2, 3]
19
+ assert_difference "value.count" => +1 do
20
+ value << 4
21
+ end
22
+ end
23
+
24
+ should "pass when change is not 1" do
25
+ value1 = [1, 2, 3]
26
+ value2 = [1, 2, 3]
27
+ value3 = [1, 3, 3]
28
+ assert_difference "value1.count" => +2,
29
+ "value2.count" => -2,
30
+ "value3.count" => 0 do
31
+ value1 << 4
32
+ value1 << 5
33
+ value2.delete(3)
34
+ value2.delete(2)
35
+ end
36
+ end
37
+
38
+ should "pass when change is a range" do
39
+ value = [1, 2, 3]
40
+ assert_difference "value.count" => -1..3 do
41
+ value << 4
42
+ end
43
+ assert_difference "value.count" => -1..3 do
44
+ value << 5
45
+ value << 6
46
+ end
47
+ assert_difference "value.count" => -1..3 do
48
+ value.delete(1)
49
+ end
50
+ assert_difference "value.count" => -1..3 do
51
+ # no change
52
+ end
53
+ end
54
+
55
+ should "fail when change doesn't happen" do
56
+ value = [1, 2, 3]
57
+ assert_raises RuntimeError do
58
+ assert_difference "value.count" do
59
+ # No change
60
+ end
61
+ end
62
+ end
63
+
64
+ should "fail when it changes too much" do
65
+ value = [1, 2, 3]
66
+ assert_raises RuntimeError do
67
+ assert_difference "value.count" do
68
+ value << 4
69
+ value << 5
70
+ end
71
+ end
72
+ assert_raises RuntimeError do
73
+ assert_difference "value.count" => 1..3 do
74
+ value << 6
75
+ value << 7
76
+ value << 8
77
+ value << 9
78
+ end
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,26 @@
1
+ # encoding: UTF-8
2
+ # Copyright © 2010, 2014, José Pablo Fernández
3
+
4
+ require "rubygems"
5
+
6
+ # Test coverage
7
+ require "simplecov"
8
+ require "coveralls"
9
+ SimpleCov.start do
10
+ add_filter "/test/"
11
+ end
12
+ if ENV["CI"]
13
+ Coveralls.wear!
14
+ require "codeclimate-test-reporter"
15
+ CodeClimate::TestReporter.start
16
+ end
17
+
18
+ require "minitest/autorun"
19
+ require "minitest/reporters"
20
+ MiniTest::Reporters.use!
21
+ require "shoulda"
22
+ require "shoulda-context"
23
+
24
+ # Make the code to be tested easy to load.
25
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
26
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
metadata CHANGED
@@ -1,30 +1,139 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: assert_difference
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
5
- prerelease:
4
+ version: 1.0.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - J. Pablo Fernández
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-08-06 00:00:00.000000000 Z
11
+ date: 2014-11-14 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
- name: yard
14
+ name: activesupport
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 3.0.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 3.0.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: appraisal
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: codeclimate-test-reporter
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: coveralls
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
20
74
  - !ruby/object:Gem::Version
21
75
  version: '0'
22
76
  type: :development
23
77
  prerelease: false
24
78
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
79
  requirements:
27
- - - ! '>='
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: minitest
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: minitest-reporters
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rake
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: shoulda
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
28
137
  - !ruby/object:Gem::Version
29
138
  version: '0'
30
139
  description: Like Rails' assert_difference, but more compact and readable syntax through
@@ -35,38 +144,53 @@ executables: []
35
144
  extensions: []
36
145
  extra_rdoc_files: []
37
146
  files:
38
- - .gitignore
147
+ - ".gitignore"
148
+ - ".travis.yml"
149
+ - Appraisals
150
+ - CHANGELOG.md
39
151
  - Gemfile
40
152
  - LICENSE
41
153
  - README.md
42
154
  - Rakefile
43
155
  - assert_difference.gemspec
156
+ - gemfiles/activesupport_3_0.gemfile
157
+ - gemfiles/activesupport_3_0.gemfile.lock
158
+ - gemfiles/activesupport_3_1.gemfile
159
+ - gemfiles/activesupport_3_1.gemfile.lock
160
+ - gemfiles/activesupport_3_2.gemfile
161
+ - gemfiles/activesupport_3_2.gemfile.lock
162
+ - gemfiles/activesupport_4_0.gemfile
163
+ - gemfiles/activesupport_4_0.gemfile.lock
164
+ - gemfiles/activesupport_4_1.gemfile
165
+ - gemfiles/activesupport_4_1.gemfile.lock
44
166
  - lib/assert_difference.rb
45
- - test/helper.rb
46
- - test/test_assert_difference.rb
47
- homepage: http://pupeno.github.com/assert_difference/
48
- licenses: []
167
+ - lib/assert_difference/version.rb
168
+ - test/assert_difference_test.rb
169
+ - test/test_helper.rb
170
+ homepage: https://github.com/pupeno/assert_difference
171
+ licenses:
172
+ - MIT
173
+ metadata: {}
49
174
  post_install_message:
50
175
  rdoc_options: []
51
176
  require_paths:
52
177
  - lib
53
178
  required_ruby_version: !ruby/object:Gem::Requirement
54
- none: false
55
179
  requirements:
56
- - - ! '>='
180
+ - - ">="
57
181
  - !ruby/object:Gem::Version
58
- version: '0'
182
+ version: 1.9.3
59
183
  required_rubygems_version: !ruby/object:Gem::Requirement
60
- none: false
61
184
  requirements:
62
- - - ! '>='
185
+ - - ">="
63
186
  - !ruby/object:Gem::Version
64
- version: 1.3.6
187
+ version: '0'
65
188
  requirements: []
66
- rubyforge_project: assert_difference
67
- rubygems_version: 1.8.24
189
+ rubyforge_project:
190
+ rubygems_version: 2.4.3
68
191
  signing_key:
69
- specification_version: 3
192
+ specification_version: 4
70
193
  summary: Like Rails' assert_difference, but more powerful
71
- test_files: []
72
- has_rdoc:
194
+ test_files:
195
+ - test/assert_difference_test.rb
196
+ - test/test_helper.rb
@@ -1,11 +0,0 @@
1
- # Copyright © 2010, José Pablo Fernández
2
-
3
- require "rubygems"
4
- require "test/unit"
5
-
6
- $LOAD_PATH.unshift(File.dirname(__FILE__))
7
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
8
- require "assert_difference"
9
-
10
- class Test::Unit::TestCase
11
- end
@@ -1,7 +0,0 @@
1
- # Copyright © 2010, José Pablo Fernández
2
-
3
- require "helper"
4
-
5
- class TestAssertDifference < Test::Unit::TestCase
6
- # Sorry, no tests yet.
7
- end