mongomodel 0.5.5 → 0.5.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (156) hide show
  1. checksums.yaml +5 -5
  2. data/.travis.yml +23 -11
  3. data/gemfiles/rails-3.2.gemfile +2 -2
  4. data/gemfiles/rails-4-observers.gemfile +1 -1
  5. data/gemfiles/rails-4.1.gemfile +2 -2
  6. data/gemfiles/{mongoid.gemfile → rails-4.2.gemfile} +2 -3
  7. data/gemfiles/{mongo_mapper.gemfile → rails-5.0.gemfile} +2 -3
  8. data/gemfiles/rails-5.1.gemfile +10 -0
  9. data/gemfiles/rails-5.2.gemfile +10 -0
  10. data/lib/mongomodel.rb +15 -15
  11. data/lib/mongomodel/attributes/mongo.rb +7 -7
  12. data/lib/mongomodel/attributes/store.rb +4 -4
  13. data/lib/mongomodel/attributes/typecasting.rb +7 -7
  14. data/lib/mongomodel/compatibility/mongo_mapper.rb +3 -3
  15. data/lib/mongomodel/compatibility/mongoid.rb +3 -3
  16. data/lib/mongomodel/concerns/abstract_class.rb +3 -3
  17. data/lib/mongomodel/concerns/activemodel.rb +4 -4
  18. data/lib/mongomodel/concerns/associations.rb +8 -8
  19. data/lib/mongomodel/concerns/associations/base/association.rb +5 -5
  20. data/lib/mongomodel/concerns/associations/base/definition.rb +4 -4
  21. data/lib/mongomodel/concerns/associations/base/proxy.rb +1 -1
  22. data/lib/mongomodel/concerns/associations/belongs_to.rb +19 -19
  23. data/lib/mongomodel/concerns/associations/has_many_by_foreign_key.rb +36 -36
  24. data/lib/mongomodel/concerns/associations/has_many_by_ids.rb +34 -34
  25. data/lib/mongomodel/concerns/attribute_methods.rb +10 -10
  26. data/lib/mongomodel/concerns/attribute_methods/before_type_cast.rb +4 -4
  27. data/lib/mongomodel/concerns/attribute_methods/dirty.rb +95 -13
  28. data/lib/mongomodel/concerns/attribute_methods/forbidden.rb +1 -1
  29. data/lib/mongomodel/concerns/attribute_methods/multi_parameter_assignment.rb +6 -6
  30. data/lib/mongomodel/concerns/attribute_methods/nested.rb +18 -18
  31. data/lib/mongomodel/concerns/attribute_methods/protected.rb +3 -3
  32. data/lib/mongomodel/concerns/attribute_methods/query.rb +3 -3
  33. data/lib/mongomodel/concerns/attribute_methods/read.rb +4 -4
  34. data/lib/mongomodel/concerns/attribute_methods/write.rb +4 -4
  35. data/lib/mongomodel/concerns/attributes.rb +18 -18
  36. data/lib/mongomodel/concerns/callbacks.rb +7 -7
  37. data/lib/mongomodel/concerns/document_parent.rb +2 -2
  38. data/lib/mongomodel/concerns/logging.rb +2 -2
  39. data/lib/mongomodel/concerns/map_reduce.rb +11 -11
  40. data/lib/mongomodel/concerns/pretty_inspect.rb +3 -3
  41. data/lib/mongomodel/concerns/properties.rb +18 -18
  42. data/lib/mongomodel/concerns/record_status.rb +9 -13
  43. data/lib/mongomodel/concerns/serialization.rb +4 -4
  44. data/lib/mongomodel/concerns/timestamps.rb +4 -4
  45. data/lib/mongomodel/concerns/translation.rb +2 -2
  46. data/lib/mongomodel/concerns/validations.rb +5 -5
  47. data/lib/mongomodel/concerns/validations/associated.rb +1 -1
  48. data/lib/mongomodel/document.rb +6 -6
  49. data/lib/mongomodel/document/callbacks.rb +15 -21
  50. data/lib/mongomodel/document/collection_modifiers.rb +5 -5
  51. data/lib/mongomodel/document/dynamic_finders.rb +1 -1
  52. data/lib/mongomodel/document/indexes.rb +19 -19
  53. data/lib/mongomodel/document/optimistic_locking.rb +7 -7
  54. data/lib/mongomodel/document/persistence.rb +23 -23
  55. data/lib/mongomodel/document/scopes.rb +20 -20
  56. data/lib/mongomodel/document/validations.rb +6 -6
  57. data/lib/mongomodel/document/validations/uniqueness.rb +11 -11
  58. data/lib/mongomodel/embedded_document.rb +11 -11
  59. data/lib/mongomodel/locale/en.yml +0 -1
  60. data/lib/mongomodel/log_subscriber.rb +5 -5
  61. data/lib/mongomodel/railtie.rb +13 -13
  62. data/lib/mongomodel/support/collection.rb +31 -31
  63. data/lib/mongomodel/support/configuration.rb +11 -11
  64. data/lib/mongomodel/support/core_extensions.rb +1 -1
  65. data/lib/mongomodel/support/dynamic_finder.rb +12 -12
  66. data/lib/mongomodel/support/exceptions.rb +6 -6
  67. data/lib/mongomodel/support/instrumented_collection.rb +20 -20
  68. data/lib/mongomodel/support/map.rb +33 -33
  69. data/lib/mongomodel/support/mongo_operator.rb +6 -6
  70. data/lib/mongomodel/support/mongo_options.rb +18 -18
  71. data/lib/mongomodel/support/mongo_order.rb +16 -16
  72. data/lib/mongomodel/support/paginator.rb +8 -8
  73. data/lib/mongomodel/support/reference.rb +10 -10
  74. data/lib/mongomodel/support/scope.rb +37 -37
  75. data/lib/mongomodel/support/scope/array_methods.rb +1 -1
  76. data/lib/mongomodel/support/scope/batches.rb +1 -1
  77. data/lib/mongomodel/support/scope/dynamic_finders.rb +1 -1
  78. data/lib/mongomodel/support/scope/finder_methods.rb +7 -7
  79. data/lib/mongomodel/support/scope/load_methods.rb +1 -1
  80. data/lib/mongomodel/support/scope/pagination.rb +1 -1
  81. data/lib/mongomodel/support/scope/query_methods.rb +6 -6
  82. data/lib/mongomodel/support/scope/spawn_methods.rb +8 -8
  83. data/lib/mongomodel/support/types.rb +2 -2
  84. data/lib/mongomodel/support/types/array.rb +1 -1
  85. data/lib/mongomodel/support/types/boolean.rb +3 -3
  86. data/lib/mongomodel/support/types/custom.rb +3 -3
  87. data/lib/mongomodel/support/types/date.rb +2 -2
  88. data/lib/mongomodel/support/types/date_time.rb +6 -16
  89. data/lib/mongomodel/support/types/float.rb +1 -1
  90. data/lib/mongomodel/support/types/hash.rb +1 -1
  91. data/lib/mongomodel/support/types/integer.rb +13 -10
  92. data/lib/mongomodel/support/types/object.rb +5 -5
  93. data/lib/mongomodel/support/types/rational.rb +3 -3
  94. data/lib/mongomodel/support/types/time.rb +2 -2
  95. data/lib/mongomodel/version.rb +1 -1
  96. data/lib/rails/generators/mongo_model/config/templates/mongomodel.yml +3 -4
  97. data/lib/rails/generators/mongo_model/model/model_generator.rb +3 -3
  98. data/mongomodel.gemspec +5 -4
  99. data/spec/mongomodel/attributes/store_spec.rb +21 -21
  100. data/spec/mongomodel/concerns/activemodel_spec.rb +4 -4
  101. data/spec/mongomodel/concerns/associations/base/association_spec.rb +12 -12
  102. data/spec/mongomodel/concerns/associations/belongs_to_spec.rb +34 -21
  103. data/spec/mongomodel/concerns/associations/has_many_by_foreign_key_spec.rb +53 -53
  104. data/spec/mongomodel/concerns/associations/has_many_by_ids_spec.rb +30 -30
  105. data/spec/mongomodel/concerns/attribute_methods/before_type_cast_spec.rb +7 -7
  106. data/spec/mongomodel/concerns/attribute_methods/dirty_spec.rb +45 -41
  107. data/spec/mongomodel/concerns/attribute_methods/multi_parameter_assignment_spec.rb +7 -7
  108. data/spec/mongomodel/concerns/attribute_methods/nested_spec.rb +31 -31
  109. data/spec/mongomodel/concerns/attribute_methods/protected_spec.rb +15 -15
  110. data/spec/mongomodel/concerns/attribute_methods/query_spec.rb +19 -19
  111. data/spec/mongomodel/concerns/attribute_methods/read_spec.rb +9 -9
  112. data/spec/mongomodel/concerns/attribute_methods/write_spec.rb +6 -6
  113. data/spec/mongomodel/concerns/attribute_methods_spec.rb +13 -13
  114. data/spec/mongomodel/concerns/attributes_spec.rb +34 -34
  115. data/spec/mongomodel/concerns/callbacks_spec.rb +25 -21
  116. data/spec/mongomodel/concerns/logging_spec.rb +5 -3
  117. data/spec/mongomodel/concerns/map_reduce_spec.rb +19 -19
  118. data/spec/mongomodel/concerns/observing_spec.rb +3 -3
  119. data/spec/mongomodel/concerns/pretty_inspect_spec.rb +10 -10
  120. data/spec/mongomodel/concerns/properties_spec.rb +11 -11
  121. data/spec/mongomodel/concerns/serialization/json_serialization_spec.rb +13 -13
  122. data/spec/mongomodel/concerns/timestamps_spec.rb +39 -39
  123. data/spec/mongomodel/concerns/validations_spec.rb +41 -38
  124. data/spec/mongomodel/document/callbacks_spec.rb +20 -16
  125. data/spec/mongomodel/document/collection_modifiers_spec.rb +16 -16
  126. data/spec/mongomodel/document/dynamic_finders_spec.rb +46 -46
  127. data/spec/mongomodel/document/finders_spec.rb +15 -15
  128. data/spec/mongomodel/document/indexes_spec.rb +29 -29
  129. data/spec/mongomodel/document/optimistic_locking_spec.rb +16 -16
  130. data/spec/mongomodel/document/persistence_spec.rb +39 -39
  131. data/spec/mongomodel/document/scopes_spec.rb +17 -17
  132. data/spec/mongomodel/document/validations/uniqueness_spec.rb +46 -46
  133. data/spec/mongomodel/document/validations_spec.rb +35 -35
  134. data/spec/mongomodel/document_spec.rb +19 -19
  135. data/spec/mongomodel/embedded_document_spec.rb +19 -19
  136. data/spec/mongomodel/mongomodel_spec.rb +7 -6
  137. data/spec/mongomodel/support/collection_spec.rb +54 -54
  138. data/spec/mongomodel/support/configuration_spec.rb +1 -1
  139. data/spec/mongomodel/support/map_spec.rb +66 -66
  140. data/spec/mongomodel/support/mongo_operator_spec.rb +5 -5
  141. data/spec/mongomodel/support/mongo_options_spec.rb +42 -42
  142. data/spec/mongomodel/support/mongo_order_spec.rb +24 -24
  143. data/spec/mongomodel/support/paginator_spec.rb +15 -15
  144. data/spec/mongomodel/support/property_spec.rb +29 -23
  145. data/spec/mongomodel/support/scope_spec.rb +205 -204
  146. data/spec/spec_helper.rb +13 -2
  147. data/spec/support/callbacks.rb +3 -8
  148. data/spec/support/helpers/define_class.rb +7 -7
  149. data/spec/support/helpers/document_finder_stubs.rb +6 -6
  150. data/spec/support/helpers/specs_for.rb +1 -1
  151. data/spec/support/helpers/validations.rb +1 -1
  152. data/spec/support/matchers/find_with.rb +8 -8
  153. data/spec/support/matchers/respond_to_boolean.rb +3 -3
  154. data/spec/support/matchers/run_callbacks.rb +6 -9
  155. data/spec/support/models.rb +5 -5
  156. metadata +23 -7
