active_metadata 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.
data/db/test.sqlite3 CHANGED
Binary file
@@ -95,7 +95,7 @@ module ActiveMetadata
95
95
  # Conflicts
96
96
  # ====
97
97
  # * @conflicts[:warnings] contains any conflict that "apply cleanly" or where the submit value has not been modified by the user that is saving
98
- # the data
98
+ # the data.
99
99
  #
100
100
  # * @conflicts[:fatals] contains any conflict that "do not apply cleanly" or where the passed value does not match the last history value and was modified
101
101
  # by the user that is submittig the data
@@ -120,14 +120,11 @@ module ActiveMetadata
120
120
  #if the timestamp is previous of the last history change
121
121
  if timestamp < latest_history.created_at.to_f
122
122
 
123
- # there is a conflict so ensure the actual value
124
- self[key.to_sym] = self.changes[key][0]
125
-
126
123
  # We have a conflict.
127
124
  # Check if the actual submission has been modified
128
- histories.each do |h|
125
+ histories.each_with_index do |h,i|
129
126
  # Looking for the value that was loaded by the user. First history with a ts that is younger than the form ts
130
- next if timestamp > h.created_at.to_f
127
+ next if h.created_at.to_f > timestamp
131
128
 
132
129
  # History stores values as strings so any boolean is stored as "0" or "1"
133
130
  # We need to translate the params passed for a safer comparison.
@@ -135,11 +132,16 @@ module ActiveMetadata
135
132
  b_val = to_bool(h.value)
136
133
  end
137
134
 
135
+ # conflict ensure the actual value is not modified
136
+ self[key.to_sym] = self.changes[key][0]
137
+
138
138
  if [h.value, b_val].include? val
139
- self.conflicts[:warnings] << {key.to_sym => [val, h]}
139
+ self.conflicts[:warnings] << {key.to_sym => latest_history}
140
140
  else
141
- self.conflicts[:fatals] << {key.to_sym => [val, h]}
141
+ self.conflicts[:fatals] << {key.to_sym => latest_history}
142
142
  end
143
+
144
+ break #done for this field
143
145
  end
144
146
 
145
147
  end
@@ -1,3 +1,3 @@
1
1
  module ActiveMetadata
2
- VERSION = "0.3.1"
2
+ VERSION = "0.3.2"
3
3
  end
@@ -93,6 +93,52 @@ describe "Manage Concurrency" do
93
93
 
94
94
  end
95
95
 
96
+ it "should register a warning if the history newest value is different from the submitted once but the submitting user has not modified the value" do
97
+ #fixtures
98
+ value = @document.name
99
+ form_timestamp = Time.now
100
+ params = {:name => "nuovo nome"}
101
+
102
+ #someone change the field value
103
+ sleep 0.2.seconds
104
+ @document.update_attributes(params)
105
+
106
+ # user submit a different value
107
+ sleep 0.2.seconds
108
+ different_params = {:name => value, :active_metadata_timestamp => form_timestamp}
109
+ @document.update_attributes(different_params)
110
+
111
+ #assetions
112
+ warnings = @document.conflicts[:warnings]
113
+ warnings.size.should eq 1
114
+ warnings[0][:name].value.should eq "nuovo nome"
115
+
116
+ @document.conflicts[:fatals].should be_empty
117
+ end
118
+
119
+ it "when a warning is registered the submitted value is skipped" do
120
+ #fixtures
121
+ value = @document.name
122
+ form_timestamp = Time.now
123
+ params = {:name => "nuovo nome"}
124
+
125
+ #someone change the field value
126
+ sleep 0.2.seconds
127
+ @document.update_attributes(params)
128
+
129
+ # user submit a different value
130
+ sleep 0.2.seconds
131
+ different_params = {:name => value, :active_metadata_timestamp => form_timestamp}
132
+ @document.update_attributes(different_params)
133
+
134
+ #assetions
135
+ hs = @document.history_for(:name)
136
+ hs.count.should eq 2
137
+ hs.first.value.should eq "nuovo nome"
138
+ Document.last.name.should eq "nuovo nome"
139
+
140
+ end
141
+
96
142
  it "should reject the change as fatal if the history newest value is different from the submitted once and both user has changed the value" do
97
143
  #fixtures
98
144
  form_timestamp = Time.now
@@ -102,7 +148,7 @@ describe "Manage Concurrency" do
102
148
  sleep 0.2.seconds
103
149
  @document.update_attributes(params)
104
150
 
105
- # user submit a new value
151
+ # user submit a different value
106
152
  sleep 0.2.seconds
107
153
  different_params = {:name => "altro nome", :active_metadata_timestamp => form_timestamp}
108
154
  @document.update_attributes(different_params)
@@ -110,8 +156,26 @@ describe "Manage Concurrency" do
110
156
  #assetions
