cronus 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.
@@ -0,0 +1 @@
1
+ v0.0.1 new library
data/Gemfile ADDED
@@ -0,0 +1,8 @@
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"
@@ -0,0 +1,93 @@
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
+ GEM
12
+ remote: http://rubygems.org/
13
+ specs:
14
+ allison (2.0.3)
15
+ childprocess (0.3.9)
16
+ ffi (~> 1.0, >= 1.0.11)
17
+ closure-compiler (1.1.8)
18
+ coffee-script (2.2.0)
19
+ coffee-script-source
20
+ execjs
21
+ coffee-script-source (1.6.2)
22
+ diff-lcs (1.2.4)
23
+ echoe (4.6.3)
24
+ allison (>= 2.0.3)
25
+ gemcutter (>= 0.7.0)
26
+ rake (>= 0.9.2)
27
+ rdoc (>= 3.6.1)
28
+ rubyforge (>= 2.0.4)
29
+ execjs (1.4.0)
30
+ multi_json (~> 1.0)
31
+ ffi (1.8.1)
32
+ gemcutter (0.7.1)
33
+ hike (1.2.2)
34
+ jasmine (1.3.2)
35
+ jasmine-core (~> 1.3.1)
36
+ rack (~> 1.0)
37
+ rspec (>= 1.3.1)
38
+ selenium-webdriver (>= 0.1.3)
39
+ jasmine-core (1.3.1)
40
+ jasmine-headless-webkit (0.8.4)
41
+ coffee-script
42
+ jasmine-core (~> 1.1)
43
+ multi_json
44
+ rainbow
45
+ sprockets (~> 2)
46
+ json (1.7.7)
47
+ json_pure (1.7.7)
48
+ multi_json (1.7.2)
49
+ rack (1.5.2)
50
+ rack-protection (1.5.0)
51
+ rack
52
+ rainbow (1.1.4)
53
+ rake (10.0.4)
54
+ rdoc (4.0.1)
55
+ json (~> 1.4)
56
+ rspec (2.13.0)
57
+ rspec-core (~> 2.13.0)
58
+ rspec-expectations (~> 2.13.0)
59
+ rspec-mocks (~> 2.13.0)
60
+ rspec-core (2.13.1)
61
+ rspec-expectations (2.13.0)
62
+ diff-lcs (>= 1.1.3, < 2.0)
63
+ rspec-mocks (2.13.1)
64
+ rubyforge (2.0.4)
65
+ json_pure (>= 1.1.7)
66
+ rubyzip (0.9.9)
67
+ sass (3.2.8)
68
+ selenium-webdriver (2.32.1)
69
+ childprocess (>= 0.2.5)
70
+ multi_json (~> 1.0)
71
+ rubyzip
72
+ websocket (~> 1.0.4)
73
+ sinatra (1.4.2)
74
+ rack (~> 1.5, >= 1.5.2)
75
+ rack-protection (~> 1.4)
76
+ tilt (~> 1.3, >= 1.3.4)
77
+ sprockets (2.9.3)
78
+ hike (~> 1.2)
79
+ multi_json (~> 1.0)
80
+ rack (~> 1.0)
81
+ tilt (~> 1.1, != 1.3.0)
82
+ tilt (1.3.7)
83
+ websocket (1.0.7)
84
+
85
+ PLATFORMS
86
+ ruby
87
+
88
+ DEPENDENCIES
89
+ echoe
90
+ jasmine
91
+ jasmine-headless-webkit
92
+ keystone!
93
+ 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.
@@ -0,0 +1,25 @@
1
+ CHANGELOG
2
+ Gemfile
3
+ Gemfile.lock
4
+ LICENSE
5
+ Manifest
6
+ README.rdoc
7
+ Rakefile
8
+ assets/scripts/coffee/cronus/multi_signal_relay.coffee
9
+ assets/scripts/coffee/cronus/signal.coffee
10
+ assets/scripts/coffee/cronus/signal_relay.coffee
11
+ bin/cronus.js
12
+ config/assets.rb
13
+ cronus.gemspec
14
+ lib/cronus.rb
15
+ lib/cronus/symbols.rb
16
+ spec/jasmine.yml
17
+ spec/runner.html
18
+ spec/support/classes.coffee
19
+ spec/support/helpers.coffee
20
+ spec/support/mocks.coffee
21
+ spec/support/objects.coffee
22
+ spec/support/requirements.coffee
23
+ spec/tests/multisignal_relay_spec.coffee
24
+ spec/tests/signal_relay_spec.coffee
25
+ spec/tests/signal_spec.coffee
File without changes
@@ -0,0 +1,33 @@
1
+ require 'rake'
2
+ require 'jasmine-headless-webkit'
3
+ require 'keystone'
4
+ require 'echoe'
5
+
6
+ Echoe.new("cronus") do |p|
7
+ p.author = "Tim Shelburne"
8
+ p.email = "shelburt02@gmail.com"
9
+ p.url = "https://github.com/tshelburne/cronus-js"
10
+
11
+ p.ignore_pattern = FileList[".gitignore"]
12
+ p.development_dependencies = [ "jasmine", "jasmine-headless-webkit" ]
13
+ end
14
+
15
+ desc "Default"
16
+ task default: :'test:jasmine'
17
+
18
+ namespace :test do
19
+
20
+ desc "Run Jasmine tests"
21
+ Jasmine::Headless::Task.new(jasmine: :assets) do |t|
22
+ t.colors = true
23
+ t.keep_on_error = true
24
+ t.jasmine_config = './spec/jasmine.yml'
25
+ end
26
+
27
+ end
28
+
29
+ desc "Build assets"
30
+ Keystone::RakeTask.new :assets do |t|
31
+ t.config_file = "config/assets.rb"
32
+ t.output_path = 'bin'
33
+ end
@@ -0,0 +1,17 @@
1
+ Signal = require "cronus/signal"
2
+
3
+ #
4
+ # @author - Tim Shelburne <tim@musiconelive.com>
5
+ #
6
+ # can relay messages coming from multiple signals
7
+ #
8
+ class MultiSignalRelay extends Signal
9
+ constructor: (signals)->
10
+ super()
11
+ for signal in signals
12
+ signal.add(@dispatch)
13
+
14
+ applyListeners: (rest)->
15
+ listener.apply(listener, rest) for listener in @listeners
16
+
17
+ return MultiSignalRelay
@@ -0,0 +1,50 @@
1
+ #
2
+ # @author - Tim Shelburne <tim@musiconelive.com>
3
+ #
4
+ # a basic implementation of a signal dispatcher to mimic AS3-Signals
5
+ #
6
+ class Signal
7
+ constructor: ->
8
+ @isApplyingListeners = false
9
+ @listeners = []
10
+ @onceListeners = []
11
+ @removeCache = []
12
+
13
+ add: (listener)->
14
+ @listeners.push listener
15
+
16
+ addOnce: (listener)->
17
+ @onceListeners.push listener
18
+ @add(listener)
19
+
20
+ remove: (listener)->
21
+ if @isApplyingListeners
22
+ @removeCache.push listener
23
+ else
24
+ @listeners.splice(@listeners.indexOf(listener), 1) unless @listeners.indexOf(listener) is -1
25
+
26
+ removeAll: ->
27
+ @listeners = []
28
+
29
+ numListeners: ->
30
+ @listeners.length
31
+
32
+ dispatch: (rest...)=>
33
+ @isApplyingListeners = true
34
+ @applyListeners(rest)
35
+ @removeOnceListeners()
36
+ @isApplyingListeners = false
37
+ @clearRemoveCache()
38
+
39
+ applyListeners: (rest)->
40
+ listener.apply(listener, rest) for listener in @listeners
41
+
42
+ removeOnceListeners: ->
43
+ @remove listener for listener in @onceListeners
44
+ @onceListeners = []
45
+
46
+ clearRemoveCache: ->
47
+ @remove(listener) for listener in @removeCache
48
+ @removeCache = []
49
+
50
+ return Signal
@@ -0,0 +1,16 @@
1
+ Signal = require "cronus/signal"
2
+
3
+ #
4
+ # @author - Tim Shelburne <tim@musiconelive.com>
5
+ #
6
+ # relays a dispatched signal
7
+ #
8
+ class SignalRelay extends Signal
9
+ constructor: (signal)->
10
+ super()
11
+ signal.add(@dispatch)
12
+
13
+ applyListeners: (rest)->
14
+ listener.apply(listener, rest) for listener in @listeners
15
+
16
+ return SignalRelay
@@ -0,0 +1,8 @@
1
+ (function(){var f=window.modules||[],b=null;f.cronus__multi_signal_relay=function(){if(null===b){var f={}.hasOwnProperty,a=require("cronus/signal"),e=function(d){var a,c,b;e.__super__.constructor.call(this);c=0;for(b=d.length;c<b;c++)a=d[c],a.add(this.dispatch)},d=e,g=function(){this.constructor=d},c;for(c in a)f.call(a,c)&&(d[c]=a[c]);g.prototype=a.prototype;d.prototype=new g;d.__super__=a.prototype;e.prototype.applyListeners=function(e){var d,a,c,b,g;b=this.listeners;g=[];a=0;for(c=b.length;a<c;a++)d=
2
+ b[a],g.push(d.apply(d,e));return g};b=e}return b};window.modules=f})();
3
+ (function(){var f=window.modules||[],b=null;f.cronus__signal=function(){if(null===b){var f=[].slice,a=function(){var e=this.dispatch,d=this;this.dispatch=function(){return e.apply(d,arguments)};this.isApplyingListeners=!1;this.listeners=[];this.onceListeners=[];this.removeCache=[]};a.prototype.add=function(e){return this.listeners.push(e)};a.prototype.addOnce=function(e){this.onceListeners.push(e);return this.add(e)};a.prototype.remove=function(e){if(this.isApplyingListeners)return this.removeCache.push(e);
4
+ if(-1!==this.listeners.indexOf(e))return this.listeners.splice(this.listeners.indexOf(e),1)};a.prototype.removeAll=function(){return this.listeners=[]};a.prototype.numListeners=function(){return this.listeners.length};a.prototype.dispatch=function(){var e;e=1<=arguments.length?f.call(arguments,0):[];this.isApplyingListeners=!0;this.applyListeners(e);this.removeOnceListeners();this.isApplyingListeners=!1;return this.clearRemoveCache()};a.prototype.applyListeners=function(e){var d,a,c,b,f;b=this.listeners;
5
+ f=[];a=0;for(c=b.length;a<c;a++)d=b[a],f.push(d.apply(d,e));return f};a.prototype.removeOnceListeners=function(){var a,d,b,c;c=this.onceListeners;d=0;for(b=c.length;d<b;d++)a=c[d],this.remove(a);return this.onceListeners=[]};a.prototype.clearRemoveCache=function(){var a,b,f,c;c=this.removeCache;b=0;for(f=c.length;b<f;b++)a=c[b],this.remove(a);return this.removeCache=[]};b=a}return b};window.modules=f})();
6
+ (function(){var f=window.modules||[],b=null;f.cronus__signal_relay=function(){if(null===b){var f={}.hasOwnProperty,a=require("cronus/signal"),e=function(a){e.__super__.constructor.call(this);a.add(this.dispatch)},d=e,g=function(){this.constructor=d},c;for(c in a)f.call(a,c)&&(d[c]=a[c]);g.prototype=a.prototype;d.prototype=new g;d.__super__=a.prototype;e.prototype.applyListeners=function(a){var b,c,e,d,f;d=this.listeners;f=[];c=0;for(e=d.length;c<e;c++)b=d[c],f.push(b.apply(b,a));return f};b=e}return b};
7
+ window.modules=f})();(function(){var f=window.modules||[];window.require=function(b){b=b.replace(/\//g,"__");-1===b.indexOf("__")&&(b="__"+b);return null===f[b]?null:f[b]()}})();
8
+
@@ -0,0 +1,7 @@
1
+ assets_are_in File.expand_path("#{File.dirname(__FILE__)}/assets")
2
+
3
+ asset 'cronus.js' do |a|
4
+ a.scan 'scripts/coffee'
5
+ a.toolchain :coffeescript, :require
6
+ a.post_build :closure
7
+ end
@@ -0,0 +1,36 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = "cronus"
5
+ s.version = "0.0.1"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Tim Shelburne"]
9
+ s.date = "2013-04-29"
10
+ s.description = "javascript signals engine (inspired by Robert Penner's actionscript library Signals)"
11
+ s.email = "shelburt02@gmail.com"
12
+ s.executables = ["cronus.js"]
13
+ s.extra_rdoc_files = ["CHANGELOG", "LICENSE", "README.rdoc", "bin/cronus.js", "lib/cronus.rb", "lib/cronus/symbols.rb"]
14
+ s.files = ["CHANGELOG", "Gemfile", "Gemfile.lock", "LICENSE", "Manifest", "README.rdoc", "Rakefile", "assets/scripts/coffee/cronus/multi_signal_relay.coffee", "assets/scripts/coffee/cronus/signal.coffee", "assets/scripts/coffee/cronus/signal_relay.coffee", "bin/cronus.js", "config/assets.rb", "cronus.gemspec", "lib/cronus.rb", "lib/cronus/symbols.rb", "spec/jasmine.yml", "spec/runner.html", "spec/support/classes.coffee", "spec/support/helpers.coffee", "spec/support/mocks.coffee", "spec/support/objects.coffee", "spec/support/requirements.coffee", "spec/tests/multisignal_relay_spec.coffee", "spec/tests/signal_relay_spec.coffee", "spec/tests/signal_spec.coffee"]
15
+ s.homepage = "https://github.com/tshelburne/cronus-js"
16
+ s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Cronus", "--main", "README.rdoc"]
17
+ s.require_paths = ["lib"]
18
+ s.rubyforge_project = "cronus"
19
+ s.rubygems_version = "1.8.24"
20
+ s.summary = ""
21
+
22
+ if s.respond_to? :specification_version then
23
+ s.specification_version = 3
24
+
25
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
26
+ s.add_development_dependency(%q<jasmine>, [">= 0"])
27
+ s.add_development_dependency(%q<jasmine-headless-webkit>, [">= 0"])
28
+ else
29
+ s.add_dependency(%q<jasmine>, [">= 0"])
30
+ s.add_dependency(%q<jasmine-headless-webkit>, [">= 0"])
31
+ end
32
+ else
33
+ s.add_dependency(%q<jasmine>, [">= 0"])
34
+ s.add_dependency(%q<jasmine-headless-webkit>, [">= 0"])
35
+ end
36
+ end
@@ -0,0 +1 @@
1
+ require "cronus/symbols"
@@ -0,0 +1,11 @@
1
+ require "keystone"
2
+
3
+ module Cronus
4
+
5
+ @@pipeline ||= ::Keystone.bootstrap("#{File.dirname(__FILE__)}/../../config/assets.rb")
6
+
7
+ def self.keystone_compiler
8
+ @@keystone_compiler ||= @@pipeline.compiler("cronus.js")
9
+ end
10
+
11
+ end
@@ -0,0 +1,44 @@
1
+ runner_output: "spec/runner.html"
2
+
3
+ # src_files
4
+ #
5
+ # Return an array of filepaths relative to src_dir to include before jasmine specs.
6
+ # Default: []
7
+ src_files:
8
+ - bin/cronus.js
9
+
10
+ # stylesheets
11
+ #
12
+ # Return an array of stylesheet filepaths relative to src_dir to include before jasmine specs.
13
+ # Default: []
14
+ stylesheets:
15
+
16
+ # helpers
17
+ #
18
+ # Return an array of filepaths relative to spec_dir to include before jasmine specs.
19
+ # Default: ["helpers/**/*.js"]
20
+ helpers:
21
+ - support/requirements.coffee
22
+ - support/helpers.coffee
23
+ - support/objects.coffee
24
+ - support/classes.coffee
25
+ - support/mocks.coffee
26
+
27
+ # spec_files
28
+ #
29
+ # Return an array of filepaths relative to spec_dir to include.
30
+ # Default: ["**/*[sS]pec.js"]
31
+ spec_files:
32
+ - ./**/*_spec.coffee
33
+
34
+ # src_dir
35
+ #
36
+ # Source directory path. Your src_files must be returned relative to this path. Will use root if left blank.
37
+ # Default: project root
38
+ src_dir:
39
+
40
+ # spec_dir
41
+ #
42
+ # Spec directory path. Your spec_files must be returned relative to this path.
43
+ # Default: spec/javascripts
44
+ spec_dir: spec
@@ -0,0 +1,59 @@
1
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2
+ <html>
3
+ <head>
4
+ <meta content="text/html;charset=UTF-8" http-equiv="Content-Type"/>
5
+ <title>Jasmine Test Runner - Generated by jasmine-headless-webkit</title>
6
+ <script type="text/javascript" src="/Users/tshelburne/Sites/dontlook/jslib/cronus/vendor/ruby/1.9.1/gems/jasmine-headless-webkit-0.8.4/vendor/assets/javascripts/prolog.js"></script>
7
+ <script type="text/javascript" src="/Users/tshelburne/Sites/dontlook/jslib/cronus/vendor/ruby/1.9.1/gems/jasmine-core-1.3.1/lib/jasmine-core/jasmine.js"></script>
8
+ <script type="text/javascript" src="/Users/tshelburne/Sites/dontlook/jslib/cronus/vendor/ruby/1.9.1/gems/jasmine-core-1.3.1/lib/jasmine-core/jasmine-html.js"></script>
9
+ <link rel="stylesheet" href="/Users/tshelburne/Sites/dontlook/jslib/cronus/vendor/ruby/1.9.1/gems/jasmine-core-1.3.1/lib/jasmine-core/jasmine.css" type="text/css" />
10
+ <script type="text/javascript" src="/Users/tshelburne/Sites/dontlook/jslib/cronus/vendor/ruby/1.9.1/gems/jasmine-headless-webkit-0.8.4/vendor/assets/javascripts/jasmine-extensions.js"></script>
11
+ <script type="text/javascript" src="/Users/tshelburne/Sites/dontlook/jslib/cronus/vendor/ruby/1.9.1/gems/jasmine-headless-webkit-0.8.4/vendor/assets/javascripts/intense.js"></script>
12
+ <script type="text/javascript" src="/Users/tshelburne/Sites/dontlook/jslib/cronus/vendor/ruby/1.9.1/gems/jasmine-headless-webkit-0.8.4/vendor/assets/javascripts/headless_reporter_result.js"></script>
13
+ <script type="text/javascript" src="/Users/tshelburne/Sites/dontlook/jslib/cronus/vendor/ruby/1.9.1/gems/jasmine-headless-webkit-0.8.4/vendor/assets/javascripts/jasmine.HeadlessConsoleReporter.js"></script>
14
+ <script type="text/javascript" src="/Users/tshelburne/Sites/dontlook/jslib/cronus/vendor/ruby/1.9.1/gems/jasmine-headless-webkit-0.8.4/vendor/assets/javascripts/jsDump.js"></script>
15
+ <script type="text/javascript" src="/Users/tshelburne/Sites/dontlook/jslib/cronus/vendor/ruby/1.9.1/gems/jasmine-headless-webkit-0.8.4/vendor/assets/javascripts/beautify-html.js"></script>
16
+ <script type="text/javascript" src="/Users/tshelburne/Sites/dontlook/jslib/cronus/bin/cronus.js"></script>
17
+ <script type="text/javascript" src="/Users/tshelburne/Sites/dontlook/jslib/cronus/.jhw-cache/coffee_script/Users/tshelburne/Sites/dontlook/jslib/cronus/spec/tests/signal_spec.coffee.js"></script>
18
+ <script type="text/javascript">window.CSTF['signal_spec.coffee.js'] = '/Users/tshelburne/Sites/dontlook/jslib/cronus/spec/tests/signal_spec.coffee';</script>
19
+ <script type="text/javascript" src="/Users/tshelburne/Sites/dontlook/jslib/cronus/.jhw-cache/coffee_script/Users/tshelburne/Sites/dontlook/jslib/cronus/spec/tests/signal_relay_spec.coffee.js"></script>
20
+ <script type="text/javascript">window.CSTF['signal_relay_spec.coffee.js'] = '/Users/tshelburne/Sites/dontlook/jslib/cronus/spec/tests/signal_relay_spec.coffee';</script>
21
+ <script type="text/javascript" src="/Users/tshelburne/Sites/dontlook/jslib/cronus/.jhw-cache/coffee_script/Users/tshelburne/Sites/dontlook/jslib/cronus/spec/tests/multisignal_relay_spec.coffee.js"></script>
22
+ <script type="text/javascript">window.CSTF['multisignal_relay_spec.coffee.js'] = '/Users/tshelburne/Sites/dontlook/jslib/cronus/spec/tests/multisignal_relay_spec.coffee';</script>
23
+ <script type="text/javascript">
24
+ if (window.JHW) { HeadlessReporterResult.specLineNumbers = {"/Users/tshelburne/Sites/dontlook/jslib/cronus/spec/tests/signal_spec.coffee":{"Signal":[7],"can add listeners":[13],"can add listeners to be run only once":[18],"can remove listeners":[25],"can schedule listeners to be removed if dispatch is being run":[30],"can get the number of current listeners":[40],"can dispatch a call to all listeners":[44],"can dispatch a call to all listeners with arguments":[53]},"/Users/tshelburne/Sites/dontlook/jslib/cronus/spec/tests/signal_relay_spec.coffee":{"SignalRelay":[9],"can relay a signal":[17]},"/Users/tshelburne/Sites/dontlook/jslib/cronus/spec/tests/multisignal_relay_spec.coffee":{"MultiSignalRelay":[9],"can relay a message from one of multiple signals":[19]}}; }
25
+ </script>
26
+ </head>
27
+ <body>
28
+ <script type="text/javascript">
29
+ jasmine.getEnv().console = {
30
+ log: function(msg) { JHW.stdout.puts(msg) }
31
+ }
32
+
33
+ window._onload = window.onload;
34
+
35
+ window.onload = function() {
36
+ if (window._onload && (window._onload != window.onload)) {
37
+ window._onload();
38
+ }
39
+
40
+ if (window.JHW) {
41
+ jasmine.getEnv().addReporter(new jasmine.HeadlessConsoleReporter());
42
+ } else {
43
+ types = [ 'HtmlReporter', 'TrivialReporter' ];
44
+
45
+ for (var i = 0, j = types.length; i < j; ++i) {
46
+ var type = jasmine[types[i]]
47
+ if (type) {
48
+ jasmine.getEnv().addReporter(new type());
49
+ break;
50
+ }
51
+ }
52
+ }
53
+
54
+ jasmine.getEnv().execute();
55
+ }
56
+ </script>
57
+ </body>
58
+ </html>
59
+
File without changes
@@ -0,0 +1,22 @@
1
+ (exports ? this).globalize = (fxn, name=null)=>
2
+ functionName = if name is null then fxn.name else name
3
+ (exports ? this)[functionName] = fxn
4
+
5
+
6
+ # MOCKING #
7
+ (exports ? this).mocks = {}
8
+
9
+ (exports ? this).addMock = (name, obj)=>
10
+ (exports ? this).mocks[name] = obj
11
+
12
+
13
+ # RUNTIME PATCHING #
14
+ (exports ? this).patches = {}
15
+
16
+ (exports ? this).patch = (method, patch)=>
17
+ (exports ? this).patches[method.name] = method
18
+ method = patch
19
+
20
+ (exports ? this).restore = (method)=>
21
+ method = (exports ? this).patches[method.name]
22
+ delete (exports ? this).patches[method.name]
File without changes
File without changes
File without changes
@@ -0,0 +1,28 @@
1
+ Signal = require "cronus/signal"
2
+ MultiSignalRelay = require "cronus/multi_signal_relay"
3
+
4
+ fxns =
5
+ fxn1 : (arg1 = null)-> return arg1
6
+ fxn2 : (arg1 = null)-> return arg1
7
+
8
+
9
+ describe "MultiSignalRelay", ->
10
+ signalOne = null
11
+ signalTwo = null
12
+ multiSignalRelay = null
13
+
14
+ beforeEach ->
15
+ signalOne = new Signal()
16
+ signalTwo = new Signal()
17
+ multiSignalRelay = new MultiSignalRelay([ signalOne, signalTwo ])
18
+
19
+ it "can relay a message from one of multiple signals", ->
20
+ spyOn(fxns, "fxn1")
21
+ spyOn(fxns, "fxn2")
22
+ multiSignalRelay.add(fxns.fxn1)
23
+ signalOne.dispatch("hello")
24
+ expect(fxns.fxn1).toHaveBeenCalledWith("hello")
25
+ multiSignalRelay.add(fxns.fxn2)
26
+ signalTwo.dispatch("goodbye")
27
+ expect(fxns.fxn1).toHaveBeenCalledWith("goodbye")
28
+ expect(fxns.fxn2).toHaveBeenCalledWith("goodbye")
@@ -0,0 +1,21 @@
1
+ Signal = require "cronus/signal"
2
+ SignalRelay = require "cronus/signal_relay"
3
+
4
+ fxns =
5
+ fxn1 : (arg1 = null)-> return arg1
6
+ fxn2 : (arg1 = null)-> return arg1
7
+
8
+
9
+ describe "SignalRelay", ->
10
+ signal = null
11
+ signalRelay = null
12
+
13
+ beforeEach ->
14
+ signal = new Signal()
15
+ signalRelay = new SignalRelay(signal)
16
+
17
+ it "can relay a signal", ->
18
+ spyOn(fxns, "fxn1")
19
+ signalRelay.add(fxns.fxn1)
20
+ signal.dispatch("hello")
21
+ expect(fxns.fxn1).toHaveBeenCalledWith("hello")
@@ -0,0 +1,60 @@
1
+ Signal = require "cronus/signal"
2
+
3
+ fxns =
4
+ fxn1 : (arg1 = null)-> return arg1
5
+ fxn2 : (arg1 = null)-> return arg1
6
+
7
+ describe "Signal", ->
8
+ signal = null
9
+
10
+ beforeEach ->
11
+ signal = new Signal()
12
+
13
+ it "can add listeners", ->
14
+ signal.add(fxns.fxn1)
15
+ expect(signal.listeners.length).toEqual 1
16
+ expect(signal.listeners[0]).toEqual fxns.fxn1
17
+
18
+ it "can add listeners to be run only once", ->
19
+ signal.add(fxns.fxn1)
20
+ signal.addOnce(fxns.fxn2)
21
+ expect(signal.listeners.length).toEqual 2
22
+ signal.dispatch()
23
+ expect(signal.listeners.length).toEqual 1
24
+
25
+ it "can remove listeners", ->
26
+ signal.add(fxns.fxn1)
27
+ signal.remove(fxns.fxn1)
28
+ expect(signal.listeners.length).toEqual 0
29
+
30
+ it "can schedule listeners to be removed if dispatch is being run", ->
31
+ # this prevents getting "undefined" listeners when a listener is removed before dispatch is finished
32
+ selfRemover = ->
33
+ signal.remove(selfRemover)
34
+ expect(signal.listeners.length).toEqual 2
35
+ signal.add(selfRemover)
36
+ signal.add(fxns.fxn1)
37
+ signal.dispatch()
38
+ expect(signal.listeners.length).toEqual 1
39
+
40
+ it "can get the number of current listeners", ->
41
+ signal.add(fxns.fxn1)
42
+ expect(signal.numListeners()).toEqual 1
43
+
44
+ it "can dispatch a call to all listeners", ->
45
+ spyOn(fxns, "fxn1")
46
+ spyOn(fxns, "fxn2")
47
+ signal.add(fxns.fxn1)
48
+ signal.add(fxns.fxn2)
49
+ signal.dispatch()
50
+ expect(fxns.fxn1).toHaveBeenCalled()
51
+ expect(fxns.fxn2).toHaveBeenCalled()
52
+
53
+ it "can dispatch a call to all listeners with arguments", ->
54
+ spyOn(fxns, "fxn1")
55
+ spyOn(fxns, "fxn2")
56
+ signal.add(fxns.fxn1)
57
+ signal.add(fxns.fxn2)
58
+ signal.dispatch("hello")
59
+ expect(fxns.fxn1).toHaveBeenCalledWith("hello")
60
+ expect(fxns.fxn2).toHaveBeenCalledWith("hello")
metadata ADDED
@@ -0,0 +1,115 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cronus
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Tim Shelburne
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-04-29 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: jasmine
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: jasmine-headless-webkit
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ description: javascript signals engine (inspired by Robert Penner's actionscript library
47
+ Signals)
48
+ email: shelburt02@gmail.com
49
+ executables:
50
+ - cronus.js
51
+ extensions: []
52
+ extra_rdoc_files:
53
+ - CHANGELOG
54
+ - LICENSE
55
+ - README.rdoc
56
+ - bin/cronus.js
57
+ - lib/cronus.rb
58
+ - lib/cronus/symbols.rb
59
+ files:
60
+ - CHANGELOG
61
+ - Gemfile
62
+ - Gemfile.lock
63
+ - LICENSE
64
+ - Manifest
65
+ - README.rdoc
66
+ - Rakefile
67
+ - assets/scripts/coffee/cronus/multi_signal_relay.coffee
68
+ - assets/scripts/coffee/cronus/signal.coffee
69
+ - assets/scripts/coffee/cronus/signal_relay.coffee
70
+ - bin/cronus.js
71
+ - config/assets.rb
72
+ - cronus.gemspec
73
+ - lib/cronus.rb
74
+ - lib/cronus/symbols.rb
75
+ - spec/jasmine.yml
76
+ - spec/runner.html
77
+ - spec/support/classes.coffee
78
+ - spec/support/helpers.coffee
79
+ - spec/support/mocks.coffee
80
+ - spec/support/objects.coffee
81
+ - spec/support/requirements.coffee
82
+ - spec/tests/multisignal_relay_spec.coffee
83
+ - spec/tests/signal_relay_spec.coffee
84
+ - spec/tests/signal_spec.coffee
85
+ homepage: https://github.com/tshelburne/cronus-js
86
+ licenses: []
87
+ post_install_message:
88
+ rdoc_options:
89
+ - --line-numbers
90
+ - --inline-source
91
+ - --title
92
+ - Cronus
93
+ - --main
94
+ - README.rdoc
95
+ require_paths:
96
+ - lib
97
+ required_ruby_version: !ruby/object:Gem::Requirement
98
+ none: false
99
+ requirements:
100
+ - - ! '>='
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ required_rubygems_version: !ruby/object:Gem::Requirement
104
+ none: false
105
+ requirements:
106
+ - - ! '>='
107
+ - !ruby/object:Gem::Version
108
+ version: '1.2'
109
+ requirements: []
110
+ rubyforge_project: cronus
111
+ rubygems_version: 1.8.24
112
+ signing_key:
113
+ specification_version: 3
114
+ summary: ''
115
+ test_files: []