Module: Sinatra::RocketIO

Defined in:
lib/sinatra/rocketio.rb,
lib/sinatra/rocketio/client.rb,
lib/sinatra-rocketio/channel.rb,
lib/sinatra-rocketio/helpers.rb,
lib/sinatra-rocketio/options.rb,
lib/sinatra-rocketio/version.rb,
lib/sinatra-rocketio/rocketio.rb,
lib/sinatra-rocketio/javascript.rb,
lib/sinatra-rocketio/application.rb,
lib/sinatra-rocketio/client_info.rb

Defined Under Namespace

Modules: Helpers Classes: Client, ClientInfo

Constant Summary collapse

VERSION =
"0.3.2"

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.channelsObject



4
5
6
# File 'lib/sinatra-rocketio/channel.rb', line 4

def self.channels
  @@channels ||= {}
end

.default_optionsObject



12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/sinatra-rocketio/options.rb', line 12

def self.default_options
  {
    :comet     => [
                   (ENV["COMET"].to_s =~ /^(false|disable)$/i ? false : true),
                   lambda{|v| [true, false].include? v }
                  ],
    :websocket => [
                   (ENV["WEBSOCKET"].to_s =~ /^(false|disable)$/i ? false : true),
                   lambda{|v| [true, false].include? v }
                  ]
  }
end

.javascript(*js_file_names) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/sinatra-rocketio/javascript.rb', line 4

def self.javascript(*js_file_names)
  js_file_names = ['rocketio.js', 'cometio.js', 'websocketio.js', 'event_emitter.js']
  js = ''
  js_file_names.each do |i|
    js += case i
          when 'cometio.js'
            options[:comet] ? Sinatra::CometIO.javascript('cometio.js') : ''
          when 'websocketio.js'
            options[:websocket] ? Sinatra::WebSocketIO.javascript('websocketio.js') : ''
          else
            j = ''
            File.open(File.expand_path "../js/#{i}", File.dirname(__FILE__)) do |f|
              j = f.read
            end
            j
          end + "\n"
  end
  js
end

.optionsObject



25
26
27
28
29
30
31
32
33
# File 'lib/sinatra-rocketio/options.rb', line 25

def self.options
  @@options ||= (
                 opts = {}
                 default_options.each do |k,v|
                   opts[k] = v[0]
                 end
                 opts
                 )
end

.options=(opts) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/sinatra-rocketio/options.rb', line 35

def self.options=(opts)
  @@options = {}
  opts.each do |k,v|
    k = k.to_sym
    unless default_options.include? k
      STDERR.puts "!! Sinatra::RocketIO setting - \"#{k}\" is not valid key"
    else
      unless default_options[k][1].call(v)
        default = default_options[k][0]
        STDERR.puts "!! Sinatra::RocketIO setting - \"#{k} => #{v}\" is not valid. set default \"#{k} => #{default}\""
        @@options[k] = default
      else
        @@options[k] = v
      end
    end
  end
  default_options.each do |k, v|
    @@options[k] = v[0] unless @@options.include? k
  end
  @@options
end

.push(type, data, opt = {}) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/sinatra-rocketio/rocketio.rb', line 6

def self.push(type, data, opt={})
  if opt.include? :to and opt[:to].kind_of? Array
    opt[:to].each do |to|
      push type, data, :to => to
    end
  elsif opt.include? :channel
    channels.select{|session, channel|
      channel == opt[:channel].to_s
    }.each{|session, channel|
      push type, data, :to => session
    }
  else
    if options[:websocket]
      Sinatra::WebSocketIO.push type, data, opt
    end
    if options[:comet]
      Sinatra::CometIO.push type, data, opt
    end
  end
end

.registered(app) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/sinatra-rocketio/application.rb', line 4

def self.registered(app)
  app.register Sinatra::CometIO
  app.register Sinatra::WebSocketIO
  app.helpers  Sinatra::RocketIO::Helpers
  app.get '/rocketio/settings' do
    content_type 'application/json'
    response["Access-Control-Allow-Origin"] = "*"
    @setting_json ||= (
                       setting = {}
                       setting[:websocket] = websocketio_url if Sinatra::RocketIO.options[:websocket]
                       setting[:comet] = cometio_url if Sinatra::RocketIO.options[:comet]
                       setting.to_json
                       )
  end
  app.get '/rocketio/rocketio.js' do
    content_type 'application/javascript'
    @js ||= ERB.new(Sinatra::RocketIO.javascript).result(binding)
  end
  EM::defer do
    while !EM::reactor_running? do
      sleep 1
    end
    Sinatra::WebSocketIO.start if Sinatra::RocketIO.options[:websocket]
    Sinatra::RocketIO.emit :start
  end
end

.sessionsObject



27
28
29
30
31
32
# File 'lib/sinatra-rocketio/rocketio.rb', line 27

def self.sessions
  {
    :websocket => Sinatra::WebSocketIO.sessions.keys,
    :comet => Sinatra::CometIO.sessions.keys
  }
end

Instance Method Details

#rocketioObject



8
9
10
# File 'lib/sinatra-rocketio/options.rb', line 8

def rocketio
  RocketIO.options
end

#rocketio=(options) ⇒ Object



4
5
6
# File 'lib/sinatra-rocketio/options.rb', line 4

def rocketio=(options)
  RocketIO.options = options
end