modularity-rails 0.14.0 → 0.15.0

Sign up to get free protection for your applications and to get access to all the features.
data/demo/Gemfile CHANGED
@@ -1,6 +1,6 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- gem 'rails', '3.2.3'
3
+ gem 'rails', '3.2.9'
4
4
 
5
5
  gem 'capybara-webkit'
6
6
  gem 'jquery-rails'
@@ -4,133 +4,129 @@
4
4
 
5
5
  describe 'ajax_loader', ->
6
6
   
7
- ajax_loader = spy = spy_get = null
7
+ ajax_loader = spy = spy_get = spy_fire = null
8
8
  beforeEach ->
9
9
  spy = sinon.spy()
10
10
  spy_get = sinon.spy jQuery, 'get'
11
+ spy_fire = sinon.spy modularity, 'fire_global_event'
11
12
 
12
13
  afterEach ->
13
14
  spy_get.restore()
15
+ spy_fire.restore()
14
16
 
15
17
  describe 'constructor', ->
18
+
16
19
  it "stores the 'cache' settings", ->
17
20
  loader = new modularity.AjaxLoader {caching: yes}
18
- loader.caching.should.be.true
21
+ expect(loader.caching).to.be.true
22
+
23
+ it 'defaults to no caching', ->
24
+ loader = new modularity.AjaxLoader {}
25
+ expect(loader.caching).to.be.false
19
26
 
20
27
 
21
28
   describe 'get', ->
22
29
  url = "/users/4"
23
30
 
24
- describe 'with caching enabled', ->
31
+ beforeEach ->
32
+ ajax_loader = new modularity.AjaxLoader {caching: yes}
25
33
 
26
- beforeEach ->
27
- ajax_loader = new modularity.AjaxLoader {caching: yes}
34
+ describe 'first time request', ->
28
35
 
29
- describe 'first time request', ->
36
+ beforeEach ->
37
+ ajax_loader.get url, spy
30
38
 
31
- beforeEach ->
32
- ajax_loader.get url, spy
39
+ it 'makes an ajax request', ->
40
+ expect(jQuery.get).to.have.been.calledOnce
33
41
 
34
- it 'makes an ajax request', ->
35
- jQuery.get.should.have.been.called
42
+ it 'saves the callback for later', ->
43
+ expect(ajax_loader.cb_cache.get(url)).to.have.length 1
44
+ expect(ajax_loader.cb_cache.get(url)[0]).to.equal spy
36
45
 
46
+ it 'returns without calling the callback', ->
47
+ expect(spy).to.not.have.been.called
37
48
 
38
- it 'saves the callback for later', ->
39
- ajax_loader.cache.get(url).should.have.length 1
40
- ajax_loader.cache.get(url)[0].should.equal spy
41
49
 
42
- it 'returns without calling the callback', ->
43
- spy.should.not.have.been.called
50
+ describe 'the request is already in progress', ->
44
51
 
45
- describe 'the request is already in progress', ->
52
+ existing_cb = sinon.spy()
53
+ new_cb = sinon.spy()
54
+ beforeEach ->
55
+ ajax_loader.cb_cache.add url, [existing_cb]
56
+ ajax_loader.get url, new_cb
46
57
 
47
- beforeEach ->
48
- ajax_loader.cache.cache[url] = [spy]
58
+ it 'adds the callback to the callback cache', ->
59
+ expect(ajax_loader.cb_cache.get(url)).to.have.length 2
60
+ expect(ajax_loader.cb_cache.get(url)[0]).to.equal existing_cb
61
+ expect(ajax_loader.cb_cache.get(url)[1]).to.equal new_cb
49
62
 
63
+ it 'returns without calling the callback', ->
64
+ expect(new_cb).to.not.have.been.called
50
65
 
51
- it 'adds the callback to the callback array', ->
52
- ajax_loader.cache.get(url).should.have.length 1
53
- ajax_loader.cache.get(url)[0].should.equal spy
66
+ it 'does not make another ajax request', ->
67
+ expect(jQuery.get).to.not.have.been.called
54
68
 
69
+ it "does not fire the 'loading' event", ->
70
+ expect(modularity.fire_global_event).to.not.have.been.called
55
71
 
56
- it 'returns without calling the callback', ->
57
- spy.should.not.have.been.called
58
72
 
73
+ describe 'ajax request returns successfully', ->
59
74
 
