mongoid 8.0.1 → 8.0.3

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 (161) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/lib/config/locales/en.yml +1 -0
  4. data/lib/mongoid/association/accessors.rb +6 -6
  5. data/lib/mongoid/association/bindable.rb +2 -2
  6. data/lib/mongoid/association/constrainable.rb +0 -1
  7. data/lib/mongoid/association/embedded/batchable.rb +5 -5
  8. data/lib/mongoid/association/embedded/cyclic.rb +1 -1
  9. data/lib/mongoid/association/embedded/embedded_in/proxy.rb +2 -2
  10. data/lib/mongoid/association/embedded/embedded_in.rb +1 -1
  11. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +10 -10
  12. data/lib/mongoid/association/embedded/embeds_many.rb +2 -2
  13. data/lib/mongoid/association/embedded/embeds_one/proxy.rb +2 -2
  14. data/lib/mongoid/association/embedded/embeds_one.rb +3 -3
  15. data/lib/mongoid/association/many.rb +6 -7
  16. data/lib/mongoid/association/nested/many.rb +3 -3
  17. data/lib/mongoid/association/nested/nested_buildable.rb +4 -4
  18. data/lib/mongoid/association/nested/one.rb +5 -5
  19. data/lib/mongoid/association/one.rb +2 -2
  20. data/lib/mongoid/association/options.rb +9 -9
  21. data/lib/mongoid/association/proxy.rb +2 -3
  22. data/lib/mongoid/association/referenced/auto_save.rb +1 -1
  23. data/lib/mongoid/association/referenced/belongs_to/proxy.rb +5 -6
  24. data/lib/mongoid/association/referenced/belongs_to.rb +1 -1
  25. data/lib/mongoid/association/referenced/counter_cache.rb +2 -2
  26. data/lib/mongoid/association/referenced/eager.rb +2 -2
  27. data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +2 -2
  28. data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +2 -2
  29. data/lib/mongoid/association/referenced/has_many/enumerable.rb +10 -10
  30. data/lib/mongoid/association/referenced/has_many/proxy.rb +12 -9
  31. data/lib/mongoid/association/referenced/has_many.rb +3 -3
  32. data/lib/mongoid/association/referenced/has_one/nested_builder.rb +5 -5
  33. data/lib/mongoid/association/referenced/has_one/proxy.rb +1 -1
  34. data/lib/mongoid/association/referenced/has_one.rb +3 -3
  35. data/lib/mongoid/association/referenced/syncable.rb +2 -2
  36. data/lib/mongoid/association/reflections.rb +2 -2
  37. data/lib/mongoid/association/relatable.rb +6 -6
  38. data/lib/mongoid/association.rb +5 -5
  39. data/lib/mongoid/atomic/modifiers.rb +2 -2
  40. data/lib/mongoid/attributes/dynamic.rb +3 -3
  41. data/lib/mongoid/attributes/nested.rb +5 -5
  42. data/lib/mongoid/attributes/processing.rb +1 -1
  43. data/lib/mongoid/attributes/projector.rb +1 -1
  44. data/lib/mongoid/attributes/readonly.rb +2 -2
  45. data/lib/mongoid/attributes.rb +13 -13
  46. data/lib/mongoid/cacheable.rb +2 -2
  47. data/lib/mongoid/changeable.rb +5 -5
  48. data/lib/mongoid/clients/options.rb +1 -1
  49. data/lib/mongoid/clients/validators/storage.rb +3 -3
  50. data/lib/mongoid/config/validators/client.rb +6 -6
  51. data/lib/mongoid/config.rb +7 -7
  52. data/lib/mongoid/contextual/aggregable/memory.rb +1 -1
  53. data/lib/mongoid/contextual/aggregable/mongo.rb +4 -4
  54. data/lib/mongoid/contextual/aggregable/none.rb +1 -1
  55. data/lib/mongoid/contextual/atomic.rb +1 -1
  56. data/lib/mongoid/contextual/geo_near.rb +7 -7
  57. data/lib/mongoid/contextual/memory.rb +5 -5
  58. data/lib/mongoid/contextual/mongo.rb +14 -14
  59. data/lib/mongoid/contextual/none.rb +2 -2
  60. data/lib/mongoid/contextual/queryable.rb +1 -1
  61. data/lib/mongoid/contextual.rb +2 -2
  62. data/lib/mongoid/criteria/findable.rb +7 -4
  63. data/lib/mongoid/criteria/includable.rb +1 -1
  64. data/lib/mongoid/criteria/permission.rb +1 -1
  65. data/lib/mongoid/criteria/queryable/aggregable.rb +2 -2
  66. data/lib/mongoid/criteria/queryable/extensions/boolean.rb +1 -1
  67. data/lib/mongoid/criteria/queryable/extensions/regexp.rb +2 -2
  68. data/lib/mongoid/criteria/queryable/extensions/set.rb +1 -1
  69. data/lib/mongoid/criteria/queryable/extensions/string.rb +3 -3
  70. data/lib/mongoid/criteria/queryable/extensions/symbol.rb +1 -1
  71. data/lib/mongoid/criteria/queryable/key.rb +3 -3
  72. data/lib/mongoid/criteria/queryable/optional.rb +2 -2
  73. data/lib/mongoid/criteria/queryable/options.rb +1 -1
  74. data/lib/mongoid/criteria/queryable/pipeline.rb +1 -1
  75. data/lib/mongoid/criteria/queryable/selectable.rb +3 -3
  76. data/lib/mongoid/criteria/queryable/selector.rb +3 -3
  77. data/lib/mongoid/criteria/queryable/smash.rb +1 -1
  78. data/lib/mongoid/criteria/queryable.rb +1 -1
  79. data/lib/mongoid/criteria/scopable.rb +2 -2
  80. data/lib/mongoid/criteria.rb +14 -9
  81. data/lib/mongoid/deprecable.rb +1 -1
  82. data/lib/mongoid/document.rb +2 -2
  83. data/lib/mongoid/equality.rb +12 -12
  84. data/lib/mongoid/errors/document_not_found.rb +5 -5
  85. data/lib/mongoid/errors/invalid_config_option.rb +1 -1
  86. data/lib/mongoid/errors/invalid_dependent_strategy.rb +1 -1
  87. data/lib/mongoid/errors/invalid_field.rb +1 -1
  88. data/lib/mongoid/errors/invalid_relation.rb +1 -1
  89. data/lib/mongoid/errors/invalid_relation_option.rb +1 -1
  90. data/lib/mongoid/errors/invalid_session_use.rb +1 -1
  91. data/lib/mongoid/errors/invalid_storage_options.rb +1 -1
  92. data/lib/mongoid/errors/mongoid_error.rb +3 -3
  93. data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +1 -1
  94. data/lib/mongoid/errors/no_client_database.rb +1 -1
  95. data/lib/mongoid/errors/no_client_hosts.rb +1 -1
  96. data/lib/mongoid/errors/readonly_attribute.rb +1 -1
  97. data/lib/mongoid/errors/unknown_attribute.rb +1 -1
  98. data/lib/mongoid/extensions/array.rb +1 -1
  99. data/lib/mongoid/extensions/big_decimal.rb +4 -0
  100. data/lib/mongoid/extensions/false_class.rb +1 -1
  101. data/lib/mongoid/extensions/float.rb +6 -2
  102. data/lib/mongoid/extensions/hash.rb +1 -1
  103. data/lib/mongoid/extensions/integer.rb +6 -2
  104. data/lib/mongoid/extensions/module.rb +1 -1
  105. data/lib/mongoid/extensions/object.rb +6 -6
  106. data/lib/mongoid/extensions/string.rb +9 -9
  107. data/lib/mongoid/extensions/symbol.rb +1 -1
  108. data/lib/mongoid/extensions/true_class.rb +1 -1
  109. data/lib/mongoid/fields/foreign_key.rb +4 -4
  110. data/lib/mongoid/fields/localized.rb +9 -4
  111. data/lib/mongoid/fields/standard.rb +7 -7
  112. data/lib/mongoid/fields.rb +9 -9
  113. data/lib/mongoid/findable.rb +7 -6
  114. data/lib/mongoid/indexable/specification.rb +1 -1
  115. data/lib/mongoid/indexable/validators/options.rb +2 -1
  116. data/lib/mongoid/interceptable.rb +4 -4
  117. data/lib/mongoid/matchable.rb +1 -1
  118. data/lib/mongoid/matcher.rb +12 -7
  119. data/lib/mongoid/persistable/creatable.rb +4 -4
  120. data/lib/mongoid/persistable/deletable.rb +1 -1
  121. data/lib/mongoid/persistable/destroyable.rb +1 -1
  122. data/lib/mongoid/persistable/savable.rb +2 -2
  123. data/lib/mongoid/persistable/unsettable.rb +1 -1
  124. data/lib/mongoid/persistable/updatable.rb +7 -7
  125. data/lib/mongoid/persistable/upsertable.rb +1 -1
  126. data/lib/mongoid/persistable.rb +3 -3
  127. data/lib/mongoid/persistence_context.rb +44 -8
  128. data/lib/mongoid/query_cache.rb +2 -2
  129. data/lib/mongoid/scopable.rb +26 -22
  130. data/lib/mongoid/serializable.rb +10 -6
  131. data/lib/mongoid/stateful.rb +10 -10
  132. data/lib/mongoid/tasks/database.rb +0 -2
  133. data/lib/mongoid/threaded/lifecycle.rb +5 -5
  134. data/lib/mongoid/threaded.rb +12 -12
  135. data/lib/mongoid/timestamps/updated.rb +1 -1
  136. data/lib/mongoid/traversable.rb +3 -3
  137. data/lib/mongoid/validatable/localizable.rb +1 -1
  138. data/lib/mongoid/validatable/macros.rb +0 -2
  139. data/lib/mongoid/validatable/presence.rb +2 -2
  140. data/lib/mongoid/validatable/uniqueness.rb +7 -7
  141. data/lib/mongoid/validatable.rb +6 -6
  142. data/lib/mongoid/version.rb +1 -1
  143. data/spec/integration/i18n_fallbacks_spec.rb +1 -17
  144. data/spec/mongoid/cacheable_spec.rb +3 -3
  145. data/spec/mongoid/clients_spec.rb +25 -0
  146. data/spec/mongoid/contextual/memory_spec.rb +4 -5
  147. data/spec/mongoid/contextual/mongo_spec.rb +2 -4
  148. data/spec/mongoid/criteria_projection_spec.rb +0 -1
  149. data/spec/mongoid/criteria_spec.rb +1 -1
  150. data/spec/mongoid/equality_spec.rb +12 -12
  151. data/spec/mongoid/extensions/big_decimal_spec.rb +15 -0
  152. data/spec/mongoid/extensions/float_spec.rb +10 -3
  153. data/spec/mongoid/extensions/integer_spec.rb +10 -3
  154. data/spec/mongoid/fields/localized_spec.rb +37 -12
  155. data/spec/mongoid/indexable_spec.rb +23 -1
  156. data/spec/mongoid/scopable_spec.rb +34 -16
  157. data/spec/mongoid/validatable/uniqueness_spec.rb +0 -1
  158. data/spec/support/macros.rb +16 -0
  159. data.tar.gz.sig +0 -0
  160. metadata +643 -643
  161. metadata.gz.sig +0 -0