@@ -3,12 +3,12 @@ module MongoModel
3
3
  # named created_at/created_on or updated_at/updated_on.
4
4
  module Timestamps #:nodoc:
5
5
  extend ActiveSupport::Concern
6
-
6
+
7
7
  included do
8
8
  before_save :set_update_timestamps
9
9
  before_create :set_create_timestamps
10
10
  end
11
-
11
+
12
12
  module ClassMethods
13
13
  # Defines timestamp properties created_at and updated_at.
14
14
  # When the document is created or updated, these properties will be respectively updated.
@@ -17,13 +17,13 @@ module MongoModel
17
17
  property :updated_at, Time
18
18
  end
19
19
  end
20
-
20
+
21
21
  private
22
22
  def set_update_timestamps
23
23
  write_attribute(:updated_at, Time.now) if properties.include?(:updated_at)
24
24
  write_attribute(:updated_on, Time.now) if properties.include?(:updated_on)
25
25
  end
26
-
26
+
27
27
  def set_create_timestamps
28
28
  write_attribute(:created_at, Time.now) if properties.include?(:created_at) && !query_attribute(:created_at)
29
29
  write_attribute(:created_on, Time.now) if properties.include?(:created_on) && !query_attribute(:created_on)
@@ -1,10 +1,10 @@
1
1
  module MongoModel
2
2
  module Translation
3
3
  extend ActiveSupport::Concern
4
-
4
+
5
5
  module ClassMethods
6
6
  include ActiveModel::Translation
7
-
7
+
8
8
  # Set the i18n scope to overwrite ActiveModel.
9
9
  def i18n_scope #:nodoc:
10
10
  :mongomodel
@@ -1,23 +1,23 @@
1
1
  module MongoModel
2
2
  module Validations
3
3
  extend ActiveSupport::Concern
4
-
4
+
5
5
  include ActiveModel::Validations
6
-
6
+
7
7
  module ClassMethods
8
8
  def property(name, *args, &block) #:nodoc:
9
9
  property = super
10
-
10
+
11
11
  if property.validate?
12
12
  validates_associated(name) if property.embeddable?
13
13
  validates_presence_of(name) if property.options[:required]
14
14
  validates_format_of(name, property.options[:format]) if property.options[:format]
15
15
  end
16
-
16
+
17
17
  property
18
18
  end
19
19
  end
20
-
20
+
21
21
  def valid?(context=nil)
22
22
  context ||= new_record? ? :create : :update
23
23
  super
@@ -6,7 +6,7 @@ module MongoModel
6
6
  record.errors.add(attribute, :invalid, options.merge(:value => value))
7
7
  end
8
8
  end
9
-
9
+
10
10
  module ClassMethods
11
11
  # Validates whether the associated object or objects are all valid themselves. Works with any kind of association.
12
12
  #
@@ -8,20 +8,20 @@ module MongoModel
8
8
  def ==(other)
9
9
  self.class == other.class && id == other.id
10
10
  end
11
-
11
+
12
12
  include DocumentExtensions::Persistence
13
13
  include DocumentExtensions::OptimisticLocking
14
14
  include DocumentExtensions::CollectionModifiers
15
-
15
+
16
16
  extend DocumentExtensions::DynamicFinders
17
17
  include DocumentExtensions::Indexes
18
-
18
+
19
19
  include DocumentExtensions::Scopes
20
20
  include DocumentExtensions::Validations
21
- include DocumentExtensions::Callbacks
22
-
21
+ prepend DocumentExtensions::Callbacks
22
+
23
23
  self.abstract_class = true
24
-
24
+
25
25
  class_attribute :per_page
26
26
  self.per_page = 20
27
27
  end
@@ -2,43 +2,37 @@ module MongoModel
2
2
  module DocumentExtensions
3
3
  module Callbacks
4
4
  extend ActiveSupport::Concern
5
-
6
- included do
7
- [:instantiate, :create_or_update, :create, :update, :destroy].each do |method|
8
- alias_method_chain method, :callbacks
9
- end
10
- end
11
-
12
- def instantiate_with_callbacks(*args) #:nodoc:
13
- instantiate_without_callbacks(*args)
5
+
6
+ def instantiate(*) #:nodoc:
7
+ super
14
8
  run_callbacks_with_embedded(:find)
