mongoid-rspec 1.8.1 → 1.8.2

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.
data/README.md CHANGED
@@ -62,6 +62,10 @@ Association Matchers
62
62
  it { should belong_to(:user).as_inverse_of(:record) }
63
63
  end
64
64
 
65
+ describe Site do
66
+ it { should have_many(:users).as_inverse_of(:site).ordered_by(:email.asc) }
67
+ end
68
+
65
69
  Mass Assignment Matcher
66
70
  -
67
71
  describe User do
@@ -43,6 +43,12 @@ module Mongoid
43
43
  raise "#{@association[:type].inspect} does not respond to :order" unless [HAS_MANY, HAS_AND_BELONGS_TO_MANY, EMBEDS_MANY].include?(@association[:type])
44
44
  @association[:order] = association_field_name.to_s
45
45
  @expectation_message << " ordered by #{@association[:order].inspect}"
46
+
47
+ if association_field_name.is_a? Origin::Key
48
+ @association[:order_operator] = association_field_name.operator
49
+ @expectation_message << " #{order_way(@association[:order_operator])}"
50
+ end
51
+
46
52
  self
47
53
  end
48
54
 
@@ -124,6 +130,15 @@ module Mongoid
124
130
  end
125
131
  end
126
132
 
133
+ if @association[:order_operator]
134
+ if @association[:order_operator] != metadata.order.operator
135
+ @negative_result_message = "#{@positive_result_message} #{order_way(@association[:order_operator] * -1)}"
136
+ return false
137
+ else
138
+ @positive_result_message = "#{@positive_result_message} #{order_way(@association[:order_operator])}"
139
+ end
140
+ end
141
+
127
142
  if @association[:dependent]
128
143
  if @association[:dependent].to_s != metadata.dependent.to_s
129
144
  @negative_result_message = "#{@positive_result_message} which specified dependent as #{metadata.dependent}"
@@ -205,6 +220,12 @@ module Mongoid
205
220
  raise "Unknown association type '%s'" % type
206
221
  end
207
222
  end
223
+
224
+ private
225
+
226
+ def order_way(operator)
227
+ [nil, "ascending", "descending"][operator]
228
+ end
208
229
  end
209
230
 
210
231
  def embed_one(association_name)
@@ -13,7 +13,9 @@ module Mongoid
13
13
  def matches?(actual)
14
14
  @klass = actual.is_a?(Class) ? actual : actual.class
15
15
 
16
- @validator = @klass.validators_on(@field).detect{|v| v.kind.to_s == @type}
16
+ @validator = @klass.validators_on(@field).detect{ |v|
17
+ v.kind.to_s == @type and (!v.options[:on] or on_options_matches?(v))
18
+ }
17
19
 
18
20
  if @validator
19
21
  @negative_result_message = "#{@type.inspect} validator on #{@field.inspect}"
@@ -52,7 +54,7 @@ module Mongoid
52
54
  if validator_on_methods.any?
53
55
  message = " on methods: #{validator_on_methods}"
54
56
 
55
- if (@options[:on] - validator_on_methods).empty?
57
+ if on_options_covered_by?( @validator )
56
58
  @positive_result_message << message
57
59
  else
58
60
  @negative_result_message << message
@@ -60,6 +62,16 @@ module Mongoid
60
62
  end
61
63
  end
62
64
  end
65
+
66
+ private
67
+
68
+ def on_options_matches?(validator)
69
+ @options[:on] and validator.options[:on] and on_options_covered_by?(validator)
70
+ end
71
+
72
+ def on_options_covered_by?(validator)
73
+ ([@options[:on]].flatten - [validator.options[:on]].flatten).empty?
74
+ end
63
75
  end
64
76
  end
65
77
  end
@@ -1,5 +1,5 @@
1
1
  module Mongoid
2
2
  module Rspec
3
- VERSION = "1.8.1"
3
+ VERSION = "1.8.2"
4
4
  end
5
5
  end
@@ -10,6 +10,7 @@ class Article
10
10
  field :published, :type => Boolean, :default => false
11
11
  field :allow_comments, :type => Boolean, :default => true
12
12
  field :number_of_comments, :type => Integer
13
+ field :status, :type => Symbol
13
14
 
14
15
  embeds_many :comments
15
16
  embeds_one :permalink
@@ -17,6 +18,9 @@ class Article
17
18
 
18
19
  validates :title, :presence => true
19
20
 
21
+ validates_inclusion_of :status, :in => [:pending], :on => :create
22
+ validates_inclusion_of :status, :in => [:approved, :rejected ], :on => :update
23
+
20
24
  validates_length_of :title, :within => 8..16
21
25
  validates_length_of :content, :minimum => 200
22
26
 
@@ -3,8 +3,8 @@ class Site
3
3
 
4
4
  field :name
5
5
 
6
- has_many :users, :inverse_of => :site
6
+ has_many :users, :inverse_of => :site, :order => :email.desc
7
7
 
8
8
  validates :name, :presence => true, :uniqueness => true
9
9
 
10
- end
10
+ end
@@ -37,6 +37,6 @@ describe "Associations" do
37
37
  end
38
38
 
39
39
  describe Site do
40
- it { should have_many(:users).as_inverse_of(:site) }
40
+ it { should have_many(:users).as_inverse_of(:site).ordered_by(:email.desc) }
41
41
  end
42
42
  end
@@ -33,6 +33,8 @@ describe "Validations" do
33
33
  it { should validate_length_of(:title).within(8..16) }
34
34
  it { should_not validate_length_of(:content).greater_than(200).less_than(16) }
35
35
  it { should validate_length_of(:content).greater_than(200) }
36
+ it { should validate_inclusion_of(:status).to_allow([:pending]).on( :create ) }
37
+ it { should validate_inclusion_of(:status).to_allow([:approved, :rejected]).on( :update ) }
36
38
  end
37
39
 
38
40
  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.8.1
4
+ version: 1.8.2
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: 2013-05-03 00:00:00.000000000 Z
12
+ date: 2013-05-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -130,7 +130,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
130
130
  version: '0'
131
131
  segments:
132
132
  - 0
133
- hash: 3977837244165332206
133
+ hash: 1210204238905216362
134
134
  required_rubygems_version: !ruby/object:Gem::Requirement
135
135
  none: false
136
136
  requirements:
@@ -139,7 +139,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
139
139
  version: '0'
140
140
  segments:
141
141
  - 0
142
- hash: 3977837244165332206
142
+ hash: 1210204238905216362
143
143
  requirements: []
144
144
  rubyforge_project: mongoid-rspec
145
145
  rubygems_version: 1.8.25