60
- it 'does not make another ajax request', ->
61
- jQuery.get.should.not.have.been.called
75
+ old_jquery_get = null
76
+ beforeEach ->
77
+ jquery_callback = null
78
+ old_jquery_get = jQuery.get
79
+ jQuery.get = (url, callback) -> callback 'result'
62
80
 
63
- describe 'ajax request successful', ->
81
+ afterEach ->
82
+ jQuery.get = old_jquery_get
64
83
 
84
+ describe 'with caching enabled', ->
65
85
  beforeEach ->
66
- jquery_callback = null
67
- jQuery.get = (url, callback) -> jquery_callback = callback
86
+ ajax_loader.caching = true
68
87
  ajax_loader.get url, spy
69
- jquery_callback('result')
70
88
 
71
89
  it 'calls the given callbacks with the server data', ->
72
90
  expect(spy.calledWith('result')).to.be.true
73
91
 
74
- it 'replaces the cache callbacks with returned data', ->
75
- ajax_loader.cache.get(url).should.equal 'result'
76
-
77
- describe 'the data has already been loaded', ->
78
-
79
-    it 'calls the callback with the cached data', ->
80
- ajax_loader.cache.add url, "my data"
81
-
82
- ajax_loader.get(url, spy)
92
+ it 'removes the callbacks from the callback cache', ->
93
+ expect(ajax_loader.cb_cache.get(url)).to.be.undefined
83
94
 
84
- spy.should.have.been.called
85
- expect(spy.calledWith('my data')).to.be.true
95
+ it 'stores the data in the data cache', ->
96
+ expect(ajax_loader.data_cache.get(url)).to.equal 'result'
86
97
 
98
+ it "fires the 'loading' event", ->
99
+ expect(modularity.fire_global_event.calledWith('AJAX_LOADED')).to.be.true
87
100
 
88
- describe 'with caching disabled', ->
89
-
90
- beforeEach ->
91
- ajax_loader = new modularity.AjaxLoader {caching: no}
92
-
93
- describe 'first time request', ->
94
101
 
102
+ describe 'with caching disabled', ->
95
103
  beforeEach ->
104
+ ajax_loader.caching = false
96
105
  ajax_loader.get url, spy
97
106
 
98
- it 'makes an ajax request', ->
99
- jQuery.get.should.have.been.called
100
-
101
- it 'saves the callback for later', ->
102
- ajax_loader.cache.get(url).should.have.length 1
103
- ajax_loader.cache.get(url)[0].should.equal spy
104
-
105
- it 'returns without calling the callback', ->
106
- spy.should.not.have.been.called
107
+ it 'calls the given callbacks with the server data', ->
108
+ expect(spy.calledWith('result')).to.be.true
107
109
 
108
- describe 'the request is already in progress', ->
110
+ it 'removes the callbacks from the callback cache', ->
111
+ expect(ajax_loader.cb_cache.get(url)).to.be.undefined
109
112
 
110
- beforeEach ->
111
- ajax_loader.cache.cache[url] = [spy]
113
+ it 'does not store the data in the data cache', ->
114
+ expect(ajax_loader.data_cache.get(url)).to.be.undefined
112
115
 
113
- it 'adds the callback to the callback array', ->
114
- ajax_loader.cache.get(url).should.have.length 1
115
- ajax_loader.cache.get(url)[0].should.equal spy
116
+ it "fires the 'loading' event", ->
117
+ expect(modularity.fire_global_event.calledWith('AJAX_LOADED')).to.be.true
116
118
 
117
- it 'returns without calling the callback', ->
118
- spy.should.not.have.been.called
119
119
 
120
- it 'does not make another ajax request', ->
121
- jQuery.get.should.not.have.been.called
120
+ describe 'the data has already been loaded', ->
122
121
 
123
- describe 'ajax request successful', ->
122
+    it 'calls the callback with the cached data', ->
123
+ ajax_loader.data_cache.add url, "my data"
124
124
 
125
- beforeEach ->
126
- jquery_callback = null
127
- jQuery.get = (url, callback) -> jquery_callback = callback
128
- ajax_loader.get url, spy
129
- jquery_callback('result')
125
+ ajax_loader.get(url, spy)
130
126
 
131
- it 'calls the given callbacks with the server data', ->
132
- expect(spy.calledWith "result").to.be.true
127
+ expect(spy).to.have.been.called
128
+ expect(spy.calledWith('my data')).to.be.true
133
129
 
134
- it 'replaces the cache callbacks with returned data', ->
135
- expect(ajax_loader.cache.get(url)).to.be.undefined
130
+ it "does not fire the 'loading' event", ->
131
+ expect(modularity.fire_global_event).to.not.have.been.called
136
132
 
