websocket-rails 0.1.2 → 0.1.3
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/CHANGELOG.md +34 -0
- data/Gemfile +1 -0
- data/README.md +34 -34
- data/assets/javascripts/http_dispatcher.js +6 -5
- data/assets/javascripts/websocket_dispatcher.js +7 -6
- data/lib/websocket-rails.rb +22 -2
- data/lib/websocket_rails/base_controller.rb +24 -8
- data/lib/websocket_rails/connection_adapters.rb +43 -16
- data/lib/websocket_rails/connection_adapters/http.rb +14 -10
- data/lib/websocket_rails/connection_adapters/web_socket.rb +13 -12
- data/lib/websocket_rails/connection_manager.rb +19 -47
- data/lib/websocket_rails/dispatcher.rb +39 -33
- data/lib/websocket_rails/event.rb +71 -0
- data/lib/websocket_rails/event_map.rb +120 -0
- data/lib/websocket_rails/version.rb +1 -1
- data/spec/dummy/config/initializers/events.rb +2 -2
- data/spec/dummy/{public/stylesheets/.gitkeep → log/development.log} +0 -0
- data/spec/dummy/log/production.log +0 -0
- data/spec/dummy/log/server.log +0 -0
- data/spec/dummy/log/test.log +454 -0
- data/spec/integration/connection_manager_spec.rb +29 -13
- data/spec/spec_helper.rb +3 -3
- data/spec/support/helper_methods.rb +29 -0
- data/spec/support/mock_web_socket.rb +6 -2
- data/spec/unit/connection_adapters/http_spec.rb +1 -3
- data/spec/unit/connection_adapters/web_socket_spec.rb +1 -11
- data/spec/unit/connection_adapters_spec.rb +51 -19
- data/spec/unit/connection_manager_spec.rb +22 -46
- data/spec/unit/dispatcher_spec.rb +56 -25
- data/spec/unit/event_map_spec.rb +96 -0
- data/spec/unit/event_spec.rb +99 -0
- metadata +23 -25
- data/.gitignore +0 -11
- data/.rspec +0 -2
- data/.travis.yml +0 -3
- data/Gemfile.lock +0 -144
- data/Guardfile +0 -9
- data/lib/websocket_rails/events.rb +0 -53
- data/spec/unit/events_spec.rb +0 -70
- data/websocket-rails.gemspec +0 -26
data/Guardfile
DELETED
@@ -1,9 +0,0 @@
|
|
1
|
-
# A sample Guardfile
|
2
|
-
# More info at https://github.com/guard/guard#readme
|
3
|
-
|
4
|
-
guard 'rspec', :version => 2 do
|
5
|
-
watch(%r{^spec/.+_spec\.rb$})
|
6
|
-
watch(%r{^lib/websocket_rails/(.+)\.rb$}) { |m| "spec/unit/#{m[1]}_spec.rb" }
|
7
|
-
watch('spec/spec_helper.rb') { "spec" }
|
8
|
-
end
|
9
|
-
|
@@ -1,53 +0,0 @@
|
|
1
|
-
module WebsocketRails
|
2
|
-
# Provides a DSL for mapping client events to controller actions. A single event can be mapped to any
|
3
|
-
# number of controllers and actions. You can define your event routes by creating an +events.rb+ file in
|
4
|
-
# your application's +initializers+ directory. The DSL currently consists of a single method, {#subscribe},
|
5
|
-
# which takes a symbolized event name as the first argument, and a Hash with the controller and method
|
6
|
-
# name as the second argument.
|
7
|
-
#
|
8
|
-
# == Example events.rb file
|
9
|
-
# # located in config/initializers/events.rb
|
10
|
-
# WebsocketRails::Events.describe_events do
|
11
|
-
# subscribe :client_connected, to: ChatController, with_method: :client_connected
|
12
|
-
# subscribe :new_user, to: ChatController, with_method: :new_user
|
13
|
-
# end
|
14
|
-
class Events
|
15
|
-
|
16
|
-
def self.describe_events(&block)
|
17
|
-
WebsocketRails.route_block = block
|
18
|
-
end
|
19
|
-
|
20
|
-
attr_reader :classes, :events
|
21
|
-
|
22
|
-
def initialize(dispatcher)
|
23
|
-
@dispatcher = dispatcher
|
24
|
-
evaluate( WebsocketRails.route_block ) if WebsocketRails.route_block
|
25
|
-
end
|
26
|
-
|
27
|
-
def routes_for(event,&block)
|
28
|
-
@events[event].each do |klass,method|
|
29
|
-
controller = @classes[klass]
|
30
|
-
block.call( controller, method )
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
def subscribe(event_name,options)
|
35
|
-
klass = options[:to] || raise("Must specify a class for to: option in event route")
|
36
|
-
method = options[:with_method] || raise("Must specify a method for with_method: option in event route")
|
37
|
-
controller = klass.new
|
38
|
-
if @classes[klass].nil?
|
39
|
-
@classes[klass] = controller
|
40
|
-
controller.instance_variable_set(:@_dispatcher,@dispatcher)
|
41
|
-
controller.send :initialize_session if controller.respond_to?(:initialize_session)
|
42
|
-
end
|
43
|
-
@events[event_name] << [klass,method]
|
44
|
-
end
|
45
|
-
|
46
|
-
def evaluate(block)
|
47
|
-
@events = Hash.new {|h,k| h[k] = Array.new}
|
48
|
-
@classes = Hash.new
|
49
|
-
instance_eval &block
|
50
|
-
end
|
51
|
-
|
52
|
-
end
|
53
|
-
end
|
data/spec/unit/events_spec.rb
DELETED
@@ -1,70 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module WebsocketRails
|
4
|
-
describe Events do
|
5
|
-
|
6
|
-
def define_test_events
|
7
|
-
WebsocketRails.route_block = nil
|
8
|
-
WebsocketRails::Events.describe_events do
|
9
|
-
subscribe :client_connected, to: Object, with_method: :object_id
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
let(:dispatcher) { double('dispatcher').as_null_object }
|
14
|
-
subject { Events.new(dispatcher) }
|
15
|
-
|
16
|
-
context "Events.describe_events" do
|
17
|
-
it "should store the event route block in the global configuration" do
|
18
|
-
define_test_events
|
19
|
-
WebsocketRails.route_block.should be_present
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
context "#evaluate" do
|
24
|
-
it "should evaluate the route DSL" do
|
25
|
-
evaluated = double()
|
26
|
-
evaluated.should_receive(:done)
|
27
|
-
block = Proc.new { evaluated.done }
|
28
|
-
subject.evaluate( block )
|
29
|
-
end
|
30
|
-
|
31
|
-
it "should initialize empty hashes for classes and events" do
|
32
|
-
subject.evaluate Proc.new {}
|
33
|
-
subject.classes.should == {}
|
34
|
-
subject.events.should == {}
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
context "#subscribe" do
|
39
|
-
before(:each) { define_test_events }
|
40
|
-
|
41
|
-
it "should store the event in the events hash" do
|
42
|
-
subject.events.has_key?(:client_connected).should be_true
|
43
|
-
end
|
44
|
-
|
45
|
-
it "should store the instantiated controller in the classes hash" do
|
46
|
-
subject.classes[Object].class.should == Object
|
47
|
-
end
|
48
|
-
|
49
|
-
it "should set the dispatcher on the instantiated controller" do
|
50
|
-
subject.classes[Object].instance_variable_get(:@_dispatcher).should == dispatcher
|
51
|
-
end
|
52
|
-
|
53
|
-
it "should store the class constant and method name in the events hash" do
|
54
|
-
subject.events[:client_connected].should == [[Object,:object_id]]
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
context "#routes_for" do
|
59
|
-
before(:each) { define_test_events }
|
60
|
-
|
61
|
-
it "should yield the class constant and method symbol for each route defined for an event" do
|
62
|
-
subject.routes_for(:client_connected) do |controller,method|
|
63
|
-
controller.class.should == Object
|
64
|
-
method.should == :object_id
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
end
|
70
|
-
end
|
data/websocket-rails.gemspec
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
$:.push File.expand_path("../lib", __FILE__)
|
2
|
-
require "websocket_rails/version"
|
3
|
-
|
4
|
-
Gem::Specification.new do |s|
|
5
|
-
s.name = "websocket-rails"
|
6
|
-
s.summary = "Plug and play websocket support for ruby on rails. Includes event router for mapping javascript events to controller actions."
|
7
|
-
s.description = "Seamless Ruby on Rails websocket integration."
|
8
|
-
s.homepage = "http://danknox.github.com/websocket-rails/"
|
9
|
-
s.files = Dir["{lib,config}/**/*"] + ["MIT-LICENSE", "Rakefile", "Gemfile", "README.rdoc"]
|
10
|
-
s.version = WebsocketRails::VERSION
|
11
|
-
s.platform = Gem::Platform::RUBY
|
12
|
-
s.authors = [ "Dan Knox", "Kyle Whalen", "Three Dot Loft LLC" ]
|
13
|
-
s.email = [ "dknox@threedotloft.com" ]
|
14
|
-
|
15
|
-
s.files = `git ls-files`.split("\n")
|
16
|
-
s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
|
17
|
-
s.require_path = 'lib'
|
18
|
-
|
19
|
-
s.add_dependency "rack"
|
20
|
-
s.add_dependency "faye-websocket"
|
21
|
-
s.add_dependency "thin"
|
22
|
-
s.add_development_dependency "rake"
|
23
|
-
s.add_development_dependency "rails"
|
24
|
-
s.add_development_dependency "sqlite3"
|
25
|
-
s.add_development_dependency "rspec-rails"
|
26
|
-
end
|