slender_data 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
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
|