@@ -4,7 +4,7 @@
4
4
 
5
5
 
6
6
  describe 'PersistenceManager', ->
7
-
7
+
8
8
  # Global variables for testing.
9
9
  persistence_manager = null
10
10
  entry_1 = {id: 1, value: 'one'}
@@ -46,7 +46,7 @@ describe 'PersistenceManager', ->
46
46
 
47
47
  beforeEach ->
48
48
  sinon.stub(jQuery, 'ajax').yieldsTo('success', entry_2)
49
-
49
+
50
50
  afterEach ->
51
51
  jQuery.ajax.restore()
52
52
 
@@ -109,33 +109,6 @@ describe 'PersistenceManager', ->
109
109
  persistence_manager.entry_url(entry_1).should.equal '/users/1.json'
110
110
 
111
111
 
112
- describe 'load_all', ->
113
-
114
- loading_done_callback = null
115
- beforeEach ->
116
- sinon.stub(jQuery, 'ajax').yieldsTo('success', [entry_1, entry_2])
117
- loading_done_callback = sinon.spy()
118
- persistence_manager.load_all loading_done_callback, {'q': 'foo'},
119
-
120
- afterEach ->
121
- jQuery.ajax.restore()
122
-
123
- it 'makes a request to the INDEX action of the server', ->
124
- jQuery.ajax.should.have.been.calledOnce
125
- jQuery.ajax.args[0][0].url.should.equal '/users.json'
126
-
127
- it 'provides the given data as parameters to the request', ->
128
- jQuery.ajax.args[0][0].data.should.eql {'q': 'foo'}
129
-
130
- it 'fills the server cache with the response data', ->
131
- persistence_manager.server_data.length().should.eql 2
132
- persistence_manager.server_data.get(1).should.eql entry_1
133
- persistence_manager.server_data.get(2).should.eql entry_2
134
-
135
- it 'calls the given callback method when the data is available', ->
136
- loading_done_callback.should.have.been.calledOnce
137
-
138
-
139
112
  describe 'load', ->
140
113
 
141
114
  describe 'entry exists in client data cache', ->
@@ -171,7 +144,7 @@ describe 'PersistenceManager', ->
171
144
 
172
145
 
173
146
  describe "entry doesn't exist on the client at all", ->
174
-
147
+
175
148
  beforeEach ->
176
149
  sinon.stub(jQuery, 'ajax').yieldsTo('success', entry_1)
177
150
 
@@ -203,6 +176,49 @@ describe 'PersistenceManager', ->
203
176
  done()
204
177
 
205
178
 
179
+ describe 'load_all', ->
180
+
181
+ loading_done_callback = null
182
+ beforeEach ->
183
+ sinon.stub(jQuery, 'ajax').yieldsTo('success', [entry_1, entry_2])
184
+ loading_done_callback = sinon.spy()
185
+ persistence_manager.load_all loading_done_callback, {'q': 'foo'},
186
+
187
+ afterEach ->
188
+ jQuery.ajax.restore()
189
+
190
+ it 'makes a request to the INDEX action of the server', ->
191
+ jQuery.ajax.should.have.been.calledOnce
192
+ jQuery.ajax.args[0][0].url.should.equal '/users.json'
193
+
194
+ it 'provides the given data as parameters to the request', ->
195
+ jQuery.ajax.args[0][0].data.should.eql {'q': 'foo'}
196
+
197
+ it 'fills the server cache with the response data', ->
198
+ persistence_manager.server_data.length().should.eql 2
199
+ persistence_manager.server_data.get(1).should.eql entry_1
200
+ persistence_manager.server_data.get(2).should.eql entry_2
201
+
202
+ it 'calls the given callback method when the data is available', ->
203
+ loading_done_callback.should.have.been.calledOnce
204
+
205
+
206
+ describe 'load_many', ->
207
+
208
+ describe 'all snippets in cache', ->
209
+ it 'returns an array of all requested snippets', ->
210
+ persistence_manager.add_all [{id: 1}, {id: 2}, {id: 3}]
211
+ persistence_manager.load_many [1,2], (snippets) ->
212
+ expect(snippets).to.have.length 2
213
+ expect(snippets[0].id).to.equal 1
214
+ expect(snippets[1].id).to.equal 2
215
+
216
+
217
+ describe 'some snippets are not cached', ->
218
+
219
+ it 'loads the missing snippets from the server'
220
+
221
+
206
222
  describe 'save', ->
207
223
 
208
224
  describe 'for unsaved objects', ->
@@ -224,7 +240,7 @@ describe 'PersistenceManager', ->
224
240
  sinon.stub(jQuery, 'ajax').yieldsTo('success', entry_2)
225
241
  server_entry = {id: 1, title: 'server title', desc: 'server desc'}
226
242
  persistence_manager.server_data.add server_entry
227
-
243
+
228
244
  afterEach ->
229
245
  jQuery.ajax.restore()
230
246
 
@@ -1,3 +1,3 @@
1
1
  module ModularityRails
2
- VERSION = "0.14.0"
2
+ VERSION = "0.15.0"
3
3
  end
@@ -11,30 +11,67 @@
11
11
  class window.modularity.AjaxLoader
12
12
 
13
13
  constructor: (params = {}) ->
14
- @cache = new modularity.Cache()
14
+
15
+ # Caches the callbacks.
16
+ @cb_cache = new modularity.Cache()
15
17
 
16
18
  # Whether to perform caching of data.
17
19
  # Default: no.
18
- @caching = params.caching
20
+ @caching = !!params.caching
21
+
22
+ # Caches the data loaded.
23
+ @data_cache = new modularity.Cache()
24
+
25
+ # The number of currently running loading operations.
26
+ @loader_count = 0
27
+
19
28
 
29
+ # The different events that this class can fire.
30
+ @events =
31
+ AJAX_LOADING: 'AJAX_LOADING'
32
+ AJAX_LOADED: 'AJAX_LOADED'
20
33
 
34
+
35
+ # Loads the data from the given URL asynchronously.
21
36
  get: (url, callback) ->
22
- cached_value = @cache.get url
23
-
24
- # New request --> start GET call, store callback.
25
- unless cached_value?
26
- @cache.add url, [callback]
27
- return jQuery.get url, (data) =>
28
- cb(data) for cb in @cache.get(url)
29
- if @caching
30
- @cache.add url, data
31
- else
32
- @cache.remove url
33
-
34
- # Request while the GET call is still pending -->
37
+
38
+ # Return immediately if we have cached data.
39
+ if @caching
40
+ cached_data = @data_cache.get url
41
+ return callback(cached_data) if cached_data?
42
+
43
+ # Here, we have no cached data. Check
44
+
45
+ # If a GET call to this URL is already in progress -->
35
46
  # add the given callback to the list of waiting callbacks.
36
- if cached_value.constructor is Array
37
- return cached_value.push callback
47
+ request_in_progress = @cb_cache.get url
48
+ return request_in_progress.push(callback) if request_in_progress?
49
+
50
+ # Here, no request is currently in progress --> start a new one.
51
+
52
+ # Add callback to callback list.
53
+ @cb_cache.add url, [callback]
54
+
55
+ # Fire 'loading' event if this is the start of a loading operation.
56
+ @loader_count++
57
+ if @loader_count == 1
58
+ window.modularity.fire_global_event window.modularity.AjaxLoader.events.AJAX_LOADING
59
+
60
+ # Perform the request.
61
+ jQuery.get url, (data) =>
62
+
63
+ # Add result to cache.
64
+ if @caching
65
+ @data_cache.add url, data
66
+
67
+ # Call callbacks.
68
+ cb(data) for cb in @cb_cache.get url
69
+
70
+ # Remove request from callback list.
71
+ @cb_cache.remove url
72
+
73
+ # Fire 'loaded' event.
74
+ @loader_count--
75
+ if @loader_count == 0
76
+ window.modularity.fire_global_event window.modularity.AjaxLoader.events.AJAX_LOADED
38
77
 
39
- # There is a cached response for this request --> answer the request immediately.
40
- callback(cached_value)
@@ -6,18 +6,18 @@
6
6
  class modularity.PersistenceManager
7
7
 
8
8
  constructor: (params) ->
9
-
9
+
10
10
  # Copy of the data as it is on the server.
11
11
  @server_data = new modularity.IndexedCache 'id'
12
-
12
+
13
13
  # Copy of the data as it is on the client.
14
14
  @client_data = new modularity.IndexedCache 'id'
15
-
15
+
16
16
  # The base url on the server. Expected to be a fully RESTful API.
17
17
  @base_url = params.url
18
18
 
19
19
  @key = params.key or 'id'
20
-
20
+
21
21
  # For handling parallel requests to the server.
22
22
  @loader = new modularity.AjaxLoader { cache: no }
23
23
 
@@ -34,25 +34,23 @@ class modularity.PersistenceManager
34
34
 
