rspec-collection_matchers 0.0.3 → 0.0.4

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: 86054489823ad2296c0bffaea74803acb7488d8a
4
+ data.tar.gz: b5d8d76f482bcbcd7d8c290bdd656379d3efd0dc
5
+ SHA512:
6
+ metadata.gz: ac223d5be9e8bcb6bd1a70dc7e09934428ecee6efe7d2e2d3d0f81ed6a25ea7237cfe8fecbc8cdd67ae69aa84cbb044e87d114ee051de4c54f29d5abf977cef1
7
+ data.tar.gz: a73e52b3b592bb067306d666522352d8c61fdaf7051bbcd17f475b0d1a4f1d17154e2f965d3a93f9db8ece4fce2e176806d3e8836354e0306cebef7f7944a2d5
@@ -1,3 +1,11 @@
1
+ ### 0.0.4 / 2014-04-24
2
+
3
+ [full changelog](http://github.com/rspec/rspec-collection_matchers/compare/v0.0.3...v0.0.4)
4
+
5
+ Enhancements:
6
+
7
+ * Add Rails extension `have(n).errors_on(:whatever)` (Bradley Schaefer)
8
+
1
9
  ### 0.0.3 / 2014-02-16
2
10
 
3
11
  [full changelog](http://github.com/rspec/rspec-collection_matchers/compare/v0.0.2...v0.0.3)
data/Gemfile CHANGED
@@ -12,13 +12,34 @@ gemspec
12
12
  end
13
13
  end
14
14
 
15
- # only the master branche is supported on rspec-support
15
+ # only the master branch is supported on rspec-support
16
16
  gem "rspec-support", :git => "git://github.com/rspec/rspec-support.git"
17
17
 
18
18
  gem "cucumber", "~> 1.1.9"
19
19
  gem "aruba", "~> 0.5"
20
20
  gem "rake", "~> 10.0.0"
21
21
 
22
+ version_file = File.expand_path("../.rails-version", __FILE__)
23
+ rails_gem_args = case version = ENV['RAILS_VERSION'] || (File.exist?(version_file) && File.read(version_file).chomp)
24
+ when /master/
25
+ { :git => "git://github.com/rails/rails.git" }
26
+ when /stable$/
27
+ { :git => "git://github.com/rails/rails.git", :branch => version }
28
+ when nil, false, ""
29
+ if RUBY_VERSION < '1.9.3'
30
+ # Rails 4+ requires 1.9.3+, so on earlier versions default to the last 3.x release.
31
+ "3.2.17"
32
+ else
33
+ "4.0.4"
34
+ end
35
+ else
36
+ version
37
+ end
38
+
39
+ gem "activesupport", *rails_gem_args
40
+ gem "activemodel", *rails_gem_args
41
+
42
+
22
43
  platform :rbx do
23
44
  gem 'rubysl'
24
45
  end
@@ -1,3 +1,4 @@
1
1
  require 'rspec/collection_matchers/version'
2
2
  require 'rspec/collection_matchers/matchers'
3
3
  require 'rspec/collection_matchers/have'
4
+ require 'rspec/collection_matchers/rails_extensions'
@@ -70,6 +70,7 @@ module RSpec
70
70
  end
71
71
 
72
72
  def failure_message
73
+ return errors_on_message(:expected, ", got #{@actual}") if is_errors_on?
73
74
  "expected #{relative_expectation} #{@collection_name}, got #{@actual}"
74
75
  end
75
76
  alias failure_message_for_should failure_message
@@ -98,6 +99,7 @@ EOF
98
99
  alias failure_message_for_should_not failure_message_when_negated
99
100
 
100
101
  def description
102
+ return errors_on_message(:have) if is_errors_on?
101
103
  "have #{relative_expectation} #{@collection_name}"
102
104
  end
103
105
 
@@ -124,6 +126,14 @@ EOF
124
126
  def enumerator_class
125
127
  RUBY_VERSION < '1.9' ? Enumerable::Enumerator : Enumerator
126
128
  end
129
+
130
+ def is_errors_on?
131
+ [:errors_on, :error_on].include? @collection_name
132
+ end
133
+
134
+ def errors_on_message(prefix, suffix = nil)
135
+ "#{prefix} #{relative_expectation} #{@collection_name.to_s.gsub('_', ' ')} :#{@args[0]}#{suffix}"
136
+ end
127
137
  end
128
138
 
129
139
  module Syntax
@@ -0,0 +1,26 @@
1
+ if defined?(::ActiveModel)
2
+ module ::ActiveModel::Validations
3
+ # Extension to enhance `to have` on AR Model instances. Calls
4
+ # model.valid? in order to prepare the object's errors object. Accepts
5
+ # a :context option to specify the validation context.
6
+ #
7
+ # You can also use this to specify the content of the error messages.
8
+ #
9
+ # @example
10
+ #
11
+ # expect(model).to have(:no).errors_on(:attribute)
12
+ # expect(model).to have(1).error_on(:attribute)
13
+ # expect(model).to have(n).errors_on(:attribute)
14
+ # expect(model).to have(n).errors_on(:attribute, :context => :create)
15
+ #
16
+ # expect(model.errors_on(:attribute)).to include("can't be blank")
17
+ def errors_on(attribute, options = {})
18
+ valid_args = [options[:context]].compact
19
+ self.valid?(*valid_args)
20
+
21
+ [self.errors[attribute]].flatten.compact
22
+ end
23
+
24
+ alias :error_on :errors_on
25
+ end
26
+ end
@@ -1,5 +1,5 @@
1
1
  module RSpec
2
2
  module CollectionMatchers
3
- VERSION = "0.0.3"
3
+ VERSION = "0.0.4"
4
4
  end
5
5
  end
@@ -20,5 +20,6 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_runtime_dependency "rspec-expectations", ">= 2.99.0.beta1"
22
22
 
23
- spec.add_development_dependency "bundler", "~> 1.3"
23
+ spec.add_development_dependency "bundler", "~> 1.3"
24
+ spec.add_development_dependency "activemodel", ">= 3.0"
24
25
  end
@@ -338,14 +338,14 @@ EOF
338
338
  describe "have(n).items(args, block)" do
339
339
  it "passes args to target" do
340
340
  target = double("target")
341
- target.should_receive(:items).with("arg1","arg2").and_return([1,2,3])
341
+ expect(target).to receive(:items).with("arg1","arg2").and_return([1,2,3])
342
342
  expect(target).to have(3).items("arg1","arg2")
343
343
  end
344
344
 
345
345
  it "passes block to target" do
346
346
  target = double("target")
347
347
  block = Proc.new { 5 }
348
- target.should_receive(:items).with("arg1","arg2", block).and_return([1,2,3])
348
+ expect(target).to receive(:items).with("arg1","arg2", block).and_return([1,2,3])
349
349
  expect(target).to have(3).items("arg1","arg2", block)
350
350
  end
351
351
  end
@@ -0,0 +1,99 @@
1
+ require "spec_helper"
2
+ require 'active_model'
3
+
4
+ module RSpec::CollectionMatchers
5
+ describe "Have extensions for rails" do
6
+ describe "error_on" do
7
+ it "provides a description including the name of what the error is on" do
8
+ expect(have(1).error_on(:whatever).description).to eq "have 1 error on :whatever"
9
+ end
10
+
11
+ it "provides a failure message including the number actually given" do
12
+ expect {
13
+ expect([]).to have(1).error_on(:whatever)
14
+ }.to raise_error("expected 1 error on :whatever, got 0")
15
+ end
16
+ end
17
+
18
+ describe "errors_on" do
19
+ it "provides a description including the name of what the error is on" do
20
+ expect(have(2).errors_on(:whatever).description).to eq "have 2 errors on :whatever"
21
+ end
22
+
23
+ it "provides a failure message including the number actually given" do
24
+ expect {
25
+ expect([1]).to have(3).errors_on(:whatever)
26
+ }.to raise_error("expected 3 errors on :whatever, got 1")
27
+ end
28
+
29
+ let(:klass) do
30
+ Class.new do
31
+ include ActiveModel::Validations
32
+ end
33
+ end
34
+
35
+ it "calls valid?" do
36
+ model = klass.new
37
+ expect(model).to receive(:valid?)
38
+ model.errors_on(:foo)
39
+ end
40
+
41
+ it "returns the errors on that attribute" do
42
+ model = klass.new
43
+ allow(model).to receive(:errors) do
44
+ { :foo => ['a', 'b'] }
45
+ end
46
+ expect(model.errors_on(:foo)).to eq(['a','b'])
47
+ end
48
+
49
+ context "ActiveModel class that takes no arguments to valid?" do
50
+ let(:klass) {
51
+ Class.new do
52
+ include ActiveModel::Validations
53
+
54
+ def self.name
55
+ "ActiveModelValidationsFake"
56
+ end
57
+
58
+ def valid?
59
+ super
60
+ end
61
+
62
+ attr_accessor :name
63
+ validates_presence_of :name
64
+ end
65
+ }
66
+
67
+ context "with nil name" do
68
+ it "has one error" do
69
+ object = klass.new
70
+ object.name = ""
71
+
72
+ expect(object).to have(1).error_on(:name)
73
+ end
74
+ end
75
+
76
+ context "with non-blank name" do
77
+ it "has no error" do
78
+ object = klass.new
79
+ object.name = "Ywen"
80
+
81
+ expect(object).to have(:no).error_on(:name)
82
+ end
83
+ end
84
+ end
85
+ end
86
+
87
+ describe "have something other than error_on or errors_on" do
88
+ it "has a standard rspec failure message" do
89
+ expect {
90
+ expect([1,2,3]).to have(2).elements
91
+ }.to raise_error("expected 2 elements, got 3")
92
+ end
93
+
94
+ it "has a standard rspec description" do
95
+ expect(have(2).elements.description).to eq "have 2 elements"
96
+ end
97
+ end
98
+ end
99
+ end
@@ -1,13 +1,27 @@
1
+ require 'active_model'
2
+
3
+ # to avoid deprecation warning:
4
+ # [deprecated] I18n.enforce_available_locales will default to true in the future. If you really want to skip validation of your locale you can set I18n.enforce_available_locales = false to avoid this message.
5
+ I18n.enforce_available_locales = false
6
+
1
7
  require 'rspec/collection_matchers'
2
8
 
3
9
  Dir['./spec/support/**/*'].each {|f| require f}
4
10
 
5
11
  RSpec.configure do |config|
6
- config.treat_symbols_as_metadata_keys_with_true_values = true
12
+ config.treat_symbols_as_metadata_keys_with_true_values = true if RSpec::Core::Version::STRING < "3.0"
7
13
  config.run_all_when_everything_filtered = true
8
14
  config.filter_run :focus
9
15
 
10
16
  config.order = 'random'
17
+
18
+ config.expect_with :rspec do |rspec|
19
+ rspec.syntax = :expect
20
+ end
21
+
22
+ config.mock_with :rspec do |rspec|
23
+ rspec.syntax = :expect
24
+ end
11
25
  end
12
26
 
13
27
  shared_context "with #should enabled", :uses_should do
metadata CHANGED
@@ -1,48 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-collection_matchers
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
5
- prerelease:
4
+ version: 0.0.4
6
5
  platform: ruby
7
6
  authors:
8
7
  - Hugo Baraúna
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2014-02-17 00:00:00.000000000 Z
11
+ date: 2014-04-24 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: rspec-expectations
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - ">="
20
18
  - !ruby/object:Gem::Version
21
19
  version: 2.99.0.beta1
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - ">="
28
25
  - !ruby/object:Gem::Version
29
26
  version: 2.99.0.beta1
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: bundler
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ~>
31
+ - - "~>"
36
32
  - !ruby/object:Gem::Version
37
33
  version: '1.3'
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ~>
38
+ - - "~>"
44
39
  - !ruby/object:Gem::Version
45
40
  version: '1.3'
41
+ - !ruby/object:Gem::Dependency
42
+ name: activemodel
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
46
55
  description: Collection cardinality matchers, extracted from rspec-expectations
47
56
  email:
48
57
  - hugo.barauna@plataformatec.com.br
@@ -50,9 +59,9 @@ executables: []
50
59
  extensions: []
51
60
  extra_rdoc_files: []
52
61
  files:
53
- - .gitignore
54
- - .rspec
55
- - .travis.yml
62
+ - ".gitignore"
63
+ - ".rspec"
64
+ - ".travis.yml"
56
65
  - Changelog.md
57
66
  - Gemfile
58
67
  - LICENSE.txt
@@ -63,10 +72,12 @@ files:
63
72
  - lib/rspec/collection_matchers.rb
64
73
  - lib/rspec/collection_matchers/have.rb
65
74
  - lib/rspec/collection_matchers/matchers.rb
75
+ - lib/rspec/collection_matchers/rails_extensions.rb
66
76
  - lib/rspec/collection_matchers/version.rb
67
77
  - rspec-collection_matchers.gemspec
68
78
  - script/test_all
69
79
  - spec/rspec/collection_matchers/have_spec.rb
80
+ - spec/rspec/collection_matchers/rails_extensions_spec.rb
70
81
  - spec/spec_helper.rb
71
82
  - spec/support/classes.rb
72
83
  - spec/support/matchers.rb
@@ -74,38 +85,32 @@ files:
74
85
  homepage: https://github.com/rspec/rspec-collection_matchers
75
86
  licenses:
76
87
  - MIT
88
+ metadata: {}
77
89
  post_install_message:
78
90
  rdoc_options: []
79
91
  require_paths:
80
92
  - lib
81
93
  required_ruby_version: !ruby/object:Gem::Requirement
82
- none: false
83
94
  requirements:
84
- - - ! '>='
95
+ - - ">="
85
96
  - !ruby/object:Gem::Version
86
97
  version: '0'
87
- segments:
88
- - 0
89
- hash: -3346654767301501509
90
98
  required_rubygems_version: !ruby/object:Gem::Requirement
91
- none: false
92
99
  requirements:
93
- - - ! '>='
100
+ - - ">="
94
101
  - !ruby/object:Gem::Version
95
102
  version: '0'
96
- segments:
97
- - 0
98
- hash: -3346654767301501509
99
103
  requirements: []
100
104
  rubyforge_project:
101
- rubygems_version: 1.8.23
105
+ rubygems_version: 2.2.0
102
106
  signing_key:
103
- specification_version: 3
104
- summary: rspec-collection_matchers-0.0.3
107
+ specification_version: 4
108
+ summary: rspec-collection_matchers-0.0.4
105
109
  test_files:
106
110
  - features/have.feature
107
111
  - features/support/env.rb
108
112
  - spec/rspec/collection_matchers/have_spec.rb
113
+ - spec/rspec/collection_matchers/rails_extensions_spec.rb
109
114
  - spec/spec_helper.rb
110
115
  - spec/support/classes.rb
111
116
  - spec/support/matchers.rb