network_executive 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.
- 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
|