mongoid-rspec 1.5.5 → 1.5.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -5,6 +5,11 @@ module Mongoid
5
5
  @attributes = attrs.collect(&:to_s)
6
6
  end
7
7
 
8
+ def localized
9
+ @localized = true
10
+ self
11
+ end
12
+
8
13
  def of_type(type)
9
14
  @type = type
10
15
  self
@@ -43,6 +48,13 @@ module Mongoid
43
48
  end
44
49
 
45
50
  @errors.push("field #{attr.inspect}" << error) unless error.blank?
51
+
52
+ if @localized
53
+ unless @klass.fields[attr].localized?
54
+ @errors.push "is not localized #{attr.inspect}"
55
+ end
56
+ end
57
+
46
58
  else
47
59
  @errors.push "no field named #{attr.inspect}"
48
60
  end
@@ -4,31 +4,31 @@ module Mongoid
4
4
  def initialize(index_fields)
5
5
  @index_fields = index_fields.symbolize_keys!
6
6
  end
7
-
8
- def with_options(options = {})
7
+
8
+ def with_options(options = { })
9
9
  @options = options
10
10
  self
11
11
  end
12
-
12
+
13
13
  def matches?(klass)
14
- @klass = klass.is_a?(Class) ? klass : klass.class
14
+ @klass = klass.is_a?(Class) ? klass : klass.class
15
15
  @errors = []
16
-
16
+
17
17
  unless @klass.index_options[@index_fields]
18
18
  @errors.push "no index for #{@index_fields}"
19
19
  else
20
20
  if !@options.nil? && !@options.empty?
21
21
  @options.each do |option, option_value|
22
- if @klass.index_options[@index_fields].include?(option) && @klass.index_options[@index_fields][option] != option_value
22
+ if @klass.index_options[@index_fields][option] != option_value
23
23
  @errors.push "index for #{@index_fields.inspect} with options of #{@klass.index_options[@index_fields].inspect}"
24
24
  end
25
25
  end
26
26
  end
27
27
  end
28
-
28
+
29
29
  @errors.empty?
30
30
  end
31
-
31
+
32
32
  def failure_message_for_should
33
33
  "Expected #{@klass.inspect} to #{description}, got #{@errors.to_sentence}"
34
34
  end
@@ -36,7 +36,7 @@ module Mongoid
36
36
  end
37
37
 
38
38
  def description
39
- desc = "validate #{@type} of #{@field.inspect}"
39
+ desc = "have #{@type.inspect} validator on #{@field.inspect}"
40
40
  desc << " on #{@options[:on]}" if @options[:on]
41
41
  desc
42
42
  end
@@ -1,23 +1,23 @@
1
1
  module Mongoid
2
2
  module Matchers
3
- module Validations
3
+ module Validations
4
4
  class ValidateInclusionOfMatcher < HaveValidationMatcher
5
5
  def initialize(name)
6
6
  super(name, :inclusion)
7
7
  end
8
-
8
+
9
9
  def to_allow(*values)
10
10
  @allowed_values = values.map(&:to_a).flatten
11
11
  self
12
12
  end
13
-
13
+
14
14
  def matches?(actual)
15
15
  return false unless result = super(actual)
16
16
 
17
17
  if @allowed_values
18
18
  raw_validator_allowed_values = @validator.options[:in]
19
19
 
20
- validator_allowed_values = case raw_validator_allowed_values
20
+ validator_allowed_values = case raw_validator_allowed_values
21
21
  when Range then raw_validator_allowed_values.to_a
22
22
  when Proc then raw_validator_allowed_values.call(actual)
23
23
  else raw_validator_allowed_values end
@@ -26,24 +26,24 @@ module Mongoid
26
26
  if not_allowed_values.empty?
27
27
  @positive_result_message = @positive_result_message << " allowing all values mentioned"
28
28
  else
29
- @negative_result_message = @negative_result_message << " not allowing the following the ff. values: #{not_allowed_values.inspect}"
29
+ @negative_result_message = @negative_result_message << " not allowing these values: #{not_allowed_values.inspect}"
30
30
  result = false
