mongoid4-rspec 1.11.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.
Files changed (52) hide show
  1. checksums.yaml +7 -0
  2. data/.document +5 -0
  3. data/.gitignore +6 -0
  4. data/.ruby-gemset +1 -0
  5. data/.ruby-version +1 -0
  6. data/.travis.yml +21 -0
  7. data/Gemfile +4 -0
  8. data/LICENSE +20 -0
  9. data/README.md +207 -0
  10. data/Rakefile +17 -0
  11. data/lib/matchers/accept_nested_attributes.rb +67 -0
  12. data/lib/matchers/allow_mass_assignment.rb +101 -0
  13. data/lib/matchers/associations.rb +316 -0
  14. data/lib/matchers/collections.rb +9 -0
  15. data/lib/matchers/document.rb +163 -0
  16. data/lib/matchers/indexes.rb +84 -0
  17. data/lib/matchers/validations.rb +81 -0
  18. data/lib/matchers/validations/acceptance_of.rb +9 -0
  19. data/lib/matchers/validations/associated.rb +19 -0
  20. data/lib/matchers/validations/confirmation_of.rb +9 -0
  21. data/lib/matchers/validations/custom_validation_of.rb +47 -0
  22. data/lib/matchers/validations/exclusion_of.rb +49 -0
  23. data/lib/matchers/validations/format_of.rb +71 -0
  24. data/lib/matchers/validations/inclusion_of.rb +49 -0
  25. data/lib/matchers/validations/length_of.rb +147 -0
  26. data/lib/matchers/validations/numericality_of.rb +74 -0
  27. data/lib/matchers/validations/presence_of.rb +9 -0
  28. data/lib/matchers/validations/uniqueness_of.rb +82 -0
  29. data/lib/matchers/validations/with_message.rb +27 -0
  30. data/lib/mongoid-rspec.rb +33 -0
  31. data/lib/mongoid-rspec/version.rb +5 -0
  32. data/mongoid-rspec.gemspec +25 -0
  33. data/mongoid4-rspec.gemspec +25 -0
  34. data/spec/models/article.rb +29 -0
  35. data/spec/models/comment.rb +6 -0
  36. data/spec/models/log.rb +4 -0
  37. data/spec/models/movie_article.rb +8 -0
  38. data/spec/models/permalink.rb +5 -0
  39. data/spec/models/person.rb +10 -0
  40. data/spec/models/profile.rb +16 -0
  41. data/spec/models/record.rb +5 -0
  42. data/spec/models/site.rb +9 -0
  43. data/spec/models/user.rb +36 -0
  44. data/spec/spec_helper.rb +32 -0
  45. data/spec/unit/accept_nested_attributes_spec.rb +12 -0
  46. data/spec/unit/associations_spec.rb +42 -0
  47. data/spec/unit/collections_spec.rb +7 -0
  48. data/spec/unit/document_spec.rb +21 -0
  49. data/spec/unit/indexes_spec.rb +13 -0
  50. data/spec/unit/validations_spec.rb +52 -0
  51. data/spec/validators/ssn_validator.rb +16 -0
  52. metadata +137 -0