35
35
  # Creates the given object on the server.
36
36
  create: (obj, callback) ->
37
- jQuery.ajax {
37
+ jQuery.ajax
38
38
  url: @collection_url()
39
39
  type: 'POST'
40
40
  data: obj
41
41
  success: (server_obj) =>
42
42
  @server_data.add server_obj
43
43
  callback server_obj
44
- }
45
44
 
46
45
 
47
46
  delete: (obj, callback) ->
48
47
  @client_data.remove obj
49
48
  @server_data.remove obj
50
- jQuery.ajax {
49
+ jQuery.ajax
51
50
  url: @entry_url(obj)
52
51
  type: 'DELETE'
53
52
  success: ->
54
53
  callback() if callback?
55
- }
56
54
 
57
55
 
58
56
  # Returns the url to access a single entry.
@@ -60,19 +58,29 @@ class modularity.PersistenceManager
60
58
  "#{@base_url}/#{entry[@key]}.json"
61
59
 
62
60
 
63
- # Returns the entry with the given key.
64
- load: (key, callback) ->
65
-
61
+ # Returns the cached data object, or undefined.
62
+ get_cached: (key) ->
63
+
66
64
  # Try to use client_data cache.
67
65
  client_obj = @client_data.get key
68
- return callback(client_obj) if client_obj
69
-
66
+ return client_obj if client_obj
67
+
70
68
  # No data in client cache --> try to use server cache.
71
69
  server_obj = @server_data.get key
72
70
  if server_obj
73
71
  client_obj = modularity.clone_hash server_obj
74
72
  @client_data.add client_obj
75
- return callback client_obj
73
+ return client_obj
74
+
75
+ # Object not found in client or server cache.
76
+ return undefined
77
+
78
+
79
+ # Returns the entry with the given key.
80
+ load: (key, callback) ->
81
+
82
+ # Try to load from cache.
83
+ return callback(snippet) if snippet = @get_cached key
76
84
 
77
85
  # No data on client at all --> load data from server.
78
86
  @loader.get "#{@base_url}/#{key}", (server_entry) =>
@@ -85,16 +93,32 @@ class modularity.PersistenceManager
85
93
  # Loads all objects from the server.
86
94
  # Provides the given params as parameters to the GET request.
87
95
  load_all: (callback, params) ->
88
- jQuery.ajax {
96
+ jQuery.ajax
89
97
  url: @collection_url()
90
98
  cache: no
91
99
  data: params
92
100
  success: (data) =>
93
101
  @server_data.add_all data
94
102
  callback()
95
- }
96
103
 
97
-
104
+
105
+ # Loads all snippets with the given ids.
106
+ load_many: (ids, callback) ->
107
+ missing_ids = []
108
+ snippets = []
109
+ $.each ids, (pos, id) =>
110
+ snippet = @get_cached id
111
+ if snippet
112
+ snippets.push snippet
113
+ else
114
+ missing_ids.push id
115
+
116
+ if missing_ids.length == 0
117
+ return callback(snippets)
118
+
119
+ alert "uncached snippets found: #{missing_ids}"
120
+
121
+
98
122
  # Saves the given object.
99
123
  # Does the right thing (create or update) dependent on
100
124
  # whether the object already has a key parameter.
@@ -109,24 +133,23 @@ class modularity.PersistenceManager
109
133
  # The given object must exist on the server already,
110
134
  # and have a proper value in the key attribute.
111
135
  update: (obj, callback) ->
112
-
136
+
113
137
  # Create a new hash, containing only the changed attributes between obj and it's replica in @server_data.
114
138
  diff_obj = modularity.object_diff @server_data.get(obj[@key]), obj
115
139
  return if modularity.object_length(diff_obj) == 0
116
-
140
+
117
141
  # Add key attribute.
118
142
  diff_obj[@key] = obj[@key]
119
-
143
+
120
144
  # Update server_data version.
121
145
  @server_data.add obj
122
146
 
123
147
  # Send to server
124
- jQuery.ajax {
148
+ jQuery.ajax
125
149
  url: @entry_url(obj)
126
150
  type: 'PUT'
127
151
  data: diff_obj
128
152
  success: (server_obj) =>
129
153
  @server_data.add server_obj
130
154
  callback server_obj if callback
131
- }
132
155
 
metadata CHANGED
@@ -1,96 +1,96 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: modularity-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.14.0
5
4
  prerelease:
