modularity-rails 0.23.0 → 0.24.0
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.
@@ -36,6 +36,17 @@ class modularity.PersistenceManager
|
|
36
36
|
@server_data.add_all data
|
37
37
|
|
38
38
|
|
39
|
+
# Returns an array containing only the changed objects.
|
40
|
+
# Each object contains only the changed columns + key column.
|
41
|
+
changed_objects_columns: (objects) ->
|
42
|
+
modularity.tap [], (result) =>
|
43
|
+
for object in objects
|
44
|
+
diff = modularity.object_diff @server_data.get(object[@key]), object
|
45
|
+
continue if modularity.object_length(diff) == 0
|
46
|
+
diff[@key] = object[@key]
|
47
|
+
result.push(diff)
|
48
|
+
|
49
|
+
|
39
50
|
# Returns the URL to access the collection of objects.
|
40
51
|
collection_url: ->
|
41
52
|
"#{@base_url}.json"
|
@@ -84,6 +95,11 @@ class modularity.PersistenceManager
|
|
84
95
|
"#{@base_url}/#{entry[@key]}.json"
|
85
96
|
|
86
97
|
|
98
|
+
# Returns the url to access the collection of entries.
|
99
|
+
entries_url: ->
|
100
|
+
"#{@base_url}.json"
|
101
|
+
|
102
|
+
|
87
103
|
# Returns the cached data object, or undefined.
|
88
104
|
get_cached: (key) ->
|
89
105
|
|
@@ -160,13 +176,13 @@ class modularity.PersistenceManager
|
|
160
176
|
# and have a proper value in the key attribute.
|
161
177
|
update: (obj, callback) ->
|
162
178
|
|
179
|
+
# Handle updating several objects.
|
180
|
+
return @update_many(obj, callback) if $.type(obj) == 'array'
|
181
|
+
|
163
182
|
# Create a new hash, containing only the changed attributes between obj and it's replica in @server_data.
|
164
183
|
diff_obj = modularity.object_diff @server_data.get(obj[@key]), obj
|
165
184
|
return if modularity.object_length(diff_obj) == 0
|
166
185
|
|
167
|
-
# Update server_data version.
|
168
|
-
@server_data.add obj
|
169
|
-
|
170
186
|
# Send to server
|
171
187
|
data = {}
|
172
188
|
data[@model_name] = diff_obj
|
@@ -181,3 +197,27 @@ class modularity.PersistenceManager
|
|
181
197
|
@client_data.add client_obj
|
182
198
|
callback client_obj if callback
|
183
199
|
|
200
|
+
|
201
|
+
# Bulk-updates the given objects.
|
202
|
+
# All the existing objects must exist on the server already,
|
203
|
+
# and have a value in the key attribute.
|
204
|
+
update_many: (objects, callback) ->
|
205
|
+
|
206
|
+
# Find all objects that have been changed on the client.
|
207
|
+
diff_objects = @changed_objects_columns objects
|
208
|
+
|
209
|
+
# Send to server
|
210
|
+
data = {}
|
211
|
+
data["#{@model_name}s"] = diff_objects
|
212
|
+
jQuery.ajax
|
213
|
+
url: @entries_url()
|
214
|
+
type: 'PUT'
|
215
|
+
data: data
|
216
|
+
success: (server_response) =>
|
217
|
+
server_objects = server_response["#{@model_name}s"]
|
218
|
+
client_objects = (for server_object in server_objects
|
219
|
+
@server_data.add server_object
|
220
|
+
client_object = modularity.clone_hash server_object
|
221
|
+
@client_data.add client_object
|
222
|
+
client_object)
|
223
|
+
callback(client_objects) if callback
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: modularity-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.24.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-04-
|
12
|
+
date: 2013-04-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|