messenger-js 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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