validation_matcher 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/.travis.yml ADDED
@@ -0,0 +1,5 @@
1
+ rvm:
2
+ - 1.9.2
3
+ - 1.9.3
4
+
5
+ script: bundle exec rspec spec
data/README.md CHANGED
@@ -1,8 +1,17 @@
1
- Validation Matcher
2
- ==================
1
+ Validation Matcher [![build status][status-image]][ci]
2
+ ======================================================
3
+
4
+ About
5
+ -----
3
6
 
4
7
  Use Rails 3 validation reflection to test validations.
5
8
 
9
+ URLs:
10
+
11
+ - Github: https://github.com/bm5k/validation_matcher/
12
+ - Documentation: http://rubydoc.info/github/BM5k/validation_matcher/master/frames
13
+ - RubyGems: https://rubygems.org/gems/validation_matcher
14
+
6
15
  Installation
7
16
  ------------
8
17
 
@@ -26,12 +35,16 @@ Usage
26
35
 
27
36
  require 'spec_helper'
28
37
 
29
- describe Subscription do
30
-
31
- its(:field_a) { should validate :presence }
32
- its(:field_b) { should validate :uniqueness }
33
- its(:field_c) { should validate :presence }
34
- its(:field_c) { should validate :uniqueness, { case_insensitive: false }}
35
-
38
+ describe Foo do
39
+ it { should validate(:presence).of(:field_a) }
40
+ it { should validate(:presence).of(:field_b) }
41
+ it { should validate(:presence).of(:field_c).with(case_insensitive: false) }
42
+ it { should validate(:uniqueness).of(:field_b).with(options) }
36
43
  end
37
44
  ```
45
+
46
+ <!-- links -->
47
+ [ci]: http://travis-ci.org/BM5k/validation_matcher "build status"
48
+
49
+ <!-- images -->
50
+ [status-image]: https://secure.travis-ci.org/BM5k/validation_matcher.png?branch=master
@@ -1,3 +1,3 @@
1
1
  module ValidationMatcher
2
- VERSION = '0.0.1'
2
+ VERSION = '0.1.0'
3
3
  end
@@ -2,35 +2,49 @@ require 'validation_matcher/version'
2
2
 
3
3
  module ValidationMatcher
4
4
 
5
- RSpec::Matchers.define :validate do |kind, expected_options|
5
+ RSpec::Matchers.define :validate do |kind|
6
6
 
7
- field = example.metadata[:example_group][:description_args].first
8
- validator = described_class.validators_on(field).detect { |v| v.kind == kind }
9
- options = validator.options rescue {}
7
+ chain(:of) { |field| @field = field }
8
+ chain(:with) { |hash| @options = hash }
10
9
 
11
- diff = expected_options.present? ? options.diff(expected_options) : nil
10
+ # simplify access to the described_class
11
+ def described_class
12
+ @described_class ||= actual.class
13
+ end
14
+
15
+ # Attempts to find the selected validator
16
+ #
17
+ # @param [Symbol] kind the type of validator we're looking for
18
+ def find_validator kind
19
+ described_class.validators_on(@field).detect { |v| v.kind == kind }
20
+ end
12
21
 
13
22
  description do
14
- msg = "validate the #{ kind } of #{ field.inspect }"
15
- msg += " with options: #{ expected_options.inspect }" unless expected_options.blank?
23
+ msg = "validate the #{ kind } of #{ @field.inspect }"
24
+ msg << " with options: #{ @options.inspect }" if @options
16
25
  msg
17
26
  end
18
27
 
19
28
  failure_message_for_should do
20
- msg = "Expected #{ described_class } to validate the #{ kind } of #{ field.inspect }"
21
- if expected_options.present? and diff.present?
22
- msg += "\n with options: #{ expected_options.inspect }"
23
- msg += "\n actual options: #{ options.inspect }"
24
- end
29
+ msg = "Expected #{ described_class } to validate the #{ kind } of #{ @field.inspect }"
30
+ msg << "\n with options: #{ @options.inspect }" if @options.present?
25
31
  msg
26
32
  end
27
33
 
28
34
  failure_message_for_should_not do
29
- "Did not expect #{ described_class } to validate the #{ kind } of #{ field.inspect }"
35
+ msg = "Expected #{ described_class } not to validate the #{ kind } of #{ @field.inspect }"
36
+ msg << "\n with options: #{ @options.inspect }" if @options.present?
37
+ msg
30
38
  end
31
39
 
32
- match_for_should { validator.present? and diff.blank? }
33
- match_for_should_not { validator.blank? }
40
+ match do |actual|
41
+ validator = find_validator kind
42
+ options = validator.options rescue {}
43
+ diff = @options ? options.diff(@options) : nil
44
+ @options = nil # for some reason this appears to be cached between runs?
45
+
46
+ validator.present? and diff.blank?
47
+ end
34
48
 
35
49
  end
36
50
 
data/spec/spec_helper.rb CHANGED
@@ -1,6 +1,14 @@
1
- %w[ validation_matcher supermodel pry pry-nav ].each { |lib| require lib }
1
+ %w[ validation_matcher active_support/core_ext active_model pry pry-nav ].each { |lib| require lib }
2
+
3
+ class Thing
4
+
5
+ extend ActiveModel::Naming
6
+ include ActiveModel::Conversion
7
+ include ActiveModel::Validations
8
+
9
+ attr_accessor :field_a, :field_b, :field_c
2
10
 
3
- class Thing < SuperModel::Base
4
- attr_accessor :field_a, :field_b
5
11
  validates :field_b, presence: true
12
+ validates :field_c, numericality: { allow_nil: false, only_integer: true }
13
+
6
14
  end
data/spec/thing_spec.rb CHANGED
@@ -2,7 +2,8 @@ require 'spec_helper'
2
2
 
3
3
  describe Thing do
4
4
 
5
- its(:field_a) { should_not validate :presence }
6
- its(:field_b) { should validate :presence }
5
+ it { should_not validate(:presence).of(:field_a) }
6
+ it { should validate(:presence).of(:field_b) }
7
+ it { should validate(:numericality).of(:field_c).with(only_integer: true, allow_nil: false) }
7
8
 
8
9
  end
@@ -18,9 +18,11 @@ Gem::Specification.new do |s|
18
18
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
19
  s.require_paths = ['lib']
20
20
 
21
- s.add_dependency 'rspec', '~> 2.8.0'
21
+ s.add_dependency 'rspec', '~> 2'
22
+
23
+ s.add_dependency 'activemodel', '~> 3'
24
+ s.add_dependency 'activesupport', '~> 3'
22
25
 
23
- s.add_development_dependency 'supermodel'
24
26
  s.add_development_dependency 'pry'
25
27
  s.add_development_dependency 'pry-nav'
26
28
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: validation_matcher
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,33 +9,59 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-02-16 00:00:00.000000000 Z
12
+ date: 2012-05-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &70184564228100 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
20
20
  - !ruby/object:Gem::Version
21
- version: 2.8.0
21
+ version: '2'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70184564228100
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '2'
25
30
  - !ruby/object:Gem::Dependency
26
- name: supermodel
27
- requirement: &70184564225040 !ruby/object:Gem::Requirement
31
+ name: activemodel
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
- - - ! '>='
35
+ - - ~>
31
36
  - !ruby/object:Gem::Version
32
- version: '0'
33
- type: :development
37
+ version: '3'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: '3'
46
+ - !ruby/object:Gem::Dependency
47
+ name: activesupport
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: '3'
54
+ type: :runtime
34
55
  prerelease: false
35
- version_requirements: *70184564225040
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '3'
36
62
  - !ruby/object:Gem::Dependency
37
63
  name: pry
38
- requirement: &70184564222540 !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
39
65
  none: false
40
66
  requirements:
41
67
  - - ! '>='
@@ -43,10 +69,15 @@ dependencies:
43
69
  version: '0'
44
70
  type: :development
45
71
  prerelease: false
46
- version_requirements: *70184564222540
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
47
78
  - !ruby/object:Gem::Dependency
48
79
  name: pry-nav
49
- requirement: &70184564237080 !ruby/object:Gem::Requirement
80
+ requirement: !ruby/object:Gem::Requirement
50
81
  none: false
51
82
  requirements:
52
83
  - - ! '>='
@@ -54,7 +85,12 @@ dependencies:
54
85
  version: '0'
55
86
  type: :development
56
87
  prerelease: false
57
- version_requirements: *70184564237080
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
58
94
  description: Use reflection to spec ActiveModel validations
59
95
  email:
60
96
  - me@bm5k.com
@@ -64,6 +100,7 @@ extra_rdoc_files: []
64
100
  files:
65
101
  - .gitignore
66
102
  - .rspec
103
+ - .travis.yml
67
104
  - Gemfile
68
105
  - README.md
69
106
  - Rakefile
@@ -93,7 +130,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
93
130
  version: '0'
94
131
  requirements: []
95
132
  rubyforge_project: validation_matcher
96
- rubygems_version: 1.8.10
133
+ rubygems_version: 1.8.23
97
134
  signing_key:
98
135
  specification_version: 3
99
136
  summary: RSpec matcher for ActiveModel validations
@@ -101,4 +138,3 @@ test_files:
101
138
  - spec/matchers_spec.rb
102
139
  - spec/spec_helper.rb
103
140
  - spec/thing_spec.rb
104
- has_rdoc: