lotus-model 0.3.1 → 0.3.2
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/lib/lotus/entity.rb +1 -1
- data/lib/lotus/entity/dirty_tracking.rb +22 -74
- data/lib/lotus/model/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: acf5bf11caa86301e6e5335064ca5c5454df5b86
|
4
|
+
data.tar.gz: 0782b930d37c6236c6c676017ae34caf68b1c2d2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0299bb1a135bb8f43804f44968126425fde51be8377b035f2635312d49cc42bc2d4ab62374967f3a574007ae5c6f16e43ba5867372c495c05113fe4420126efa
|
7
|
+
data.tar.gz: a69e4eddfb3b10999487d08bf754f6bf413ac487e80ecb1b3d9b5a34f19856e9da9633854a8c987afa5a5f3d74589835dddde4f5a0265e6d0179ff1af72f33a9
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
# Lotus::Model
|
2
2
|
A persistence layer for Lotus
|
3
3
|
|
4
|
+
## v0.3.2 - 2015-05-22
|
5
|
+
### Added
|
6
|
+
- [Dmitry Tymchuk & Luca Guidi] Fix for dirty tracking of attributes changed in place (eg. `book.tags << 'non-fiction'`)
|
7
|
+
|
4
8
|
## v0.3.1 - 2015-05-15
|
5
9
|
### Added
|
6
10
|
- [Dmitry Tymchuk] Dirty tracking for entities (via `Lotus::Entity::DirtyTracking` module to include)
|
data/lib/lotus/entity.rb
CHANGED
@@ -3,57 +3,25 @@ module Lotus
|
|
3
3
|
# Dirty tracking for entities
|
4
4
|
#
|
5
5
|
# @since 0.3.1
|
6
|
+
#
|
7
|
+
# @example Dirty tracking
|
8
|
+
# require 'lotus/model'
|
9
|
+
#
|
10
|
+
# class User
|
11
|
+
# include Lotus::Entity
|
12
|
+
# include Lotus::Entity::DirtyTracking
|
13
|
+
#
|
14
|
+
# attributes :name
|
15
|
+
# end
|
16
|
+
#
|
17
|
+
# article = Article.new(title: 'Generation P')
|
18
|
+
# article.changed? # => false
|
19
|
+
#
|
20
|
+
# article.title = 'Master and Margarita'
|
21
|
+
# article.changed? # => true
|
22
|
+
#
|
23
|
+
# article.changed_attributes # => {:title => "Generation P"}
|
6
24
|
module DirtyTracking
|
7
|
-
# Override setters for attributes to support dirty tracking
|
8
|
-
#
|
9
|
-
# @since 0.3.1
|
10
|
-
#
|
11
|
-
# @example Dirty tracking
|
12
|
-
# require 'lotus/model'
|
13
|
-
#
|
14
|
-
# class User
|
15
|
-
# include Lotus::Entity
|
16
|
-
# include Lotus::Entity::DirtyTracking
|
17
|
-
#
|
18
|
-
# attributes :name
|
19
|
-
# end
|
20
|
-
#
|
21
|
-
# article = Article.new(title: 'Generation P')
|
22
|
-
# article.changed? # => false
|
23
|
-
#
|
24
|
-
# article.title = 'Master and Margarita'
|
25
|
-
# article.changed? # => true
|
26
|
-
#
|
27
|
-
# article.changed_attributes # => {:title => "Generation P"}
|
28
|
-
def self.included(base)
|
29
|
-
base.class_eval do
|
30
|
-
extend ClassMethods
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
module ClassMethods
|
35
|
-
# Override attribute accessors function.
|
36
|
-
# Create setter methods with attribute values checking.
|
37
|
-
# If the new value or a changed, added to @changed_attributes.
|
38
|
-
#
|
39
|
-
# @params attr [Symbol] an attribute name
|
40
|
-
#
|
41
|
-
# @since 0.3.1
|
42
|
-
# @api private
|
43
|
-
#
|
44
|
-
# @see Lotus::Entity::ClassMethods#define_attr_accessor
|
45
|
-
def define_attr_accessor(attr)
|
46
|
-
attr_reader(attr)
|
47
|
-
|
48
|
-
class_eval %{
|
49
|
-
def #{ attr }=(value)
|
50
|
-
_attribute_changed(:#{ attr }, @#{ attr }, value)
|
51
|
-
@#{ attr } = value
|
52
|
-
end
|
53
|
-
}
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
25
|
# Override initialize process.
|
58
26
|
#
|
59
27
|
# @param attributes [Hash] a set of attribute names and values
|
@@ -62,9 +30,8 @@ module Lotus
|
|
62
30
|
#
|
63
31
|
# @see Lotus::Entity#initialize
|
64
32
|
def initialize(attributes = {})
|
65
|
-
_clear_changes_information
|
66
33
|
super
|
67
|
-
|
34
|
+
@_initial_state = Utils::Hash.new(to_h).deep_dup
|
68
35
|
end
|
69
36
|
|
70
37
|
# Getter for hash of changed attributes.
|
@@ -78,7 +45,7 @@ module Lotus
|
|
78
45
|
# @example
|
79
46
|
# require 'lotus/model'
|
80
47
|
#
|
81
|
-
# class
|
48
|
+
# class Article
|
82
49
|
# include Lotus::Entity
|
83
50
|
# include Lotus::Entity::DirtyTracking
|
84
51
|
#
|
@@ -91,7 +58,7 @@ module Lotus
|
|
91
58
|
# article.title = 'Master and Margarita'
|
92
59
|
# article.changed_attributes # => {:title => "The crime and punishment"}
|
93
60
|
def changed_attributes
|
94
|
-
@
|
61
|
+
Hash[@_initial_state.to_a - to_h.to_a]
|
95
62
|
end
|
96
63
|
|
97
64
|
# Checks if the attributes were changed
|
@@ -100,26 +67,7 @@ module Lotus
|
|
100
67
|
#
|
101
68
|
# @since 0.3.1
|
102
69
|
def changed?
|
103
|
-
|
104
|
-
end
|
105
|
-
|
106
|
-
private
|
107
|
-
|
108
|
-
# Set changed attributes in Hash with their old values.
|
109
|
-
#
|
110
|
-
# @params attrs [Symbol] an attribute name
|
111
|
-
#
|
112
|
-
# @since 0.3.1
|
113
|
-
# @api private
|
114
|
-
def _attribute_changed(attr, current_value, new_value)
|
115
|
-
@changed_attributes[attr] = new_value if current_value != new_value
|
116
|
-
end
|
117
|
-
|
118
|
-
# Clear all information about dirty data
|
119
|
-
#
|
120
|
-
# @since 0.3.1
|
121
|
-
def _clear_changes_information
|
122
|
-
@changed_attributes = {}
|
70
|
+
changed_attributes.any?
|
123
71
|
end
|
124
72
|
end
|
125
73
|
end
|
data/lib/lotus/model/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lotus-model
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Luca Guidi
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-05-
|
12
|
+
date: 2015-05-22 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: lotus-utils
|