jsbus 0.0.1 → 0.0.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.
@@ -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: