mongomodel 0.2.17 → 0.2.18

Sign up to get free protection for your applications and to get access to all the features.
@@ -18,7 +18,6 @@ module MongoModel
18
18
 
19
19
  def load!(hash)
20
20
  from_mongo!(hash)
21
- changed.clear
22
21
  end
23
22
 
24
23
  def from_mongo!(hash)
@@ -26,7 +25,7 @@ module MongoModel
26
25
  property = properties_as[k.to_s]
27
26
 
28
27
  if property
29
- child = self[property.name] = property.from_mongo(v)
28
+ child = store(property.name, property.from_mongo(v))
30
29
  child.parent_document = instance if child.respond_to?(:parent_document=)
31
30
  else
32
31
  self[k.to_sym] = v
@@ -5,7 +5,6 @@ module MongoModel
5
5
  class Store < ActiveSupport::OrderedHash
6
6
  include Typecasting
7
7
  include Mongo
8
- include Dirty
9
8
 
10
9
  attr_reader :instance
11
10
  delegate :properties, :to => :instance
@@ -10,14 +10,37 @@ module MongoModel
10
10
  after_save { changed_attributes.clear }
11
11
  end
12
12
 
13
+ def write_attribute(key, value)
14
+ attr = key.to_sym
15
+
16
+ # The attribute already has an unsaved change.
17
+ if changed_attributes.include?(attr)
18
+ old = changed_attributes[attr]
19
+ changed_attributes.delete(attr) if value == old
20
+ else
21
+ old = clone_attribute_value(attr)
22
+ changed_attributes[attr] = old unless value == old
23
+ end
24
+
25
+ super
26
+ end
27
+
13
28
  # Returns the attributes as they were before any changes were made to the document.
14
29
  def original_attributes
15
30
  {}.with_indifferent_access.merge(attributes).merge(changed_attributes)
16
31
  end
17
-
32
+
18
33
  protected
19
34
  def changed_attributes
20
- attributes.changed
35
+ @changed_attributes ||= {}.with_indifferent_access
36
+ end
37
+
38
+ private
39
+ def clone_attribute_value(attribute_name)
40
+ value = self[attribute_name.to_sym]
41
+ value.duplicable? ? value.clone : value
42
+ rescue TypeError, NoMethodError
43
+ value
21
44
  end
22
45
  end
23
46
  end
@@ -1,3 +1,3 @@
1
1
  module MongoModel
2
- VERSION = "0.2.17"
2
+ VERSION = "0.2.18"
3
3
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongomodel
3
3
  version: !ruby/object:Gem::Version
4
- hash: 53
4
+ hash: 51
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 17
10
- version: 0.2.17
9
+ - 18
10
+ version: 0.2.18
11
11
  platform: ruby
12
12
  authors:
13
13
  - Sam Pohlenz
@@ -132,7 +132,6 @@ files:
132
132
  - autotest/discover.rb
133
133
  - bin/console
134
134
  - lib/mongomodel.rb
135
- - lib/mongomodel/attributes/dirty.rb
136
135
  - lib/mongomodel/attributes/mongo.rb
137
136
  - lib/mongomodel/attributes/store.rb
138
137
  - lib/mongomodel/attributes/typecasting.rb
@@ -1,32 +0,0 @@
1
- module MongoModel
2
- module Attributes
3
- module Dirty
4
- def []=(key, value)
5
- attr = key.to_sym
6
-
7
- # The attribute already has an unsaved change.
8
- if changed.include?(attr)
9
- old = changed[attr]
10
- changed.delete(attr) if value == old
11
- else
12
- old = clone_attribute_value(attr)
13
- changed[attr] = old unless value == old
14
- end
15
-
16
- super
17
- end
18
-
19
- def changed
20
- @changed ||= {}.with_indifferent_access
21
- end
22
-
23
- private
24
- def clone_attribute_value(attribute_name)
25
- value = self[attribute_name.to_sym]
26
- value.duplicable? ? value.clone : value
27
- rescue TypeError, NoMethodError
28
- value
29
- end
30
- end
31
- end
32
- end