modularity-rails 0.12.2 → 0.12.3

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.
@@ -17,6 +17,18 @@ describe 'ajax_loader', ->
17
17
  loader = new modularity.AjaxLoader {caching: yes}
18
18
  loader.caching.should.be.true
19
19
 
20
+ describe 'ajax', ->
21
+
22
+ describe 'GET request', ->
23
+
24
+ it 'buffers the request'
25
+
26
+ it 'fires the events'
27
+
28
+ it ''
29
+
30
+ describe 'other requests'
31
+
20
32
 
21
33
   describe 'get', ->
22
34
  url = "/users/4"
@@ -41,6 +41,7 @@ describe 'PersistenceManager', ->
41
41
  persistence_manager.add_all data
42
42
  spy.should.have.been.calledOnce
43
43
 
44
+
44
45
  describe 'create', ->
45
46
  new_obj = {value: 'foo'}
46
47
 
@@ -136,6 +137,52 @@ describe 'PersistenceManager', ->
136
137
  loading_done_callback.should.have.been.calledOnce
137
138
 
138
139
 
140
+ describe 'load_local', ->
141
+
142
+ describe 'entry exists in client data cache', ->
143
+ it 'returns the entry from the @client_data cache if it exists there', ->
144
+ persistence_manager.client_data.add entry_1
145
+ result = persistence_manager.load_local 1
146
+ result.should.equal entry_1
147
+
148
+ describe 'entry exists in server data cache', ->
149
+
150
+ beforeEach ->
151
+ persistence_manager.server_data.add entry_1
152
+
153
+ it 'adds the entry to the client data cache', ->
154
+ persistence_manager.load_local 1
155
+ persistence_manager.client_data.length().should.equal 1
156
+ persistence_manager.client_data.get(1).should.eql entry_1
157
+
158
+ it 'returns the entry from the client data cache', ->
159
+ result = persistence_manager.load_local 1
160
+ client_cache_entry = persistence_manager.client_data.get 1
161
+ result.should.equal client_cache_entry
162
+
163
+ it 'returns a different hash than the server data, so that the user can make changes to it', ->
164
+ result = persistence_manager.load_local 1
165
+ server_cache_entry = persistence_manager.server_data.get 1
166
+ result.should.not.equal server_cache_entry
167
+
168
+ describe "entry doesn't exist in any cache", ->
169
+
170
+ it 'returns undefined', ->
171
+ expect(persistence_manager.load_local(1)).to.be.undefined
172
+
173
+
174
+ describe 'load_many', ->
175
+
176
+ describe 'all entries exists in the cache', ->
177
+ it 'returns the entries immediately', (done) ->
178
+ persistence_manager.add_all [entry_1, entry_2]
179
+ persistence_manager.load_many [1,2], (entries) ->
180
+ entries.length.should.equal 2
181
+ entries[0].should.eql entry_1
182
+ entries[1].should.eql entry_2
183
+ done()
184
+
185
+
139
186
  describe 'load', ->
140
187
 
141
188
  describe 'entry exists in client data cache', ->
@@ -1,3 +1,3 @@
1
1
  module ModularityRails
2
- VERSION = "0.12.2"
2
+ VERSION = "0.12.3"
3
3
  end
@@ -24,6 +24,12 @@ class window.modularity.AjaxLoader
24
24
  AJAX_LOADED: 'AJAX_LOADED' # Called when an AJAX request finishes.
25
25
 
26
26
 
27
+ # Makes the given AJAX call.
28
+ # Buffers the call if it's a GET request.
29
+ # Fires the AJAX events.
30
+ ajax: (options) ->
31
+
32
+
27
33
  get: (url, callback) ->
28
34
  cached_value = @cache.get url
29
35
 
@@ -63,16 +63,8 @@ class modularity.PersistenceManager
63
63
  # Returns the entry with the given key.
64
64
  load: (key, callback) ->
65
65
 
66
- # Try to use client_data cache.
67
- client_obj = @client_data.get key
68
- return callback(client_obj) if client_obj
69
-
70
- # No data in client cache --> try to use server cache.
71
- server_obj = @server_data.get key
72
- if server_obj
73
- client_obj = modularity.clone_hash server_obj
74
- @client_data.add client_obj
75
- return callback client_obj
66
+ entry = @load_local key
67
+ return callback(entry) if entry
76
68
 
77
69
  # No data on client at all --> load data from server.
78
70
  @loader.get "#{@base_url}/#{key}", (server_entry) =>
@@ -94,7 +86,38 @@ class modularity.PersistenceManager
94
86
  callback()
95
87
  }
96
88
 
89
+
90
+ # Loads the entry synchronously from the cache.
91
+ # Doesn't fall back to the server.
92
+ load_local: (key) ->
93
+
94
+ # Try to use client_data cache.
95
+ client_obj = @client_data.get key
96
+ return client_obj if client_obj
97
+
98
+ # No data in client cache --> try to use server cache.
99
+ server_obj = @server_data.get key
100
+ return null unless server_obj
101
+ client_obj = modularity.clone_hash server_obj
102
+ @client_data.add client_obj
103
+ client_obj
97
104
 
105
+
106
+ # Returns all entries with the given keys.
107
+ load_many: (keys, callback) ->
108
+ result = []
109
+ missing_keys = []
110
+ for key in keys
111
+ do (key) =>
112
+ entry = @load_local key
113
+ if entry
114
+ result.push entry
115
+ else
116
+ missing_keys.push key
117
+ alert "modularity.PersistenceManager.load_many(): Missing functionality to load from the server." if missing_keys.length > 0
118
+ callback result
119
+
120
+
98
121
  # Saves the given object.
99
122
  # Does the right thing (create or update) dependent on
100
123
  # whether the object already has a key parameter.
@@ -0,0 +1,24 @@
1
+ # Indicates that an AJAX request is running.
2
+ class sn.AjaxIndicator extends modularity.Module
3
+
4
+ constructor: ->
5
+
6
+ # The number of currently running ajax requests.
7
+ @ajax_counter = 0
8
+
9
+ @searchManager.bind_event sn.SearchManager.events.AJAX_LOADING, @ajax_loading
10
+ @searchManager.bind_event sn.SearchManager.events.AJAX_LOADED, @ajax_loaded
11
+
12
+
13
+ # Called when an ajax request starts.
14
+ ajax_loading: =>
15
+ @container.addClass 'loading' if @ajax_counter == 0
16
+ @ajax_counter += 1
17
+
18
+
19
+ # Called when the ajax request is done.
20
+ ajax_loaded: =>
21
+ @ajax_counter -= 1
22
+ @ajax_counter = 0 if @ajax_counter <= 0
23
+ @container.removeClass 'loading'
24
+
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.12.2
4
+ version: 0.12.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-21 00:00:00.000000000 Z
12
+ date: 2012-06-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
16
- requirement: &70099005263540 !ruby/object:Gem::Requirement
16
+ requirement: &70181204940740 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 3.1.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70099005263540
24
+ version_requirements: *70181204940740
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: capybara-webkit
27
- requirement: &70099005262660 !ruby/object:Gem::Requirement
27
+ requirement: &70181204936980 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70099005262660
35
+ version_requirements: *70181204936980
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: evergreen
38
- requirement: &70099005261600 !ruby/object:Gem::Requirement
38
+ requirement: &70181204934000 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70099005261600
46
+ version_requirements: *70181204934000
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rb-fsevent
49
- requirement: &70099005260620 !ruby/object:Gem::Requirement
49
+ requirement: &70181204930600 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70099005260620
57
+ version_requirements: *70181204930600
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: guard-livereload
60
- requirement: &70099005276020 !ruby/object:Gem::Requirement
60
+ requirement: &70181204926320 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,7 +65,7 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70099005276020
68
+ version_requirements: *70181204926320
69
69
  description: Description of ModularityRails.
70
70
  email:
71
71
  - kevin.goslar@gmail.com
@@ -155,6 +155,7 @@ files:
155
155
  - vendor/assets/javascripts/modularity/data/persistence_manager.coffee
156
156
  - vendor/assets/javascripts/modularity/mixins/clickable.coffee
157
157
  - vendor/assets/javascripts/modularity/mixins/closable.coffee
158
+ - vendor/assets/javascripts/modularity/modules/ajax_indicator.coffee
158
159
  - vendor/assets/javascripts/modularity/modules/autogrow_textarea.coffee
159
160
  - vendor/assets/javascripts/modularity/modules/button.coffee
160
161
  - vendor/assets/javascripts/modularity/modules/counter_button.coffee