messenger-js 0.0.1

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.
Files changed (46) hide show
  1. data/CHANGELOG +1 -0
  2. data/Gemfile +10 -0
  3. data/Gemfile.lock +100 -0
  4. data/LICENSE +21 -0
  5. data/Manifest +44 -0
  6. data/README.rdoc +0 -0
  7. data/Rakefile +38 -0
  8. data/assets/scripts/coffee/messenger/factory/builders/multi_signal_dismissed_builder.coffee +17 -0
  9. data/assets/scripts/coffee/messenger/factory/builders/signal_dismissed_builder.coffee +17 -0
  10. data/assets/scripts/coffee/messenger/factory/builders/time_dismissed_builder.coffee +16 -0
  11. data/assets/scripts/coffee/messenger/factory/builders/user_confirm_builder.coffee +16 -0
  12. data/assets/scripts/coffee/messenger/factory/builders/user_dialogue_builder.coffee +16 -0
  13. data/assets/scripts/coffee/messenger/factory/message_factory.coffee +30 -0
  14. data/assets/scripts/coffee/messenger/message_queue.coffee +46 -0
  15. data/assets/scripts/coffee/messenger/messages/message.coffee +26 -0
  16. data/assets/scripts/coffee/messenger/messages/multi_signal_dismissed_message.coffee +36 -0
  17. data/assets/scripts/coffee/messenger/messages/signal_dismissed_message.coffee +33 -0
  18. data/assets/scripts/coffee/messenger/messages/time_dismissed_message.coffee +25 -0
  19. data/assets/scripts/coffee/messenger/messages/user_confirm_message.coffee +27 -0
  20. data/assets/scripts/coffee/messenger/messages/user_dialogue_message.coffee +29 -0
  21. data/assets/scripts/coffee/messenger/system_message_manager.coffee +41 -0
  22. data/assets/scripts/coffee/patches.coffee +4 -0
  23. data/assets/scripts/js/lib/define_property.polyfill.js +131 -0
  24. data/assets/scripts/js/lib/jquery.js +5 -0
  25. data/bin/messenger.js +223 -0
  26. data/config/assets.rb +8 -0
  27. data/lib/messenger.rb +1 -0
  28. data/lib/messenger/symbols.rb +17 -0
  29. data/messenger-js.gemspec +36 -0
  30. data/spec/jasmine.yml +44 -0
  31. data/spec/runner.html +81 -0
  32. data/spec/support/classes.coffee +0 -0
  33. data/spec/support/helpers.coffee +22 -0
  34. data/spec/support/mocks.coffee +34 -0
  35. data/spec/support/objects.coffee +0 -0
  36. data/spec/support/requirements.coffee +1 -0
  37. data/spec/tests/factory/message_factory_spec.coffee +16 -0
  38. data/spec/tests/message_queue_spec.coffee +65 -0
  39. data/spec/tests/messages/message_spec.coffee +11 -0
  40. data/spec/tests/messages/multi_signal_dismissed_message_spec.coffee +33 -0
  41. data/spec/tests/messages/signal_dismissed_message_spec.coffee +25 -0
  42. data/spec/tests/messages/time_dismissed_message_spec.coffee +14 -0
  43. data/spec/tests/messages/user_confirm_message_spec.coffee +13 -0
  44. data/spec/tests/messages/user_dialogue_message_spec.coffee +21 -0
  45. data/spec/tests/system_messages_spec.coffee +38 -0
  46. metadata +134 -0