@@ -0,0 +1,12 @@
1
+ require 'spec_helper'
2
+
3
+ describe "AcceptsNestedAttributes" do
4
+ describe User do
5
+ it { should accept_nested_attributes_for(:articles) }
6
+ it { should accept_nested_attributes_for(:comments) }
7
+ end
8
+
9
+ describe Article do
10
+ it { should accept_nested_attributes_for(:permalink) }
11
+ end
12
+ end
@@ -0,0 +1,42 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Associations" do
4
+ describe User do
5
+ it { should have_many(:articles).with_foreign_key(:author_id).ordered_by(:title) }
6
+
7
+ it { should have_one(:record).with_autobuild }
8
+
9
+ it { should have_many(:comments).with_dependent(:destroy).with_autosave }
10
+
11
+ it { should embed_one(:profile) }
12
+
13
+ it { should have_and_belong_to_many(:children).of_type(User) }
14
+ end
15
+
16
+ describe Profile do
17
+ it { should be_embedded_in(:user).as_inverse_of(:profile) }
18
+ end
19
+
20
+ describe Article do
21
+ it { should belong_to(:author).of_type(User).as_inverse_of(:articles).with_index }
22
+ it { should embed_many(:comments).with_cascading_callbacks }
23
+ it { should embed_one(:permalink) }
24
+ end
25
+
26
+ describe Comment do
27
+ it { should be_embedded_in(:article).as_inverse_of(:comments).with_polymorphism }
28
+ it { should belong_to(:user).as_inverse_of(:comments) }
29
+ end
30
+
31
+ describe Record do
32
+ it { should belong_to(:user).as_inverse_of(:record) }
33
+ end
34
+
35
+ describe Permalink do
36
+ it { should be_embedded_in(:linkable).as_inverse_of(:link) }
37
+ end
38
+
39
+ describe Site do
40
+ it { should have_many(:users).as_inverse_of(:site).ordered_by(:email.desc) }
41
+ end
42
+ end
@@ -0,0 +1,7 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Collections" do
4
+ describe Log do
5
+ it { should be_stored_in :logs }
6
+ end
7
+ end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Document" do
4
+ describe User do
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) }
9
+ end
10
+
11
+ describe Article do
12
+ it { should have_field(:published).of_type(Mongoid::Boolean).with_default_value_of(false) }
13
+ it { should have_field(:allow_comments).of_type(Mongoid::Boolean).with_default_value_of(true) }
14
+ it { should belong_to(:author) }
15
+ it { should have_field(:title).localized }
16
+ it { should_not have_field(:allow_comments).of_type(Mongoid::Boolean).with_default_value_of(false) }
17
+ it { should_not have_field(:number_of_comments).of_type(Integer).with_default_value_of(1) }
18
+ it { should be_mongoid_document }
19
+ it { should be_timestamped_document }
20
+ end
21
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Indexes" do
4
+ describe Article do
5
+ it { should have_index_for(published: 1) }
6
+ it { should have_index_for(title: 1).with_options(unique: true, background: true, dropDups: true) }
7
+ it { should have_index_for('permalink._id' => 1) }
8
+ end
9
+
10
+ describe Profile do
11
+ it { should have_index_for(first_name: 1, last_name: 1) }
12
+ end
13
+ end
@@ -0,0 +1,52 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Validations" do
4
+ describe Site do
5
+ it { should validate_presence_of(:name) }
6
+ it { should validate_uniqueness_of(:name) }
7
+ end
8
+
9
+ describe User do
10
+ it { should validate_presence_of(:login) }
11
+ it { should validate_uniqueness_of(:login).scoped_to(:site) }
12
+ it { should validate_uniqueness_of(:email).case_insensitive.with_message("is already taken") }
13
+ it { should validate_format_of(:login).to_allow("valid_login").not_to_allow("invalid login") }
14
+ it { should validate_associated(:profile) }
15
+ it { should validate_exclusion_of(:login).to_not_allow("super", "index", "edit") }
16
+ it { should validate_exclusion_of(:password).to_not_allow("password") }
17
+ it { should validate_inclusion_of(:role).to_allow("admin", "member") }
18
+ it { should validate_inclusion_of(:role).to_allow(["admin", "member"]) }
19
+ it { should validate_confirmation_of(:email) }
20
+ it { should validate_presence_of(:age).on(:create, :update) }
21
+ it { should validate_numericality_of(:age).on(:create, :update) }
22
+ it { should validate_inclusion_of(:age).to_allow(23..42).on([:create, :update]) }
23
+ it { should validate_presence_of(:password).on(:create) }
24
+ it { should validate_presence_of(:provider_uid).on(:create) }
25
+ it { should validate_inclusion_of(:locale).to_allow([:en, :ru]) }
26
+ end
27
+
28
+ describe Profile do
29
+ it { should validate_numericality_of(:age).greater_than(0) }
30
+ it { should validate_acceptance_of(:terms_of_service) }
31
+ it { should validate_length_of(:hobbies).with_minimum(1).with_message("requires at least one hobby") }
32
+ end
33
+
34
+ describe Article do
35
+ it { should validate_length_of(:title).within(8..16) }
36
+ it { should_not validate_length_of(:content).greater_than(200).less_than(16) }
37
+ it { should validate_length_of(:content).greater_than(200) }
38
+ it { should validate_inclusion_of(:status).to_allow([:pending]).on( :create ) }
39
+ it { should validate_inclusion_of(:status).to_allow([:approved, :rejected]).on( :update ) }
40
+ end
41
+
42
+ describe MovieArticle do
43
+ it { should validate_numericality_of(:rating).greater_than(0) }
44
+ it { should validate_numericality_of(:rating).to_allow(:greater_than => 0).less_than_or_equal_to(5) }
45
+ it { should validate_numericality_of(:classification).to_allow(:even => true, :only_integer => true, :nil => false) }
46
+ end
47
+
48
+ describe Person do
49
+ it { should custom_validate(:ssn).with_validator(SsnValidator) }
50
+ it { should_not custom_validate(:name) }
51
+ end
52
+ end
@@ -0,0 +1,16 @@
1
+ class SsnValidator < ActiveModel::EachValidator
2
+
3
+ def validate_each(record, attribute, value)
4
+ unless valid_ssn?(record, attribute, value)
5
+ record.errors[attribute] << "#{value} is not a valid Social Security Number"
6
+ end
7
+ end
8
+
9
+ def self.kind() :custom end
10
+
11
+ def valid_ssn?(record, attribute, value)
12
+ # irrelevant here how validation is done
13
+ true
14
+ end
15
+
16
+ end
metadata ADDED
@@ -0,0 +1,137 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mongoid4-rspec
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.11.0
5
+ platform: ruby
6
+ authors:
7
+ - Francesco Boffa
8
+ - Evan Sagge
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-05-31 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rake
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ">="
19
+ - !ruby/object:Gem::Version
20
+ version: '0'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ version: '0'
28
+ - !ruby/object:Gem::Dependency
29
+ name: mongoid
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: 4.0.0.beta2
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: 4.0.0.beta2
42
+ - !ruby/object:Gem::Dependency
43
+ name: rspec
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '2.14'
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: '2.14'
56
+ description: RSpec matches for Mongoid 4 models, including association and validation
57
+ matchers
58
+ email: fra.boffa@gmail.com evansagge@gmail.com
59
+ executables: []
60
+ extensions: []
61
+ extra_rdoc_files: []
62
+ files:
63
+ - ".bundle/config"
64
+ - ".document"
65
+ - ".gitignore"
66
+ - ".ruby-gemset"
67
+ - ".ruby-version"
68
+ - ".travis.yml"
69
+ - Gemfile
70
+ - LICENSE
71
+ - README.md
72
+ - Rakefile
73
+ - lib/matchers/accept_nested_attributes.rb
74
+ - lib/matchers/allow_mass_assignment.rb
75
+ - lib/matchers/associations.rb
76
+ - lib/matchers/collections.rb
77
+ - lib/matchers/document.rb
78
+ - lib/matchers/indexes.rb
79
+ - lib/matchers/validations.rb
80
+ - lib/matchers/validations/acceptance_of.rb
81
+ - lib/matchers/validations/associated.rb
82
+ - lib/matchers/validations/confirmation_of.rb
83
+ - lib/matchers/validations/custom_validation_of.rb
84
+ - lib/matchers/validations/exclusion_of.rb
85
+ - lib/matchers/validations/format_of.rb
86
+ - lib/matchers/validations/inclusion_of.rb
87
+ - lib/matchers/validations/length_of.rb
88
+ - lib/matchers/validations/numericality_of.rb
89
+ - lib/matchers/validations/presence_of.rb
90
+ - lib/matchers/validations/uniqueness_of.rb
91
+ - lib/matchers/validations/with_message.rb
92
+ - lib/mongoid-rspec.rb
93
+ - lib/mongoid-rspec/version.rb
94
+ - mongoid-rspec.gemspec
95
+ - mongoid4-rspec.gemspec
96
+ - spec/models/article.rb
97
+ - spec/models/comment.rb
98
+ - spec/models/log.rb
99
+ - spec/models/movie_article.rb
100
+ - spec/models/permalink.rb
101
+ - spec/models/person.rb
102
+ - spec/models/profile.rb
103
+ - spec/models/record.rb
104
+ - spec/models/site.rb
105
+ - spec/models/user.rb
106
+ - spec/spec_helper.rb
107
+ - spec/unit/accept_nested_attributes_spec.rb
108
+ - spec/unit/associations_spec.rb
109
+ - spec/unit/collections_spec.rb
110
+ - spec/unit/document_spec.rb
111
+ - spec/unit/indexes_spec.rb
112
+ - spec/unit/validations_spec.rb
113
+ - spec/validators/ssn_validator.rb
114
+ homepage: http://github.com/aomega08/mongoid4-rspec
115
+ licenses: []
116
+ metadata: {}
117
+ post_install_message:
118
+ rdoc_options: []
119
+ require_paths:
120
+ - lib
121
+ required_ruby_version: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ required_rubygems_version: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
131
+ requirements: []
132
+ rubyforge_project: mongoid-rspec
133
+ rubygems_version: 2.2.1
134
+ signing_key:
135
+ specification_version: 4
136
+ summary: RSpec matchers for Mongoid 4
137
+ test_files: []