@@ -74,7 +74,7 @@ module Mongoid
74
74
  # @example Is the validation case sensitive?
75
75
  # validator.case_sensitive?
76
76
  #
77
- # @return [ true, false ] If the validation is case sensitive.
77
+ # @return [ true | false ] If the validation is case sensitive.
78
78
  def case_sensitive?
79
79
  !(options[:case_sensitive] == false)
80
80
  end
@@ -86,7 +86,7 @@ module Mongoid
86
86
  # @example Create the criteria.
87
87
  # validator.create_criteria(User, user, :name, "syd")
88
88
  #
89
- # @param [ Class, Proxy ] base The base to execute the criteria from.
89
+ # @param [ Class | Proxy ] base The base to execute the criteria from.
90
90
  # @param [ Document ] document The document to validate.
91
91
  # @param [ Symbol ] attribute The name of the attribute.
92
92
  # @param [ Object ] value The value of the object.
@@ -149,7 +149,7 @@ module Mongoid
149
149
  #
150
150
  # @param [ Object ] value The value to filter.
151
151
  #
152
- # @return [ Object, Regexp ] The value, filtered or not.
152
+ # @return [ Object | Regexp ] The value, filtered or not.
153
153
  def filter(value)
154
154
  !case_sensitive? && value ? /\A#{Regexp.escape(value.to_s)}\z/i : value
