mongoid-minitest 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,6 +1,18 @@
1
- ## 0.1.1 - unreleased
1
+ ## 0.1.2 - August 13, 2012
2
2
 
3
- + Remove required ruby version from the gemspec. Fixes [#9](https://github.com/frodsan/mongoid-minitest/pull/9).
3
+ + Allow passing in a Regex to the validate_format_of matcher.
4
+ Pull Request [#12](https://github.com/frodsan/mongoid-minitest/pull/12) - *Godfrey Chan*.
5
+ + Allow non-array values for inclusion/exclusion matchers.
6
+ Pull Request [#11](https://github.com/frodsan/mongoid-minitest/pull/11) - *Godfrey Chan*.
7
+ + Added as_inverse_of for association matchers.
8
+ Pull Request [#10](https://frodsan/mongoid-minitest/pull/10) - *Godfrey Chan*.
9
+ + Use [minitest-matchers](https://github.com/zenspider/minitest-matchers) gem
10
+ instead of our matchers implementation - *Francesco Rodriguez*.
11
+ + Bump mongoid version to 3.0.4 - *Francesco Rodriguez*.
12
+
13
+ ## 0.1.1 - August 09, 2012
14
+
15
+ + Remove required ruby version from the gemspec. Fixes [#9](https://github.com/frodsan/mongoid-minitest/pull/9). *Francesco Rodriguez*
4
16
 
5
17
  ## 0.1.0 - August 09, 2012
6
18
 
data/README.md CHANGED
@@ -1,15 +1,19 @@
1
- # mongoid-minitest [![Build Status](https://secure.travis-ci.org/frodsan/mongoid-minitest.png?branch=master&.png)](http://travis-ci.org/frodsan/mongoid-minitest) [![Dependency Status](https://gemnasium.com/frodsan/mongoid-minitest.png)](https://gemnasium.com/frodsan/mongoid-minitest)
1
+ # mongoid-minitest
2
2
 
3
3
  MiniTest matchers for Mongoid.
4
4
 
5
+ [![Build Status](https://secure.travis-ci.org/frodsan/mongoid-minitest.png?branch=master&.png)](http://travis-ci.org/frodsan/mongoid-minitest)
6
+
5
7
  ## Support
6
8
 
7
9
  This gem supports:
8
10
 
9
11
  * Ruby 1.9.3
10
- * Mongoid ~>3.0.2
12
+ * Mongoid ~>3.0.4
11
13
  * MiniTest ~>3.3.0
12
14
 
15
+ If you're using Mongoid 2.4.x, you should use [0.0.3.1 version](https://github.com/frodsan/mongoid-minitest/tree/274976e8814cc9bfb3f1c83eba1bed21fa3cf26b).
16
+
13
17
  ## Installation
14
18
 
15
19
  Add this line to your application's Gemfile:
@@ -175,6 +179,11 @@ See the following examples:
175
179
 
176
180
  To run unit tests, run `bundle exec rake`.
177
181
 
182
+ ## Maintainers
183
+
184
+ * Francesco Rodriguez (<https://github.com/frodsan/>).
185
+ * Sascha Wessel (<https://github.com/gr4y>).
186
+
178
187
  ## License
179
188
 
180
189
  MIT License. Copyright 2012 Francesco Rodriguez. See [LICENSE](https://github.com/frodsan/lego/blob/master/LICENSE)
@@ -9,9 +9,7 @@ module Mongoid
9
9
  EMBEDS_MANY = Mongoid::Relations::Embedded::Many
10
10
  EMBEDDED_IN = Mongoid::Relations::Embedded::In
11
11
 
12
- class HaveAssociationMatcher
13
- include Helpers
14
-
12
+ class HaveAssociationMatcher < Matcher
15
13
  def initialize(name, type)
16
14
  @association = {}
17
15
  @association[:name] = name.to_s
@@ -25,6 +23,12 @@ module Mongoid
25
23
  self
26
24
  end
27
25
 
26
+ def as_inverse_of(inverse_of)
27
+ @association[:inverse_of] = inverse_of
28
+ @description << " as the inverse of #{@association[:inverse_of].inspect}"
29
+ self
30
+ end
31
+
28
32
  def matches?(subject)
29
33
  @klass = class_of(subject)
30
34
  @metadata = @klass.relations[@association[:name]]
@@ -33,6 +37,7 @@ module Mongoid
33
37
  check_association_name
34
38
  check_association_type
35
39
  check_association_class if @association[:class]
40
+ check_association_inverse_of if @association[:inverse_of]
36
41
 
37
42
  @result
38
43
  end
@@ -82,6 +87,15 @@ module Mongoid
82
87
  end
83
88
  end
84
89
 
90
+ def check_association_inverse_of
91
+ if @association[:inverse_of] != @metadata.inverse_of
92
+ @negative_message = "..."
93
+ @result = false
94
+ else
95
+ @positive_message << " as inverse of #{@metadata.inverse_of}" if @association[:inverse_of]
96
+ end
97
+ end
98
+
85
99
  def type_description(type = nil, passive = true)
86
100
  type ||= @association[:type]
87
101
  case type.name
@@ -1,8 +1,6 @@
1
1
  module Mongoid
2
2
  module Matchers
3
- class BeStoredInMatcher
4
- include Helpers
5
-
3
+ class BeStoredInMatcher < Matcher
6
4
  def initialize(collection_name)
7
5
  @collection_name = collection_name.to_s
8
6
  end
@@ -6,15 +6,13 @@ module Mongoid
6
6
  VERSIONING = Mongoid::Versioning
7
7
  TIMESTAMPS = Mongoid::Timestamps
8
8
 
9
- class DocumentModuleMatcher
10
- include Helpers
11
-
12
- def initialize(mod)
9
+ class DocumentMatcher < Matcher
10
+ def initialize mod
13
11
  @mod = mod
14
12
  end
15
13
 
16
- def matches?(subject)
17
- class_of(subject).included_modules.include?(@mod)
14
+ def matches? subject
15
+ class_of(subject).included_modules.include? @mod
18
16
  end
19
17
 
20
18
  def description
@@ -31,19 +29,19 @@ module Mongoid
31
29
  end
32
30
 
33
31
  def be_document
34
- DocumentModuleMatcher.new(DOCUMENT)
32
+ DocumentMatcher.new DOCUMENT
35
33
  end
36
34
 
37
35
  def be_paranoid
38
- DocumentModuleMatcher.new(PARANOIA)
36
+ DocumentMatcher.new PARANOIA
39
37
  end
40
38
 
41
39
  def be_versioned
42
- DocumentModuleMatcher.new(VERSIONING)
40
+ DocumentMatcher.new VERSIONING
43
41
  end
44
42
 
45
43
  def be_timestamped
46
- DocumentModuleMatcher.new(TIMESTAMPS)
44
+ DocumentMatcher.new TIMESTAMPS
47
45
  end
48
46
  end
49
47
  end
@@ -1,9 +1,7 @@
1
1
  module Mongoid
2
2
  module Matchers
3
3
  module Document
4
- class HaveFieldMatcher
5
- include Helpers
6
-
4
+ class HaveFieldMatcher < Matcher
7
5
  def initialize(*fields)
8
6
  @fields = fields.collect(&:to_s)
9
7
  end
@@ -26,7 +24,7 @@ module Mongoid
26
24
  if @klass.fields.include?(field)
27
25
  error = ""
28
26
  result_field = @klass.fields[field]
29
-
27
+
30
28
  if check_type_with(result_field.type)
31
29
  error << " of type #{result_field.type.inspect}"
32
30
  end
@@ -62,11 +60,11 @@ module Mongoid
62
60
  end
63
61
 
64
62
  private
65
-
63
+
66
64
  def check_type_with(type)
67
65
  @type && type != @type
68
66
  end
69
-
67
+
70
68
  def check_default_with(default)
71
69
  !@default.nil? && !default.nil? && default != @default
72
70
  end
@@ -1,8 +1,6 @@
1
1
  module Mongoid
2
2
  module Matchers
3
- class HaveIndexMatcher
4
- include Helpers
5
-
3
+ class HaveIndexMatcher < Matcher
6
4
  def initialize(field)
7
5
  @field = field.to_s
8
6
  end
@@ -1,11 +1,11 @@
1
1
  module Mongoid
2
2
  module Matchers
3
3
  module Helpers
4
- def to_sentence(ary)
4
+ def to_sentence ary
5
5
  ary.collect(&:inspect).to_sentence
6
6
  end
7
7
 
8
- def class_of(subject)
8
+ def class_of subject
9
9
  subject.is_a?(Class) ? subject : subject.class
10
10
  end
11
11
  end
@@ -0,0 +1,17 @@
1
+ require_relative 'helpers'
2
+
3
+ module Mongoid
4
+ module Matchers
5
+ class Matcher
6
+ include Helpers
7
+
8
+ def failure_message
9
+ "Expected #{inspect} to #{description}".squeeze ' '
10
+ end
11
+
12
+ def negative_failure_message
13
+ "Expected not to #{description}".squeeze ' '
14
+ end
15
+ end
16
+ end
17
+ end
@@ -7,14 +7,14 @@ module Mongoid
7
7
  end
8
8
 
9
9
  def to_not_allow(*values)
10
- @not_allowed_values = values.flatten
10
+ @not_allowed_values = (values.length > 1) ? values.flatten : values[0]
11
11
  self
12
12
  end
13
13
 
14
14
  def matches?(subject)
15
15
  return false unless result = super(subject)
16
16
 
17
- if @not_allowed_values
17
+ if Array === @not_allowed_values
18
18
  allowed_values = @not_allowed_values - @validator.options[:in].to_a
19
19
  if allowed_values.empty?
20
20
  @positive_message << ' not allowing all values mentioned'
@@ -23,14 +23,23 @@ module Mongoid
23
23
  @negative_message << " #{to_sentence(allowed_values)}"
24
24
  result = false
25
25
  end
26
+ elsif @not_allowed_values
27
+ if @not_allowed_values == @validator.options[:in]
28
+ @positive_message << " not allowing values in #{@not_allowed_values.inspect}"
29
+ else
30
+ @negative_message << " not allowing values in #{@validator.options[:in].inspect}"
31
+ result = false
32
+ end
26
33
  end
27
34
 
28
35
  result
29
36
  end
30
37
 
31
38
  def description
32
- if @not_allowed_values
39
+ if Array === @not_allowed_values
33
40
  super << " not allowing the values: #{to_sentence(@not_allowed_values)}"
41
+ elsif @not_allowed_values
42
+ super << " not allowing the values in #{@not_allowed_values.inspect}"
34
43
  end
35
44
  end
36
45
  end
@@ -2,21 +2,21 @@ module Mongoid
2
2
  module Matchers
3
3
  module Validations
4
4
  class ValidateFormatMatcher < HaveValidationMatcher
5
- def initialize(field)
6
- super(field, :format)
5
+ def initialize field
6
+ super field, :format
7
7
  end
8
8
 
9
- def to_allow(valid_value)
9
+ def to_allow valid_value
10
10
  @valid = valid_value
11
11
  self
12
12
  end
13
13
 
14
- def to_not_allow(invalid_value)
14
+ def to_not_allow invalid_value
15
15
  @invalid = invalid_value
16
16
  self
17
17
  end
18
18
 
19
- def matches?(subject)
19
+ def matches? subject
20
20
  return false unless @result = super(subject)
21
21
 
22
22
  check_valid_value if @valid
@@ -35,7 +35,7 @@ module Mongoid
35
35
  private
36
36
 
37
37
  def check_valid_value
38
- if format =~ @valid
38
+ if format == @valid || format =~ @valid
39
39
  @positive_message << " with #{@valid.inspect} as a valid value"
40
40
  else
41
41
  @negative_message << " with #{@valid.inspect} as an invalid value"
@@ -44,7 +44,7 @@ module Mongoid
44
44
  end
45
45
 
46
46
  def check_invalid_value
47
- if !(format =~ @invalid)
47
+ if format !~ @invalid
48
48
  @positive_message << " with #{@invalid.inspect} as a invalid value"
49
49
  else
50
50
  @negative_message << " with #{@invalid.inspect} as a valid value"
@@ -57,8 +57,8 @@ module Mongoid
57
57
  end
58
58
  end
59
59
 
60
- def validate_format_of(field)
61
- ValidateFormatMatcher.new(field)
60
+ def validate_format_of field
61
+ ValidateFormatMatcher.new field
62
62
  end
63
63
  end
64
64
  end
@@ -7,30 +7,39 @@ module Mongoid
7
7
  end
8
8
 
9
9
  def to_allow(*values)
10
- @allowed_values = values.flatten
10
+ @allowed_values = (values.length > 1) ? values.flatten : values[0]
11
11
  self
12
12
  end
13
13
 
14
14
  def matches?(subject)
15
15
  return false unless result = super(subject)
16
16
 
17
- if @allowed_values
17
+ if Array === @allowed_values
18
18
  not_allowed_values = @allowed_values - @validator.options[:in].to_a
19
19
  if not_allowed_values.empty?
20
20
  @positive_message << ' allowing all values mentioned'
21
21
  else
22
- @negative_message << ' not allowing the following the values:'
22
+ @negative_message << ' not allowing the following the values:'
23
23
  @negative_message << " #{not_allowed_values.inspect}"
24
24
  result = false
25
25
  end
26
+ elsif @allowed_values
27
+ if @allowed_values == @validator.options[:in]
28
+ @positive_message << " allowing values in #{@allowed_values.inspect}"
29
+ else
30
+ @negative_message << " allowing values in #{@validator.options[:in].inspect}"
31
+ result = false
32
+ end
26
33
  end
27
34
 
28
35
  result
29
36
  end
30
37
 
31
38
  def description
32
- if @allowed_values
39
+ if Array === @allowed_values
33
40
  super << " allowing the values: #{to_sentence(@allowed_values)}"
41
+ elsif @allowed_values
42
+ super << " allowing the values in #{@allowed_values.inspect}"
34
43
  end
35
44
  end
36
45
  end
@@ -1,9 +1,7 @@
1
1
  module Mongoid
2
2
  module Matchers
3
3
  module Validations
4
- class HaveValidationMatcher
5
- include Mongoid::Matchers::Helpers
6
-
4
+ class HaveValidationMatcher < Matcher
7
5
  def initialize(field, validation_type)
8
6
  @field = field.to_s
9
7
  @type = validation_type.to_s
@@ -1,9 +1,9 @@
1
1
  gem 'minitest'
2
2
  require 'mongoid'
3
3
  require 'minitest/spec'
4
-
5
4
  require 'minitest/matchers'
6
- require 'matchers/helpers'
5
+
6
+ require 'matchers/matcher'
7
7
  require 'matchers/document/document'
8
8
  require 'matchers/document/have_field'
9
9
  require 'matchers/document/be_stored_in'
@@ -1,5 +1,5 @@
1
1
  module Mongoid
2
2
  module MiniTest
3
- VERSION = '0.1.1'
3
+ VERSION = '0.1.2'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,15 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid-minitest
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Francesco Rodriguez
9
+ - Sascha Wessel
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2012-08-09 00:00:00.000000000 Z
13
+ date: 2012-08-13 00:00:00.000000000 Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: minitest
@@ -27,6 +28,22 @@ dependencies:
27
28
  - - ~>
28
29
  - !ruby/object:Gem::Version
29
30
  version: 3.3.0
31
+ - !ruby/object:Gem::Dependency
32
+ name: minitest-matchers
33
+ requirement: !ruby/object:Gem::Requirement
34
+ none: false
35
+ requirements:
36
+ - - ~>
37
+ - !ruby/object:Gem::Version
38
+ version: 1.2.0
39
+ type: :runtime
40
+ prerelease: false
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ~>
45
+ - !ruby/object:Gem::Version
46
+ version: 1.2.0
30
47
  - !ruby/object:Gem::Dependency
31
48
  name: mongoid
32
49
  requirement: !ruby/object:Gem::Requirement
@@ -34,7 +51,7 @@ dependencies:
34
51
  requirements:
35
52
  - - ~>
36
53
  - !ruby/object:Gem::Version
37
- version: 3.0.2
54
+ version: 3.0.4
38
55
  type: :runtime
39
56
  prerelease: false
40
57
  version_requirements: !ruby/object:Gem::Requirement
@@ -42,7 +59,7 @@ dependencies:
42
59
  requirements:
43
60
  - - ~>
44
61
  - !ruby/object:Gem::Version
45
- version: 3.0.2
62
+ version: 3.0.4
46
63
  - !ruby/object:Gem::Dependency
47
64
  name: rake
48
65
  requirement: !ruby/object:Gem::Requirement
@@ -72,6 +89,7 @@ files:
72
89
  - lib/matchers/document/have_field.rb
73
90
  - lib/matchers/document/have_index.rb
74
91
  - lib/matchers/helpers.rb
92
+ - lib/matchers/matcher.rb
75
93
  - lib/matchers/validations/acceptance.rb
76
94
  - lib/matchers/validations/associated.rb
77
95
  - lib/matchers/validations/confirmation.rb
@@ -82,7 +100,6 @@ files:
82
100
  - lib/matchers/validations/presence.rb
83
101
  - lib/matchers/validations/uniqueness.rb
84
102
  - lib/matchers/validations/validations.rb
85
- - lib/minitest/matchers.rb
86
103
  - lib/mongoid-minitest/version.rb
87
104
  - lib/mongoid-minitest.rb
88
105
  - LICENSE
@@ -1,42 +0,0 @@
1
- module MiniTest
2
- module Assertions
3
- def assert_must(subject, matcher, msg = nil)
4
- msg = message(msg) do
5
- if matcher.respond_to? :failure_message
6
- "Expected #{matcher.failure_message}".squeeze(" ")
7
- else
8
- "Expected #{subject.inspect} to #{matcher.description}".squeeze(" ")
9
- end
10
- end
11
-
12
- assert matcher.matches?(subject), msg
13
- end
14
-
15
- def assert_wont(subject, matcher, msg = nil)
16
- msg = message(msg) do
17
- if matcher.respond_to? :negative_failure_message
18
- "Expected #{matcher.negative_failure_message}".squeeze(" ")
19
- else
20
- "Expected not to #{matcher.description}".squeeze(" ")
21
- end
22
- end
23
-
24
- refute matcher.matches?(subject), msg
25
- end
26
- end
27
-
28
- module Expectations
29
- infect_an_assertion :assert_must, :must, :reverse
30
- infect_an_assertion :assert_wont, :wont, :reverse
31
- end
32
- end
33
-
34
- class MiniTest::Spec
35
- def must(*args, &block)
36
- subject.must(*args, &block)
37
- end
38
-
39
- def wont(*args, &block)
40
- subject.wont(*args, &block)
41
- end
42
- end