joosy 1.1.0.alpha.1 → 1.1.0.alpha.2

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.
data/Gemfile.lock CHANGED
@@ -11,9 +11,8 @@ GIT
11
11
  PATH
12
12
  remote: .
13
13
  specs:
14
- joosy (1.1.0.alpha.1)
14
+ joosy (1.1.0.alpha.2)
15
15
  haml_coffee_assets
16
- i18n-js
17
16
  sprockets
18
17
 
19
18
  GEM
@@ -71,8 +70,6 @@ GEM
71
70
  tilt (>= 1.3.3)
72
71
  hike (1.2.1)
73
72
  i18n (0.6.1)
74
- i18n-js (2.1.2)
75
- i18n
76
73
  jasmine-core (1.3.1)
77
74
  journey (1.0.4)
78
75
  jquery-rails (2.2.0)
@@ -12,36 +12,42 @@ Joosy.Modules.Events =
12
12
  # @param [Function] callback Action to run when all events were triggered at least once
13
13
  # @param [Hash] options Options
14
14
  #
15
- # @option options [Boolean] unique Call has no effect if true and the given pair
16
- # of events and callback is already set up
17
- #
18
- wait: (events, callback, options = {}) ->
15
+ wait: (name, events, callback) ->
16
+ @__oneShotEvents ||= Object.extended()
17
+
18
+ # unnamed binding
19
+ if Object.isFunction(events)
20
+ callback = events
21
+ events = name
22
+ name = @__oneShotEvents.keys().length.toString()
23
+
19
24
  events = @__splitEvents events
20
25
  @__validateEvents events
21
26
 
22
- return if options.unique && @__isBound(events, callback, true)
23
-
24
- @__oneShotEvents ||= []
25
- @__oneShotEvents.push [events, callback]
27
+ @__oneShotEvents[name] = [events, callback]
28
+ name
26
29
 
27
30
  #
28
- # Binds action to run each time any of given even was triggered
31
+ # Binds action to run each time any of given event was triggered
29
32
  #
30
33
  # @param [String|Array] events List of events separated by space
31
34
  # @param [Function] callback Action to run on trigger
32
35
  # @param [Hash] options Options
33
36
  #
34
- # @option options [Boolean] unique Call has no effect if true and the given pair
35
- # of events and callback is already set up
36
- #
37
- bind: (events, callback, options = {}) ->
37
+ bind: (name, events, callback) ->
38
+ @__boundEvents ||= Object.extended()
39
+
40
+ # unnamed binding
41
+ if Object.isFunction(events)
42
+ callback = events
43
+ events = name
44
+ name = @__boundEvents.keys().length.toString()
45
+
38
46
  events = @__splitEvents events
39
47
  @__validateEvents events
40
48
 
41
- return if options.unique && @__isBound(events, callback)
42
-
43
- @__boundEvents ||= []
44
- @__boundEvents.push [events, callback]
49
+ @__boundEvents[name] = [events, callback]
50
+ name
45
51
 
46
52
  #
47
53
  # Unbinds action from runing on trigger
@@ -49,10 +55,14 @@ Joosy.Modules.Events =
49
55
  # @param [Function] target Action to unbind
50
56
  #
51
57
  unbind: (target) ->
52
- for [events, callback], index in @__boundEvents
53
- if callback == target
54
- @__boundEvents.splice index, 1
55
- return
58
+ needle = undefined
59
+
60
+ for name, [events, callback] of @__boundEvents
61
+ if (Object.isFunction(target) && callback == target) || name == target
62
+ needle = name
63
+ break
64
+
65
+ delete @__boundEvents[needle] if needle?
56
66
 
57
67
  #
58
68
  # Triggers event for {bind} and {wait}
@@ -63,16 +73,16 @@ Joosy.Modules.Events =
63
73
  Joosy.Modules.Log.debugAs @, "Event #{event} triggered"
64
74
  if @__oneShotEvents
65
75
  fire = []
66
- for [events, callback], index in @__oneShotEvents
76
+ for name, [events, callback] of @__oneShotEvents
67
77
  events.remove event
68
78
  if events.length == 0
69
- fire.push index
70
- fire.each (index) =>
71
- callback = @__oneShotEvents[index][1]
72
- @__oneShotEvents.removeAt index
79
+ fire.push name
80
+ fire.each (name) =>
81
+ callback = @__oneShotEvents[name][1]
82
+ delete @__oneShotEvents[name]
73
83
  callback data...
74
84
  if @__boundEvents
75
- for [events, callback] in @__boundEvents
85
+ for name, [events, callback] of @__boundEvents
76
86
  if events.any event
77
87
  callback data...
78
88
 
@@ -89,7 +99,7 @@ Joosy.Modules.Events =
89
99
  # @param [Function] block Configuration block (see example)
90
100
  #
91
101
  synchronize: (block) ->
92
- context = new Joosy.Modules.Events.SynchronizationContext(this)
102
+ context = new Joosy.Events.SynchronizationContext(this)
93
103
  block.call(this, context)
94
104
 
95
105
  if context.expectations.length == 0
@@ -113,27 +123,25 @@ Joosy.Modules.Events =
113
123
  unless Object.isArray(events) && events.length > 0
114
124
  throw new Error "#{Joosy.Module.__className @}> bind invalid events: #{events}"
115
125
 
116
- __isBound: (events, callback, oneShot = false) ->
117
- haystack = if oneShot
118
- @__oneShotEvents
119
- else
120
- @__boundEvents
121
126
 
122
- return false unless haystack
127
+ Joosy.Events = {}
128
+
129
+ class Joosy.Events.Namespace
130
+ constructor: (@parent) ->
123
131
 
124
- result = haystack.find (item) ->
125
- item[0].length == events.length &&
126
- item[0].subtract(events).isEmpty() &&
127
- item[1] == callback
132
+ bindings: []
128
133
 
129
- !!result
134
+ bind: (args...) -> @bindings.push @parent.bind(args...)
135
+ unbind: ->
136
+ @parent.unbind b for b in @bindings
137
+ @bindings = []
130
138
 
131
139
  #
132
140
  # Internal representation of {Joosy.Modules.Events.synchronize} context
133
141
  #
134
142
  # @see Joosy.Modules.Events.synchronize
135
143
  #
136
- class Joosy.Modules.Events.SynchronizationContext
144
+ class Joosy.Events.SynchronizationContext
137
145
  @uid = 0
138
146
 
139
147
  constructor: (@parent) ->
data/lib/joosy/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Joosy
2
- VERSION = "1.1.0.alpha.1"
2
+ VERSION = "1.1.0.alpha.2"
3
3
  end
@@ -65,19 +65,6 @@ describe "Joosy.Modules.Events", ->
65
65
  @box.wait 'event', callback
66
66
  expect(@box.__oneShotEvents).toEqual [[['event'], callback], [['event'], callback], [['event'], callback]]
67
67
 
68
- it "should ignore multiple binding", ->
69
- callback = ->
70
-
71
- @box.bind 'event', callback
72
- 3.times =>
73
- @box.bind 'event', callback, unique: true
74
- expect(@box.__boundEvents).toEqual [[['event'], callback]]
75
-
76
- @box.wait 'event', callback
77
- 3.times =>
78
- @box.wait 'event', callback, unique: true
79
- expect(@box.__oneShotEvents).toEqual [[['event'], callback]]
80
-
81
68
  it "should handle inheritance well", ->
82
69
  callback = sinon.spy()
83
70
  @sub.wait 'foo', callback
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: joosy
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0.alpha.1
4
+ version: 1.1.0.alpha.2
5
5
  prerelease: 6
6
6
  platform: ruby
7
7
  authors:
@@ -12,11 +12,11 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2013-01-29 00:00:00.000000000 Z
15
+ date: 2013-02-01 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: sprockets
19
- requirement: &70197702471700 !ruby/object:Gem::Requirement
19
+ requirement: &70336034677120 !ruby/object:Gem::Requirement
20
20
  none: false
21
21
  requirements:
22
22
  - - ! '>='
@@ -24,10 +24,10 @@ dependencies:
24
24
  version: '0'
25
25
  type: :runtime
26
26
  prerelease: false
27
- version_requirements: *70197702471700
27
+ version_requirements: *70336034677120
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: haml_coffee_assets
30
- requirement: &70197702471180 !ruby/object:Gem::Requirement
30
+ requirement: &70336034676020 !ruby/object:Gem::Requirement
31
31
  none: false
32
32
  requirements:
33
33
  - - ! '>='
@@ -35,10 +35,10 @@ dependencies:
35
35
  version: '0'
36
36
  type: :runtime
37
37
  prerelease: false
38
- version_requirements: *70197702471180
38
+ version_requirements: *70336034676020
39
39
  - !ruby/object:Gem::Dependency
40
40
  name: jquery-rails
41
- requirement: &70197702470700 !ruby/object:Gem::Requirement
41
+ requirement: &70336034674640 !ruby/object:Gem::Requirement
42
42
  none: false
43
43
  requirements:
44
44
  - - ! '>='
@@ -46,10 +46,10 @@ dependencies:
46
46
  version: '0'
47
47
  type: :development
48
48
  prerelease: false
49
- version_requirements: *70197702470700
49
+ version_requirements: *70336034674640
50
50
  - !ruby/object:Gem::Dependency
51
51
  name: guard
52
- requirement: &70197702469920 !ruby/object:Gem::Requirement
52
+ requirement: &70336034673840 !ruby/object:Gem::Requirement
53
53
  none: false
54
54
  requirements:
55
55
  - - ! '>='
@@ -57,10 +57,10 @@ dependencies:
57
57
  version: '0'
58
58
  type: :development
59
59
  prerelease: false
60
- version_requirements: *70197702469920
60
+ version_requirements: *70336034673840
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: guard-coffeescript
63
- requirement: &70197702469260 !ruby/object:Gem::Requirement
63
+ requirement: &70336034672920 !ruby/object:Gem::Requirement
64
64
  none: false
65
65
  requirements:
66
66
  - - ! '>='
@@ -68,10 +68,10 @@ dependencies:
68
68
  version: '0'
69
69
  type: :development
70
70
  prerelease: false
71
- version_requirements: *70197702469260
71
+ version_requirements: *70336034672920
72
72
  - !ruby/object:Gem::Dependency
73
73
  name: guard-sprockets
74
- requirement: &70197702467920 !ruby/object:Gem::Requirement
74
+ requirement: &70336034671560 !ruby/object:Gem::Requirement
75
75
  none: false
76
76
  requirements:
77
77
  - - ! '>='
@@ -79,10 +79,10 @@ dependencies:
79
79
  version: '0'
80
80
  type: :development
81
81
  prerelease: false
82
- version_requirements: *70197702467920
82
+ version_requirements: *70336034671560
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: jasmine
85
- requirement: &70197702465880 !ruby/object:Gem::Requirement
85
+ requirement: &70336034670000 !ruby/object:Gem::Requirement
86
86
  none: false
87
87
  requirements:
88
88
  - - ! '>='
@@ -90,7 +90,7 @@ dependencies:
90
90
  version: '0'
91
91
  type: :development
92
92
  prerelease: false
93
- version_requirements: *70197702465880
93
+ version_requirements: *70336034670000
94
94
  description: A gem wrapper to include Joosy via the asset pipeline.
95
95
  email: boris@roundlake.ru
96
96
  executables: []