poms 0.0.10 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +2 -2
- data/Guardfile +4 -4
- data/Rakefile +6 -6
- data/lib/poms.rb +65 -44
- data/lib/poms/base.rb +1 -0
- data/lib/poms/broadcast.rb +7 -6
- data/lib/poms/builder.rb +36 -29
- data/lib/poms/builderless/broadcast.rb +2 -1
- data/lib/poms/builderless/clip.rb +1 -1
- data/lib/poms/connect.rb +5 -7
- data/lib/poms/has_ancestors.rb +20 -8
- data/lib/poms/has_base_attributes.rb +11 -2
- data/lib/poms/merged_series.rb +27 -0
- data/lib/poms/poms_error.rb +5 -0
- data/lib/poms/schedule_event.rb +7 -9
- data/lib/poms/season.rb +2 -2
- data/lib/poms/series.rb +4 -4
- data/lib/poms/version.rb +2 -1
- data/lib/poms/views.rb +6 -2
- data/poms.gemspec +21 -20
- data/spec/fabricators/poms_fabricator.rb +8 -3
- data/spec/fixtures/vcr_cassettes/poms/merged_series/is_enumerable.yml +46 -0
- data/spec/fixtures/vcr_cassettes/poms/merged_series/turns_the_json_into_a_hash.yml +46 -0
- data/spec/integration/poms_spec.rb +1 -2
- data/spec/lib/poms/broadcast_spec.rb +11 -6
- data/spec/lib/poms/builder_spec.rb +36 -2
- data/spec/lib/poms/merged_series_spec.rb +28 -0
- data/spec/lib/poms/schedule_event_spec.rb +3 -3
- data/spec/lib/poms/views_spec.rb +6 -6
- data/spec/lib/poms_spec.rb +35 -32
- data/spec/spec_helper.rb +4 -2
- metadata +10 -2
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Poms::Builder do
|
4
|
-
|
5
4
|
let(:poms_broadcast) { Fabricate(:poms_broadcast) }
|
6
5
|
|
7
6
|
it 'correctly sets the class of a POMS broadcast hash' do
|
@@ -13,7 +12,42 @@ describe Poms::Builder do
|
|
13
12
|
end
|
14
13
|
|
15
14
|
it 'correctly converts start times to Time-object' do
|
16
|
-
expect(poms_broadcast.schedule_events.first.start)
|
15
|
+
expect(poms_broadcast.schedule_events.first.start)
|
16
|
+
.to eq(Time.parse '2013-05-28 18:08:55 +0200')
|
17
|
+
end
|
18
|
+
|
19
|
+
describe '.pomsify_class_name' do
|
20
|
+
it 'returns "Typeless" for nothing' do
|
21
|
+
expect(described_class.pomsify_class_name(''))
|
22
|
+
.to eq('Typeless')
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'returns a supported class' do
|
26
|
+
expect(described_class.pomsify_class_name('Broadcast'))
|
27
|
+
.to eq('Broadcast')
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'preprends Poms to an unsupported class' do
|
31
|
+
expect(described_class.pomsify_class_name('Other'))
|
32
|
+
.to eq('PomsOther')
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'capitalizes' do
|
36
|
+
expect(described_class.pomsify_class_name('broadcast'))
|
37
|
+
.to eq('Broadcast')
|
38
|
+
end
|
17
39
|
end
|
18
40
|
|
41
|
+
describe '.poms_class' do
|
42
|
+
it 'gets the Poms class if it exists' do
|
43
|
+
expect(described_class.poms_class('Broadcast'))
|
44
|
+
.to eq(Poms::Broadcast)
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'sets a NestedOpenStruct if it does not exist' do
|
48
|
+
poms_other = described_class.poms_class('PomsOther')
|
49
|
+
expect(poms_other).to eq(Poms::PomsOther)
|
50
|
+
expect(poms_other.ancestors).to include(Poms::Builder::NestedOpenStruct)
|
51
|
+
end
|
52
|
+
end
|
19
53
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Poms::MergedSeries do
|
4
|
+
let(:url) { described_class::API_URL }
|
5
|
+
|
6
|
+
it 'turns the json into a hash' do
|
7
|
+
mids = subject.serie_mids
|
8
|
+
expect(mids.keys).to include('POMS_S_EO_097367')
|
9
|
+
expect(mids.values).to include('VPWON_1257896')
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'throws an error on a network error' do
|
13
|
+
FakeWeb.register_uri(:get, url, body:
|
14
|
+
'', status: 500)
|
15
|
+
expect { subject.serie_mids }.to raise_error(Poms::PomsError)
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'throws an error on invalid json' do
|
19
|
+
FakeWeb.register_uri(:get, url, body:
|
20
|
+
'Test')
|
21
|
+
expect { subject.serie_mids }.to raise_error(Poms::PomsError)
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'throws an error on timeout' do
|
25
|
+
allow(Timeout).to receive(:timeout).and_raise(Timeout::Error)
|
26
|
+
expect { subject.serie_mids }.to raise_error(Poms::PomsError)
|
27
|
+
end
|
28
|
+
end
|
@@ -2,14 +2,14 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Poms::ScheduleEvent do
|
4
4
|
let(:poms_broadcast) { Fabricate(:poms_broadcast) }
|
5
|
-
let(:schedule_event) {poms_broadcast.schedule_events.first}
|
5
|
+
let(:schedule_event) { poms_broadcast.schedule_events.first }
|
6
6
|
|
7
7
|
it 'sets the start time' do
|
8
|
-
expect(schedule_event.starts_at)
|
8
|
+
expect(schedule_event.starts_at)
|
9
|
+
.to eq(Time.parse '2013-05-28 18:08:55 +0200')
|
9
10
|
end
|
10
11
|
|
11
12
|
it 'knows the end time' do
|
12
13
|
expect(schedule_event.ends_at).to eq(Time.parse '2013-05-28 18:26:24 +0200')
|
13
14
|
end
|
14
|
-
|
15
15
|
end
|
data/spec/lib/poms/views_spec.rb
CHANGED
@@ -1,19 +1,19 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Poms::Views do
|
4
|
-
describe
|
5
|
-
let(:response)
|
4
|
+
describe '#get' do
|
5
|
+
let(:response) { File.read 'spec/fixtures/poms_broadcast.json' }
|
6
6
|
|
7
7
|
it 'returns a metadata object' do
|
8
|
-
FakeWeb.register_uri(:get,
|
8
|
+
FakeWeb.register_uri(:get, 'http://docs.poms.omroep.nl/media/KRO_1614405',
|
9
|
+
body: response)
|
9
10
|
expect(subject.get('KRO_1614405')).to eq(JSON.parse response)
|
10
11
|
end
|
11
12
|
end
|
12
13
|
|
13
|
-
describe
|
14
|
-
|
14
|
+
describe '#by_group' do
|
15
15
|
it 'returns the correct group url' do
|
16
|
-
expect(subject.by_group('POMS_S_NPO_823012')).to eq(
|
16
|
+
expect(subject.by_group('POMS_S_NPO_823012')).to eq('http://docs.poms.omroep.nl/media/_design/media/_view/by-group?include_docs=true&key=%22POMS_S_NPO_823012%22&reduce=false')
|
17
17
|
end
|
18
18
|
end
|
19
19
|
end
|
data/spec/lib/poms_spec.rb
CHANGED
@@ -2,25 +2,24 @@ require 'timecop'
|
|
2
2
|
require 'spec_helper'
|
3
3
|
|
4
4
|
describe Poms do
|
5
|
-
|
6
5
|
describe '#fetch' do
|
7
|
-
|
8
6
|
let(:response) { File.read 'spec/fixtures/poms_broadcast.json' }
|
9
7
|
|
10
8
|
before do
|
11
|
-
FakeWeb.register_uri(:get,
|
9
|
+
FakeWeb.register_uri(:get, 'http://docs.poms.omroep.nl/media/KRO_1614405',
|
10
|
+
body: response)
|
12
11
|
end
|
13
12
|
|
14
|
-
it
|
15
|
-
|
13
|
+
it 'fetches a broadcast' do
|
14
|
+
expect(Poms.fetch_raw_json('KRO_1614405')).to eq(JSON.parse response)
|
16
15
|
end
|
17
16
|
|
18
|
-
it
|
17
|
+
it 'fetches a broadcast and parses it correctly' do
|
19
18
|
expect(Poms::Builder).to receive(:process_hash).with(JSON.parse response)
|
20
19
|
Poms.fetch('KRO_1614405')
|
21
20
|
end
|
22
21
|
|
23
|
-
it
|
22
|
+
it 'fetches a group' do
|
24
23
|
response = File.read 'spec/fixtures/poms_broadcast.json'
|
25
24
|
url = 'http://docs.poms.omroep.nl/media/_design/media/_view/by-group?include_docs=true&key=%22POMS_S_NPO_823012%22&reduce=false'
|
26
25
|
FakeWeb.register_uri(:get, url, body: response)
|
@@ -28,7 +27,8 @@ describe Poms do
|
|
28
27
|
end
|
29
28
|
|
30
29
|
it 'returns nil when a broadcast does not exits' do
|
31
|
-
FakeWeb.register_uri(:get,
|
30
|
+
FakeWeb.register_uri(:get, 'http://docs.poms.omroep.nl/media/BLA',
|
31
|
+
status: [404, 'Not Found'])
|
32
32
|
expect(Poms.fetch('BLA')).to eq(nil)
|
33
33
|
end
|
34
34
|
end
|
@@ -41,33 +41,35 @@ describe Poms do
|
|
41
41
|
|
42
42
|
describe '#fetch_broadcasts_for_serie' do
|
43
43
|
it 'returns nil when a broadcast does not exist' do
|
44
|
-
FakeWeb.register_uri(:get,
|
44
|
+
FakeWeb.register_uri(:get, 'http://docs.poms.omroep.nl/media/_design/media/_view/by-ancestor-and-type?reduce=false&key=[%22BLA%22,%22BROADCAST%22]&include_docs=true',
|
45
|
+
status: [404, 'Not Found'])
|
45
46
|
expect(Poms.fetch_broadcasts_for_serie('BLA')).to eq([])
|
46
47
|
end
|
47
48
|
end
|
48
49
|
|
49
|
-
|
50
50
|
describe '#upcoming_broadcasts' do
|
51
51
|
let(:response) { File.read 'spec/fixtures/poms_zapp.json' }
|
52
52
|
let(:start_time) { Time.parse '2013-05-28 17:32:10 +0200' }
|
53
53
|
let(:end_time) { Time.parse '2013-06-11 17:32:50 +0200' }
|
54
54
|
|
55
55
|
before do
|
56
|
-
path =
|
57
|
-
FakeWeb.register_uri(:get, path, :
|
56
|
+
path = 'http://docs.poms.omroep.nl/media/_design/media/_view/broadcasts-by-broadcaster-and-start?startkey=[%22Zapp%22,1369755130000]&endkey=[%22Zapp%22,1370964770000]&reduce=false&include_docs=true'
|
57
|
+
FakeWeb.register_uri(:get, path, body: response)
|
58
58
|
end
|
59
59
|
|
60
|
-
it
|
60
|
+
it 'fetches all broadcast by zapp and parses it correctly' do
|
61
61
|
expect(Poms::Builder).to receive(:process_hash).exactly(136).times
|
62
62
|
Poms.upcoming_broadcasts('zapp', start_time, end_time)
|
63
63
|
end
|
64
64
|
end
|
65
65
|
|
66
66
|
describe 'fetch broadcasts' do
|
67
|
-
let(:response)
|
67
|
+
let(:response) do
|
68
|
+
File.read 'spec/fixtures/poms_single_broadcast_by_channel.json'
|
69
|
+
end
|
68
70
|
|
69
71
|
before do
|
70
|
-
Timecop.freeze(DateTime.strptime(
|
72
|
+
Timecop.freeze(DateTime.strptime('1410969127', '%s'))
|
71
73
|
end
|
72
74
|
|
73
75
|
after do
|
@@ -76,11 +78,11 @@ describe Poms do
|
|
76
78
|
|
77
79
|
describe '#fetch_current_broadcast' do
|
78
80
|
before do
|
79
|
-
path =
|
80
|
-
FakeWeb.register_uri(:get, path, :
|
81
|
+
path = 'http://docs.poms.omroep.nl/media/_design/media/_view/broadcasts-by-channel-and-start?startkey=[%22NED3%22,1410969127000]&endkey=[%22NED3%22,1410882727000]&reduce=false&include_docs=true&descending=true&limit=1'
|
82
|
+
FakeWeb.register_uri(:get, path, body: response)
|
81
83
|
end
|
82
84
|
|
83
|
-
it
|
85
|
+
it 'fetches the current broadcast' do
|
84
86
|
expect(Poms::Builder).to receive(:process_hash).exactly(0).times
|
85
87
|
Poms.fetch_current_broadcast('NED3')
|
86
88
|
end
|
@@ -88,27 +90,28 @@ describe Poms do
|
|
88
90
|
|
89
91
|
describe '#fetch_current_broadcast_and_key' do
|
90
92
|
before do
|
91
|
-
path =
|
92
|
-
FakeWeb.register_uri(:get, path, :
|
93
|
+
path = 'http://docs.poms.omroep.nl/media/_design/media/_view/broadcasts-by-channel-and-start?startkey=[%22NED3%22,1410969127000]&endkey=[%22NED3%22,1410882727000]&reduce=false&include_docs=true&descending=true&limit=1'
|
94
|
+
FakeWeb.register_uri(:get, path, body: response)
|
93
95
|
end
|
94
96
|
|
95
|
-
it
|
97
|
+
it 'fetches the current broadcast' do
|
96
98
|
expect(Poms::Builder).to receive(:process_hash).exactly(1).times
|
97
99
|
Poms.fetch_current_broadcast_and_key('NED3')
|
98
100
|
end
|
99
101
|
|
100
|
-
it
|
101
|
-
expect(Poms.fetch_current_broadcast_and_key('NED3')[:key])
|
102
|
+
it 'returns the key' do
|
103
|
+
expect(Poms.fetch_current_broadcast_and_key('NED3')[:key])
|
104
|
+
.to eq(['NED3', 1_410_966_671_000])
|
102
105
|
end
|
103
106
|
end
|
104
107
|
|
105
108
|
describe '#fetch_next_broadcast' do
|
106
109
|
before do
|
107
|
-
path =
|
108
|
-
FakeWeb.register_uri(:get, path, :
|
110
|
+
path = 'http://docs.poms.omroep.nl/media/_design/media/_view/broadcasts-by-channel-and-start?startkey=[%22NED3%22,1410969127000]&endkey=[%22NED3%22,1411055527000]&reduce=false&include_docs=true&limit=1'
|
111
|
+
FakeWeb.register_uri(:get, path, body: response)
|
109
112
|
end
|
110
113
|
|
111
|
-
it
|
114
|
+
it 'fetches the next broadcast' do
|
112
115
|
expect(Poms::Builder).to receive(:process_hash).exactly(1).times
|
113
116
|
Poms.fetch_next_broadcast('NED3')
|
114
117
|
end
|
@@ -116,19 +119,19 @@ describe Poms do
|
|
116
119
|
|
117
120
|
describe '#fetch_next_broadcast_and_key' do
|
118
121
|
before do
|
119
|
-
path =
|
120
|
-
FakeWeb.register_uri(:get, path, :
|
122
|
+
path = 'http://docs.poms.omroep.nl/media/_design/media/_view/broadcasts-by-channel-and-start?startkey=[%22NED3%22,1410969127000]&endkey=[%22NED3%22,1411055527000]&reduce=false&include_docs=true&descending=true&limit=1'
|
123
|
+
FakeWeb.register_uri(:get, path, body: response)
|
121
124
|
end
|
122
125
|
|
123
|
-
it
|
126
|
+
it 'fetches the current broadcast' do
|
124
127
|
expect(Poms::Builder).to receive(:process_hash).exactly(1).times
|
125
128
|
Poms.fetch_next_broadcast_and_key('NED3')
|
126
129
|
end
|
127
130
|
|
128
|
-
it
|
129
|
-
expect(Poms.fetch_next_broadcast_and_key('NED3')[:key])
|
131
|
+
it 'returns the key' do
|
132
|
+
expect(Poms.fetch_next_broadcast_and_key('NED3')[:key])
|
133
|
+
.to eq(['NED3', 1_410_966_671_000])
|
130
134
|
end
|
131
135
|
end
|
132
136
|
end
|
133
|
-
|
134
137
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -9,7 +9,7 @@ require 'poms' # and any other gems you need
|
|
9
9
|
FakeWeb.allow_net_connect = false
|
10
10
|
|
11
11
|
VCR.configure do |config|
|
12
|
-
config.cassette_library_dir =
|
12
|
+
config.cassette_library_dir = 'spec/fixtures/vcr_cassettes'
|
13
13
|
config.hook_into :fakeweb
|
14
14
|
end
|
15
15
|
|
@@ -19,7 +19,9 @@ RSpec.configure do |config|
|
|
19
19
|
if options[:record] == :skip
|
20
20
|
VCR.turned_off(&example)
|
21
21
|
else
|
22
|
-
name = example.metadata[:full_description]
|
22
|
+
name = example.metadata[:full_description]
|
23
|
+
.split(/\s+/, 2).join('/')
|
24
|
+
.underscore.gsub(%r{[^\w\/]+}, '_')
|
23
25
|
VCR.use_cassette(name, options, &example)
|
24
26
|
end
|
25
27
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: poms
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tom Kruijsen
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2016-01-11 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: bundler
|
@@ -191,6 +191,8 @@ files:
|
|
191
191
|
- lib/poms/fields.rb
|
192
192
|
- lib/poms/has_ancestors.rb
|
193
193
|
- lib/poms/has_base_attributes.rb
|
194
|
+
- lib/poms/merged_series.rb
|
195
|
+
- lib/poms/poms_error.rb
|
194
196
|
- lib/poms/schedule_event.rb
|
195
197
|
- lib/poms/season.rb
|
196
198
|
- lib/poms/series.rb
|
@@ -210,6 +212,8 @@ files:
|
|
210
212
|
- spec/fixtures/vcr_cassettes/poms/builderless/clip/has_a_video_url.yml
|
211
213
|
- spec/fixtures/vcr_cassettes/poms/builderless/clip/has_an_image_id.yml
|
212
214
|
- spec/fixtures/vcr_cassettes/poms/fetch_broadcasts_fetch_current_broadcast_fetches_the_current_broadcast.yml
|
215
|
+
- spec/fixtures/vcr_cassettes/poms/merged_series/is_enumerable.yml
|
216
|
+
- spec/fixtures/vcr_cassettes/poms/merged_series/turns_the_json_into_a_hash.yml
|
213
217
|
- spec/fixtures/vcr_cassettes/poms_fetch/a_broadcast_has_scheduled_events_with_last_with_starts_at.yml
|
214
218
|
- spec/fixtures/vcr_cassettes/poms_fetch/a_clip_has_a_title.yml
|
215
219
|
- spec/fixtures/vcr_cassettes/poms_fetch/an_aankeiler_has_images.yml
|
@@ -225,6 +229,7 @@ files:
|
|
225
229
|
- spec/lib/poms/broadcast_spec.rb
|
226
230
|
- spec/lib/poms/builder_spec.rb
|
227
231
|
- spec/lib/poms/builderless/clip_spec.rb
|
232
|
+
- spec/lib/poms/merged_series_spec.rb
|
228
233
|
- spec/lib/poms/schedule_event_spec.rb
|
229
234
|
- spec/lib/poms/views_spec.rb
|
230
235
|
- spec/lib/poms_spec.rb
|
@@ -267,6 +272,8 @@ test_files:
|
|
267
272
|
- spec/fixtures/vcr_cassettes/poms/builderless/clip/has_a_video_url.yml
|
268
273
|
- spec/fixtures/vcr_cassettes/poms/builderless/clip/has_an_image_id.yml
|
269
274
|
- spec/fixtures/vcr_cassettes/poms/fetch_broadcasts_fetch_current_broadcast_fetches_the_current_broadcast.yml
|
275
|
+
- spec/fixtures/vcr_cassettes/poms/merged_series/is_enumerable.yml
|
276
|
+
- spec/fixtures/vcr_cassettes/poms/merged_series/turns_the_json_into_a_hash.yml
|
270
277
|
- spec/fixtures/vcr_cassettes/poms_fetch/a_broadcast_has_scheduled_events_with_last_with_starts_at.yml
|
271
278
|
- spec/fixtures/vcr_cassettes/poms_fetch/a_clip_has_a_title.yml
|
272
279
|
- spec/fixtures/vcr_cassettes/poms_fetch/an_aankeiler_has_images.yml
|
@@ -282,6 +289,7 @@ test_files:
|
|
282
289
|
- spec/lib/poms/broadcast_spec.rb
|
283
290
|
- spec/lib/poms/builder_spec.rb
|
284
291
|
- spec/lib/poms/builderless/clip_spec.rb
|
292
|
+
- spec/lib/poms/merged_series_spec.rb
|
285
293
|
- spec/lib/poms/schedule_event_spec.rb
|
286
294
|
- spec/lib/poms/views_spec.rb
|
287
295
|
- spec/lib/poms_spec.rb
|