data/CHANGELOG ADDED
@@ -0,0 +1 @@
1
+ v0.0.1 new library
data/Gemfile ADDED
@@ -0,0 +1,10 @@
1
+ source :rubygems
2
+
3
+ gem "echoe"
4
+ gem 'rake'
5
+ gem 'jasmine'
6
+ gem 'jasmine-headless-webkit'
7
+
8
+ gem 'keystone', git: "git://github.com/jpeace/keystone.git"
9
+
10
+ gem 'cronus', git: "git://github.com/tshelburne/cronus-js.git"
data/Gemfile.lock ADDED
@@ -0,0 +1,100 @@
1
+ GIT
2
+ remote: git://github.com/jpeace/keystone.git
3
+ revision: 3680c30328bf3b93af7c7f1b1bad685cbaec35dd
4
+ specs:
5
+ keystone (0.0.1)
6
+ closure-compiler
7
+ coffee-script
8
+ sass
9
+ sinatra
10
+
11
+ GIT
12
+ remote: git://github.com/tshelburne/cronus-js.git
13
+ revision: c2cb5da182efb6c3742518dabda93f48b5281126
14
+ specs:
15
+ cronus (0.0.1)
16
+
17
+ GEM
18
+ remote: http://rubygems.org/
19
+ specs:
20
+ allison (2.0.3)
21
+ childprocess (0.3.9)
22
+ ffi (~> 1.0, >= 1.0.11)
23
+ closure-compiler (1.1.8)
24
+ coffee-script (2.2.0)
25
+ coffee-script-source
26
+ execjs
27
+ coffee-script-source (1.6.2)
28
+ diff-lcs (1.2.4)
29
+ echoe (4.6.3)
30
+ allison (>= 2.0.3)
31
+ gemcutter (>= 0.7.0)
32
+ rake (>= 0.9.2)
33
+ rdoc (>= 3.6.1)
34
+ rubyforge (>= 2.0.4)
35
+ execjs (1.4.0)
36
+ multi_json (~> 1.0)
37
+ ffi (1.8.1)
38
+ gemcutter (0.7.1)
39
+ hike (1.2.2)
40
+ jasmine (1.3.2)
41
+ jasmine-core (~> 1.3.1)
42
+ rack (~> 1.0)
43
+ rspec (>= 1.3.1)
44
+ selenium-webdriver (>= 0.1.3)
45
+ jasmine-core (1.3.1)
46
+ jasmine-headless-webkit (0.8.4)
47
+ coffee-script
48
+ jasmine-core (~> 1.1)
49
+ multi_json
50
+ rainbow
51
+ sprockets (~> 2)
52
+ json (1.7.7)
53
+ json_pure (1.7.7)
54
+ multi_json (1.7.2)
55
+ rack (1.5.2)
56
+ rack-protection (1.5.0)
57
+ rack
58
+ rainbow (1.1.4)
59
+ rake (10.0.4)
60
+ rdoc (4.0.1)
61
+ json (~> 1.4)
62
+ rspec (2.13.0)
63
+ rspec-core (~> 2.13.0)
64
+ rspec-expectations (~> 2.13.0)
65
+ rspec-mocks (~> 2.13.0)
66
+ rspec-core (2.13.1)
67
+ rspec-expectations (2.13.0)
68
+ diff-lcs (>= 1.1.3, < 2.0)
69
+ rspec-mocks (2.13.1)
70
+ rubyforge (2.0.4)
71
+ json_pure (>= 1.1.7)
72
+ rubyzip (0.9.9)
73
+ sass (3.2.8)
74
+ selenium-webdriver (2.32.1)
75
+ childprocess (>= 0.2.5)
76
+ multi_json (~> 1.0)
77
+ rubyzip
78
+ websocket (~> 1.0.4)
79
+ sinatra (1.4.2)
80
+ rack (~> 1.5, >= 1.5.2)
81
+ rack-protection (~> 1.4)
82
+ tilt (~> 1.3, >= 1.3.4)
83
+ sprockets (2.9.3)
84
+ hike (~> 1.2)
85
+ multi_json (~> 1.0)
86
+ rack (~> 1.0)
87
+ tilt (~> 1.1, != 1.3.0)
88
+ tilt (1.3.7)
89
+ websocket (1.0.7)
90
+
91
+ PLATFORMS
92
+ ruby
93
+
94
+ DEPENDENCIES
95
+ cronus!
96
+ echoe
97
+ jasmine
98
+ jasmine-headless-webkit
99
+ keystone!
100
+ rake
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2013 Tim Shelburne
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/Manifest ADDED
@@ -0,0 +1,44 @@
1
+ CHANGELOG
2
+ Gemfile
3
+ Gemfile.lock
4
+ LICENSE
5
+ Manifest
6
+ README.rdoc
7
+ Rakefile
8
+ assets/scripts/coffee/messenger/factory/builders/multi_signal_dismissed_builder.coffee
9
+ assets/scripts/coffee/messenger/factory/builders/signal_dismissed_builder.coffee
10
+ assets/scripts/coffee/messenger/factory/builders/time_dismissed_builder.coffee
11
+ assets/scripts/coffee/messenger/factory/builders/user_confirm_builder.coffee
12
+ assets/scripts/coffee/messenger/factory/builders/user_dialogue_builder.coffee
13
+ assets/scripts/coffee/messenger/factory/message_factory.coffee
14
+ assets/scripts/coffee/messenger/message_queue.coffee
15
+ assets/scripts/coffee/messenger/messages/message.coffee
16
+ assets/scripts/coffee/messenger/messages/multi_signal_dismissed_message.coffee
17
+ assets/scripts/coffee/messenger/messages/signal_dismissed_message.coffee
18
+ assets/scripts/coffee/messenger/messages/time_dismissed_message.coffee
19
+ assets/scripts/coffee/messenger/messages/user_confirm_message.coffee
20
+ assets/scripts/coffee/messenger/messages/user_dialogue_message.coffee
21
+ assets/scripts/coffee/messenger/system_message_manager.coffee
22
+ assets/scripts/coffee/patches.coffee
23
+ assets/scripts/js/lib/define_property.polyfill.js
24
+ assets/scripts/js/lib/jquery.js
25
+ bin/messenger.js
26
+ config/assets.rb
27
+ lib/messenger.rb
28
+ lib/messenger/symbols.rb
29
+ spec/jasmine.yml
30
+ spec/runner.html
31
+ spec/support/classes.coffee
32
+ spec/support/helpers.coffee
33
+ spec/support/mocks.coffee
34
+ spec/support/objects.coffee
35
+ spec/support/requirements.coffee
36
+ spec/tests/factory/message_factory_spec.coffee
37
+ spec/tests/message_queue_spec.coffee
38
+ spec/tests/messages/message_spec.coffee
39
+ spec/tests/messages/multi_signal_dismissed_message_spec.coffee
40
+ spec/tests/messages/signal_dismissed_message_spec.coffee
41
+ spec/tests/messages/time_dismissed_message_spec.coffee
42
+ spec/tests/messages/user_confirm_message_spec.coffee
43
+ spec/tests/messages/user_dialogue_message_spec.coffee
44
+ spec/tests/system_messages_spec.coffee
data/README.rdoc ADDED
File without changes
data/Rakefile ADDED
@@ -0,0 +1,38 @@
1
+ $: << File.expand_path("#{File.dirname(__FILE__)}/lib")
2
+
3
+ require 'messenger'
4
+ require 'cronus'
5
+
6
+ require 'rake'
7
+ require 'jasmine-headless-webkit'
8
+ require 'keystone'
9
+ require 'echoe'
10
+
11
+ Echoe.new("messenger-js") do |p|
12
+ p.author = "Tim Shelburne"
13
+ p.email = "shelburt02@gmail.com"
14
+ p.url = "https://github.com/tshelburne/messenger-js"
15
+
16
+ p.ignore_pattern = FileList[".gitignore"]
17
+ p.development_dependencies = [ "jasmine", "jasmine-headless-webkit" ]
18
+ end
19
+
20
+ desc "Default"
21
+ task default: :'test:jasmine'
22
+
23
+ namespace :test do
24
+
25
+ desc "Run Jasmine tests"
26
+ Jasmine::Headless::Task.new(jasmine: :assets) do |t|
27
+ t.colors = true
28
+ t.keep_on_error = true
29
+ t.jasmine_config = './spec/jasmine.yml'
30
+ end
31
+
32
+ end
33
+
34
+ desc "Build assets"
35
+ Keystone::RakeTask.new :assets do |t|
36
+ t.config_file = "config/assets.rb"
37
+ t.output_path = 'bin'
38
+ end
@@ -0,0 +1,17 @@
1
+ MultiSignalDismissedMessage = require "messenger/messages/multi_signal_dismissed_message"
2
+
3
+ #
4
+ # @author - Tim Shelburne <tim@musiconelive.com>
5
+ #
6
+ # a class to build multisignal dismissed message
7
+ #
8
+ class MultiSignalDismissedBuilder
9
+
10
+ canHandle: (type)->
11
+ type == "multisignal"
12
+
13
+ handle: (message, options)->
14
+ minTimeToDismiss = options.minTimeToDismiss ? 0
15
+ new MultiSignalDismissedMessage(message, options.signals, minTimeToDismiss)
16
+
17
+ return MultiSignalDismissedBuilder
@@ -0,0 +1,17 @@
1
+ SignalDismissedMessage = require "messenger/messages/signal_dismissed_message"
2
+
3
+ #
4
+ # @author - Tim Shelburne <tim@musiconelive.com>
5
+ #
6
+ # a class to build signal dismissed message
7
+ #
8
+ class SignalDismissedBuilder
9
+
10
+ canHandle: (type)->
11
+ type == "signal"
12
+
13
+ handle: (message, options)->
14
+ minTimeToDismiss = options.minTimeToDismiss ? 0
15
+ new SignalDismissedMessage(message, options.signal, minTimeToDismiss)
16
+
17
+ return SignalDismissedBuilder
@@ -0,0 +1,16 @@
1
+ TimeDismissedMessage = require "messenger/messages/time_dismissed_message"
2
+
3
+ #
4
+ # @author - Tim Shelburne <tim@musiconelive.com>
5
+ #
6
+ # a class to build time dismissed message
7
+ #
8
+ class TimeDismissedBuilder
9
+
10
+ canHandle: (type)->
11
+ type == "time"
12
+
13
+ handle: (message, options)->
14
+ new TimeDismissedMessage(message, options.timeToDisplay)
15
+
16
+ return TimeDismissedBuilder
@@ -0,0 +1,16 @@
1
+ UserConfirmMessage = require "messenger/messages/user_confirm_message"
2
+
3
+ #
4
+ # @author - Tim Shelburne <tim@musiconelive.com>
5
+ #
6
+ # a class to build user confirm message
7
+ #
8
+ class UserConfirmBuilder
9
+
10
+ canHandle: (type)->
11
+ type == "confirm"
12
+
13
+ handle: (message, options)->
14
+ new UserConfirmMessage(message, options.confirmLabel)
15
+
16
+ return UserConfirmBuilder
@@ -0,0 +1,16 @@
1
+ UserDialogueMessage = require "messenger/messages/user_dialogue_message"
2
+
3
+ #
4
+ # @author - Tim Shelburne <tim@musiconelive.com>
5
+ #
6
+ # a class to build user dialogue message
7
+ #
8
+ class UserDialogueBuilder
9
+
10
+ canHandle: (type)->
11
+ type == "dialogue"
12
+
13
+ handle: (message, options)->
14
+ new UserDialogueMessage(message, options.confirmLabel, options.denyLabel)
15
+
16
+ return UserDialogueBuilder
@@ -0,0 +1,30 @@
1
+ TimeDismissedBuilder = require "messenger/factory/builders/time_dismissed_builder"
2
+ SignalDismissedBuilder = require "messenger/factory/builders/signal_dismissed_builder"
3
+ MultiSignalDismissedBuilder = require "messenger/factory/builders/multi_signal_dismissed_builder"
4
+ UserConfirmBuilder = require "messenger/factory/builders/user_confirm_builder"
5
+ UserDialogueBuilder = require "messenger/factory/builders/user_dialogue_builder"
6
+
7
+ #
8
+ # @author - Tim Shelburne <tim@musiconelive.com>
9
+ #
10
+ # a class to build messages
11
+ #
12
+ class MessageFactory
13
+ constructor: (@builders)->
14
+
15
+ @default: (builders=[])->
16
+ new @([
17
+ new TimeDismissedBuilder()
18
+ new SignalDismissedBuilder()
19
+ new MultiSignalDismissedBuilder()
20
+ new UserConfirmBuilder()
21
+ new UserDialogueBuilder()
22
+ ].concat(builders)
23
+ )
24
+
25
+ build: (type, message, options)->
26
+ for builder in @builders
27
+ return builder.handle(message, options) if builder.canHandle(type)
28
+ return null
29
+
30
+ return MessageFactory
@@ -0,0 +1,46 @@
1
+ Signal = require "cronus/signal"
2
+
3
+ #
4
+ # @author - Tim Shelburne <tim@musiconelive.com>
5
+ #
6
+ # a class to handle moving messages through the queue
7
+ #
8
+ class MessageQueue
9
+ constructor: ->
10
+ @currentMessage = null
11
+ @messages = []
12
+
13
+ @queued = new Signal()
14
+ @display = new Signal()
15
+ @dismissed = new Signal()
16
+ @removed = new Signal()
17
+ @finished = new Signal()
18
+
19
+ add: (message)->
20
+ @addAt(message, @messages.length)
21
+
22
+ addAt: (message, index)->
23
+ @messages.splice(index, 0, message)
24
+ @queued.dispatch(message)
25
+
26
+ if (@messages.length is 1)
27
+ @currentMessage = message
28
+ @currentMessage.dismiss.add(@messageDismissed)
29
+ @display.dispatch(@currentMessage)
30
+
31
+ remove: (message)->
32
+ @messages.splice(@messages.indexOf(message), 1)
33
+ @removed.dispatch(message)
34
+
35
+ messageDismissed: =>
36
+ @dismissed.dispatch(@currentMessage)
37
+ @remove(@currentMessage)
38
+
39
+ if @messages.length > 0
40
+ @currentMessage = @messages[0]
41
+ @currentMessage.dismiss.add(@messageDismissed)
42
+ @display.dispatch(@currentMessage)
43
+ else
44
+ @finished.dispatch()
45
+
46
+ return MessageQueue
@@ -0,0 +1,26 @@
1
+ require "lib/jquery"
2
+ Signal = require "cronus/signal"
3
+
4
+ #
5
+ # @author - Tim Shelburne <tim@musiconelive.com>
6
+ #
7
+ # a basic message interface
8
+ #
9
+ class Message
10
+
11
+ constructor: (message)->
12
+ @uid = "message-#{Date.now()}"
13
+ @buildMarkupObj(message)
14
+ @dismiss = new Signal()
15
+
16
+ init: ->
17
+
18
+ buildMarkupObj: (message)->
19
+ @markup = document.getElementById(@htmlId).innerHTML
20
+ @markupObj = $("<article id='#{@uid}'>#{@markup}</article>")
21
+ @markupObj.find("p").html(message)
22
+
23
+ getHtml: ->
24
+ @markupObj.clone().wrap("<p>").parent().html()
25
+
26
+ return Message
@@ -0,0 +1,36 @@
1
+ require "patches"
2
+ Message = require "messenger/messages/message"
3
+
4
+ #
5
+ # @author - Tim Shelburne <tim@musiconelive.com>
6
+ #
7
+ # a message dismissed from a list of signals
8
+ #
9
+ class MultiSignalDismissedMessage extends Message
10
+
11
+ MultiSignalDismissedMessage.property 'type',
12
+ get: -> "multisignal"
13
+
14
+ MultiSignalDismissedMessage.property 'htmlId',
15
+ get: -> "text-message"
16
+
17
+ constructor: (@message, @signals, @minTimeToShow)->
18
+ super(@message)
19
+ @timerFinished = false
20
+ @signalFinished = false
21
+
22
+ init: ->
23
+ for signal in @signals
24
+ signal.add(@signalReceived)
25
+
26
+ setTimeout( =>
27
+ @timerFinished = true
28
+ @dismiss.dispatch(@) if @signalFinished
29
+ , @minTimeToShow)
30
+
31
+ signalReceived: =>
32
+ @signalFinished = true
33
+ signal.remove(@signalReceived) for signal in @signals
34
+ @dismiss.dispatch(@) if @timerFinished
35
+
36
+ return MultiSignalDismissedMessage