mongoid 2.4.0 → 2.4.12

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 (107) hide show
  1. data/CHANGELOG.md +329 -1
  2. data/Rakefile +0 -9
  3. data/lib/config/locales/bg.yml +1 -0
  4. data/lib/config/locales/de.yml +1 -0
  5. data/lib/config/locales/en-GB.yml +1 -0
  6. data/lib/config/locales/en.yml +1 -0
  7. data/lib/config/locales/es.yml +1 -0
  8. data/lib/config/locales/fr.yml +1 -0
  9. data/lib/config/locales/hi.yml +1 -0
  10. data/lib/config/locales/hu.yml +1 -0
  11. data/lib/config/locales/id.yml +1 -0
  12. data/lib/config/locales/it.yml +1 -0
  13. data/lib/config/locales/ja.yml +1 -0
  14. data/lib/config/locales/kr.yml +1 -0
  15. data/lib/config/locales/nl.yml +1 -0
  16. data/lib/config/locales/pl.yml +1 -0
  17. data/lib/config/locales/pt-BR.yml +1 -0
  18. data/lib/config/locales/pt.yml +1 -0
  19. data/lib/config/locales/ro.yml +1 -0
  20. data/lib/config/locales/ru.yml +1 -0
  21. data/lib/config/locales/sv.yml +1 -0
  22. data/lib/config/locales/vi.yml +1 -0
  23. data/lib/config/locales/zh-CN.yml +1 -0
  24. data/lib/mongoid/atomic/modifiers.rb +56 -15
  25. data/lib/mongoid/atomic.rb +14 -8
  26. data/lib/mongoid/attributes.rb +1 -1
  27. data/lib/mongoid/callbacks.rb +3 -3
  28. data/lib/mongoid/collection.rb +5 -1
  29. data/lib/mongoid/collections/retry.rb +2 -1
  30. data/lib/mongoid/components.rb +2 -1
  31. data/lib/mongoid/config/database.rb +4 -7
  32. data/lib/mongoid/config/environment.rb +4 -2
  33. data/lib/mongoid/config/replset_database.rb +3 -5
  34. data/lib/mongoid/config.rb +18 -0
  35. data/lib/mongoid/contexts/enumerable.rb +26 -1
  36. data/lib/mongoid/contexts/mongo.rb +62 -14
  37. data/lib/mongoid/copyable.rb +38 -8
  38. data/lib/mongoid/criteria.rb +1 -0
  39. data/lib/mongoid/criterion/exclusion.rb +3 -1
  40. data/lib/mongoid/criterion/inclusion.rb +2 -2
  41. data/lib/mongoid/criterion/optional.rb +2 -2
  42. data/lib/mongoid/criterion/selector.rb +25 -4
  43. data/lib/mongoid/cursor.rb +4 -2
  44. data/lib/mongoid/dirty.rb +61 -18
  45. data/lib/mongoid/document.rb +6 -2
  46. data/lib/mongoid/extensions/hash/criteria_helpers.rb +3 -1
  47. data/lib/mongoid/extensions/string/inflections.rb +1 -1
  48. data/lib/mongoid/factory.rb +3 -3
  49. data/lib/mongoid/fields/internal/array.rb +4 -9
  50. data/lib/mongoid/fields/internal/big_decimal.rb +7 -1
  51. data/lib/mongoid/fields/internal/date_time.rb +1 -1
  52. data/lib/mongoid/fields/internal/false_class.rb +10 -0
  53. data/lib/mongoid/fields/internal/foreign_keys/array.rb +22 -8
  54. data/lib/mongoid/fields/internal/set.rb +1 -1
  55. data/lib/mongoid/fields/internal/timekeeping.rb +2 -1
  56. data/lib/mongoid/fields/internal/true_class.rb +10 -0
  57. data/lib/mongoid/fields/mappings.rb +14 -13
  58. data/lib/mongoid/fields/serializable.rb +41 -3
  59. data/lib/mongoid/fields.rb +154 -26
  60. data/lib/mongoid/hierarchy.rb +6 -1
  61. data/lib/mongoid/identity_map.rb +15 -0
  62. data/lib/mongoid/logger.rb +7 -1
  63. data/lib/mongoid/matchers/all.rb +8 -1
  64. data/lib/mongoid/matchers/in.rb +8 -1
  65. data/lib/mongoid/matchers/strategies.rb +6 -2
  66. data/lib/mongoid/multi_database.rb +5 -0
  67. data/lib/mongoid/named_scope.rb +17 -1
  68. data/lib/mongoid/nested_attributes.rb +1 -1
  69. data/lib/mongoid/observer.rb +7 -0
  70. data/lib/mongoid/persistence/insertion.rb +2 -1
  71. data/lib/mongoid/persistence/operations/update.rb +0 -9
  72. data/lib/mongoid/persistence.rb +5 -5
  73. data/lib/mongoid/railtie.rb +22 -4
  74. data/lib/mongoid/relations/bindings/referenced/in.rb +31 -11
  75. data/lib/mongoid/relations/bindings/referenced/many.rb +8 -8
  76. data/lib/mongoid/relations/bindings/referenced/one.rb +8 -8
  77. data/lib/mongoid/relations/builders/nested_attributes/many.rb +3 -1
  78. data/lib/mongoid/relations/cascading/delete.rb +29 -2
  79. data/lib/mongoid/relations/cascading/destroy.rb +18 -1
  80. data/lib/mongoid/relations/cascading/nullify.rb +18 -1
  81. data/lib/mongoid/relations/cascading.rb +0 -1
  82. data/lib/mongoid/relations/embedded/atomic.rb +3 -3
  83. data/lib/mongoid/relations/embedded/many.rb +58 -26
  84. data/lib/mongoid/relations/embedded/one.rb +1 -1
  85. data/lib/mongoid/relations/metadata.rb +33 -1
  86. data/lib/mongoid/relations/one.rb +12 -0
  87. data/lib/mongoid/relations/proxy.rb +6 -3
  88. data/lib/mongoid/relations/referenced/many.rb +14 -9
  89. data/lib/mongoid/relations/referenced/many_to_many.rb +3 -4
  90. data/lib/mongoid/relations/targets/enumerable.rb +9 -3
  91. data/lib/mongoid/relations.rb +3 -1
  92. data/lib/mongoid/serialization.rb +18 -6
  93. data/lib/mongoid/state.rb +1 -1
  94. data/lib/mongoid/threaded.rb +26 -0
  95. data/lib/mongoid/timestamps/updated.rb +1 -1
  96. data/lib/mongoid/validations/format.rb +20 -0
  97. data/lib/mongoid/validations/length.rb +20 -0
  98. data/lib/mongoid/validations/localizable.rb +30 -0
  99. data/lib/mongoid/validations/presence.rb +6 -2
  100. data/lib/mongoid/validations/uniqueness.rb +162 -30
  101. data/lib/mongoid/validations.rb +54 -2
  102. data/lib/mongoid/version.rb +1 -1
  103. data/lib/mongoid/versioning.rb +12 -3
  104. data/lib/mongoid.rb +1 -0
  105. data/lib/rails/mongoid.rb +18 -12
  106. metadata +58 -41
  107. data/lib/mongoid/relations/cascading/strategy.rb +0 -26
