sinatra-multi-screen 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.
- data/.gitignore +2 -1
- data/History.txt +5 -1
- data/README.md +2 -0
- data/lib/js/multiscreen.js +5 -2
- data/lib/sinatra/application.rb +38 -0
- data/lib/sinatra/multi_screen.rb +12 -2
- data/lib/sinatra-multi-screen/version.rb +2 -4
- data/lib/sinatra-multi-screen.rb +1 -3
- data/sample/Gemfile.lock +58 -0
- data/sample/main.rb +12 -4
- data/sample/public/js/remote.js +3 -2
- data/sample/public/js/tv.js +1 -1
- data/sample/views/index.haml +2 -2
- data/sample/views/remote.haml +2 -0
- data/sample/views/tv.haml +1 -0
- data/sinatra-multi-screen.gemspec +2 -3
- metadata +11 -4
data/.gitignore
CHANGED
data/History.txt
CHANGED
data/README.md
CHANGED
@@ -85,6 +85,8 @@ tv.on("change_color", function(data){ // regist "change_color" event
|
|
85
85
|
Samples
|
86
86
|
-------
|
87
87
|
* https://github.com/shokai/sinatra-multi-screen/tree/master/sample
|
88
|
+
* http://multiscreen-youtube.herokuapp.com
|
89
|
+
* https://github.com/shokai/multiscreen-youtube-sample
|
88
90
|
|
89
91
|
|
90
92
|
Contributing
|
data/lib/js/multiscreen.js
CHANGED
@@ -5,11 +5,14 @@ var MultiScreen = function(cometio, options){
|
|
5
5
|
var self = this;
|
6
6
|
this.io = cometio;
|
7
7
|
this.options = options;
|
8
|
+
this.io.on("connect", function(session){
|
9
|
+
self.io.push("__multiscreen__options", self.options);
|
10
|
+
});
|
8
11
|
if(options.type == "remote"){
|
9
12
|
this.tv = {};
|
10
13
|
new EventEmitter().apply(this.tv);
|
11
14
|
this.tv.event = function(selector, event_name, args){
|
12
|
-
self.io.push("__multiscreen__event", {selector: selector, event: event_name, args: args});
|
15
|
+
self.io.push("__multiscreen__event", {selector: selector, event: event_name, args: args, options: self.options});
|
13
16
|
};
|
14
17
|
this.tv.$ = function(selector){
|
15
18
|
return {
|
@@ -44,7 +47,7 @@ var MultiScreen = function(cometio, options){
|
|
44
47
|
if(options.type == "tv"){
|
45
48
|
this.remote = {};
|
46
49
|
this.remote.push = function(event_name, args){
|
47
|
-
self.io.push("__multiscreen__event", {event: event_name, args: args});
|
50
|
+
self.io.push("__multiscreen__event", {event: event_name, args: args, options: self.options});
|
48
51
|
};
|
49
52
|
this.io.on("__multiscreen__event", function(data){
|
50
53
|
if(typeof data.selector === 'undefined') return;
|
data/lib/sinatra/application.rb
CHANGED
@@ -1,7 +1,45 @@
|
|
1
|
+
|
2
|
+
|
1
3
|
module Sinatra
|
2
4
|
|
3
5
|
class Application
|
4
6
|
|
7
|
+
CometIO.on :__multiscreen__event do |data, from|
|
8
|
+
opts = data["options"]
|
9
|
+
raise ArgumentError, 'option is empty' if !opts or opts.empty?
|
10
|
+
raise ArgumentError, 'channel is empty' if opts["channel"].empty?
|
11
|
+
raise ArgumentError, 'type must be "tv" or "remote"' unless ["tv","remote"].include? opts["type"]
|
12
|
+
unless MultiScreen.channels[opts["channel"]][opts["type"]].include? from
|
13
|
+
raise StandardError, "client <#{from}> is not member of channel <#{opts['channel']}>"
|
14
|
+
end
|
15
|
+
type = case opts["type"]
|
16
|
+
when "tv"
|
17
|
+
"remote"
|
18
|
+
when "remote"
|
19
|
+
"tv"
|
20
|
+
end
|
21
|
+
MultiScreen.channels[opts["channel"]][type].each do |session_id|
|
22
|
+
CometIO.push :__multiscreen__event, data, {:to => session_id}
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
CometIO.on :__multiscreen__options do |opts, from|
|
27
|
+
raise ArgumentError, 'channel is empty' if opts["channel"].empty?
|
28
|
+
raise ArgumentError, 'type must be "tv" or "remote"' unless ["tv","remote"].include? opts["type"]
|
29
|
+
MultiScreen.channels[opts["channel"]][opts["type"]] << from
|
30
|
+
MultiScreen.emit :connect, {:session => from, :channel => opts["channel"], :type => opts["type"]}
|
31
|
+
end
|
32
|
+
|
33
|
+
CometIO.on :disconnect do |session_id|
|
34
|
+
MultiScreen.channels.each do |channel_id, h|
|
35
|
+
["tv", "remote"].each do |type|
|
36
|
+
next unless h[type].include? session_id
|
37
|
+
h[type].delete session_id
|
38
|
+
MultiScreen.emit :disconnect, {:session => session_id, :channel => channel_id, :type => type}
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
5
43
|
helpers do
|
6
44
|
def multi_screen_js
|
7
45
|
"#{env['rack.url_scheme']}://#{env['HTTP_HOST']}#{env['SCRIPT_NAME']}/cometio/multiscreen.js"
|
data/lib/sinatra/multi_screen.rb
CHANGED
@@ -2,7 +2,17 @@ require File.expand_path '../sinatra-multi-screen', File.dirname(__FILE__)
|
|
2
2
|
require 'sinatra/cometio'
|
3
3
|
require File.expand_path 'application', File.dirname(__FILE__)
|
4
4
|
|
5
|
+
class MultiScreen
|
6
|
+
|
7
|
+
def self.channels
|
8
|
+
@@channels ||= Hash.new{|h,channel_id|
|
9
|
+
h[channel_id] = {
|
10
|
+
'tv' => [],
|
11
|
+
'remote' => []
|
12
|
+
}
|
13
|
+
}
|
14
|
+
end
|
5
15
|
|
6
|
-
CometIO.on :__multiscreen__event do |data, from|
|
7
|
-
CometIO.push :__multiscreen__event, data
|
8
16
|
end
|
17
|
+
|
18
|
+
EventEmitter.apply MultiScreen
|
data/lib/sinatra-multi-screen.rb
CHANGED
data/sample/Gemfile.lock
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
backports (2.8.2)
|
5
|
+
daemons (1.1.9)
|
6
|
+
event_emitter (0.2.2)
|
7
|
+
eventmachine (1.0.0)
|
8
|
+
foreman (0.61.0)
|
9
|
+
thor (>= 0.13.6)
|
10
|
+
haml (4.0.0)
|
11
|
+
tilt
|
12
|
+
json (1.7.7)
|
13
|
+
rack (1.5.2)
|
14
|
+
rack-protection (1.3.2)
|
15
|
+
rack
|
16
|
+
rack-test (0.6.2)
|
17
|
+
rack (>= 1.0)
|
18
|
+
sass (3.2.5)
|
19
|
+
sinatra (1.3.4)
|
20
|
+
rack (~> 1.4)
|
21
|
+
rack-protection (~> 1.3)
|
22
|
+
tilt (~> 1.3, >= 1.3.3)
|
23
|
+
sinatra-cometio (0.1.3)
|
24
|
+
event_emitter (>= 0.2.0)
|
25
|
+
eventmachine (>= 1.0.0)
|
26
|
+
json (>= 1.7.0)
|
27
|
+
rack
|
28
|
+
sinatra (>= 1.3.3)
|
29
|
+
sinatra-contrib (>= 1.3.2)
|
30
|
+
sinatra-contrib (1.3.2)
|
31
|
+
backports (>= 2.0)
|
32
|
+
eventmachine
|
33
|
+
rack-protection
|
34
|
+
rack-test
|
35
|
+
sinatra (~> 1.3.0)
|
36
|
+
tilt (~> 1.3)
|
37
|
+
thin (1.5.0)
|
38
|
+
daemons (>= 1.0.9)
|
39
|
+
eventmachine (>= 0.12.6)
|
40
|
+
rack (>= 1.0.0)
|
41
|
+
thor (0.17.0)
|
42
|
+
tilt (1.3.3)
|
43
|
+
youtube_search (0.1.7)
|
44
|
+
|
45
|
+
PLATFORMS
|
46
|
+
ruby
|
47
|
+
|
48
|
+
DEPENDENCIES
|
49
|
+
foreman
|
50
|
+
haml
|
51
|
+
json
|
52
|
+
rack
|
53
|
+
sass
|
54
|
+
sinatra
|
55
|
+
sinatra-cometio
|
56
|
+
sinatra-contrib
|
57
|
+
thin
|
58
|
+
youtube_search
|
data/sample/main.rb
CHANGED
@@ -8,8 +8,14 @@ helpers do
|
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
11
|
-
|
12
|
-
puts "new client
|
11
|
+
MultiScreen.on :connect do |client|
|
12
|
+
puts "new client #{client.inspect}"
|
13
|
+
p MultiScreen.channels
|
14
|
+
end
|
15
|
+
|
16
|
+
MultiScreen.on :disconnect do |client|
|
17
|
+
puts "client disconnect - #{client.inspect}"
|
18
|
+
p MultiScreen.channels
|
13
19
|
end
|
14
20
|
|
15
21
|
before '/*' do
|
@@ -20,11 +26,13 @@ get '/' do
|
|
20
26
|
haml :index
|
21
27
|
end
|
22
28
|
|
23
|
-
get '/tv' do
|
29
|
+
get '/tv/:channel' do
|
30
|
+
@channel = params[:channel]
|
24
31
|
haml :tv
|
25
32
|
end
|
26
33
|
|
27
|
-
get '/remote' do
|
34
|
+
get '/remote/:channel' do
|
35
|
+
@channel = params[:channel]
|
28
36
|
haml :remote
|
29
37
|
end
|
30
38
|
|
data/sample/public/js/remote.js
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
var io = new CometIO().connect();
|
2
|
-
var screen = new MultiScreen(io, {type: "remote"});
|
2
|
+
var screen = new MultiScreen(io, {type: "remote", channel: channel});
|
3
3
|
var tv = screen.tv;
|
4
4
|
|
5
5
|
io.on("connect", function(session){
|
@@ -11,8 +11,9 @@ io.on("connect", function(session){
|
|
11
11
|
tv.$("#btn_search").click();
|
12
12
|
});
|
13
13
|
|
14
|
-
$("#text_search").
|
14
|
+
$("#text_search").keyup(function(e){
|
15
15
|
var word = $("#text_search").val();
|
16
|
+
console.log(word);
|
16
17
|
tv.$("#text_search").val(word);
|
17
18
|
});
|
18
19
|
|
data/sample/public/js/tv.js
CHANGED
data/sample/views/index.haml
CHANGED
data/sample/views/remote.haml
CHANGED
data/sample/views/tv.haml
CHANGED
@@ -1,11 +1,10 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
1
|
lib = File.expand_path('../lib', __FILE__)
|
3
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
3
|
require 'sinatra-multi-screen/version'
|
5
4
|
|
6
5
|
Gem::Specification.new do |gem|
|
7
6
|
gem.name = "sinatra-multi-screen"
|
8
|
-
gem.version =
|
7
|
+
gem.version = SinatraMultiScreen::VERSION
|
9
8
|
gem.authors = ["Sho Hashimoto"]
|
10
9
|
gem.email = ["hashimoto@shokai.org"]
|
11
10
|
gem.description = %q{Sinatra Plugin for Multi-Screen Application.}
|
@@ -17,5 +16,5 @@ Gem::Specification.new do |gem|
|
|
17
16
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
18
17
|
gem.require_paths = ["lib"]
|
19
18
|
gem.add_dependency 'sinatra', '>= 1.3.3'
|
20
|
-
gem.add_dependency 'sinatra-cometio', '>= 0.1.
|
19
|
+
gem.add_dependency 'sinatra-cometio', '>= 0.1.3', '< 0.2.0'
|
21
20
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sinatra-multi-screen
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
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-02-
|
12
|
+
date: 2013-02-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sinatra
|
@@ -34,7 +34,10 @@ dependencies:
|
|
34
34
|
requirements:
|
35
35
|
- - ! '>='
|
36
36
|
- !ruby/object:Gem::Version
|
37
|
-
version: 0.1.
|
37
|
+
version: 0.1.3
|
38
|
+
- - <
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.2.0
|
38
41
|
type: :runtime
|
39
42
|
prerelease: false
|
40
43
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -42,7 +45,10 @@ dependencies:
|
|
42
45
|
requirements:
|
43
46
|
- - ! '>='
|
44
47
|
- !ruby/object:Gem::Version
|
45
|
-
version: 0.1.
|
48
|
+
version: 0.1.3
|
49
|
+
- - <
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
version: 0.2.0
|
46
52
|
description: Sinatra Plugin for Multi-Screen Application.
|
47
53
|
email:
|
48
54
|
- hashimoto@shokai.org
|
@@ -63,6 +69,7 @@ files:
|
|
63
69
|
- lib/sinatra/multi_screen.rb
|
64
70
|
- sample/.gitignore
|
65
71
|
- sample/Gemfile
|
72
|
+
- sample/Gemfile.lock
|
66
73
|
- sample/Procfile
|
67
74
|
- sample/README.md
|
68
75
|
- sample/config.ru
|