15
9
  end
16
- private :instantiate_with_callbacks
10
+ private :instantiate
17
11
 
18
- def create_or_update_with_callbacks #:nodoc:
12
+ def create_or_update #:nodoc:
19
13
  run_callbacks_with_embedded(:save) do
20
- create_or_update_without_callbacks
14
+ super
21
15
  end
22
16
  end
23
- private :create_or_update_with_callbacks
17
+ private :create_or_update
24
18
 
25
- def create_with_callbacks #:nodoc:
19
+ def create #:nodoc:
26
20
  run_callbacks_with_embedded(:create) do
27
- create_without_callbacks
21
+ super
28
22
  end
29
23
  end
30
- private :create_with_callbacks
24
+ private :create
31
25
 
32
- def update_with_callbacks(*args) #:nodoc:
26
+ def update(*) #:nodoc:
33
27
  run_callbacks_with_embedded(:update) do
34
- update_without_callbacks(*args)
28
+ super
35
29
  end
36
30
  end
37
- private :update_with_callbacks
31
+ private :update
38
32
 
39
- def destroy_with_callbacks #:nodoc:
33
+ def destroy #:nodoc:
40
34
  run_callbacks_with_embedded(:destroy) do
41
- destroy_without_callbacks
35
+ super
42
36
  end
43
37
  end
44
38
  end
@@ -2,21 +2,21 @@ module MongoModel
2
2
  module DocumentExtensions
3
3
  module CollectionModifiers
4
4
  extend ActiveSupport::Concern
5
-
5
+
6
6
  METHODS = [ :increment!, :increase!, :set!, :unset!, :push!, :push_all!, :add_to_set!, :pull!, :pull_all!, :pop!, :shift!, :rename! ]
7
-
7
+
8
8
  # Define methods manually rather than use Module#delegate as it raises false deprecation warnings.
9
9
  METHODS.each do |modifier|
10
10
  define_method(modifier) do |*args|
11
11
  instance_scope.send(modifier, *args)
12
12
  end
13
13
  end
14
-
14
+
15
15
  private
16
16
  def instance_scope
17
17
  self.class.where(:id => id)
18
18
  end
19
-
19
+
20
20
  module ClassMethods
21
21
  # Post.increment!(:hits => 1, :available => -1)
22
22
  # This method is also aliased as increase!
@@ -45,7 +45,7 @@ module MongoModel
45
45
  def push_all!(args)
46
46
  collection_modifier_update('$pushAll', args)
47
47
  end
48
-
48
+
49
49
  # Post.add_to_set!(:tags => 'xxx')
50
50
  def add_to_set!(args)
51
51
  collection_modifier_update('$addToSet', args)
@@ -8,7 +8,7 @@ module MongoModel
8
8
  super
9
9
  end
10
10
  end
11
-
11
+
12
12
  def method_missing(method_id, *args, &block)
13
13
  if finder = DynamicFinder.match(scoped, method_id)
14
14
  finder.execute(*args)
@@ -4,26 +4,26 @@ module MongoModel
4
4
  module DocumentExtensions
5
5
  module Indexes
6
6
  extend ActiveSupport::Concern
7
-
7
+
8
8
  included do
9
9
  index :_type
10
10
  end
11
-
11
+
12
12
  module ClassMethods
13
13
  def property(name, *args, &block) #:nodoc:
14
14
  property = super
15
15
  index(name) if property.options[:index]
16
16
  property
17
17
  end
18
-
18
+
19
19
  def indexes
20
20
  @_indexes ||= []
21
21
  end
22
-
22
+
23
23
  def indexes=(indexes)
24
24
  @_indexes = indexes
25
25
  end
26
-
26
+
27
27
  def index(*args)
28
28
  index = Index.new(*args)
29
29
  self.indexes << index
@@ -42,7 +42,7 @@ module MongoModel
42
42
 
43
43
  @_indexes_initialized = true
44
44
  end
45
-
45
+
46
46
  def inherited(subclass)