@@ -40,7 +40,16 @@ module Mongoid #:nodoc:
40
40
  previous.versioned_attributes, :without_protection => true
41
41
  ).attributes.delete("_id")
42
42
  if version_max.present? && versions.length > version_max
43
- versions.delete(versions.first)
43
+ deleted = versions.first
44
+ if deleted.paranoid?
45
+ versions.delete_one(deleted)
46
+ collection.update(
47
+ atomic_selector,
48
+ { "$pull" => { "versions" => { "version" => deleted.version }}}
49
+ )
50
+ else
51
+ versions.delete(deleted)
52
+ end
44
53
  end
45
54
  self.version = (version || 1 ) + 1
46
55
  end
@@ -69,7 +78,7 @@ module Mongoid #:nodoc:
69
78
  #
70
79
  # @since 2.1.0
71
80
  def versioned_changes
72
- only_versioned_attributes(changes)
81
+ only_versioned_attributes(changes.except("updated_at"))
73
82
  end
74
83
 
75
84
  # Filters the results of +attributes+ by removing any fields that should
@@ -122,7 +131,7 @@ module Mongoid #:nodoc:
122
131
  # @since 2.0.0
123
132
  def previous_revision
124
133
  _loading_revision do
125
- self.class.
134
+ self.class.unscoped.
126
135
  where(:_id => id).
127
136
  any_of({ :version => version }, { :version => nil }).first
128
137
  end
data/lib/mongoid.rb CHANGED
@@ -73,6 +73,7 @@ require "mongoid/sharding"
73
73
  require "mongoid/state"
74
74
  require "mongoid/timestamps"
75
75
  require "mongoid/validations"
76
+ require "mongoid/version"
76
77
  require "mongoid/versioning"
77
78
  require "mongoid/components"
78
79
  require "mongoid/paranoia"
data/lib/rails/mongoid.rb CHANGED
@@ -15,22 +15,21 @@ module Rails #:nodoc:
15
15
  #
16
16
  # @since 2.1.0
17
17
  def create_indexes(pattern)
18
- logger = Logger.new($stdout)
19
18
  Dir.glob(pattern).each do |file|
