slender_data 0.1.0 → 0.2.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.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d219af00b0955ed12a4724a45274fbbdcfad22d2
|
4
|
+
data.tar.gz: 1e55017fea414a68625b7076f61bba42f46991ac
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 003380a4bc570c13031e817ca35673904b6270dc1d1d4445e8e066258055cc43c0e3835866c557cd792232821f3cb64276c5f041bde7079c78774307a99ee103
|
7
|
+
data.tar.gz: 91d95a4d10aae259c87f1f7461808dc9c03e5fc99816f6be1a01d2a40b134f209df11715b63a9f04e5a77a2aada10553277657a9e3775c1369a8bcf9806255ef
|
@@ -8,6 +8,13 @@
|
|
8
8
|
# In addition to the standard RESTful routes, the data API is expected to support these methods for performance reasons:
|
9
9
|
# * DELETE /entries: Delete a whole batch of entries at once. The ids of the entries to delete are given as a JSON hash in the body of the request.
|
10
10
|
# *
|
11
|
+
#
|
12
|
+
# Terminology:
|
13
|
+
# * "load" methods are high level public API. They try to satisfy the requests from the local cache, and load the data from the server on demand.
|
14
|
+
# * "get" methods access only the local cache, and return their results synchronously.
|
15
|
+
# * "fetch" methods encapsulate accessing remote resources.
|
16
|
+
# * "create" creates a given entry on the server
|
17
|
+
# * "add" adds the given entry to the clientside cache.
|
11
18
|
class slender_data.PersistenceManager
|
12
19
|
|
13
20
|
constructor: (params) ->
|
@@ -31,6 +38,15 @@ class slender_data.PersistenceManager
|
|
31
38
|
@loader = new slender_data.AjaxLoader { cache: no }
|
32
39
|
|
33
40
|
|
41
|
+
# Adds the given entry to the clientside caches.
|
42
|
+
# Returns the entry to be used by the client.
|
43
|
+
add: (entry) ->
|
44
|
+
@server_data.add entry
|
45
|
+
client_entry = slender_data.clone_hash entry
|
46
|
+
@client_data.add client_entry
|
47
|
+
client_entry
|
48
|
+
|
49
|
+
|
34
50
|
# Adds the given data objects to the server cache.
|
35
51
|
add_all: (data) ->
|
36
52
|
@server_data.add_all data
|
@@ -69,6 +85,9 @@ class slender_data.PersistenceManager
|
|
69
85
|
error_callback(xhr.responseText) if error_callback
|
70
86
|
|
71
87
|
|
88
|
+
# TODO: create_many
|
89
|
+
|
90
|
+
|
72
91
|
# Deletes the given object from the server.
|
73
92
|
delete: (obj, success_callback, error_callback) ->
|
74
93
|
@client_data.remove obj
|
@@ -106,8 +125,31 @@ class slender_data.PersistenceManager
|
|
106
125
|
"#{@base_url}.json"
|
107
126
|
|
108
127
|
|
109
|
-
#
|
110
|
-
|
128
|
+
# Fetches the entry with the given key from the server.
|
129
|
+
# Adds it to the clientside cache.
|
130
|
+
fetch: (key, success_callback) ->
|
131
|
+
@loader.get "#{@base_url}/#{key}.json", (server_entry) =>
|
132
|
+
client_entry = @add server_entry
|
133
|
+
success_callback client_entry
|
134
|
+
|
135
|
+
|
136
|
+
# Loads all objects from the server.
|
137
|
+
# Provides the given params as parameters to the GET request.
|
138
|
+
fetch_all: (params, success_callback, error_callback) ->
|
139
|
+
jQuery.ajax
|
140
|
+
url: @collection_url()
|
141
|
+
cache: no
|
142
|
+
data: params
|
143
|
+
success: (data) =>
|
144
|
+
@server_data.add_all data
|
145
|
+
success_callback(data) if success_callback
|
146
|
+
error: (xhr) ->
|
147
|
+
error_callback(xhr.responseText) if error_callback
|
148
|
+
|
149
|
+
|
150
|
+
# Returns the cached object with the given key, if one exists in the cache.
|
151
|
+
# Returns ndefined if no object with this key exists in the cache.
|
152
|
+
get_cached_entry: (key) ->
|
111
153
|
|
112
154
|
# Try to use client_data cache.
|
113
155
|
client_obj = @client_data.get key
|
@@ -121,51 +163,39 @@ class slender_data.PersistenceManager
|
|
121
163
|
return client_obj
|
122
164
|
|
123
165
|
# Object not found in client or server cache.
|
124
|
-
|
166
|
+
undefined
|
167
|
+
|
168
|
+
|
169
|
+
# Returns all entries that are in the cache,
|
170
|
+
# and the ids of all entries that are not cached.
|
171
|
+
get_cached_entries: (ids) ->
|
172
|
+
entries = []
|
173
|
+
missing_ids = []
|
174
|
+
for id in ids
|
175
|
+
if (entry = @get_cached_entry(id))
|
176
|
+
entries.push entry
|
177
|
+
else
|
178
|
+
missing_ids.push id
|
179
|
+
[entries, missing_ids]
|
125
180
|
|
126
181
|
|
127
182
|
# Returns the entry with the given key.
|
128
183
|
load: (key, success_callback) ->
|
129
184
|
|
130
185
|
# Try to load from cache.
|
131
|
-
return success_callback(entry) if entry = @
|
186
|
+
return success_callback(entry) if entry = @get_cached_entry key
|
132
187
|
|
133
|
-
# No data on client
|
134
|
-
@
|
135
|
-
@server_data.add server_entry
|
136
|
-
client_entry = slender_data.clone_hash server_entry
|
137
|
-
@client_data.add client_entry
|
138
|
-
success_callback client_entry
|
139
|
-
|
140
|
-
|
141
|
-
# Loads all objects from the server.
|
142
|
-
# Provides the given params as parameters to the GET request.
|
143
|
-
load_all: (params, success_callback, error_callback) ->
|
144
|
-
jQuery.ajax
|
145
|
-
url: @collection_url()
|
146
|
-
cache: no
|
147
|
-
data: params
|
148
|
-
success: (data) =>
|
149
|
-
@server_data.add_all data
|
150
|
-
success_callback() if success_callback
|
151
|
-
error: (xhr) ->
|
152
|
-
error_callback(xhr.responseText) if error_callback
|
188
|
+
# No data on client --> load from server.
|
189
|
+
@fetch key, success_callback
|
153
190
|
|
154
191
|
|
155
192
|
# Loads all entries with the given ids.
|
156
193
|
load_many: (ids, success_callback) ->
|
157
|
-
missing_ids =
|
158
|
-
entries = []
|
159
|
-
$.each ids, (pos, id) =>
|
160
|
-
entry = @get_cached id
|
161
|
-
if entry
|
162
|
-
entries.push entry
|
163
|
-
else
|
164
|
-
missing_ids.push id
|
165
|
-
|
194
|
+
[cached_entries, missing_ids] = @get_cached_entries(ids)
|
166
195
|
if missing_ids.length == 0
|
167
|
-
return success_callback(
|
196
|
+
return success_callback(cached_entries)
|
168
197
|
|
198
|
+
# TODO: implement loading the missing entries from the server.
|
169
199
|
alert "uncached entries found: #{missing_ids}"
|
170
200
|
|
171
201
|
|
@@ -179,6 +209,8 @@ class slender_data.PersistenceManager
|
|
179
209
|
@create obj, success_callback, error_callback
|
180
210
|
|
181
211
|
|
212
|
+
# TODO: save_many
|
213
|
+
|
182
214
|
# Updates the given object.
|
183
215
|
#
|
184
216
|
# The given object must exist on the server already,
|
data/lib/slender_data/version.rb
CHANGED
metadata
CHANGED
@@ -1,27 +1,27 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: slender_data
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kevin Goslar
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-12-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - '
|
17
|
+
- - '>'
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 3.1.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - '
|
24
|
+
- - '>'
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 3.1.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
@@ -147,7 +147,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
147
147
|
version: '0'
|
148
148
|
requirements: []
|
149
149
|
rubyforge_project:
|
150
|
-
rubygems_version: 2.0.
|
150
|
+
rubygems_version: 2.0.14
|
151
151
|
signing_key:
|
152
152
|
specification_version: 4
|
153
153
|
summary: A JS micro-framework for lightweight AJAX data management against RESTful
|