realtime 0.0.12 → 0.1.0
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.
- data/app/views/realtime/_realtime_loader.html.erb +14 -0
- data/app/views/realtime/_realtime_message_console_logger.html.erb +20 -0
- data/app/views/realtime/_realtime_message_handler.html.erb +13 -0
- data/app/views/realtime/async_realtime_support.html.erb +71 -0
- data/app/views/realtime/realtime_message_console_logger.html.erb +2 -24
- data/app/views/realtime/realtime_message_handler.html.erb +2 -17
- data/app/views/realtime/realtime_support.html.erb +18 -15
- data/lib/realtime.rb +6 -6
- data/lib/realtime/realtime_controller.rb +74 -74
- data/lib/realtime/version.rb +3 -3
- data/lib/realtime/view_helpers.rb +29 -25
- data/lib/realtime/zmq_wrapper.rb +34 -34
- metadata +20 -10
- checksums.yaml +0 -7
@@ -0,0 +1,14 @@
|
|
1
|
+
if (window.realtime.socketIo) {
|
2
|
+
|
3
|
+
window.realtime.enabled = true;
|
4
|
+
|
5
|
+
window.realtime.socketIo.on('connect', function() {
|
6
|
+
// Give a nice round-trip ACK to our realtime server that we connected.
|
7
|
+
window.realtime.socketIo.emit('realtime_user_id_connected', { userId: window.realtime.userId });
|
8
|
+
});
|
9
|
+
|
10
|
+
// Queue up all incoming realtime messages.
|
11
|
+
window.realtime.socketIo.on('realtime_msg', function(message) {
|
12
|
+
window.realtime.messageQueue.push(message);
|
13
|
+
});
|
14
|
+
}
|
@@ -0,0 +1,20 @@
|
|
1
|
+
if (window.realtime.enabled && window.realtime.eventBus){
|
2
|
+
// handle events in the queue with eventing
|
3
|
+
var realtimeMessageEventConsoleLogger = function(message) {
|
4
|
+
console.log(message);
|
5
|
+
};
|
6
|
+
window.realtime.eventBus.on('realtimeMessage', realtimeMessageEventConsoleLogger);
|
7
|
+
|
8
|
+
} else if (window.realtime.enabled) {
|
9
|
+
// handle events in the queue without eventing
|
10
|
+
messageQueueConsoleLogger = function() {
|
11
|
+
message = window.realtime.messageQueue.shift();
|
12
|
+
if (message) {
|
13
|
+
console.log(message);
|
14
|
+
}
|
15
|
+
};
|
16
|
+
setInterval(messageQueueConsoleLogger, 100);
|
17
|
+
|
18
|
+
} else {
|
19
|
+
console.log('Error: Realtime was not enabled.')
|
20
|
+
}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
if (window.realtime.enabled){
|
2
|
+
|
3
|
+
window.realtime.eventBus = _.extend({}, Backbone.Events);
|
4
|
+
|
5
|
+
messageQueueRunner = function() {
|
6
|
+
message = window.realtime.messageQueue.shift();
|
7
|
+
if (message) {
|
8
|
+
window.realtime.eventBus.trigger('realtimeMessage', message);
|
9
|
+
}
|
10
|
+
};
|
11
|
+
|
12
|
+
setInterval(messageQueueRunner, 100);
|
13
|
+
}
|
@@ -0,0 +1,71 @@
|
|
1
|
+
<script type='text/javascript'>
|
2
|
+
|
3
|
+
window.realtime = {};
|
4
|
+
window.realtime.messageQueue = [];
|
5
|
+
window.realtime.enabled = false;
|
6
|
+
|
7
|
+
(function () {
|
8
|
+
// Load external scripts asynchronously
|
9
|
+
var loadScript = function (src, callback) {
|
10
|
+
var s, r, t;
|
11
|
+
r = false;
|
12
|
+
s = document.createElement('script');
|
13
|
+
s.type = 'text/javascript';
|
14
|
+
s.src = src;
|
15
|
+
s.onload = s.onreadystatechange = function () {
|
16
|
+
if (!r && (!this.readyState || this.readyState == 'complete'))
|
17
|
+
{
|
18
|
+
r = true;
|
19
|
+
callback();
|
20
|
+
}
|
21
|
+
};
|
22
|
+
t = document.getElementsByTagName('script')[0];
|
23
|
+
t.parentNode.insertBefore(s, t);
|
24
|
+
};
|
25
|
+
|
26
|
+
// Trigger a custom event that the user JS can listen for
|
27
|
+
// when everything finishes loading
|
28
|
+
var triggerEvent = function (name) {
|
29
|
+
var event;
|
30
|
+
|
31
|
+
if (document.createEvent) {
|
32
|
+
event = document.createEvent('HTMLEvents');
|
33
|
+
event.initEvent(name, true, true);
|
34
|
+
event.eventName = name;
|
35
|
+
document.dispatchEvent(event);
|
36
|
+
} else {
|
37
|
+
// For IE compatibility
|
38
|
+
event = document.createEventObject();
|
39
|
+
event.eventType = name;
|
40
|
+
event.eventName = name;
|
41
|
+
document.fireEvent('on' + event.eventType, event);
|
42
|
+
}
|
43
|
+
};
|
44
|
+
|
45
|
+
loadScript('<%= realtime_server_url %>/socket.io/socket.io.js', function () {
|
46
|
+
if (typeof io != 'undefined' && io != null) {
|
47
|
+
window.realtime.token = '<%= realtime_token %>';
|
48
|
+
window.realtime.userId = '<%= realtime_user_id %>';
|
49
|
+
window.realtime.socketIo = io.connect('<%= realtime_server_url %>/?_rtUserId=<%= @realtime_user_id %>&_rtToken=<%= @realtime_token %>');
|
50
|
+
}
|
51
|
+
|
52
|
+
<%= render "realtime/realtime_loader" %>
|
53
|
+
|
54
|
+
<% if message_handler %>
|
55
|
+
loadScript('//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.6.0/underscore-min.js', function () {
|
56
|
+
loadScript('//cdnjs.cloudflare.com/ajax/libs/backbone.js/1.1.2/backbone-min.js', function () {
|
57
|
+
<%= render "realtime/realtime_message_handler" %>
|
58
|
+
|
59
|
+
triggerEvent('realtime:loaded')
|
60
|
+
})
|
61
|
+
})
|
62
|
+
<% else %>
|
63
|
+
<% if message_console_logger %>
|
64
|
+
<%= render "realtime/realtime_message_console_logger" %>
|
65
|
+
<% end %>
|
66
|
+
|
67
|
+
triggerEvent('realtime:loaded')
|
68
|
+
<% end %>
|
69
|
+
})
|
70
|
+
})();
|
71
|
+
</script>
|
@@ -1,25 +1,3 @@
|
|
1
1
|
<script type='text/javascript'>
|
2
|
-
|
3
|
-
|
4
|
-
if (window.realtime.enabled && window.realtime.eventBus){
|
5
|
-
// handle events in the queue with eventing
|
6
|
-
var realtimeMessageEventConsoleLogger = function(message) {
|
7
|
-
console.log(message);
|
8
|
-
};
|
9
|
-
window.realtime.eventBus.on('realtimeMessage', realtimeMessageEventConsoleLogger);
|
10
|
-
|
11
|
-
} else if (window.realtime.enabled) {
|
12
|
-
// handle events in the queue without eventing
|
13
|
-
messageQueueConsoleLogger = function() {
|
14
|
-
message = window.realtime.messageQueue.shift();
|
15
|
-
if (message) {
|
16
|
-
console.log(message);
|
17
|
-
}
|
18
|
-
};
|
19
|
-
setInterval(messageQueueConsoleLogger, 100);
|
20
|
-
|
21
|
-
} else {
|
22
|
-
console.log('Error: Realtime was not enabled.')
|
23
|
-
}
|
24
|
-
|
25
|
-
</script>
|
2
|
+
<%= render "realtime/realtime_message_console_logger" %>
|
3
|
+
</script>
|
@@ -1,22 +1,7 @@
|
|
1
|
-
|
2
1
|
<script src="//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.6.0/underscore-min.js"></script>
|
3
2
|
|
4
3
|
<script src="//cdnjs.cloudflare.com/ajax/libs/backbone.js/1.1.2/backbone-min.js"></script>
|
5
4
|
|
6
5
|
<script type='text/javascript'>
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
window.realtime.eventBus = _.extend({}, Backbone.Events);
|
11
|
-
|
12
|
-
messageQueueRunner = function() {
|
13
|
-
message = window.realtime.messageQueue.shift();
|
14
|
-
if (message) {
|
15
|
-
window.realtime.eventBus.trigger('realtimeMessage', message);
|
16
|
-
}
|
17
|
-
};
|
18
|
-
|
19
|
-
setInterval(messageQueueRunner, 100);
|
20
|
-
}
|
21
|
-
|
22
|
-
</script>
|
6
|
+
<%= render "realtime/realtime_message_handler" %>
|
7
|
+
</script>
|
@@ -16,19 +16,22 @@
|
|
16
16
|
window.realtime.socketIo = io.connect('<%= realtime_server_url %>/?_rtUserId=<%= @realtime_user_id %>&_rtToken=<%= @realtime_token %>');
|
17
17
|
}
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
}
|
19
|
+
<%= render "realtime/realtime_loader" %>
|
20
|
+
|
21
|
+
</script>
|
22
|
+
|
23
|
+
<% if message_handler %>
|
24
|
+
<script src="//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.6.0/underscore-min.js"></script>
|
25
|
+
|
26
|
+
<script src="//cdnjs.cloudflare.com/ajax/libs/backbone.js/1.1.2/backbone-min.js"></script>
|
27
|
+
|
28
|
+
<script type='text/javascript'>
|
29
|
+
<%= render "realtime/realtime_message_handler" %>
|
30
|
+
</script>
|
31
|
+
<% end %>
|
33
32
|
|
34
|
-
|
33
|
+
<% if message_console_logger %>
|
34
|
+
<script type='text/javascript'>
|
35
|
+
<%= render "realtime/realtime_message_console_logger" %>
|
36
|
+
</script>
|
37
|
+
<% end %>
|
data/lib/realtime.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
|
2
|
-
require "realtime/realtime_controller.rb"
|
3
|
-
require "realtime/redis_wrapper.rb"
|
4
|
-
require "realtime/zmq_wrapper.rb"
|
5
|
-
require 'realtime/view_helpers.rb'
|
6
|
-
require 'realtime/railtie.rb'
|
1
|
+
|
2
|
+
require "realtime/realtime_controller.rb"
|
3
|
+
require "realtime/redis_wrapper.rb"
|
4
|
+
require "realtime/zmq_wrapper.rb"
|
5
|
+
require 'realtime/view_helpers.rb'
|
6
|
+
require 'realtime/railtie.rb'
|
@@ -1,75 +1,75 @@
|
|
1
|
-
module Realtime
|
2
|
-
module Controller
|
3
|
-
extend ActiveSupport::Concern
|
4
|
-
|
5
|
-
module ClassMethods
|
6
|
-
def realtime_controller(options = nil)
|
7
|
-
before_filter :do_realtime_token
|
8
|
-
before_filter :do_realtime_user_id
|
9
|
-
before_filter :do_realtime_server_url
|
10
|
-
if options.nil?
|
11
|
-
after_filter :store_realtime_session_redis
|
12
|
-
elsif options[:queue] == :redis
|
13
|
-
after_filter :store_realtime_session_redis
|
14
|
-
elsif options[:queue] == :zmq
|
15
|
-
after_filter :store_realtime_session_zmq
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
def do_realtime_token
|
21
|
-
@realtime_token = Digest::MD5.hexdigest("#{session[:session_id]}:#{realtime_user_id}")
|
22
|
-
return @realtime_token
|
23
|
-
end
|
24
|
-
|
25
|
-
def do_realtime_user_id
|
26
|
-
@realtime_user_id = realtime_user_id
|
27
|
-
return @realtime_user_id
|
28
|
-
end
|
29
|
-
|
30
|
-
def do_realtime_server_url
|
31
|
-
@realtime_server_url = realtime_server_url
|
32
|
-
return @realtime_server_url
|
33
|
-
end
|
34
|
-
|
35
|
-
# create shared session tokens for redis/socketio realtime server running on node.js
|
36
|
-
def store_realtime_session_zmq
|
37
|
-
# store session data or any authentication data you want here, generate to JSON data
|
38
|
-
session_data = {
|
39
|
-
"user_id" => realtime_user_id,
|
40
|
-
}
|
41
|
-
|
42
|
-
# todo: merge additional session data passed in
|
43
|
-
stored_session_data = JSON.generate(session_data)
|
44
|
-
|
45
|
-
ZmqWrapper.store_session(
|
46
|
-
realtime_user_id,
|
47
|
-
@realtime_token,
|
48
|
-
stored_session_data,
|
49
|
-
86400
|
50
|
-
)
|
51
|
-
end
|
52
|
-
|
53
|
-
# create shared session tokens for redis/socketio realtime server running on node.js
|
54
|
-
def store_realtime_session_redis
|
55
|
-
# store session data or any authentication data you want here, generate to JSON data
|
56
|
-
session_data = {
|
57
|
-
"user_id" => realtime_user_id,
|
58
|
-
}
|
59
|
-
|
60
|
-
# todo: merge additional session data passed in
|
61
|
-
|
62
|
-
stored_session_data = JSON.generate(session_data)
|
63
|
-
|
64
|
-
RedisWrapper.redis.hset(
|
65
|
-
"rtSession-" + realtime_user_id.to_s,
|
66
|
-
@realtime_token,
|
67
|
-
stored_session_data,
|
68
|
-
)
|
69
|
-
|
70
|
-
# expire this realtime session after one day.
|
71
|
-
RedisWrapper.redis.expire("rtSession-" + realtime_user_id.to_s, 86400)
|
72
|
-
end
|
73
|
-
|
74
|
-
end
|
1
|
+
module Realtime
|
2
|
+
module Controller
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
module ClassMethods
|
6
|
+
def realtime_controller(options = nil)
|
7
|
+
before_filter :do_realtime_token
|
8
|
+
before_filter :do_realtime_user_id
|
9
|
+
before_filter :do_realtime_server_url
|
10
|
+
if options.nil?
|
11
|
+
after_filter :store_realtime_session_redis
|
12
|
+
elsif options[:queue] == :redis
|
13
|
+
after_filter :store_realtime_session_redis
|
14
|
+
elsif options[:queue] == :zmq
|
15
|
+
after_filter :store_realtime_session_zmq
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def do_realtime_token
|
21
|
+
@realtime_token = Digest::MD5.hexdigest("#{session[:session_id]}:#{realtime_user_id}")
|
22
|
+
return @realtime_token
|
23
|
+
end
|
24
|
+
|
25
|
+
def do_realtime_user_id
|
26
|
+
@realtime_user_id = realtime_user_id
|
27
|
+
return @realtime_user_id
|
28
|
+
end
|
29
|
+
|
30
|
+
def do_realtime_server_url
|
31
|
+
@realtime_server_url = realtime_server_url
|
32
|
+
return @realtime_server_url
|
33
|
+
end
|
34
|
+
|
35
|
+
# create shared session tokens for redis/socketio realtime server running on node.js
|
36
|
+
def store_realtime_session_zmq
|
37
|
+
# store session data or any authentication data you want here, generate to JSON data
|
38
|
+
session_data = {
|
39
|
+
"user_id" => realtime_user_id,
|
40
|
+
}
|
41
|
+
|
42
|
+
# todo: merge additional session data passed in
|
43
|
+
stored_session_data = JSON.generate(session_data)
|
44
|
+
|
45
|
+
ZmqWrapper.store_session(
|
46
|
+
realtime_user_id,
|
47
|
+
@realtime_token,
|
48
|
+
stored_session_data,
|
49
|
+
86400
|
50
|
+
)
|
51
|
+
end
|
52
|
+
|
53
|
+
# create shared session tokens for redis/socketio realtime server running on node.js
|
54
|
+
def store_realtime_session_redis
|
55
|
+
# store session data or any authentication data you want here, generate to JSON data
|
56
|
+
session_data = {
|
57
|
+
"user_id" => realtime_user_id,
|
58
|
+
}
|
59
|
+
|
60
|
+
# todo: merge additional session data passed in
|
61
|
+
|
62
|
+
stored_session_data = JSON.generate(session_data)
|
63
|
+
|
64
|
+
RedisWrapper.redis.hset(
|
65
|
+
"rtSession-" + realtime_user_id.to_s,
|
66
|
+
@realtime_token,
|
67
|
+
stored_session_data,
|
68
|
+
)
|
69
|
+
|
70
|
+
# expire this realtime session after one day.
|
71
|
+
RedisWrapper.redis.expire("rtSession-" + realtime_user_id.to_s, 86400)
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
75
|
end
|
data/lib/realtime/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
module Realtime
|
2
|
-
VERSION = "0.0
|
3
|
-
end
|
1
|
+
module Realtime
|
2
|
+
VERSION = "0.1.0"
|
3
|
+
end
|
@@ -1,29 +1,33 @@
|
|
1
1
|
module Realtime
|
2
|
-
|
2
|
+
module ViewHelpers
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
4
|
+
def realtime_support(args = {})
|
5
|
+
async = args[:async] ? 'async_' : ''
|
6
|
+
return render(template: "realtime/#{async}realtime_support",
|
7
|
+
layout: nil,
|
8
|
+
locals:
|
9
|
+
{ realtime_token: @realtime_token,
|
10
|
+
realtime_domain: @realtime_domain,
|
11
|
+
realtime_server_url: @realtime_server_url,
|
12
|
+
realtime_user_id: @realtime_user_id,
|
13
|
+
message_handler: args[:message_handler],
|
14
|
+
message_console_logger: args[:message_console_logger] }).to_s
|
15
|
+
end
|
14
16
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
17
|
+
def realtime_message_handler
|
18
|
+
ActiveSupport::Deprecation.warn("'realtime_message_handler' is deprecated, "\
|
19
|
+
"please refer to the documentation for details.")
|
20
|
+
return render(template: "realtime/realtime_message_handler",
|
21
|
+
layout: nil,
|
22
|
+
locals: {}).to_s
|
23
|
+
end
|
21
24
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
end
|
25
|
+
def realtime_message_console_logger
|
26
|
+
ActiveSupport::Deprecation.warn("'realtime_message_console_logger' is deprecated, "\
|
27
|
+
"please refer to the documentation for details.")
|
28
|
+
return render(template: "realtime/realtime_message_console_logger",
|
29
|
+
layout: nil,
|
30
|
+
locals: {}).to_s
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
data/lib/realtime/zmq_wrapper.rb
CHANGED
@@ -1,34 +1,34 @@
|
|
1
|
-
class ZmqWrapper
|
2
|
-
|
3
|
-
if defined?(ZMQ) && defined?(EmZeromq)
|
4
|
-
require 'em-zeromq'
|
5
|
-
|
6
|
-
def self.publish(the_message)
|
7
|
-
EM.run {
|
8
|
-
zmq = EM::ZeroMQ::Context.new(1)
|
9
|
-
pusher = zmq.socket(ZMQ::PUSH)
|
10
|
-
pusher.connect($zmq_server)
|
11
|
-
message = "realtime_msg:" + the_message.to_json
|
12
|
-
puts "Pushing realtime message: " + message
|
13
|
-
pusher.send_msg(message)
|
14
|
-
EM.stop
|
15
|
-
}
|
16
|
-
end
|
17
|
-
|
18
|
-
def self.store_session(user_id, session_id, session_data, expiration)
|
19
|
-
EM.run {
|
20
|
-
zmq = EM::ZeroMQ::Context.new(1)
|
21
|
-
pusher = zmq.socket(ZMQ::PUSH)
|
22
|
-
pusher.connect($zmq_server)
|
23
|
-
the_message = {user_id: user_id,
|
24
|
-
session_id: session_id,
|
25
|
-
session_data: session_data,
|
26
|
-
expiration: expiration}
|
27
|
-
message = "rtSession:" + the_message.to_json
|
28
|
-
puts "Pushing session message: " + message
|
29
|
-
pusher.send_msg(message)
|
30
|
-
EM.stop
|
31
|
-
}
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
1
|
+
class ZmqWrapper
|
2
|
+
|
3
|
+
if defined?(ZMQ) && defined?(EmZeromq)
|
4
|
+
require 'em-zeromq'
|
5
|
+
|
6
|
+
def self.publish(the_message)
|
7
|
+
EM.run {
|
8
|
+
zmq = EM::ZeroMQ::Context.new(1)
|
9
|
+
pusher = zmq.socket(ZMQ::PUSH)
|
10
|
+
pusher.connect($zmq_server)
|
11
|
+
message = "realtime_msg:" + the_message.to_json
|
12
|
+
puts "Pushing realtime message: " + message
|
13
|
+
pusher.send_msg(message)
|
14
|
+
EM.stop
|
15
|
+
}
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.store_session(user_id, session_id, session_data, expiration)
|
19
|
+
EM.run {
|
20
|
+
zmq = EM::ZeroMQ::Context.new(1)
|
21
|
+
pusher = zmq.socket(ZMQ::PUSH)
|
22
|
+
pusher.connect($zmq_server)
|
23
|
+
the_message = {user_id: user_id,
|
24
|
+
session_id: session_id,
|
25
|
+
session_data: session_data,
|
26
|
+
expiration: expiration}
|
27
|
+
message = "rtSession:" + the_message.to_json
|
28
|
+
puts "Pushing session message: " + message
|
29
|
+
pusher.send_msg(message)
|
30
|
+
EM.stop
|
31
|
+
}
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
metadata
CHANGED
@@ -1,27 +1,32 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: realtime
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Mike Atlas
|
9
|
+
- Ahmad Abdel-Yaman (@ayaman)
|
10
|
+
- Nick Prokesch (@prokizzle)
|
8
11
|
autorequire:
|
9
12
|
bindir: bin
|
10
13
|
cert_chain: []
|
11
|
-
date:
|
14
|
+
date: 2016-01-24 00:00:00.000000000 Z
|
12
15
|
dependencies:
|
13
16
|
- !ruby/object:Gem::Dependency
|
14
17
|
name: rails
|
15
18
|
requirement: !ruby/object:Gem::Requirement
|
19
|
+
none: false
|
16
20
|
requirements:
|
17
|
-
- - '>='
|
21
|
+
- - ! '>='
|
18
22
|
- !ruby/object:Gem::Version
|
19
23
|
version: '4.0'
|
20
24
|
type: :runtime
|
21
25
|
prerelease: false
|
22
26
|
version_requirements: !ruby/object:Gem::Requirement
|
27
|
+
none: false
|
23
28
|
requirements:
|
24
|
-
- - '>='
|
29
|
+
- - ! '>='
|
25
30
|
- !ruby/object:Gem::Version
|
26
31
|
version: '4.0'
|
27
32
|
description: Provides a simple Realtime framework for Rails applications.
|
@@ -32,38 +37,43 @@ extensions: []
|
|
32
37
|
extra_rdoc_files: []
|
33
38
|
files:
|
34
39
|
- app/views/realtime/realtime_message_console_logger.html.erb
|
40
|
+
- app/views/realtime/_realtime_message_handler.html.erb
|
35
41
|
- app/views/realtime/realtime_message_handler.html.erb
|
42
|
+
- app/views/realtime/async_realtime_support.html.erb
|
36
43
|
- app/views/realtime/realtime_support.html.erb
|
44
|
+
- app/views/realtime/_realtime_message_console_logger.html.erb
|
45
|
+
- app/views/realtime/_realtime_loader.html.erb
|
37
46
|
- lib/realtime/railtie.rb
|
38
47
|
- lib/realtime/realtime_controller.rb
|
48
|
+
- lib/realtime/zmq_wrapper.rb
|
39
49
|
- lib/realtime/redis_wrapper.rb
|
40
50
|
- lib/realtime/version.rb
|
41
51
|
- lib/realtime/view_helpers.rb
|
42
|
-
- lib/realtime/zmq_wrapper.rb
|
43
52
|
- lib/realtime.rb
|
44
53
|
- MIT-LICENSE
|
45
54
|
homepage: http://mikeatlas.github.io/realtime-rails/
|
46
55
|
licenses:
|
47
56
|
- MIT
|
48
|
-
metadata: {}
|
49
57
|
post_install_message:
|
50
58
|
rdoc_options: []
|
51
59
|
require_paths:
|
52
60
|
- lib
|
53
61
|
required_ruby_version: !ruby/object:Gem::Requirement
|
62
|
+
none: false
|
54
63
|
requirements:
|
55
|
-
- - '>='
|
64
|
+
- - ! '>='
|
56
65
|
- !ruby/object:Gem::Version
|
57
66
|
version: '0'
|
58
67
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
68
|
+
none: false
|
59
69
|
requirements:
|
60
|
-
- - '>='
|
70
|
+
- - ! '>='
|
61
71
|
- !ruby/object:Gem::Version
|
62
72
|
version: '0'
|
63
73
|
requirements: []
|
64
74
|
rubyforge_project:
|
65
|
-
rubygems_version:
|
75
|
+
rubygems_version: 1.8.23
|
66
76
|
signing_key:
|
67
|
-
specification_version:
|
77
|
+
specification_version: 3
|
68
78
|
summary: Realtime support for Rails applications.
|
69
79
|
test_files: []
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: c3ec19eba97229354e064d27bfc0b92b0911a3d8
|
4
|
-
data.tar.gz: 4ea1fd69755b1b971838b592ccb5eac0caa06e3d
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: df907e7537971450e92f4ca3960a1cb53b5bae9deb9d4db38732709487021c10772f6bf7f560b444812a8f3c402768b4aa29dabdc11dcdbdf30212328fa656c7
|
7
|
-
data.tar.gz: ea678d1709d3eff430de67e890528fbe5ef43f3b994af83ac0f67366099ca83ad6bf5f99f64d5800a4ae448da0722d65c87cc2700ce99981519f9b7693f0190e
|