20
19
  logger = Logger.new($stdout)
21
20
  begin
22
- model = determine_model(file)
23
- if model
24
- model.create_indexes
25
- logger.info("Generated indexes for #{model}")
26
- else
27
- logger.info("Not a Mongoid parent model: #{file}")
28
- end
21
+ model = determine_model(file, logger)
29
22
  rescue => e
30
- logger.error %Q{Failed to create indexes for #{model}:
23
+ logger.error(%Q{Failed to determine model from #{file}:
31
24
  #{e.class}:#{e.message}
32
25
  #{e.backtrace.join("\n")}
33
- }
26
+ })
27
+ end
28
+ if model
29
+ model.create_indexes
30
+ logger.info("Generated indexes for #{model}")
31
+ else
32
+ logger.info("Not a Mongoid parent model: #{file}")
34
33
  end
35
34
  end
36
35
  end
@@ -84,10 +83,17 @@ module Rails #:nodoc:
84
83
  # @return [ Class ] The model.
85
84
  #
86
85
  # @since 2.1.0
87
- def determine_model(file)
86
+ def determine_model(file, logger)
88
87
  if file =~ /app\/models\/(.*).rb$/
89
88
  model_path = $1.split('/')
90
- klass = model_path.map { |path| path.camelize }.join('::').constantize
89
+ begin
90
+ parts = model_path.map { |path| path.camelize }
91
+ name = parts.join("::")
92
+ klass = name.constantize
93
+ rescue NameError, LoadError => e
94
+ logger.info("Attempted to constantize #{name}, trying without namespacing.")
95
+ klass = parts.last.constantize
96
+ end
91
97
  if klass.ancestors.include?(::Mongoid::Document) && !klass.embedded
92
98
  return klass
93
99
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.0
4
+ version: 2.4.12
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-01-05 00:00:00.000000000 Z
12
+ date: 2012-07-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activemodel
16
- requirement: &70168048476500 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,15 @@ dependencies:
21
21
  version: '3.1'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70168048476500
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '3.1'
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: tzinfo
27
- requirement: &70168048475740 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ~>
@@ -32,32 +37,31 @@ dependencies:
32
37
  version: 0.3.22
33
38
  type: :runtime
34
39
  prerelease: false
35
- version_requirements: *70168048475740
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 0.3.22
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: mongo
38
- requirement: &70168048474680 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
39
49
  none: false
40
50
  requirements:
41
- - - ~>
51
+ - - <=
42
52
  - !ruby/object:Gem::Version
43
- version: '1.3'
53
+ version: 1.6.2
44
54
  type: :runtime
45
55
  prerelease: false
46
- version_requirements: *70168048474680
47
- - !ruby/object:Gem::Dependency
48
- name: rdoc
49
- requirement: &70168048473620 !ruby/object:Gem::Requirement
56
+ version_requirements: !ruby/object:Gem::Requirement
50
57
  none: false
51
58
  requirements:
52
- - - ~>
59
+ - - <=
53
60
  - !ruby/object:Gem::Version
54
- version: 3.5.0
55
- type: :development
56
- prerelease: false
57
- version_requirements: *70168048473620
61
+ version: 1.6.2
58
62
  - !ruby/object:Gem::Dependency
59
63
  name: bson_ext
60
- requirement: &70168048473140 !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
61
65
  none: false
62
66
  requirements:
63
67
  - - ~>
@@ -65,51 +69,60 @@ dependencies:
65
69
  version: '1.3'
66
70
  type: :development
67
71
  prerelease: false
68
- version_requirements: *70168048473140
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: '1.3'
69
78
  - !ruby/object:Gem::Dependency
70
79
  name: mocha
71
- requirement: &70168048472640 !ruby/object:Gem::Requirement
80
+ requirement: !ruby/object:Gem::Requirement
72
81
  none: false
73
82
  requirements:
74
- - - ~>
83
+ - - '='
75
84
  - !ruby/object:Gem::Version
76
- version: 0.9.12
85
+ version: '0.11'
77
86
  type: :development
78
87
  prerelease: false
79
- version_requirements: *70168048472640
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - '='
92
+ - !ruby/object:Gem::Version
93
+ version: '0.11'
80
94
  - !ruby/object:Gem::Dependency
81
95
  name: rspec
82
- requirement: &70168048472160 !ruby/object:Gem::Requirement
96
+ requirement: !ruby/object:Gem::Requirement
83
97
  none: false
84
98
  requirements:
85
99
  - - ~>
86
100
  - !ruby/object:Gem::Version
87
- version: '2.6'
101
+ version: '2.10'
88
102
  type: :development
89
103
  prerelease: false
