modularity-rails 0.2.0 → 0.3.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.
@@ -13,7 +13,7 @@ loadCS = (url, callback) ->
|
|
13
13
|
# Helper method to load the modularity library before the tests.
|
14
14
|
describe 'modularity loader', ->
|
15
15
|
it 'loading Modularity library ...', ->
|
16
|
-
loadCS '/vendor/assets/javascripts/modularity.js.coffee'
|
16
|
+
loadCS '/vendor/assets/javascripts/modularity.js.coffee?'+(new Date()).getTime()
|
17
17
|
|
18
18
|
|
19
19
|
describe 'modularity', ->
|
@@ -56,29 +56,35 @@ describe 'modularity', ->
|
|
56
56
|
module = new Module('testing')
|
57
57
|
|
58
58
|
it 'shows an alert with the given message if the given condition is false', ->
|
59
|
-
|
59
|
+
Module.assert false, 'Message'
|
60
60
|
expect(alert).toHaveBeenCalledWith("Message")
|
61
61
|
|
62
62
|
it 'fails when the condition is null', ->
|
63
|
-
|
63
|
+
Module.assert null, 'Message'
|
64
64
|
expect(alert).toHaveBeenCalledWith("Message")
|
65
65
|
|
66
66
|
it 'fails when the condition is undefined', ->
|
67
|
-
|
67
|
+
Module.assert undefined, 'Message'
|
68
68
|
expect(alert).toHaveBeenCalledWith("Message")
|
69
69
|
|
70
70
|
it 'fails when the condition is an empty array', ->
|
71
|
-
|
71
|
+
Module.assert [], 'Message'
|
72
72
|
expect(alert).toHaveBeenCalledWith("Message")
|
73
73
|
|
74
74
|
it 'fails when the condition is an empty string', ->
|
75
|
-
|
75
|
+
Module.assert '', 'Message'
|
76
76
|
expect(alert).toHaveBeenCalledWith("Message")
|
77
77
|
|
78
78
|
it 'passes when the condition is a string', ->
|
79
|
-
|
79
|
+
Module.assert '123', 'Message'
|
80
80
|
expect(alert).not.toHaveBeenCalled()
|
81
81
|
|
82
|
+
it "returns false if the condition doesn't pass", ->
|
83
|
+
expect(Module.assert(false)).toBeFalsy()
|
84
|
+
|
85
|
+
it "returns true if the condition passes", ->
|
86
|
+
expect(Module.assert('123')).toBeTruthy()
|
87
|
+
|
82
88
|
|
83
89
|
describe 'jQuery Integration', ->
|
84
90
|
|
@@ -101,3 +107,159 @@ describe 'modularity', ->
|
|
101
107
|
it 'returns an error if the jQuery object is empty.', ->
|
102
108
|
$('#zonk').module(Module)
|
103
109
|
expect(alert).toHaveBeenCalled()
|
110
|
+
|
111
|
+
|
112
|
+
describe 'event handling', ->
|
113
|
+
|
114
|
+
# Variables that should be accessible in both the beforeEach block and the tests.
|
115
|
+
module = null
|
116
|
+
mockContainer = null
|
117
|
+
|
118
|
+
beforeEach ->
|
119
|
+
mockContainer = $('#module_container')
|
120
|
+
module = new Module(mockContainer)
|
121
|
+
spyOn window, 'alert'
|
122
|
+
|
123
|
+
|
124
|
+
describe 'bind_event', ->
|
125
|
+
|
126
|
+
beforeEach ->
|
127
|
+
spyOn mockContainer, 'bind'
|
128
|
+
|
129
|
+
it 'binds the given custom jQuery event type and the given callback to the container', ->
|
130
|
+
myCallback = ->
|
131
|
+
module.bind_event 'myEventType', myCallback
|
132
|
+
expect(mockContainer.bind).toHaveBeenCalledWith('myEventType', myCallback)
|
133
|
+
expect(window.alert).not.toHaveBeenCalled()
|
134
|
+
|
135
|
+
it "throws an error if no parameters are given", ->
|
136
|
+
module.bind_event()
|
137
|
+
expect(window.alert).toHaveBeenCalled()
|
138
|
+
expect(mockContainer.bind).not.toHaveBeenCalled()
|
139
|
+
|
140
|
+
it "throws an error if the given event type doesn't exist", ->
|
141
|
+
module.bind_event undefined, ->
|
142
|
+
expect(window.alert).toHaveBeenCalled()
|
143
|
+
expect(mockContainer.bind).not.toHaveBeenCalled()
|
144
|
+
|
145
|
+
it 'throws an error if the given event type is not a string', ->
|
146
|
+
module.bind_event {}, ->
|
147
|
+
expect(window.alert).toHaveBeenCalled()
|
148
|
+
expect(mockContainer.bind).not.toHaveBeenCalled()
|
149
|
+
|
150
|
+
it "throws an error if the given callback doesn't exist", ->
|
151
|
+
module.bind_event '123'
|
152
|
+
expect(window.alert).toHaveBeenCalled()
|
153
|
+
expect(mockContainer.bind).not.toHaveBeenCalled()
|
154
|
+
|
155
|
+
it 'throws an error if the given callback is not a function', ->
|
156
|
+
module.bind_event '123', {}
|
157
|
+
expect(window.alert).toHaveBeenCalled()
|
158
|
+
expect(mockContainer.bind).not.toHaveBeenCalled()
|
159
|
+
|
160
|
+
|
161
|
+
describe 'fire_event', ->
|
162
|
+
|
163
|
+
beforeEach ->
|
164
|
+
spyOn mockContainer, 'trigger'
|
165
|
+
|
166
|
+
it 'triggers a custom jQuery event with the given event type on the container object', ->
|
167
|
+
module.fire_event 'event type', 'event data'
|
168
|
+
expect(mockContainer.trigger).toHaveBeenCalledWith('event type', 'event data')
|
169
|
+
|
170
|
+
describe 'when no payload is given', ->
|
171
|
+
it 'provides an empty object as payload', ->
|
172
|
+
module.fire_event 'event type'
|
173
|
+
expect(mockContainer.trigger).toHaveBeenCalled()
|
174
|
+
expect(mockContainer.trigger.argsForCall[0][1]).toEqual({})
|
175
|
+
|
176
|
+
it "doesn't change the original payload variable", ->
|
177
|
+
data = undefined
|
178
|
+
module.fire_event 'event type', data
|
179
|
+
expect(data).toBeUndefined
|
180
|
+
|
181
|
+
it 'provides 0 as payload if 0 is given', ->
|
182
|
+
module.fire_event 'event type', 0
|
183
|
+
expect(mockContainer.trigger).toHaveBeenCalled()
|
184
|
+
expect(mockContainer.trigger.argsForCall[0][1]).toEqual(0)
|
185
|
+
|
186
|
+
it 'throws an error if the given event type is not a string', ->
|
187
|
+
module.fire_event {}
|
188
|
+
expect(mockContainer.trigger).not.toHaveBeenCalled()
|
189
|
+
expect(window.alert).toHaveBeenCalled()
|
190
|
+
|
191
|
+
|
192
|
+
describe 'global events', ->
|
193
|
+
|
194
|
+
# Variables that should be accessible in both the beforeEach block and the tests.
|
195
|
+
mockGlobalContainer = null
|
196
|
+
|
197
|
+
beforeEach ->
|
198
|
+
mockGlobalContainer = $('#module_container')
|
199
|
+
spyOn(Module, 'global_event_container').andReturn(mockGlobalContainer)
|
200
|
+
|
201
|
+
describe 'bind_global_event', ->
|
202
|
+
|
203
|
+
beforeEach ->
|
204
|
+
spyOn mockGlobalContainer, 'bind'
|
205
|
+
|
206
|
+
it 'binds the given event type and callback method to the global event container', ->
|
207
|
+
callback = ->
|
208
|
+
Module.bind_global_event '123', callback
|
209
|
+
expect(mockGlobalContainer.bind).toHaveBeenCalledWith('123', callback)
|
210
|
+
|
211
|
+
it "throws an error if no parameters are given", ->
|
212
|
+
Module.bind_global_event()
|
213
|
+
expect(window.alert).toHaveBeenCalled()
|
214
|
+
expect(mockGlobalContainer.bind).not.toHaveBeenCalled()
|
215
|
+
|
216
|
+
it "throws an error if the given event type doesn't exist", ->
|
217
|
+
Module.bind_global_event undefined, ->
|
218
|
+
expect(window.alert).toHaveBeenCalled()
|
219
|
+
expect(mockGlobalContainer.bind).not.toHaveBeenCalled()
|
220
|
+
|
221
|
+
it 'throws an error if the given event type is not a string', ->
|
222
|
+
Module.bind_global_event {}, ->
|
223
|
+
expect(window.alert).toHaveBeenCalled()
|
224
|
+
expect(mockGlobalContainer.bind).not.toHaveBeenCalled()
|
225
|
+
|
226
|
+
it "throws an error if the given callback doesn't exist", ->
|
227
|
+
Module.bind_global_event '123'
|
228
|
+
expect(window.alert).toHaveBeenCalled()
|
229
|
+
expect(mockGlobalContainer.bind).not.toHaveBeenCalled()
|
230
|
+
|
231
|
+
it 'throws an error if the given callback is not a function', ->
|
232
|
+
Module.bind_global_event '123', {}
|
233
|
+
expect(window.alert).toHaveBeenCalled()
|
234
|
+
expect(mockGlobalContainer.bind).not.toHaveBeenCalled()
|
235
|
+
|
236
|
+
|
237
|
+
describe 'fire_global_event', ->
|
238
|
+
|
239
|
+
beforeEach ->
|
240
|
+
spyOn mockGlobalContainer, 'trigger'
|
241
|
+
|
242
|
+
it 'triggers a custom jQuery event with the given event type on the global event container object', ->
|
243
|
+
Module.fire_global_event 'event type', 'event data'
|
244
|
+
expect(mockGlobalContainer.trigger).toHaveBeenCalledWith('event type', 'event data')
|
245
|
+
|
246
|
+
describe 'when no payload is given', ->
|
247
|
+
it 'provides an empty object as payload', ->
|
248
|
+
Module.fire_global_event 'event type'
|
249
|
+
expect(mockGlobalContainer.trigger).toHaveBeenCalled()
|
250
|
+
expect(mockGlobalContainer.trigger.argsForCall[0][1]).toEqual({})
|
251
|
+
|
252
|
+
it "doesn't change the original payload variable", ->
|
253
|
+
data = undefined
|
254
|
+
Module.fire_global_event 'event type', data
|
255
|
+
expect(data).toBeUndefined
|
256
|
+
|
257
|
+
it 'provides 0 as payload if 0 is given', ->
|
258
|
+
Module.fire_global_event 'event type', 0
|
259
|
+
expect(mockGlobalContainer.trigger).toHaveBeenCalled()
|
260
|
+
expect(mockGlobalContainer.trigger.argsForCall[0][1]).toEqual(0)
|
261
|
+
|
262
|
+
it 'throws an error if the given event type is not a string', ->
|
263
|
+
Module.fire_global_event {}
|
264
|
+
expect(mockGlobalContainer.trigger).not.toHaveBeenCalled()
|
265
|
+
expect(window.alert).toHaveBeenCalled()
|
@@ -16,38 +16,43 @@ class window.Module
|
|
16
16
|
|
17
17
|
# Checks whether the given condition is true.
|
18
18
|
# Shows an alert with the given message if not.
|
19
|
-
assert: (condition, message) ->
|
20
|
-
|
19
|
+
@assert: (condition, message) ->
|
20
|
+
condition_ok = condition?.length > 0
|
21
|
+
alert(message) unless condition_ok
|
22
|
+
condition_ok
|
21
23
|
|
22
24
|
# MODULE EVENTS.
|
23
25
|
|
24
26
|
# Calls the given function when this widget fires the given local event.
|
25
27
|
bind_event: (event_type, callback) =>
|
26
|
-
|
28
|
+
return unless Module.assert event_type, "Module.bind_event: parameter 'event_type' is empty"
|
29
|
+
return alert "Module.bind_event: parameter 'callback' must be a function, #{callback} (#{typeof callback}) given." unless typeof callback == 'function'
|
27
30
|
@container.bind event_type, callback
|
28
31
|
|
29
32
|
# Fires the given local event with the given data payload.
|
30
33
|
fire_event: (event_type, data) =>
|
31
|
-
|
32
|
-
|
34
|
+
Module.assert event_type, 'Module.fire_event: You must provide the event type to fire.'
|
35
|
+
return alert("Module.fire_event: Event type must be a string, #{event_type} (#{typeof event_type}) given.") unless typeof event_type == 'string'
|
36
|
+
@container.trigger event_type, data ?= {}
|
33
37
|
|
34
38
|
|
35
39
|
# GLOBAL EVENTS.
|
36
40
|
|
37
41
|
# Subscribes to the given global event,
|
38
42
|
# i.e. calls the given function when the given global event type happens.
|
39
|
-
bind_global_event: (event_type, callback) =>
|
40
|
-
@assert event_type, "Module.bind_global_event: parameter 'event_type' is empty"
|
43
|
+
@bind_global_event: (event_type, callback) =>
|
44
|
+
return unless @assert event_type, "Module.bind_global_event: parameter 'event_type' is empty"
|
45
|
+
return alert "Module.bind_global_event: parameter 'callback' must be a function, #{callback} (#{typeof callback}) given." unless typeof callback == 'function'
|
41
46
|
@global_event_container().bind event_type, callback
|
42
47
|
|
43
48
|
# Fires the given global event with the given data payload.
|
44
|
-
fire_global_event: (event_type, data) =>
|
49
|
+
@fire_global_event: (event_type, data) =>
|
45
50
|
@assert event_type, 'Module.fire_global_event: You must provide the event type to fire.'
|
46
|
-
|
51
|
+
return alert("Module.fire_global_event: Event type must be a string, #{event_type} (#{typeof event_type}) given.") unless typeof event_type == 'string'
|
52
|
+
@global_event_container().trigger event_type, data ?= []
|
47
53
|
|
48
54
|
# Returns the DOM object that is used to fire global events on.
|
49
|
-
global_event_container: =>
|
50
|
-
@global_event_container_cache or= $(window)
|
55
|
+
@global_event_container: => @global_event_container_cache or= $(window)
|
51
56
|
|
52
57
|
|
53
58
|
# jQuery integration for creating Modules.
|
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.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2012-03-22 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
16
|
-
requirement: &
|
16
|
+
requirement: &70292877992260 !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: *
|
24
|
+
version_requirements: *70292877992260
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: capybara-webkit
|
27
|
-
requirement: &
|
27
|
+
requirement: &70292877991380 !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: *
|
35
|
+
version_requirements: *70292877991380
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: evergreen
|
38
|
-
requirement: &
|
38
|
+
requirement: &70292877990260 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,7 +43,7 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70292877990260
|
47
47
|
description: Description of ModularityRails.
|
48
48
|
email:
|
49
49
|
- kevin.goslar@gmail.com
|