155
155
  end
@@ -182,7 +182,7 @@ module Mongoid
182
182
  #
183
183
  # @param [ Document ] document The embedded document.
184
184
  #
185
- # @return [ true, false ] If the validation should be skipped.
185
+ # @return [ true | false ] If the validation should be skipped.
186
186
  def skip_validation?(document)
187
187
  !document._parent || document.embedded_one?
188
188
  end
@@ -196,7 +196,7 @@ module Mongoid
196
196
  #
197
197
  # @param [ Document ] document The embedded document.
198
198
  #
199
- # @return [ true, false ] If the scope reference has changed.
199
+ # @return [ true | false ] If the scope reference has changed.
200
200
  def scope_value_changed?(document)
201
201
  Array.wrap(options[:scope]).any? do |item|
202
202
  document.send("attribute_changed?", item.to_s)
@@ -278,7 +278,7 @@ module Mongoid
278
278
  # @param [ Document ] document The document getting validated.
279
279
  # @param [ Symbol ] attribute The attribute to validate.
280
280
  #
281
- # @return [ true, false ] If we need to validate.
281
+ # @return [ true | false ] If we need to validate.
282
282
  def validation_required?(document, attribute)
283
283
  document.new_record? ||
284
284
  document.send("attribute_changed?", attribute.to_s) ||