5
+ version: 0.15.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Kevin Goslar
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-11-26 00:00:00.000000000 Z
12
+ date: 2012-12-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: rails
16
- requirement: !ruby/object:Gem::Requirement
17
- none: false
15
+ version_requirements: !ruby/object:Gem::Requirement
18
16
  requirements:
19
17
  - - ! '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: 3.1.0
20
+ none: false
21
+ name: rails
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- none: false
24
+ requirement: !ruby/object:Gem::Requirement
26
25
  requirements:
27
26
  - - ! '>='
28
27
  - !ruby/object:Gem::Version
29
28
  version: 3.1.0
30
- - !ruby/object:Gem::Dependency
31
- name: capybara-webkit
32
- requirement: !ruby/object:Gem::Requirement
33
29
  none: false
30
+ - !ruby/object:Gem::Dependency
31
+ version_requirements: !ruby/object:Gem::Requirement
34
32
  requirements:
35
33
  - - ! '>='
36
34
  - !ruby/object:Gem::Version
37
35
  version: '0'
36
+ none: false
37
+ name: capybara-webkit
38
38
  type: :development
39
39
  prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
40
+ requirement: !ruby/object:Gem::Requirement
42
41
  requirements:
43
42
  - - ! '>='
44
43
  - !ruby/object:Gem::Version
45
44
  version: '0'
46
- - !ruby/object:Gem::Dependency
47
- name: evergreen
48
- requirement: !ruby/object:Gem::Requirement
49
45
  none: false
46
+ - !ruby/object:Gem::Dependency
47
+ version_requirements: !ruby/object:Gem::Requirement
50
48
  requirements:
51
49
  - - ! '>='
52
50
  - !ruby/object:Gem::Version
53
51
  version: '0'
52
+ none: false
53
+ name: evergreen
54
54
  type: :development
55
55
  prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- none: false
56
+ requirement: !ruby/object:Gem::Requirement
58
57
  requirements:
59
58
  - - ! '>='
60
59
  - !ruby/object:Gem::Version
61
60
  version: '0'
62
- - !ruby/object:Gem::Dependency
63
- name: rb-fsevent
64
- requirement: !ruby/object:Gem::Requirement
65
61
  none: false
62
+ - !ruby/object:Gem::Dependency
63
+ version_requirements: !ruby/object:Gem::Requirement
66
64
  requirements:
67
65
  - - ! '>='
68
66
  - !ruby/object:Gem::Version
69
67
  version: '0'
68
+ none: false
69
+ name: rb-fsevent
70
70
  type: :development
71
71
  prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
73
- none: false
72
+ requirement: !ruby/object:Gem::Requirement
74
73
  requirements:
75
74
  - - ! '>='
76
75
  - !ruby/object:Gem::Version
77
76
  version: '0'
78
- - !ruby/object:Gem::Dependency
79
- name: guard-livereload
80
- requirement: !ruby/object:Gem::Requirement
81
77
  none: false
78
+ - !ruby/object:Gem::Dependency
79
+ version_requirements: !ruby/object:Gem::Requirement
82
80
  requirements:
83
81
  - - ! '>='
84
82
  - !ruby/object:Gem::Version
85
83
  version: '0'
84
+ none: false
85
+ name: guard-livereload
86
86
  type: :development
87
87
  prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
89
- none: false
88
+ requirement: !ruby/object:Gem::Requirement
90
89
  requirements:
91
90
  - - ! '>='
92
91
  - !ruby/object:Gem::Version
93
92
  version: '0'
93
+ none: false
94
94
  description: Description of ModularityRails.
95
95
  email:
96
96
  - kevin.goslar@gmail.com
@@ -192,20 +192,20 @@ rdoc_options: []
192
192
  require_paths:
193
193
  - lib
194
194
  required_ruby_version: !ruby/object:Gem::Requirement
195
- none: false
196
195
  requirements:
197
196
  - - ! '>='
198
197
  - !ruby/object:Gem::Version
199
198
  version: '0'
200
- required_rubygems_version: !ruby/object:Gem::Requirement
201
199
  none: false
200
+ required_rubygems_version: !ruby/object:Gem::Requirement
202
201
  requirements:
203
202
  - - ! '>='
204
203
  - !ruby/object:Gem::Version
205
204
  version: '0'
205
+ none: false
206
206
  requirements: []
207
207
  rubyforge_project:
208
- rubygems_version: 1.8.24
208
+ rubygems_version: 1.8.23
209
209
  signing_key:
210
210
  specification_version: 3
211
211
  summary: Summary of ModularityRails.