network_executive 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/app/assets/javascripts/network_executive/osd.js +17 -1
- data/app/assets/javascripts/network_executive/set_top_box.js +1 -1
- data/app/assets/stylesheets/network_executive/osd.css +29 -0
- data/app/controllers/network_executive/lineup_controller.rb +11 -0
- data/app/controllers/network_executive/network_controller.rb +0 -5
- data/app/models/network_executive/lineup.rb +13 -5
- data/app/views/network_executive/lineup/index.html.erb +26 -0
- data/app/views/network_executive/network/index.html.erb +2 -5
- data/config/routes.rb +3 -1
- data/lib/network_executive/version.rb +1 -1
- data/network_executive.gemspec +2 -1
- data/spec/models/lineup_spec.rb +2 -8
- metadata +33 -20
@@ -13,13 +13,29 @@
|
|
13
13
|
document.addEventListener('mousemove', function(e) {
|
14
14
|
clearTimeout( autoHideTimer );
|
15
15
|
|
16
|
-
if( !osd.contains('active') ) {
|
16
|
+
if( !osd.classList.contains('active') ) {
|
17
17
|
osd.classList.add('active');
|
18
|
+
|
19
|
+
renderGuide();
|
18
20
|
}
|
19
21
|
|
20
22
|
autoHideTimer = setTimeout(autoHide, 1000);
|
21
23
|
});
|
22
24
|
|
25
|
+
// Fetch and display Guide Data
|
26
|
+
function renderGuide() {
|
27
|
+
var xhr = new XMLHttpRequest();
|
28
|
+
|
29
|
+
xhr.addEventListener('readystatechange', function(e) {
|
30
|
+
if( xhr.readyState == 4 && xhr.status == 200) {
|
31
|
+
document.getElementById('lineup').innerHTML = xhr.responseText;
|
32
|
+
}
|
33
|
+
});
|
34
|
+
|
35
|
+
xhr.open('GET', 'lineup.html', true);
|
36
|
+
xhr.send();
|
37
|
+
}
|
38
|
+
|
23
39
|
// Update the timestamp
|
24
40
|
var months = 'January February March April May June July August September October November December'.split(' ');
|
25
41
|
setInterval(function() {
|
@@ -8,7 +8,7 @@
|
|
8
8
|
|
9
9
|
document.getElementById('smpte_message').innerHTML = 'Establishing uplink...';
|
10
10
|
|
11
|
-
var source = new EventSource('
|
11
|
+
var source = new EventSource('tune_in/' + channel);
|
12
12
|
|
13
13
|
source.addEventListener('open', function(e) {
|
14
14
|
document.getElementById('smpte_message').innerHTML = 'Awaiting transmission...';
|
@@ -30,4 +30,33 @@
|
|
30
30
|
}
|
31
31
|
.osd-now-date {
|
32
32
|
display: block;
|
33
|
+
}
|
34
|
+
|
35
|
+
#osd table {
|
36
|
+
width: 100%;
|
37
|
+
border-spacing: .25em;
|
38
|
+
border-collapse: separate;
|
39
|
+
font-size: 1.5em;
|
40
|
+
}
|
41
|
+
#osd td,
|
42
|
+
#osd th {
|
43
|
+
height: 1em;
|
44
|
+
padding: 0 .25em;
|
45
|
+
overflow: hidden;
|
46
|
+
text-overflow: ellipsis;
|
47
|
+
white-space: nowrap;
|
48
|
+
}
|
49
|
+
.guide-time {
|
50
|
+
text-align: left;
|
51
|
+
}
|
52
|
+
.guide-channel {
|
53
|
+
text-align: right;
|
54
|
+
text-transform: capitalize;
|
55
|
+
}
|
56
|
+
.guide-program {
|
57
|
+
background: rgba(0,0,0,.33);
|
58
|
+
}
|
59
|
+
#osd a {
|
60
|
+
color: #fff;
|
61
|
+
text-decoration: none;
|
33
62
|
}
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# Represents a channel's programming line up for a given time span.
|
2
2
|
module NetworkExecutive
|
3
3
|
# TODO: Why does this subclass Hash?
|
4
|
+
# TODO: This is an ugly data structure. Refactor.
|
4
5
|
class Lineup < Hash
|
5
6
|
|
6
7
|
Interval = 15 # In minutes.
|
@@ -16,10 +17,8 @@ module NetworkExecutive
|
|
16
17
|
def generate
|
17
18
|
with_each_channel do |channel, lineup|
|
18
19
|
lineup << {
|
19
|
-
|
20
|
-
schedule: whats_on?( channel )
|
21
|
-
show.program_name.titleize
|
22
|
-
end
|
20
|
+
channel: channel,
|
21
|
+
schedule: whats_on?( channel )
|
23
22
|
}
|
24
23
|
end
|
25
24
|
end
|
@@ -40,6 +39,11 @@ module NetworkExecutive
|
|
40
39
|
@stop_time
|
41
40
|
end
|
42
41
|
|
42
|
+
# TODO: Add test
|
43
|
+
def times
|
44
|
+
self[:channels].first[:schedule].collect { |s| s[:time] }
|
45
|
+
end
|
46
|
+
|
43
47
|
private
|
44
48
|
|
45
49
|
# Rounds the specific time to the nearest interval
|
@@ -59,7 +63,11 @@ module NetworkExecutive
|
|
59
63
|
# TODO: Decouple
|
60
64
|
def whats_on?( channel )
|
61
65
|
channel.whats_on?( start_time, stop_time, interval:Interval ) do |show|
|
62
|
-
|
66
|
+
if block_given?
|
67
|
+
yield show
|
68
|
+
else
|
69
|
+
show
|
70
|
+
end
|
63
71
|
end
|
64
72
|
end
|
65
73
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
<table>
|
2
|
+
<thead>
|
3
|
+
<tr>
|
4
|
+
<td></td>
|
5
|
+
<% @lineup.times.each do |t| %>
|
6
|
+
<th class="guide-time">
|
7
|
+
<%= t.strftime '%l:%M' %>
|
8
|
+
</th>
|
9
|
+
<% end %>
|
10
|
+
</tr>
|
11
|
+
</thead>
|
12
|
+
<tbody>
|
13
|
+
<% @lineup[:channels].each do |ch| %>
|
14
|
+
<tr>
|
15
|
+
<th class="guide-channel">
|
16
|
+
<%= link_to ch[:channel], channel_path(ch[:channel]) %>
|
17
|
+
</th>
|
18
|
+
<% ch[:schedule].each do |sch| %>
|
19
|
+
<td class="guide-program">
|
20
|
+
<%= sch[:program].program_name.titleize %>
|
21
|
+
</td>
|
22
|
+
<% end %>
|
23
|
+
</tr>
|
24
|
+
<% end %>
|
25
|
+
</tbody>
|
26
|
+
</table>
|
@@ -6,6 +6,7 @@
|
|
6
6
|
<title>Network Executive: <%= network_name %></title>
|
7
7
|
<link href='//fonts.googleapis.com/css?family=Lekton:400,700|Quicksand:300,400,700' rel='stylesheet' type='text/css'>
|
8
8
|
<%= stylesheet_link_tag 'network_executive/application', media:'all' %>
|
9
|
+
<base href="<%= network_executive.root_url %>"/>
|
9
10
|
</head>
|
10
11
|
<body>
|
11
12
|
<iframe id="program" class="gui-comp"></iframe>
|
@@ -27,11 +28,7 @@
|
|
27
28
|
</aside>
|
28
29
|
</h1>
|
29
30
|
</header>
|
30
|
-
<article>
|
31
|
-
<% @channels.each do |channel| %>
|
32
|
-
<a href="channels/<%= channel.name %>" class="channel"><%= channel.display_name %></a>
|
33
|
-
<% end %>
|
34
|
-
</article>
|
31
|
+
<article id="lineup"></article>
|
35
32
|
</div>
|
36
33
|
|
37
34
|
<%= javascript_include_tag 'application' %>
|
data/config/routes.rb
CHANGED
@@ -1,7 +1,9 @@
|
|
1
1
|
NetworkExecutive::Engine.routes.draw do
|
2
2
|
mount NetworkExecutive::Station => '/tune_in', as:'station'
|
3
3
|
|
4
|
-
match 'channels/:channel_name' => 'network#index'
|
4
|
+
match 'channels/:channel_name' => 'network#index', as: :channel
|
5
|
+
|
6
|
+
match 'lineup' => 'lineup#index', as: :lineup
|
5
7
|
|
6
8
|
root to:'network#index'
|
7
9
|
end
|
data/network_executive.gemspec
CHANGED
@@ -20,7 +20,8 @@ Gem::Specification.new do |gem|
|
|
20
20
|
gem.add_dependency 'activesupport', '~> 3.2.0'
|
21
21
|
gem.add_dependency 'faye-websocket', '~> 0.4.6'
|
22
22
|
|
23
|
-
gem.add_runtime_dependency 'sass-rails'
|
23
|
+
gem.add_runtime_dependency 'sass-rails'
|
24
|
+
gem.add_runtime_dependency 'uglifier'
|
24
25
|
|
25
26
|
gem.add_development_dependency 'awesome_print'
|
26
27
|
gem.add_development_dependency 'rails', '~> 3.2.8'
|
data/spec/models/lineup_spec.rb
CHANGED
@@ -69,20 +69,14 @@ describe NetworkExecutive::Lineup do
|
|
69
69
|
|
70
70
|
it { should be_an Array }
|
71
71
|
|
72
|
-
it 'should contain a channel
|
73
|
-
subject.first[:
|
72
|
+
it 'should contain a channel' do
|
73
|
+
subject.first[:channel].should == channel
|
74
74
|
end
|
75
75
|
|
76
76
|
it 'should contain an array of scheduled programs' do
|
77
77
|
subject.first[:schedule].should be_an Array
|
78
78
|
end
|
79
79
|
|
80
|
-
it 'should transform the program name' do
|
81
|
-
show.should_receive :program_name
|
82
|
-
|
83
|
-
subject
|
84
|
-
end
|
85
|
-
|
86
80
|
it 'should ask the channel what is on' do
|
87
81
|
args = [ Time.now, 1.5.hours.from_now, kind_of(Hash) ]
|
88
82
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: network_executive
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2012-09-27 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
16
|
-
requirement: &
|
16
|
+
requirement: &2164741200 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 3.2.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2164741200
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: faye-websocket
|
27
|
-
requirement: &
|
27
|
+
requirement: &2164740660 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,21 +32,32 @@ dependencies:
|
|
32
32
|
version: 0.4.6
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2164740660
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: sass-rails
|
38
|
-
requirement: &
|
38
|
+
requirement: &2164740240 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
|
-
- -
|
41
|
+
- - ! '>='
|
42
42
|
- !ruby/object:Gem::Version
|
43
|
-
version: '
|
43
|
+
version: '0'
|
44
|
+
type: :runtime
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *2164740240
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: uglifier
|
49
|
+
requirement: &2164739680 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
44
55
|
type: :runtime
|
45
56
|
prerelease: false
|
46
|
-
version_requirements: *
|
57
|
+
version_requirements: *2164739680
|
47
58
|
- !ruby/object:Gem::Dependency
|
48
59
|
name: awesome_print
|
49
|
-
requirement: &
|
60
|
+
requirement: &2164739000 !ruby/object:Gem::Requirement
|
50
61
|
none: false
|
51
62
|
requirements:
|
52
63
|
- - ! '>='
|
@@ -54,10 +65,10 @@ dependencies:
|
|
54
65
|
version: '0'
|
55
66
|
type: :development
|
56
67
|
prerelease: false
|
57
|
-
version_requirements: *
|
68
|
+
version_requirements: *2164739000
|
58
69
|
- !ruby/object:Gem::Dependency
|
59
70
|
name: rails
|
60
|
-
requirement: &
|
71
|
+
requirement: &2164737960 !ruby/object:Gem::Requirement
|
61
72
|
none: false
|
62
73
|
requirements:
|
63
74
|
- - ~>
|
@@ -65,10 +76,10 @@ dependencies:
|
|
65
76
|
version: 3.2.8
|
66
77
|
type: :development
|
67
78
|
prerelease: false
|
68
|
-
version_requirements: *
|
79
|
+
version_requirements: *2164737960
|
69
80
|
- !ruby/object:Gem::Dependency
|
70
81
|
name: rspec-rails
|
71
|
-
requirement: &
|
82
|
+
requirement: &2164736120 !ruby/object:Gem::Requirement
|
72
83
|
none: false
|
73
84
|
requirements:
|
74
85
|
- - ~>
|
@@ -76,10 +87,10 @@ dependencies:
|
|
76
87
|
version: '2.11'
|
77
88
|
type: :development
|
78
89
|
prerelease: false
|
79
|
-
version_requirements: *
|
90
|
+
version_requirements: *2164736120
|
80
91
|
- !ruby/object:Gem::Dependency
|
81
92
|
name: fakefs
|
82
|
-
requirement: &
|
93
|
+
requirement: &2164734300 !ruby/object:Gem::Requirement
|
83
94
|
none: false
|
84
95
|
requirements:
|
85
96
|
- - ~>
|
@@ -87,10 +98,10 @@ dependencies:
|
|
87
98
|
version: 0.4.0
|
88
99
|
type: :development
|
89
100
|
prerelease: false
|
90
|
-
version_requirements: *
|
101
|
+
version_requirements: *2164734300
|
91
102
|
- !ruby/object:Gem::Dependency
|
92
103
|
name: timecop
|
93
|
-
requirement: &
|
104
|
+
requirement: &2164749660 !ruby/object:Gem::Requirement
|
94
105
|
none: false
|
95
106
|
requirements:
|
96
107
|
- - ~>
|
@@ -98,7 +109,7 @@ dependencies:
|
|
98
109
|
version: 0.4.5
|
99
110
|
type: :development
|
100
111
|
prerelease: false
|
101
|
-
version_requirements: *
|
112
|
+
version_requirements: *2164749660
|
102
113
|
description: An experimental application used to drive displays hung around an office.
|
103
114
|
email:
|
104
115
|
- dlindahl@customink.com
|
@@ -123,6 +134,7 @@ files:
|
|
123
134
|
- app/assets/stylesheets/network_executive/osd.css
|
124
135
|
- app/assets/stylesheets/network_executive/smpte.css
|
125
136
|
- app/controllers/network_executive/application_controller.rb
|
137
|
+
- app/controllers/network_executive/lineup_controller.rb
|
126
138
|
- app/controllers/network_executive/network_controller.rb
|
127
139
|
- app/helpers/network_executive/network_helper.rb
|
128
140
|
- app/models/network_executive/channel.rb
|
@@ -133,6 +145,7 @@ files:
|
|
133
145
|
- app/models/network_executive/program.rb
|
134
146
|
- app/models/network_executive/program_schedule.rb
|
135
147
|
- app/models/network_executive/viewer.rb
|
148
|
+
- app/views/network_executive/lineup/index.html.erb
|
136
149
|
- app/views/network_executive/network/index.html.erb
|
137
150
|
- bin/net_exec
|
138
151
|
- config/routes.rb
|
@@ -218,7 +231,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
218
231
|
version: '0'
|
219
232
|
segments:
|
220
233
|
- 0
|
221
|
-
hash:
|
234
|
+
hash: 240315876043303011
|
222
235
|
requirements: []
|
223
236
|
rubyforge_project:
|
224
237
|
rubygems_version: 1.8.10
|