@@ -295,7 +295,7 @@ module Mongoid
295
295
  # @param [ Document ] document The document getting validated.
296
296
  # @param [ Symbol ] attribute The attribute to validate.
297
297
  #
298
- # @return [ true, false ] If the attribute is localized.
298
+ # @return [ true | false ] If the attribute is localized.
299
299
  def localized?(document, attribute)
300
300
  document.fields[document.database_field_name(attribute)].try(:localized?)
301
301
  end
@@ -44,7 +44,7 @@ module Mongoid
44
44
  #
45
45
  # @param [ Hash ] options The options to check.
46
46
  #
47
- # @return [ true, false ] If we are validating.
47
+ # @return [ true | false ] If we are validating.
48
48
  def performing_validations?(options = {})
49
49
  options[:validate].nil? ? true : options[:validate]
50
50
  end
@@ -83,7 +83,7 @@ module Mongoid
83
83
  #
84
84
  # @param [ Symbol ] context The optional validation context.
85
85
  #
86
- # @return [ true, false ] True if valid, false if not.
86
+ # @return [ true | false ] True if valid, false if not.
87
87
  def valid?(context = nil)
88
88
  super context ? context : (new_record? ? :create : :update)
89
89
  end
@@ -93,7 +93,7 @@ module Mongoid
93
93
  # @example Is the document validated?
94
94
  # document.validated?
95
95
  #
96
- # @return [ true, false ] Has the document already been validated?
96
+ # @return [ true | false ] Has the document already been validated?
97
97
  def validated?
98
98
  Threaded.validated?(self)
99
99
  end
@@ -103,7 +103,7 @@ module Mongoid
103
103
  # @example Are we validating with a query?
104
104
  # document.validating_with_query?
105
105
  #
106
- # @return [ true, false ] If we are validating with a query.
106
+ # @return [ true | false ] If we are validating with a query.
107
107
  def validating_with_query?
108
108
  self.class.validating_with_query?
109
109
  end
@@ -129,7 +129,7 @@ module Mongoid
129
129
  # @example Validate with a specific validator.
130
130
  # validates_with MyValidator, on: :create
131
131
  #
132
- # @param [ Class<Array>, Hash ] args The validator classes and options.
132
+ # @param [ Class<Array> | Hash ] args The validator classes and options.
133
133
  #
134
134
  # @note See ActiveModel::Validations::With for full options. This is
135
135
  # overridden to add autosave functionality when presence validation is
@@ -151,7 +151,7 @@ module Mongoid
151
151
  # @example Are we validating with a query?
152
152
  # Model.validating_with_query?
153
153
  #
154
- # @return [ true, false ] If we are validating with a query.
154
+ # @return [ true | false ] If we are validating with a query.
155
155
  def validating_with_query?
156
156
  Threaded.executing?("#{name}-validate-with-query")
157
157
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Mongoid
4
- VERSION = "8.0.1"
4
+ VERSION = "8.0.3"
5
5
  end
@@ -3,19 +3,7 @@
3
3
  require 'spec_helper'
4
4
 
5
5
  describe 'i18n fallbacks' do
6
- # These tests modify the environment
7
- before(:all) do
8
- unless %w(yes true 1).include?((ENV['TEST_I18N_FALLBACKS'] || '').downcase)
9
- skip 'Set TEST_I18N_FALLBACKS=1 environment variable to run these tests'
10
- end
11
- end
12
-
13
- before(:all) do
14
- puts "I18n version: #{I18n::VERSION}"
15
-
16
- require "i18n/backend/fallbacks"
17
- I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)
18
- end
6
+ with_i18n_fallbacks
19
7
 
20
8
  context 'when fallbacks are enabled with a locale list' do
21
9
  before do
@@ -36,7 +24,6 @@ describe 'i18n fallbacks' do
36
24
  end
37
25
 
38
26
  context 'when translation is missing in active locale and present in fallback locale' do
39
-
40
27
  it 'falls back on default locale' do