90
- version_requirements: *70168048472160
91
- - !ruby/object:Gem::Dependency
92
- name: watchr
93
- requirement: &70168048471300 !ruby/object:Gem::Requirement
104
+ version_requirements: !ruby/object:Gem::Requirement
94
105
  none: false
95
106
  requirements:
96
107
  - - ~>
97
108
  - !ruby/object:Gem::Version
98
- version: '0.6'
99
- type: :development
100
- prerelease: false
101
- version_requirements: *70168048471300
109
+ version: '2.10'
102
110
  - !ruby/object:Gem::Dependency
103
- name: ammeter
104
- requirement: &70168048470800 !ruby/object:Gem::Requirement
111
+ name: guard-rspec
112
+ requirement: !ruby/object:Gem::Requirement
105
113
  none: false
106
114
  requirements:
107
115
  - - ~>
108
116
  - !ruby/object:Gem::Version
109
- version: 0.1.3
117
+ version: '0.7'
110
118
  type: :development
111
119
  prerelease: false
112
- version_requirements: *70168048470800
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ~>
124
+ - !ruby/object:Gem::Version
125
+ version: '0.7'
113
126
  description: Mongoid is an ODM (Object Document Mapper) Framework for MongoDB, written
114
127
  in Ruby.
115
128
  email:
@@ -229,6 +242,7 @@ files:
229
242
  - lib/mongoid/fields/internal/boolean.rb
230
243
  - lib/mongoid/fields/internal/date.rb
231
244
  - lib/mongoid/fields/internal/date_time.rb
245
+ - lib/mongoid/fields/internal/false_class.rb
232
246
  - lib/mongoid/fields/internal/fixnum.rb
233
247
  - lib/mongoid/fields/internal/float.rb
234
248
  - lib/mongoid/fields/internal/foreign_keys/array.rb
@@ -246,6 +260,7 @@ files:
246
260
  - lib/mongoid/fields/internal/time.rb
247
261
  - lib/mongoid/fields/internal/time_with_zone.rb
248
262
  - lib/mongoid/fields/internal/timekeeping.rb
263
+ - lib/mongoid/fields/internal/true_class.rb
249
264
  - lib/mongoid/fields/mappings.rb
250
265
  - lib/mongoid/fields/serializable.rb
251
266
  - lib/mongoid/fields.rb
@@ -332,7 +347,6 @@ files:
332
347
  - lib/mongoid/relations/cascading/delete.rb
333
348
  - lib/mongoid/relations/cascading/destroy.rb
334
349
  - lib/mongoid/relations/cascading/nullify.rb
335
- - lib/mongoid/relations/cascading/strategy.rb
336
350
  - lib/mongoid/relations/cascading.rb
337
351
  - lib/mongoid/relations/constraint.rb
338
352
  - lib/mongoid/relations/conversions.rb
@@ -378,6 +392,9 @@ files:
378
392
  - lib/mongoid/timestamps/updated.rb
379
393
  - lib/mongoid/timestamps.rb
380
394
  - lib/mongoid/validations/associated.rb
395
+ - lib/mongoid/validations/format.rb
396
+ - lib/mongoid/validations/length.rb
397
+ - lib/mongoid/validations/localizable.rb
381
398
  - lib/mongoid/validations/presence.rb
382
399
  - lib/mongoid/validations/uniqueness.rb
383
400
  - lib/mongoid/validations.rb
@@ -412,7 +429,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
412
429
  version: '0'
413
430
  segments:
414
431
  - 0
415
- hash: -3374480126099241138
432
+ hash: 1387804886696110534
416
433
  required_rubygems_version: !ruby/object:Gem::Requirement
417
434
  none: false
418
435
  requirements:
@@ -421,7 +438,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
421
438
  version: 1.3.6
422
439
  requirements: []
423
440
  rubyforge_project: mongoid
424
- rubygems_version: 1.8.10
441
+ rubygems_version: 1.8.24
425
442
  signing_key:
426
443
  specification_version: 3
427
444
  summary: Elegant Persistance in Ruby for MongoDB.
@@ -1,26 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid # :nodoc:
3
- module Relations #:nodoc:
4
- module Cascading #:nodoc:
5
- class Strategy
6
-
7
- attr_accessor :document, :relation, :metadata
8
-
9
- # Initialize the new cascade strategy, which will set up the relation
10
- # and the metadata.
11
- #
12
- # @example Instantiate the strategy
13
- # Strategy.new(document, metadata)
14
- #
15
- # @param [ Document ] document The document to cascade from.
16
- # @param [ Metadata ] metadata The relation's metadata.
17
- #
18
- # @return [ Strategy ] The new strategy.
19
- def initialize(document, metadata)
20
- @document, @metadata = document, metadata
21
- @relation = document.send(metadata.name)
22
- end
23
- end
24
- end
25
- end
26
- end