31
31
  end
32
32
  end
33
-
34
- result
33
+
34
+ result
35
35
  end
36
-
36
+
37
37
  def description
38
38
  options_desc = []
39
- options_desc << " allowing the ff. values: #{@allowed_values}" if @allowed_values
39
+ options_desc << " allowing these values: #{@allowed_values}" if @allowed_values
40
40
  super << options_desc.to_sentence
41
- end
41
+ end
42
42
  end
43
43
 
44
44
  def validate_inclusion_of(field)
45
45
  ValidateInclusionOfMatcher.new(field)
46
- end
46
+ end
47
47
  end
48
48
  end
49
- end
49
+ end
@@ -10,11 +10,13 @@ module Mongoid
10
10
  @maximum = value
11
11
  self
12
12
  end
13
+ alias :less_than :with_maximum
13
14
 
14
15
  def with_minimum(value)
15
16
  @minimum = value
16
17
  self
17
18
  end
19
+ alias :greater_than :with_minimum
18
20
 
19
21
  def within(value)
20
22
  @within = value
@@ -41,55 +43,82 @@ module Mongoid
41
43
 
42
44
  def description
43
45
  options_desc = []
44
- options_desc << " with maximum #{@maximum}" if @maximum
45
- options_desc << " with minimum #{@minimum}" if @minimum
46
- options_desc << " within range #{@within}" if @within
47
- options_desc << " as exactly #{@is}" if @is
48
- super << options_desc.to_sentence
46
+ options_desc << "with minimum of #{@minimum}" if @minimum
47
+ options_desc << "with maximum of #{@maximum}" if @maximum
48
+ options_desc << "within the range of #{@within}" if @within
49
+ options_desc << "as exactly #{@is}" if @is
50
+ super << " #{options_desc.to_sentence}"
49
51
  end
50
52
 
51
53
  private
52
54
 
53
55
  def check_maximum
54
- actual = @validator.options[:maximum]
55
- if actual == @maximum
56
+ if actual_max.nil?
57
+ @negative_result_message << " with no maximum"
58
+ @result = false
59
+ elsif actual_max == @maximum
56
60
  @positive_result_message << " with maximum of #{@maximum}"
57
61
  else
58
- @negative_result_message << " with maximum of #{actual}"
62
+ @negative_result_message << " with maximum of #{actual_max}"
59
63
  @result = false
60
64
  end
61
65
  end
62
66
 
63
67
  def check_minimum
64
- actual = @validator.options[:minimum]
65
- if actual == @minimum
68
+ if actual_min.nil?
69
+ @negative_result_message << " with no minimum"
70
+ @result = false
71
+ elsif actual_min == @minimum
66
72
  @positive_result_message << " with minimum of #{@minimum}"
67
73
  else
68
- @negative_result_message << " with minimum of #{actual}"
74
+ @negative_result_message << " with minimum of #{actual_min}"
69
75
  @result = false
70
76
  end
71
77
  end
72
78
 
73
79
  def check_range
74
80
  min, max = [@within.min, @within.max]
75
- actual = @validator.options
76
- if actual[:minimum] == min && actual[:maximum] == max
77
- @positive_result_message << " with range #{@within.inspect}"
81
+ if !actual_min.nil? and actual_max.nil?
82
+ @negative_result_message << " with no minimum but with maximum of #{actual_max}"
83
+ @result = false
84
+ elsif actual_min.nil? and !actual_max.nil?
85
+ @negative_result_message << " with minimum_of #{actual_min} but no maximum"
86
+ @result = false
87
+ elsif actual_min.nil? and actual_max.nil?
88
+ @negative_result_message << " with no minimum and maximum"
89
+ @result = false
90
+ elsif actual_min == min && actual_max == max
91
+ @positive_result_message << " within the range of #{@within.inspect}"
78
92
  else
79
- @negative_result_message << " with range #{(actual[:minimum]..actual[:maximum]).inspect}"
93
+ @negative_result_message << " within the range of #{(actual_min..actual_max).inspect}"
80
94
  @result = false