111
157
  fatals = @document.conflicts[:fatals]
112
158
  fatals.size.should eq 1
113
- fatals[0][:name][0].should eq "altro nome"
159
+ fatals[0][:name].value.should eq "nuovo nome"
114
160
  @document.conflicts[:warnings].should be_empty
161
+
162
+ end
163
+
164
+ it "when a fatal conflict occurs the submitted value is skipped" do
165
+ #fixtures
166
+ form_timestamp = Time.now
167
+ params = {:name => "nuovo nome"}
168
+
169
+ #someone change the field value
170
+ sleep 0.2.seconds
171
+ @document.update_attributes(params)
172
+
173
+ # user submit a different value
174
+ sleep 0.2.seconds
175
+ different_params = {:name => "altro nome", :active_metadata_timestamp => form_timestamp}
176
+ @document.update_attributes(different_params)
177
+
178
+ #assetions
115
179
  hs = @document.history_for(:name)
116
180
  hs.count.should eq 2
117
181
  hs.first.value.should eq "nuovo nome"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_metadata
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2011-10-20 00:00:00.000000000Z
13
+ date: 2011-10-21 00:00:00.000000000Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rspec-rails
17
- requirement: &2165045260 !ruby/object:Gem::Requirement
17
+ requirement: &2168900840 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: '0'
23
23
  type: :development
24
24
  prerelease: false
25
- version_requirements: *2165045260
25
+ version_requirements: *2168900840
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: sqlite3
28
- requirement: &2165044820 !ruby/object:Gem::Requirement
28
+ requirement: &2168900260 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ! '>='
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
- version_requirements: *2165044820
36
+ version_requirements: *2168900260
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: sqlite3-ruby
39
- requirement: &2165044400 !ruby/object:Gem::Requirement
39
+ requirement: &2168899660 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ! '>='
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: '0'
45
45
  type: :development
46
46
  prerelease: false
47
- version_requirements: *2165044400
47
+ version_requirements: *2168899660
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: cucumber
50
- requirement: &2165043980 !ruby/object:Gem::Requirement
50
+ requirement: &2168898680 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ! '>='
@@ -55,10 +55,10 @@ dependencies:
55
55
  version: '0'
56
56
  type: :development
57
57
  prerelease: false
58
- version_requirements: *2165043980
58
+ version_requirements: *2168898680
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: ci_reporter
61
- requirement: &2165043480 !ruby/object:Gem::Requirement
61
+ requirement: &2168897840 !ruby/object:Gem::Requirement
62
62
  none: false
63
63
  requirements:
64
64
  - - ! '>='
@@ -66,10 +66,10 @@ dependencies:
66
66
  version: '0'
67
67
  type: :development
68
68
  prerelease: false
69
- version_requirements: *2165043480
69
+ version_requirements: *2168897840
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: rails
72
- requirement: &2165042740 !ruby/object:Gem::Requirement
72
+ requirement: &2168896740 !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
75
  - - =
@@ -77,10 +77,10 @@ dependencies:
77
77
  version: 3.0.1
78
78
  type: :runtime
79
79
  prerelease: false
80
- version_requirements: *2165042740
80
+ version_requirements: *2168896740
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: activerecord
83
- requirement: &2165041060 !ruby/object:Gem::Requirement
83
+ requirement: &2168895600 !ruby/object:Gem::Requirement
84
84
  none: false
85
85
  requirements:
86
86
  - - =
@@ -88,10 +88,10 @@ dependencies:
88
88
  version: 3.0.1
89
89
  type: :runtime
90
90
  prerelease: false
91
- version_requirements: *2165041060
91
+ version_requirements: *2168895600
92
92
  - !ruby/object:Gem::Dependency
93
93
  name: paperclip
94
- requirement: &2165040000 !ruby/object:Gem::Requirement
94
+ requirement: &2168894400 !ruby/object:Gem::Requirement
95
95
  none: false
96
96
  requirements:
97
97
  - - ! '>='
@@ -99,10 +99,10 @@ dependencies:
99
99
  version: '0'
100
100
  type: :runtime
101
101
  prerelease: false
102
- version_requirements: *2165040000
102
+ version_requirements: *2168894400
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: to_xls
105
- requirement: &2165038720 !ruby/object:Gem::Requirement
105
+ requirement: &2168893600 !ruby/object:Gem::Requirement
106
106
  none: false
107
107
  requirements:
108
108
  - - ! '>='
@@ -110,7 +110,7 @@ dependencies:
110
110
  version: '0'
111
111
  type: :runtime
112
112
  prerelease: false
113
- version_requirements: *2165038720
113
+ version_requirements: *2168893600
114
114
  description: First implementation will write metadata on mongodb
115
115
  email:
116
116
  - acampolonghi@gmail.com