41
28
  product = Product.new
42
29
  I18n.locale = :en
@@ -44,7 +31,6 @@ describe 'i18n fallbacks' do
44
31
  I18n.locale = :de
45
32
  product.description.should == 'Marvelous!'
46
33
  end
47
-
48
34
  end
49
35
 
50
36
  context 'when translation is missing in all locales' do
@@ -64,7 +50,6 @@ describe 'i18n fallbacks' do
64
50
  I18n.locale = :ru
65
51
  product.description.should be nil
66
52
  end
67
-
68
53
  end
69
54
 
70
55
  context 'i18n 1.0' do
@@ -82,7 +67,6 @@ describe 'i18n fallbacks' do
82
67
  I18n.locale = :ru
83
68
  product.description.should == 'Marvelous!'
84
69
  end
85
-
86
70
  end
87
71
  end
88
72
  end
@@ -45,7 +45,7 @@ describe Mongoid::Cacheable do
45
45
  context "with the default cache_timestamp_format" do
46
46
 
47
47
  let!(:updated_at) do
48
- document.updated_at.utc.to_s(:nsec)
48
+ document.updated_at.utc.to_formatted_s(:nsec)
49
49
  end
50
50
 
51
51
  it "has the id and updated_at key name" do
@@ -64,7 +64,7 @@ describe Mongoid::Cacheable do
64
64
  end
65
65
 
66
66
  let!(:updated_at) do
67
- document.updated_at.utc.to_s(:number)
67
+ document.updated_at.utc.to_formatted_s(:number)
68
68
  end
69
69
 
70
70
  it "has the id and updated_at key name" do
@@ -103,7 +103,7 @@ describe Mongoid::Cacheable do
103
103
  end
104
104
 
105
105
  let!(:updated_at) do
106
- agent.updated_at.utc.to_s(:nsec)
106
+ agent.updated_at.utc.to_formatted_s(:nsec)
107
107
  end
108
108
 
109
109
  it "has the id and updated_at key name" do
@@ -1042,6 +1042,31 @@ describe Mongoid::Clients do
1042
1042
  end
1043
1043
  end
1044
1044
  end
1045
+
1046
+ context 'when using on different objects' do
1047
+ require_mri
1048
+
1049
+ let(:first_band) do
1050
+ Band.create!(name: "The Beatles")
1051
+ end
1052
+
1053
+ let(:second_band) do
1054
+ Band.create!(name: 'Led Zeppelin')
1055
+ end
1056
+
1057
+ it 'does not create extra symbols symbols' do
1058
+ first_band.with(write: { w: 0, j: false }) do |band|
1059
+ band.set(active: false)
1060
+ end
1061
+ initial_symbols_count = Symbol.all_symbols.size
1062
+ second_band.with(write: { w: 0, j: false }) do |band|
1063
+ band.set(active: false)
1064
+ end
1065
+ expect(Symbol.all_symbols.size).to eq(initial_symbols_count)
1066
+ end
1067
+
1068
+ end
1069
+
1045
1070
  end
1046
1071
 
1047
1072
  context "when overriding the default database" do
@@ -546,7 +546,7 @@ describe Mongoid::Contextual::Memory do
546
546
  end
547
547
 
548
548
  context 'when fallbacks are enabled with a locale list' do
549
- require_fallbacks
549
+ with_i18n_fallbacks
550
550
 
551
551
  around(:all) do |example|
552
552
  prev_fallbacks = I18n.fallbacks.dup
@@ -565,7 +565,7 @@ describe Mongoid::Contextual::Memory do
565
565
 
566
566
  it "correctly uses the fallback" do
567
567
  I18n.locale = :en
568
- d = Dictionary.create!(description: 'english-text')
568
+ Dictionary.create!(description: 'english-text')
569
569
  I18n.locale = :he
570
570
  distinct.should == "english-text"
571
571
  end
@@ -1598,7 +1598,7 @@ describe Mongoid::Contextual::Memory do
1598
1598
  end
1599
1599
 
1600
1600
  context 'when fallbacks are enabled with a locale list' do
1601
- require_fallbacks
1601
+ with_i18n_fallbacks
1602
1602
 
1603
1603
  around(:all) do |example|
1604
1604
  prev_fallbacks = I18n.fallbacks.dup
@@ -1617,7 +1617,7 @@ describe Mongoid::Contextual::Memory do
1617
1617
 
1618
1618
  it "correctly uses the fallback" do
1619
1619
  I18n.locale = :en
1620
- d = Dictionary.create!(description: 'english-text')
1620
+ Dictionary.create!(description: 'english-text')
1621
1621
  I18n.locale = :he
1622
1622
  plucked.should == "english-text"
1623
1623
  end
@@ -1960,7 +1960,6 @@ describe Mongoid::Contextual::Memory do
1960
1960
  address2b.name = "de3"
1961
1961
  person1
1962
1962
  person2
1963
-
1964
1963
  I18n.locale = :en
1965
1964
  end
1966
1965
 
@@ -660,7 +660,7 @@ describe Mongoid::Contextual::Mongo do
660
660
  end
661
661
 
662
662
  context 'when fallbacks are enabled with a locale list' do
663
- require_fallbacks
663
+ with_i18n_fallbacks
664
664
 
665
665
  around(:all) do |example|
666
666
  prev_fallbacks = I18n.fallbacks.dup
@@ -686,7 +686,7 @@ describe Mongoid::Contextual::Mongo do
686
686
 
687
687
  it "correctly uses the fallback" do
688
688
  I18n.locale = :en
689
- d = Dictionary.create!(description: 'english-text')
689
+ Dictionary.create!(description: 'english-text')
690
690
  I18n.locale = :he
691
691
  distinct.should == "english-text"
692
692
  end
@@ -854,7 +854,6 @@ describe Mongoid::Contextual::Mongo do
854
854
  d2.save!
855
855
  d3.save!
856
856
  d4.save!
857
-
858
857
  I18n.locale = :en
859
858
  end
860
859
 
@@ -908,7 +907,6 @@ describe Mongoid::Contextual::Mongo do
908
907
  address2b.name = "de3"
909
908
  Person.create!(addresses: [ address1a, address1b ])
910
909
  Person.create!(addresses: [ address2a, address2b ])
911
-
912
910
  I18n.locale = :en
913
911
  end
914
912
 
@@ -171,7 +171,6 @@ describe Mongoid::Criteria do
171
171
 
172
172
  let(:dictionary) do
173
173
  Dictionary.only(:description).first
174
-
175
174
  end
176
175
 
177
176
  it 'loads all translations' do
@@ -2059,7 +2059,7 @@ describe Mongoid::Criteria do
2059
2059
  end
2060
2060
 
2061
2061
  context 'when fallbacks are enabled with a locale list' do
2062
- require_fallbacks
2062
+ with_i18n_fallbacks
2063
2063
 
2064
2064
  around(:all) do |example|
2065
2065
  prev_fallbacks = I18n.fallbacks.dup
@@ -85,8 +85,8 @@ describe Mongoid::Equality do
85
85
 
86
86
  describe ".===" do
87
87
 
88
- context "when legacy_triple_equals is set" do
89
- config_override :legacy_triple_equals, true
88
+ context "when legacy_triple_equals is not set" do
89
+ config_override :legacy_triple_equals, false
90
90
 
91
91
  context "when comparable is an instance of this document" do
92
92
 
@@ -128,8 +128,8 @@ describe Mongoid::Equality do
128
128
  end
129
129
  end
130
130
 
131
- context "when legacy_triple_equals is not set" do
132
- config_override :legacy_triple_equals, false
131
+ context "when legacy_triple_equals is set" do
132
+ config_override :legacy_triple_equals, true
133
133
 
134
134
  context "when comparable is an instance of this document" do
135
135
 
@@ -205,8 +205,8 @@ describe Mongoid::Equality do
205
205
 
206
206
  context "when the class is the same" do
207
207
 
208
- it "returns false" do
209
- expect(person === Person).to be false
208
+ it "returns true" do
209
+ expect(person === Person).to be true
210
210
  end
211
211
  end
212
212
 
@@ -219,8 +219,8 @@ describe Mongoid::Equality do
219
219
 
220
220
  context "when the class is a superclass" do
221
221
 
222
- it "returns false" do
223
- expect(Doctor.new === Person).to be false
222
+ it "returns true" do
223
+ expect(Doctor.new === Person).to be true
224
224
  end
225
225
  end
226
226
  end
@@ -256,8 +256,8 @@ describe Mongoid::Equality do
256
256
  context "when comparing to a class" do
257
257
  context "when the class is the same" do
258
258
 
259
- it "returns true" do
260
- expect(person === Person).to be true
259
+ it "returns false" do
260
+ expect(person === Person).to be false
261
261
  end
262
262
  end
263
263
 
@@ -270,8 +270,8 @@ describe Mongoid::Equality do
270
270
 
271
271
  context "when the class is a superclass" do
272
272
 
273
- it "returns true" do
274
- expect(Doctor.new === Person).to be true
273
+ it "returns false" do
274
+ expect(Doctor.new === Person).to be false
275
275
  end
276
276
  end
277
277
  end
@@ -273,6 +273,21 @@ describe Mongoid::Extensions::BigDecimal do
273
273
  end
274
274
  end
275
275
 
276
+ context "when the value is castable" do
277
+
278
+ let(:value) do
279
+ 2.hours
280
+ end
281
+
282
+ before do
283
+ expect(value).to be_a(ActiveSupport::Duration)
284
+ end
285
+
286
+ it "returns nil" do
287
+ expect(mongoized).to eq(7200)
288
+ end
289
+ end
290
+
276
291
  context "when the value is nil" do
277
292
 
278
293
  let(:value) do
@@ -100,10 +100,10 @@ describe Mongoid::Extensions::Float do
100
100
  end
101
101
  end
102
102
 
103
- context "when the string is numerical" do
103
+ context "when the string starts with a number" do
104
104
 
105
- it "returns the float value for the string" do
106
- expect(Float.send(method, "3")).to eq(3)
105
+ it "returns nil" do
106
+ expect(Float.send(method, "42bogus")).to be_nil
107
107
  end
108
108
  end
109
109
 
@@ -120,6 +120,13 @@ describe Mongoid::Extensions::Float do
120
120
  expect(Float.send(method, nil)).to be_nil
121
121
  end
122
122
  end
123
+
124
+ context "when giving an object that is castable to an Float" do
125
+
126
+ it "returns the integer value" do
127
+ expect(Float.send(method, 2.hours)).to eq(7200)
128
+ end
129
+ end
123
130
  end
124
131
  end
125
132
  end
@@ -94,10 +94,10 @@ describe Mongoid::Extensions::Integer do
94
94
  end
95
95
  end
96
96
 
97
- context "when the string is numerical" do
97
+ context "when the string starts with a number" do
98
98
 
99
- it "returns the integer value for the string" do
100
- expect(Integer.send(method, "3")).to eq(3)
99
+ it "returns nil" do
100
+ expect(Integer.send(method, "42bogus")).to be_nil
101
101
  end
102
102
  end
103
103
 
@@ -114,6 +114,13 @@ describe Mongoid::Extensions::Integer do
114
114
  expect(Integer.send(method, nil)).to be_nil
115
115
  end
116
116
  end
117
+
118
+ context "when giving an object that is castable to an Integer" do
119
+
120
+ it "returns the integer value" do
121
+ expect(Integer.send(method, 2.hours)).to eq(7200)
122
+ end
123
+ end
117
124
  end
118
125
  end
119
126
  end
@@ -102,6 +102,29 @@ describe Mongoid::Fields::Localized do
102
102
  end
103
103
  end
104
104
 
105
+ context "when key is a symbol" do
106
+
107
+ let(:value) do
108
+ field.demongoize({ :de => "This is a test" })
109
+ end
110
+
111
+ it "returns the string from the set locale" do
112
+ expect(value).to eq("This is a test")
113
+ end
114
+ end
115
+
116
+
117
+ context "passing a bogus value" do
118
+
119
+ let(:value) do
120
+ field.demongoize("bogus")
121
+ end
122
+
123
+ it "returns nil" do
124
+ expect(value).to be_nil
125
+ end
126
+ end
127
+
105
128
  context "when the value does not exist" do
106
129
 
107
130
  context "when not using fallbacks" do
@@ -117,10 +140,7 @@ describe Mongoid::Fields::Localized do
117
140
 
118
141
  context "when using fallbacks" do
119
142
 
120
- before(:all) do
121
- require "i18n/backend/fallbacks"
122
- I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)
123
- end
143
+ with_i18n_fallbacks
124
144
 
125
145
  context "when fallbacks are defined" do
126
146
 
@@ -139,6 +159,17 @@ describe Mongoid::Fields::Localized do
139
159
  end
140
160
  end
141
161
 
162
+ context "when the fallback translation exists and is a symbol" do
163
+
164
+ let(:value) do
165
+ field.demongoize({ :es => "testing" })
166
+ end
167
+
168
+ it "returns the fallback translation" do
169
+ expect(value).to eq("testing")
170
+ end
171
+ end
172
+
142
173
  context "when another fallback translation exists" do
143
174
 
144
175
  let(:value) do
@@ -275,10 +306,7 @@ describe Mongoid::Fields::Localized do
275
306
 
276
307
  context "when using fallbacks" do
277
308
 
278
- before(:all) do
279
- require "i18n/backend/fallbacks"
280
- I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)
281
- end
309
+ with_i18n_fallbacks
282
310
 
283
311
  context "when fallbacks are defined" do
284
312
 
@@ -476,10 +504,7 @@ describe Mongoid::Fields::Localized do
476
504
 
477
505
  context "when fallbacks are defined" do
478
506
 
479
- before(:all) do
480
- require "i18n/backend/fallbacks"
481
- I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)
482
- end
507
+ with_i18n_fallbacks
483
508
 
484
509
  context "when the lookup does not need to use fallbacks" do
485
510
 
@@ -223,8 +223,11 @@ describe Mongoid::Indexable do
223
223
  let(:klass) do
224
224
  Class.new do
225
225
  include Mongoid::Document
226
- field :a, as: :authentication_token
226
+
227
227
  store_in collection: :specs
228
+
229
+ field :a, as: :authentication_token
230
+ field :username
228
231
  end
229
232
  end
230
233
 
@@ -588,6 +591,25 @@ describe Mongoid::Indexable do
588
591
  end
589
592
  end
590
593
 
594
+ context "when using a wildcard index" do
595
+
596
+ before do
597
+ klass.index({ '$**': 1 }, wildcard_projection: { _id: 1, username: 0 })
598
+ end
599
+
600
+ let(:spec) do
601
+ klass.index_specification('$**': 1)
602
+ end
603
+
604
+ it "creates the index" do
605
+ expect(spec).to be_a(Mongoid::Indexable::Specification)
606
+ end
607
+
608
+ it "sets the index with correct options" do
609
+ expect(spec.options).to eq(wildcard_projection: { _id: 1, username: 0 })
610
+ end
611
+ end
612
+
591
613
  context "when providing an invalid option" do
592
614
 
593
615
  it "raises an error" do
@@ -481,27 +481,45 @@ describe Mongoid::Scopable do
481
481
 
482
482
  context "when a block is provided" do
483
483
 
484
- before do
485
- Band.scope(:active, ->{ Band.where(active: true) }) do
486
- def add_origin
487
- tap { |c| c.selector[:origin] = "Deutschland" }
488
- end
484
+ context "when with optional and keyword arguments" do
485
+ before do
486
+ Band.scope(:named_by, ->(name, deleted: false) {
487
+ Band.where(name: name, deleted: deleted)
488
+ })
489
489
  end
490
- end
491
490
 
492
- after do
493
- class << Band
494
- undef_method :active
491
+ let(:scope) do
492
+ Band.named_by("Emily", deleted: true)
495
493
  end
496
- Band._declared_scopes.clear
497
- end
498
494
 
499
- let(:scope) do
500
- Band.active.add_origin
495
+ it "sets the conditions from keyword arguments" do
496
+ scope.selector.should == {'name' => 'Emily', 'deleted' => true}
497
+ end
501
498
  end
502
499
 
503
- it "adds the extension to the scope" do
504
- expect(scope.selector).to eq({ "active" => true, "origin" => "Deutschland" })
500
+ context "when without arguments" do
501
+ before do
502
+ Band.scope(:active, ->{ Band.where(active: true) }) do
503
+ def add_origin
504
+ tap { |c| c.selector[:origin] = "Deutschland" }
505
+ end
506
+ end
507
+ end
508
+
509
+ after do
510
+ class << Band
511
+ undef_method :active
512
+ end
513
+ Band._declared_scopes.clear
514
+ end
515
+
516
+ let(:scope) do
517
+ Band.active.add_origin
518
+ end
519
+
520
+ it "adds the extension to the scope" do
521
+ expect(scope.selector).to eq({ "active" => true, "origin" => "Deutschland" })
522
+ end
505
523
  end
506
524
  end
507
525
 
@@ -1173,7 +1191,7 @@ describe Mongoid::Scopable do
1173
1191
  end
1174
1192
  end
1175
1193
 
1176
- context 'when nesting unsoped under with_scope' do
1194
+ context 'when nesting unscoped under with_scope' do
1177
1195
  let(:c1) { Band.where(active: true) }
1178
1196
 
1179
1197
  it 'restores previous scope' do
@@ -2476,7 +2476,6 @@ describe Mongoid::Validatable::UniquenessValidator do
2476
2476
  describe "i18n" do
2477
2477
 
2478
2478
  context 'when using a different locale' do
2479
-
2480
2479
  around do |example|
2481
2480
  I18n.with_locale(:fr) { example.run }
2482
2481
  end