81
95
  end
82
96
  end
83
97
 
84
98
  def check_exact
85
- actual = @validator.options[:is]
86
- if actual == @is
87
- @positive_result_message << " is exactly #{@is}"
99
+ if actual_is == @is
100
+ @positive_result_message << " as exactly #{@is}"
88
101
  else
89
- @negative_result_message << " is exactly #{actual}"
102
+ @negative_result_message << " as exactly #{actual_is}"
90
103
  @result = false
91
104
  end
92
105
  end
106
+
107
+ def actual_is
108
+ actual_is = @validator.options[:is]
109
+ end
110
+
111
+ def actual_min
112
+ @validator.options[:minimum] || ((@validator.options[:in] || @validator.options[:within]).try(&:min)).tap do |x|
113
+ puts "minimum: #{x}, #{@validator.options}"
114
+ end
115
+ end
116
+
117
+ def actual_max
118
+ @validator.options[:maximum] || ((@validator.options[:in] || @validator.options[:within]).try(&:max)).tap do |x|
119
+ puts "maximum: #{x}"
120
+ end
121
+ end
93
122
  end
94
123
 
95
124
  def validate_length_of(field)
@@ -1,5 +1,5 @@
1
1
  module Mongoid
2
2
  module Rspec
3
- VERSION = "1.5.5"
3
+ VERSION = "1.5.6"
4
4
  end
5
5
  end
@@ -5,7 +5,7 @@ class Article
5
5
  include Mongoid::Versioning
6
6
  include Mongoid::MultiParameterAttributes
7
7
 
8
- field :title
8
+ field :title, :localize => true
9
9
  field :content
10
10
  field :published, :type => Boolean, :default => false
11
11
  field :allow_comments, :type => Boolean, :default => true
@@ -17,7 +17,8 @@ class Article
17
17
 
18
18
  validates :title, :presence => true
19
19
 
20
- validates_length_of :title, :minimum => 8, :maximum => 16
20
+ validates_length_of :title, :within => 8..16
21
+ validates_length_of :content, :minimum => 200
21
22
 
22
23
  index({ title: 1 }, { unique: true, background: true })
23
24
  index({ published: 1 })
@@ -11,6 +11,8 @@ describe "Document" do
11
11
  describe Article do
12
12
  it { should have_field(:published).of_type(Boolean).with_default_value_of(false) }
13
13
  it { should have_field(:allow_comments).of_type(Boolean).with_default_value_of(true) }
14
+ it { should belong_to(:author) }
15
+ it { should have_field(:title).localized }
14
16
  it { should_not have_field(:allow_comments).of_type(Boolean).with_default_value_of(false) }
15
17
  it { should_not have_field(:number_of_comments).of_type(Integer).with_default_value_of(1) }
16
18
  it { should be_mongoid_document }
@@ -30,6 +30,8 @@ describe "Validations" do
30
30
 
31
31
  describe Article do
32
32
  it { should validate_length_of(:title).within(8..16) }
33
+ it { should_not validate_length_of(:content).greater_than(200).less_than(16) }
34
+ it { should validate_length_of(:content).greater_than(200) }
33
35
  end
34
36
 
35
37
  describe MovieArticle do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid-rspec
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.5
4
+ version: 1.5.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-11-28 00:00:00.000000000 Z
12
+ date: 2013-01-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -133,7 +133,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
133
133
  version: '0'
134
134
  requirements: []
135
135
  rubyforge_project: mongoid-rspec
136
- rubygems_version: 1.8.24
136
+ rubygems_version: 1.8.23
137
137
  signing_key:
138
138
  specification_version: 3
139
139
  summary: RSpec matchers for Mongoid
@@ -156,3 +156,4 @@ test_files:
156
156
  - spec/unit/indexes_spec.rb
157
157
  - spec/unit/validations_spec.rb
158
158
  - spec/validators/ssn_validator.rb
159
+ has_rdoc: