mongoid-rspec 1.5.0 → 1.5.1

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
@@ -1,25 +1,29 @@
1
1
  mongoid-rspec
2
2
  =
3
3
 
4
- RSpec matchers for Mongoid.
4
+ http://rubygems.org/gems/mongoid-rspec
5
+
6
+ RSpec matchers for Mongoid 3.x.
7
+
8
+ For Mongoid 2.x, use [mongoid-rspec 1.4.5](http://rubygems.org/gems/mongoid-rspec/versions/1.4.5)
5
9
 
6
10
  Association Matchers
7
11
  -
8
12
  describe User do
9
13
  it { should have_many(:articles).with_foreign_key(:author_id) }
10
-
11
- it { should have_one(:record) }
12
-
14
+
15
+ it { should have_one(:record) }
16
+
13
17
  it { should have_many :comments }
14
-
18
+
15
19
  #can also specify with_dependent to test if :dependent => :destroy/:destroy_all/:delete is set
16
20
  it { should have_many(:comments).with_dependent(:destroy) }
17
21
  #can verify autosave is set to true
18
22
  it { should have_many(:comments).with_autosave }
19
-
23
+
20
24
  it { should embed_one :profile }
21
25
 
22
- it { should have_and_belong_to_many(:children) }
26
+ it { should have_and_belong_to_many(:children) }
23
27
  it { should have_and_belong_to_many(:children).of_type(User) }
24
28
  end
25
29
 
@@ -68,14 +72,14 @@ Validation Matchers
68
72
  describe Article do
69
73
  it { should validate_length_of(:title).within(8..16) }
70
74
  end
71
-
75
+
72
76
  describe Profile do
73
77
  it { should validate_numericality_of(:age).greater_than(0) }
74
- end
78
+ end
75
79
 
76
80
  describe MovieArticle do
77
81
  it { should validate_numericality_of(:rating).to_allow(:greater_than => 0).less_than_or_equal_to(5) }
78
- it { should validate_numericality_of(:classification).to_allow(:even => true, :only_integer => true, :nil => false) }
82
+ it { should validate_numericality_of(:classification).to_allow(:even => true, :only_integer => true, :nil => false) }
79
83
  end
80
84
 
81
85
  describe Person do
@@ -93,33 +97,34 @@ Others
93
97
  it { should have_index_for(:last_name) }
94
98
  it { should have_index_for(:email).with_options(:unique => true) }
95
99
 
96
- # useful if you use factory_girl and have Factory(:user) defined for User
97
- it { should save }
98
-
99
- it { should be_timestamped_document } # if you're declaring `include Mongoid::Timestamps`
100
+ it { should be_timestamped_document } # if you're declaring `include
101
+ Mongoid::Timestamps` or any of `include Mongoid::Timestamps::Created` and `Mongoid::Timestamps::Updated`
102
+ it { should be_timestamped_document.with(:created) }
103
+ it { should_not be_timestamped_document.with(:updated) }
104
+
100
105
  it { should be_versioned_document } # if you're declaring `include Mongoid::Versioning`
101
106
  it { should be_paranoid_document } # if you're declaring `include Mongoid::Paranoia`
102
107
  it { should be_multiparameted_document } # if you're declaring `include Mongoid::MultiParameterAttributes`
103
108
  end
104
-
109
+
105
110
  describe Log do
106
111
  it { should be_stored_in :logs }
107
- end
112
+ end
108
113
 
109
114
  Use
110
115
  -
111
116
  add in Gemfile
112
117
 
113
118
  gem 'mongoid-rspec'
114
-
119
+
115
120
  drop in existing or dedicated support file in spec/support (spec/support/mongoid.rb)
116
121
 
117
122
  RSpec.configure do |configuration|
118
123
  configuration.include Mongoid::Matchers
119
124
  end
120
-
125
+
121
126
  Acknowledgement
122
127
  -
123
- Thanks to [Durran Jordan](https://github.com/durran) for providing the changes necessary to make
124
- this compatible with mongoid 2.0.0.rc, and for other [contributors](https://github.com/evansagge/mongoid-rspec/contributors)
128
+ Thanks to [Durran Jordan](https://github.com/durran) for providing the changes necessary to make
129
+ this compatible with mongoid 2.0.0.rc, and for other [contributors](https://github.com/evansagge/mongoid-rspec/contributors)
125
130
  to this project.
@@ -92,11 +92,24 @@ end
92
92
 
93
93
  RSpec::Matchers.define :be_timestamped_document do
94
94
  match do |doc|
95
- doc.class.included_modules.include?(Mongoid::Timestamps)
95
+ if [*@timestamped_module].any?
96
+ modules = [*@timestamped_module].map{|m| "Mongoid::Timestamps::#{m.to_s.classify}".constantize }
97
+ (modules - doc.class.included_modules).empty?
98
+ else
99
+ doc.class.included_modules.include?(Mongoid::Timestamps) or
100
+ doc.class.included_modules.include?(Mongoid::Timestamps::Created) or
101
+ doc.class.included_modules.include?(Mongoid::Timestamps::Updated)
102
+ end
103
+ end
104
+
105
+ chain :with do |timestamped_module|
106
+ @timestamped_module = timestamped_module
96
107
  end
97
108
 
98
109
  description do
99
- "be a timestamped Mongoid document"
110
+ desc = "be a timestamped Mongoid document"
111
+ desc << " with #{@timestamped_module}" if @timestamped_module
112
+ desc
100
113
  end
101
114
  end
102
115
 
@@ -1,20 +1,20 @@
1
1
  module Mongoid
2
2
  module Matchers
3
- module Validations
4
-
3
+ module Validations
4
+
5
5
  class HaveValidationMatcher
6
-
6
+
7
7
  def initialize(field, validation_type)
8
8
  @field = field.to_s
9
9
  @type = validation_type.to_s
10
10
  @options = {}
11
11
  end
12
-
12
+
13
13
  def matches?(actual)
14
14
  @klass = actual.is_a?(Class) ? actual : actual.class
15
-
15
+
16
16
  @validator = @klass.validators_on(@field).detect{|v| v.kind.to_s == @type}
17
-
17
+
18
18
  if @validator
19
19
  @negative_result_message = "#{@type.inspect} validator on #{@field.inspect}"
20
20
  @positive_result_message = "#{@type.inspect} validator on #{@field.inspect}"
@@ -23,37 +23,44 @@ module Mongoid
23
23
  return false
24
24
  end
25
25
  @result = true
26
- check_on if @options[:on]
26
+ check_on if @options[:on]
27
27
  @result
28
28
  end
29
-
30
- def failure_message_for_should
31
- "Expected #{@klass.inspect} to #{description}; instead got #{@negative_result_message}"
29
+
30
+ def failure_message_for_should
31
+ "Expected #{@klass.inspect} to #{description}; instead got #{@negative_result_message}"
32
32
  end
33
-
34
- def failure_message_for_should_not
35
- "Expected #{@klass.inspect} to not #{description}; instead got #{@positive_result_message}"
33
+
34
+ def failure_message_for_should_not
35
+ "Expected #{@klass.inspect} to not #{description}; instead got #{@positive_result_message}"
36
36
  end
37
-
37
+
38
38
  def description
39
- "validate #{@type} of #{@field.inspect}"
39
+ desc = "validate #{@type} of #{@field.inspect}"
40
+ desc << " on #{@options[:on]}" if @options[:on]
41
+ desc
40
42
  end
41
-
43
+
42
44
  def on(*on_method)
43
45
  @options[:on] = on_method.flatten
44
46
  self
45
- end
46
-
47
+ end
48
+
47
49
  def check_on
48
- message = " on methods: #{@validator.options[:on]}"
49
- if [@validator.options[:on]].flatten == @options[:on]
50
- @positive_result_message << message
51
- else
52
- @negative_result_message << message
53
- @result = false
50
+ validator_on_methods = [@validator.options[:on]].flatten
51
+
52
+ if validator_on_methods.any?
53
+ message = " on methods: #{validator_on_methods}"
54
+
55
+ if (@options[:on] - validator_on_methods).empty?
56
+ @positive_result_message << message
57
+ else
58
+ @negative_result_message << message
59
+ @result = false
60
+ end
54
61
  end
55
62
  end
56
- end
63
+ end
57
64
  end
58
65
  end
59
66
  end
@@ -1,5 +1,5 @@
1
1
  module Mongoid
2
2
  module Rspec
3
- VERSION = "1.5.0"
3
+ VERSION = "1.5.1"
4
4
  end
5
5
  end
data/spec/models/user.rb CHANGED
@@ -1,11 +1,13 @@
1
1
  class User
2
2
  include Mongoid::Document
3
+ include Mongoid::Timestamps::Created
3
4
 
4
5
  field :login
5
6
  field :email
6
7
  field :role
7
8
  field :age, type: Integer
8
9
  field :password, type: String
10
+ field :provider_uid
9
11
 
10
12
  belongs_to :site, :inverse_of => :users
11
13
  has_many :articles, :foreign_key => :author_id
@@ -20,7 +22,8 @@ class User
20
22
  validates :role, :presence => true, :inclusion => { :in => ["admin", "moderator", "member"]}
21
23
  validates :profile, :presence => true, :associated => true
22
24
  validates :age, :presence => true, :numericality => true, :inclusion => { :in => 23..42 }, :on => [:create, :update]
23
- validates :password, :presence => true, :on => :create
25
+ validates :password, :presence => true, :on => [:create, :update]
26
+ validates :provider_uid, presence: true
24
27
 
25
28
  attr_accessible :login, :email, :age, :password
26
29
  attr_accessible :role, :as => :admin
@@ -3,15 +3,15 @@ require 'spec_helper'
3
3
  describe "Document" do
4
4
  describe User do
5
5
  it { should have_fields(:email, :login) }
6
+ it { should be_timestamped_document }
7
+ it { should be_timestamped_document.with(:created) }
8
+ it { should_not be_timestamped_document.with(:updated) }
6
9
  end
7
-
10
+
8
11
  describe Article do
9
12
  it { should have_field(:published).of_type(Boolean).with_default_value_of(false) }
10
- it { should have_field(:allow_comments).of_type(Boolean).with_default_value_of(true) }
13
+ it { should have_field(:allow_comments).of_type(Boolean).with_default_value_of(true) }
11
14
  it { should_not have_field(:allow_comments).of_type(Boolean).with_default_value_of(false) }
12
- end
13
-
14
- describe Article do
15
15
  it { should be_mongoid_document }
16
16
  it { should be_versioned_document }
17
17
  it { should be_timestamped_document }
@@ -19,6 +19,7 @@ describe "Validations" do
19
19
  it { should validate_numericality_of(:age).on(:create, :update) }
20
20
  it { should validate_inclusion_of(:age).to_allow(23..42).on([:create, :update]) }
21
21
  it { should validate_presence_of(:password).on(:create) }
22
+ it { should validate_presence_of(:provider_uid).on(:create) }
22
23
  end
23
24
 
24
25
  describe Profile 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.0
4
+ version: 1.5.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-07-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
16
- requirement: &70123218181600 !ruby/object:Gem::Requirement
16
+ requirement: &70095909068120 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70123218181600
24
+ version_requirements: *70095909068120
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: mongoid
27
- requirement: &70123218180220 !ruby/object:Gem::Requirement
27
+ requirement: &70095909066740 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 3.0.1
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70123218180220
35
+ version_requirements: *70095909066740
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rspec
38
- requirement: &70123218179440 !ruby/object:Gem::Requirement
38
+ requirement: &70095909065960 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,7 +43,7 @@ dependencies:
43
43
  version: '2.9'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70123218179440
46
+ version_requirements: *70095909065960
47
47
  description: RSpec matches for Mongoid models, including association and validation
48
48
  matchers
49
49
  email: evansagge@gmail.com