validation_matchers 0.1.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.
File without changes
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --colour
@@ -0,0 +1,2 @@
1
+ here = File.dirname(__FILE__)
2
+ Dir["#{here}/active_model/*.rb"].each {|f| require f}
@@ -0,0 +1,63 @@
1
+ module ValidationMatchers
2
+ module ActiveModel
3
+ def pass_validate_each(attribute, value)
4
+ PassEachValidationMatcher.new(attribute, value)
5
+ end
6
+
7
+ def fail_validate_each(attribute, value)
8
+ FailEachValidationMatcher.new(attribute, value)
9
+ end
10
+
11
+ private
12
+
13
+ class Matcher
14
+ def initialize(attribute, value)
15
+ @value = value
16
+ @attribute = attribute
17
+ @record = TestRecord.new(attribute)
18
+ end
19
+
20
+ def run_validate_each!(validator)
21
+ @validator = validator
22
+ @validator.validate_each(@record, @attribute, @value)
23
+ end
24
+
25
+ def unexpected_errors_ocurred_message
26
+ "expected no validation errors, got #{@record.errors[@attribute].inspect}"
27
+ end
28
+
29
+ def expected_errors_to_occur_failure_message
30
+ "expected validation errors"
31
+ end
32
+
33
+ def errors_found?
34
+ !@record.errors[@attribute].empty?
35
+ end
36
+ end
37
+
38
+ class PassEachValidationMatcher < Matcher
39
+ def matches?(validator)
40
+ run_validate_each! validator
41
+ !errors_found?
42
+ end
43
+ alias :failure_message :unexpected_errors_ocurred_message
44
+ alias :negative_failure_message :expected_errors_to_occur_failure_message
45
+ end
46
+
47
+ class FailEachValidationMatcher < Matcher
48
+ def matches?(validator)
49
+ run_validate_each! validator
50
+ errors_found?
51
+ end
52
+ alias :failure_message :expected_errors_to_occur_failure_message
53
+ alias :negative_failure_message :unexpected_errors_ocurred_message
54
+ end
55
+
56
+ class TestRecord
57
+ attr_accessor :errors
58
+ def initialize( attr )
59
+ @errors = {attr => []}
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,10 @@
1
+ home = File.expand_path(File.join(File.dirname(__FILE__), ".."))
2
+ lib = File.join(home, "lib")
3
+ spec = File.join(home, "spec")
4
+ $: << lib
5
+
6
+ Dir["#{spec}/support/**/*.rb"].each {|f| require f}
7
+
8
+ RSpec.configure do |config|
9
+ # Nothing here yet
10
+ end
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+ require 'active_model'
3
+ require 'validation_matchers/active_model'
4
+
5
+ class ExampleValidator < ActiveModel::EachValidator
6
+ def validate_each(record, attribute, value)
7
+ unless value == "valid value"
8
+ record.errors[attribute] << "not valid value"
9
+ end
10
+ end
11
+ end
12
+
13
+ describe ExampleValidator do
14
+ include ValidationMatchers::ActiveModel
15
+ subject { ExampleValidator.new({:attributes=>{}}) }
16
+
17
+ it "allows a valid value" do
18
+ subject.should pass_validate_each(:attr, "valid value")
19
+ end
20
+
21
+ it "does not allow an invalid value" do
22
+ subject.should_not pass_validate_each(:attr, "invalid value")
23
+ end
24
+
25
+ it "rejects an invalid value" do
26
+ subject.should fail_validate_each(:attr, "invalid value")
27
+ end
28
+
29
+ it "does not reject a valid value" do
30
+ subject.should_not fail_validate_each(:attr, "valid value")
31
+ end
32
+ end
metadata ADDED
@@ -0,0 +1,53 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: validation_matchers
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Adrian Mowat, Peter Aitken
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-12-19 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: ! "RSpec matchers for testing ActiveModel custom validations in isolation
15
+ \nfrom your application's models\n"
16
+ email:
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - .gitignore
22
+ - .rspec
23
+ - lib/validation_matchers/active_model.rb
24
+ - lib/validation_matchers/active_model/validate_each_matchers.rb
25
+ - spec/spec_helper.rb
26
+ - spec/validation_matchers/active_model/validate_each_matchers_spec.rb
27
+ homepage: https://github.com/edgecase/validation_matchers
28
+ licenses: []
29
+ post_install_message:
30
+ rdoc_options: []
31
+ require_paths:
32
+ - lib
33
+ required_ruby_version: !ruby/object:Gem::Requirement
34
+ none: false
35
+ requirements:
36
+ - - ! '>='
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ required_rubygems_version: !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ! '>='
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ requirements: []
46
+ rubyforge_project:
47
+ rubygems_version: 1.8.10
48
+ signing_key:
49
+ specification_version: 3
50
+ summary: RSpec matchers for testing ActiveModel custom validations
51
+ test_files:
52
+ - spec/spec_helper.rb
53
+ - spec/validation_matchers/active_model/validate_each_matchers_spec.rb