socker 0.0.3 → 0.0.4

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.
Files changed (3) hide show
  1. data/lib/socker.rb +19 -14
  2. data/lib/socker/sinatra.rb +35 -0
  3. metadata +3 -2
@@ -13,22 +13,11 @@ module Socker
13
13
 
14
14
  WEBSOCKET_STANDARD_EVENTS = [ :open, :close, :message, :error ]
15
15
 
16
- attr_reader :events, :callbacks
16
+ attr_accessor :events
17
+ attr_reader :callbacks
17
18
 
18
19
  def initialize(callbacks={})
19
20
  @callbacks = callbacks
20
- @application = lambda do |env|
21
- return [501, {}, ['Sorry, but I am websocket app.']] unless is_websocket?(env)
22
- connection(env) do |c|
23
- WEBSOCKET_STANDARD_EVENTS.each(&register_handler(c, env))
24
- end
25
- end
26
- # This is needed for Puma so we can log the requests to WebSockets
27
- @application.class.instance_eval {
28
- define_method(:log) { |message| Socker::App.log(message) }
29
- }
30
- @application.freeze
31
- @application
32
21
  end
33
22
 
34
23
  # Helper method your application can use to register new handlers
@@ -42,8 +31,11 @@ module Socker
42
31
  # Handler could be anything that implements the .call method, like
43
32
  # lambda, Proc or Method...
44
33
  #
45
- def on(event, handler)
34
+ def on(event, handler=nil, &block)
46
35
  @events ||= {}
36
+ handler = block unless handler
37
+ return @callbacks[:when_active] = handler if event == :active
38
+ return @callbacks[:when_idle] = handler if event == :idle
47
39
  raise "Unable register handler for unsupported event: #{event}" unless event_supported?(event)
48
40
  @events[event] ||= lambda { |socket, ev| handler.call(socket, ev) }
49
41
  end
@@ -53,6 +45,19 @@ module Socker
53
45
  # run Rack::URLMap.new('/' => MyServer.new.to_app)
54
46
  #
55
47
  def to_app
48
+ @application = lambda do |env|
49
+ return [501, {}, ['Sorry, but I am websocket app.']] unless is_websocket?(env)
50
+ connection(env) do |c|
51
+ WEBSOCKET_STANDARD_EVENTS.each(&register_handler(c, env))
52
+ end
53
+ end
54
+ # This is needed for Puma so we can log the requests to WebSockets
55
+ @application.class.instance_eval {
56
+ define_method(:log) { |message| Socker::App.log(message) }
57
+ }
58
+ # Prevent any modification of events or application itself at this point.
59
+ @events.freeze
60
+ @application.freeze
56
61
  @application
57
62
  end
58
63
 
@@ -0,0 +1,35 @@
1
+ require 'socker'
2
+ require 'sinatra/base'
3
+
4
+ module Sinatra
5
+
6
+ module Socker
7
+
8
+ class RackAdapter
9
+
10
+ def initialize(app, options = {})
11
+ @socker_app = options[:app]
12
+ @mount_point = options[:at]
13
+ @app = app
14
+ end
15
+
16
+ def call(env)
17
+ if Rack::Request.new(env).path == @mount_point
18
+ @socker_app.call(env)
19
+ else
20
+ @app.call(env)
21
+ end
22
+ end
23
+
24
+ end
25
+
26
+ def websocket(mount_point, &block)
27
+ socker_app = ::Socker::App.new
28
+ socker_app.instance_eval(&block)
29
+ use Sinatra::Socker::RackAdapter, :app => socker_app.to_app, :at => mount_point
30
+ end
31
+
32
+ end
33
+
34
+ register Sinatra::Socker
35
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: socker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-10-17 00:00:00.000000000 Z
12
+ date: 2013-10-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: faye-websocket
@@ -34,6 +34,7 @@ extensions: []
34
34
  extra_rdoc_files: []
35
35
  files:
36
36
  - lib/socker/helper.rb
37
+ - lib/socker/sinatra.rb
37
38
  - lib/socker/event_handlers.rb
38
39
  - lib/socker.rb
39
40
  homepage: https://github.com/mfojtik/socker