47
47
  super
48
48
  subclass.indexes = indexes.dup
@@ -50,41 +50,41 @@ module MongoModel
50
50
  end
51
51
  end
52
52
  end
53
-
53
+
54
54
  class Index
55
55
  def initialize(*keys)
56
56
  options = keys.extract_options!
57
-
57
+
58
58
  @name = options.delete(:name)
59
59
  @unique = options.delete(:unique)
60
60
  @min = options.delete(:min)
61
61
  @max = options.delete(:max)
62
-
62
+
63
63
  keys.each do |key|
64
64
  self.keys[key.to_sym] = :ascending
65
65
  end
66
-
66
+
67
67
  options.each do |key, order|
68
68
  self.keys[key.to_sym] = order
69
69
  end
70
70
  end
71
-
71
+
72
72
  def keys
73
73
  @keys ||= ActiveSupport::OrderedHash.new
74
74
  end
75
-
75
+
76
76
  def unique?
77
77
  @unique
78
78
  end
79
-
79
+
80
80
  def geo2d?
81
81
  @geo2d ||= keys.size == 1 && keys.values.first == :geo2d
82
82
  end
83
-
83
+
84
84
  def to_args
85
85
  args = []
86
86
  options = {}
87
-
87
+
88
88
  if geo2d?
89
89
  args << [[keys.keys.first, Mongo::GEO2D]]
90
90
  elsif keys.size == 1 && keys.values.first == :ascending
@@ -92,19 +92,19 @@ module MongoModel
92
92
  else
93
93
  args << keys.map { |k, o| [k, o == :ascending ? Mongo::ASCENDING : Mongo::DESCENDING] }.sort_by { |k| k.first.to_s }
94
94
  end
95
-
95
+
96
96
  if geo2d? && @min && @max
97
97
  options[:min] = @min
98
98
  options[:max] = @max
99
99
  end
100
-
100
+
101
101
  options[:unique] = true if unique?
102
102
  options[:name] = @name if @name
103
-
103
+
104
104
  args << options if options.any?
105
105
  args
106
106
  end
107
-
107
+
108
108
  def ==(other)
109
109
  other.is_a?(Index) && to_args == other.to_args
110
110
  end
@@ -2,12 +2,12 @@ module MongoModel
2
2
  module DocumentExtensions
3
3
  module OptimisticLocking
4
4
  extend ActiveSupport::Concern
5
-
5
+
6
6
  module ClassMethods
7
7
  def locking_enabled?
8
8
  properties.include?(:_lock_version)
9
9
  end
10
-
10
+
11
11
  def lock_optimistically=(value)
12
12
  if value == true
13
13
  property :_lock_version, Integer, :default => 0, :internal => true, :protected => true
@@ -17,24 +17,24 @@ module MongoModel
17
17
  end
18
18
  end
19
19
  end
20
-
20
+
21
21
  def locking_enabled?
22
22
  self.class.locking_enabled?
23
23
  end
24
-
24
+
25
25
  private
26
26
  def increment_lock_version
27
27
  self._lock_version += 1
28
28
  end
29
-
29
+
30
30
  def save_to_collection
31
31
  if locking_enabled? && _lock_version > 1
32
32
  begin
33
33
  collection.update({ '_id' => id.to_mongo, '_lock_version' => _lock_version-1 }, to_mongo)
34
34
  success = database.get_last_error['updatedExisting']
35
-
35
+
36
36
  self._lock_version -= 1 unless success
37
-
37
+
38
38
  success
39
39
  rescue Mongo::OperationFailure => e
40
40
  false
@@ -2,24 +2,24 @@ module MongoModel
2
2
  module DocumentExtensions
3
3
  module Persistence
4
4
  extend ActiveSupport::Concern
5
-
5
+
6
6
  included do
7
7
  undef_method :id if method_defined?(:id)
8
8
  property :id, MongoModel::Reference, :as => '_id', :default => lambda { |doc| doc.generate_id }
9
9
  end
10
-
10
+
11
11
  # Reload the document from the database. If the document
12
12
  # hasn't been saved, this method will raise an error.
13
13
  def reload
14
14
  reloaded = self.class.unscoped.find(id)
15
-
15
+
16
16
  attributes.clear
17
17
  attributes.load!(reloaded.attributes.to_mongo)
18
-
18
+
19
19
  associations.values.each do |association|
20
20
  association.proxy.reset
21
21
  end
22
-
22
+
23
23
  self
24
24
  end
25
25
 
@@ -32,7 +32,7 @@ module MongoModel
32
32
  def save!(*)
33
33
  create_or_update || raise(DocumentNotSaved)
34
34
  end
35
-
35
+
36
36
  def delete
37
37
  self.class.unscoped.delete(id)
38
38
  set_destroyed(true)
@@ -43,7 +43,7 @@ module MongoModel
43
43
  def destroy
44
44
  delete
45
45
  end
46
-
46
+
47
47
  # Updates all the attributes from the passed-in Hash and saves the document.
48
48
  # If the object is invalid, the saving will fail and false will be returned.
49
49
  #
@@ -55,35 +55,35 @@ module MongoModel
55
55
  self.assign_attributes(attributes, options)
56
56
  save
57
57
  end
58
-
58
+
59
59
  # Updates its receiver just like +update_attributes+ but calls <tt>save!</tt> instead
60
60
  # of +save+, so an exception is raised if the docuemnt is invalid.
61
61
  def update_attributes!(attributes, options={})
62
62
  self.assign_attributes(attributes, options)
63
63
  save!
64
64
  end
65
-
65
+
66
66
  # Updates a single attribute and saves the document without going through the normal validation procedure.
67
67
  # This is especially useful for boolean flags on existing documents.
68
68
  def update_attribute(name, value)
69
69
  send("#{name}=", value)
70
70
  save(:validate => false)
71
71
  end
72
-
72
+
73
73
  def collection
74
74
  self.class.collection
75
75
  end
76
-
76
+
77
77
  def database
78
78
  self.class.database
79
79
  end
80
-
80
+
81
81
  # Generate a new BSON::ObjectId for the record.
82
82
  # Override in subclasses for custom ID generation.
83
83
  def generate_id
84
84
  ::BSON::ObjectId.new.to_s
85
85
  end
86
-
86
+
87
87
  module ClassMethods
88
88
  def create(attributes={}, &block)
89
89
  if attributes.is_a?(Array)
@@ -100,20 +100,20 @@ module MongoModel
100
100
  instance.send(:instantiate) if instance
101
101
  instance
102
102
  end
103
-
103
+
104
104
  def collection_name
105
105
  @_collection_name || inferred_collection_name
106
106
  end
107
-
107
+
108
108
  def collection_name=(name)
109
109
  @_collection = nil
110
110
  @_collection_name = name
111
111
  end
112
-
112
+
113
113
  def use_type_selector?
114
114
  !superclass.abstract_class?
115
115
  end
116
-
116
+
117
117
  def type_selector
118
118
  [self.to_s] + descendants.map { |m| m.to_s }
119
119
  end
@@ -121,19 +121,19 @@ module MongoModel
121
121
  def collection
122
122
  @_collection ||= InstrumentedCollection.new(database.collection(collection_name))
123
123
  end
124
-
124
+
125
125
  def database
126
126
  MongoModel.database
127
127
  end
128
-
128
+
129
129
  def save_safely?
130
130
  defined?(@_save_safely) ? @_save_safely : true
131
131
  end
132
-
132
+
133
133
  def save_safely=(val)
134
134
  @_save_safely = val
135
135
  end
136
-
136
+
137
137
  protected
138
138
  def inferred_collection_name
139
139
  if superclass.abstract_class?
@@ -143,7 +143,7 @@ module MongoModel
143
143
  end
144
144
  end
145
145
  end
146
-
146
+
147
147
  private
148
148
  def create_or_update
149
149
  result = new_record? ? create : update
@@ -157,7 +157,7 @@ module MongoModel
157
157
  def update
158
158
  save_to_collection
159
159
  end
160
-
160
+
161
161
  def save_to_collection
162
162
  collection.save(to_mongo, :w => self.class.save_safely? ? 1 : 0)
163
163
  set_new_record(false)