jsbus 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,6 @@
1
+ require 'rails/engine'
2
+
3
+ module JsBus
4
+ class Engine < ::Rails::Engine
5
+ end
6
+ end
@@ -0,0 +1,4 @@
1
+ module JsBus
2
+ class Railtie < ::Rails::Railtie
3
+ end
4
+ end
@@ -0,0 +1,3 @@
1
+ module JsBus
2
+ VERSION = "0.0.2"
3
+ end
data/lib/jsbus.rb ADDED
@@ -0,0 +1,3 @@
1
+ require_relative './jsbus/engine'
2
+ require_relative './jsbus/railtie'
3
+ require_relative './jsbus/version'
@@ -0,0 +1,127 @@
1
+ (function(window) {
2
+ "use strict";
3
+
4
+ var eventCounter = 0;
5
+
6
+ function isFunction(obj) {
7
+ return !!(obj && obj.constructor && obj.call && obj.apply);
8
+ }
9
+
10
+ var EventBus = function() {
11
+ var self = this;
12
+
13
+ // If true, logging to console is enabled.
14
+ self.debug = false;
15
+
16
+ self.subscribers = [];
17
+
18
+ /*
19
+ Publish an event to the event bus.
20
+
21
+ eventType: string or string array
22
+ data: data associated with the event
23
+ callback: fired at the completion of the event
24
+ */
25
+ self.publish = function(eventType, data, callback) {
26
+ var eventTypes;
27
+ if (isFunction(data)) {
28
+ log("Given callback but no data. Assigning data to callback.");
29
+ callback = data;
30
+ data = {};
31
+ }
32
+
33
+ eventTypes = [].concat(eventType);
34
+ createAndPublishEvent(eventTypes, data, callback);
35
+ };
36
+
37
+ // Reset the event bus by removing all subscribers. This is useful
38
+ // (and necessary) in testing scenarios.
39
+ self.reset = function() {
40
+ eventCounter = 0;
41
+ self.subscribers = [];
42
+ };
43
+
44
+ // Subscribe to one or more events.
45
+ self.subscribe = function(eventType, callback) {
46
+ var eventTypes;
47
+ eventTypes = [].concat(eventType);
48
+ subscribeToEventTypes(eventTypes, callback);
49
+ };
50
+
51
+ function createAndPublishEvent(eventTypes, data, callback) {
52
+ var i, eventType, event;
53
+ for (i = eventTypes.length - 1; i >= 0; i--) {
54
+ eventType = eventTypes[i];
55
+ event = new Event(eventType, data);
56
+ log("Publishing event: " + event.toString());
57
+ pushEventToSubscribers(event, eventType, callback);
58
+ }
59
+ }
60
+
61
+ function log(message) {
62
+ if (self.debug && window.console && window.console.log) {
63
+ window.console.log(message);
64
+ }
65
+ }
66
+
67
+ function pushEventToSubscribers(event, eventType, callback) {
68
+ var i, subscriber;
69
+ for (i = self.subscribers.length - 1; i >= 0; i--) {
70
+ subscriber = self.subscribers[i];
71
+ if (subscriber.eventType === eventType) {
72
+ event.push(subscriber, callback);
73
+ }
74
+ }
75
+ }
76
+
77
+ function subscribeToEventTypes(eventTypes, callback) {
78
+ var i, eventType, subscriber;
79
+ for (i = eventTypes.length - 1; i >= 0; i--) {
80
+ eventType = eventTypes[i];
81
+ subscriber = new Subscriber(eventType, callback);
82
+ self.subscribers.push(subscriber);
83
+ }
84
+ }
85
+ };
86
+
87
+ /*
88
+ Subscriber object. A holder for an event type and a callback.
89
+ */
90
+ var Subscriber = function(eventType, callback) {
91
+ var self = this;
92
+ self.eventType = eventType;
93
+ self.callback = callback;
94
+ };
95
+
96
+ /*
97
+ Event object.
98
+ */
99
+ var Event = function(eventType, data) {
100
+ var self = this;
101
+ self.eventCounter = nextEventCounter();
102
+ self.eventType = eventType;
103
+ self.data = data || {};
104
+
105
+ self.push = function(subscriber, callback) {
106
+ subscriber.callback(self);
107
+ if (callback && isFunction(callback)) {
108
+ callback();
109
+ }
110
+ };
111
+
112
+ self.toString = function() {
113
+ return "Event " + self.eventCounter + ", Type: " + self.eventType;
114
+ };
115
+
116
+ function nextEventCounter() {
117
+ eventCounter += 1;
118
+ return eventCounter;
119
+ }
120
+ };
121
+
122
+ // Do not define an eventBus is one has already been created.
123
+ if (window && window.eventBus) {
124
+ return;
125
+ }
126
+ window.eventBus = new EventBus();
127
+ })(window);
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jsbus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -33,7 +33,12 @@ email:
33
33
  executables: []
34
34
  extensions: []
35
35
  extra_rdoc_files: []
36
- files: []
36
+ files:
37
+ - lib/jsbus/engine.rb
38
+ - lib/jsbus/railtie.rb
39
+ - lib/jsbus/version.rb
40
+ - lib/jsbus.rb
41
+ - vendor/assets/javascripts/jsbus.js
37
42
  homepage:
38
43
  licenses: []
39
44
  post_install_message: