odeon_uk 3.0.6 → 4.0.0

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.
Files changed (119) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +5 -3
  3. data/CHANGELOG.md +14 -0
  4. data/{LICENSE.txt → COMM-LICENSE} +0 -0
  5. data/LICENSE +617 -0
  6. data/README.md +58 -29
  7. data/Rakefile +7 -21
  8. data/lib/odeon_uk.rb +5 -14
  9. data/lib/odeon_uk/cinema.rb +123 -75
  10. data/lib/odeon_uk/{api/response.rb → internal/api_response.rb} +3 -3
  11. data/lib/odeon_uk/internal/parser/api/film_lookup.rb +34 -0
  12. data/lib/odeon_uk/internal/parser/api/performance_day.rb +92 -0
  13. data/lib/odeon_uk/internal/title_sanitizer.rb +34 -39
  14. data/lib/odeon_uk/performance.rb +87 -0
  15. data/lib/odeon_uk/version.rb +2 -2
  16. data/odeon_uk.gemspec +19 -21
  17. data/rake/fixture_creator.rb +5 -57
  18. data/test/fixtures/api/all_cinemas.plist +0 -0
  19. data/test/fixtures/api/app_init.plist +0 -0
  20. data/test/fixtures/api/film_times/71-14876.plist +0 -0
  21. data/test/fixtures/api/film_times/71-15408.plist +0 -0
  22. data/test/fixtures/api/film_times/71-15684.plist +0 -0
  23. data/test/fixtures/api/film_times/71-15866.plist +0 -0
  24. data/test/fixtures/api/film_times/71-15868.plist +0 -0
  25. data/test/fixtures/api/film_times/71-15961.plist +0 -0
  26. data/test/fixtures/api/film_times/71-15963.plist +0 -0
  27. data/test/fixtures/api/film_times/71-15965.plist +0 -0
  28. data/test/fixtures/api/film_times/71-15967.plist +0 -0
  29. data/test/fixtures/api/film_times/71-15969.plist +0 -0
  30. data/test/fixtures/api/film_times/71-15977.plist +0 -0
  31. data/test/fixtures/api/film_times/71-15980.plist +0 -0
  32. data/test/fixtures/api/film_times/71-16037.plist +0 -0
  33. data/test/fixtures/api/film_times/71-16136.plist +0 -0
  34. data/test/fixtures/api/film_times/71-16142.plist +0 -0
  35. data/test/fixtures/api/film_times/71-16143.plist +0 -0
  36. data/test/fixtures/api/film_times/71-16187.plist +0 -0
  37. data/test/fixtures/api/film_times/71-16369.plist +0 -0
  38. data/test/fixtures/api/film_times/71-16370.plist +0 -0
  39. data/test/fixtures/api/film_times/71-16374.plist +0 -0
  40. data/test/fixtures/api/film_times/71-16386.plist +0 -0
  41. data/test/fixtures/api/film_times/71-16387.plist +0 -0
  42. data/test/fixtures/api/film_times/71-16388.plist +0 -0
  43. data/test/fixtures/api/film_times/71-16438.plist +0 -0
  44. data/test/fixtures/api/film_times/71-16454.plist +0 -0
  45. data/test/fixtures/api/film_times/71-16457.plist +0 -0
  46. data/test/fixtures/api/film_times/71-16477.plist +0 -0
  47. data/test/fixtures/api/film_times/71-16478.plist +0 -0
  48. data/test/fixtures/api/film_times/71-16480.plist +0 -0
  49. data/test/fixtures/api/film_times/71-16482.plist +0 -0
  50. data/test/fixtures/api/film_times/71-16489.plist +0 -0
  51. data/test/lib/odeon_uk/cinema_test.rb +154 -373
  52. data/test/lib/odeon_uk/{api/response_test.rb → internal/api_response_test.rb} +7 -4
  53. data/test/lib/odeon_uk/performance_test.rb +149 -0
  54. data/test/lib/odeon_uk/version_test.rb +3 -5
  55. data/test/support/api_fixtures_helper.rb +9 -3
  56. data/test/support/fake_api_response.rb +17 -0
  57. data/test/test_helper.rb +9 -3
  58. metadata +89 -145
  59. data/.rdoc_options +0 -16
  60. data/lib/odeon_uk/api/cinema.rb +0 -67
  61. data/lib/odeon_uk/api/screenings.rb +0 -103
  62. data/lib/odeon_uk/configuration.rb +0 -21
  63. data/lib/odeon_uk/html/cinema.rb +0 -101
  64. data/lib/odeon_uk/html/parser/film_with_screenings.rb +0 -160
  65. data/lib/odeon_uk/html/screenings.rb +0 -38
  66. data/lib/odeon_uk/html/website.rb +0 -38
  67. data/lib/odeon_uk/screening.rb +0 -71
  68. data/test/fixtures/api/film_times/71-100747.plist +0 -0
  69. data/test/fixtures/api/film_times/71-100750.plist +0 -0
  70. data/test/fixtures/api/film_times/71-100790.plist +0 -0
  71. data/test/fixtures/api/film_times/71-14646.plist +0 -0
  72. data/test/fixtures/api/film_times/71-14725.plist +0 -0
  73. data/test/fixtures/api/film_times/71-15086.plist +0 -0
  74. data/test/fixtures/api/film_times/71-15096.plist +0 -0
  75. data/test/fixtures/api/film_times/71-15122.plist +0 -0
  76. data/test/fixtures/api/film_times/71-15130.plist +0 -0
  77. data/test/fixtures/api/film_times/71-15141.plist +0 -0
  78. data/test/fixtures/api/film_times/71-15142.plist +0 -0
  79. data/test/fixtures/api/film_times/71-15143.plist +0 -0
  80. data/test/fixtures/api/film_times/71-15144.plist +0 -0
  81. data/test/fixtures/api/film_times/71-15145.plist +0 -0
  82. data/test/fixtures/api/film_times/71-15170.plist +0 -0
  83. data/test/fixtures/api/film_times/71-15172.plist +0 -0
  84. data/test/fixtures/api/film_times/71-15177.plist +0 -0
  85. data/test/fixtures/api/film_times/71-15179.plist +0 -0
  86. data/test/fixtures/api/film_times/71-15182.plist +0 -0
  87. data/test/fixtures/api/film_times/71-15286.plist +0 -0
  88. data/test/fixtures/api/film_times/71-15360.plist +0 -0
  89. data/test/fixtures/api/film_times/71-15586.plist +0 -0
  90. data/test/fixtures/api/film_times/71-15700.plist +0 -0
  91. data/test/fixtures/api/film_times/71-15718.plist +0 -0
  92. data/test/fixtures/api/film_times/71-15768.plist +0 -0
  93. data/test/fixtures/api/film_times/71-15788.plist +0 -0
  94. data/test/fixtures/api/film_times/71-15793.plist +0 -0
  95. data/test/fixtures/api/film_times/71-15794.plist +0 -0
  96. data/test/fixtures/api/film_times/71-15795.plist +0 -0
  97. data/test/fixtures/api/film_times/71-15796.plist +0 -0
  98. data/test/fixtures/api/film_times/71-15799.plist +0 -0
  99. data/test/fixtures/api/film_times/71-15802.plist +0 -0
  100. data/test/fixtures/api/film_times/71-15814.plist +0 -0
  101. data/test/fixtures/api/film_times/71-15817.plist +0 -0
  102. data/test/fixtures/api/film_times/71-15840.plist +0 -0
  103. data/test/fixtures/html/cinema/105.html +0 -2622
  104. data/test/fixtures/html/cinema/211.html +0 -3241
  105. data/test/fixtures/html/cinema/71.html +0 -3448
  106. data/test/fixtures/html/showtimes/11-imax.html +0 -170
  107. data/test/fixtures/html/showtimes/171-d-box.html +0 -203
  108. data/test/fixtures/html/showtimes/71-0.html +0 -59
  109. data/test/fixtures/html/showtimes/71.html +0 -2395
  110. data/test/fixtures/html/sitemap.html +0 -1303
  111. data/test/lib/odeon_uk/api/cinema_test.rb +0 -165
  112. data/test/lib/odeon_uk/api/screenings_test.rb +0 -58
  113. data/test/lib/odeon_uk/configuration_test.rb +0 -29
  114. data/test/lib/odeon_uk/html/cinema_test.rb +0 -149
  115. data/test/lib/odeon_uk/html/parser/film_with_screenings_test.rb +0 -97
  116. data/test/lib/odeon_uk/html/screenings_test.rb +0 -44
  117. data/test/lib/odeon_uk/html/website_test.rb +0 -67
  118. data/test/lib/odeon_uk/screening_test.rb +0 -92
  119. data/test/support/website_fixtures_helper.rb +0 -30
@@ -1,44 +0,0 @@
1
- require_relative '../../../test_helper'
2
-
3
- describe OdeonUk::Html::Screenings do
4
- include WebsiteFixturesHelper
5
-
6
- let(:described_class) { OdeonUk::Html::Screenings }
7
-
8
- let(:website) { Minitest::Mock.new }
9
-
10
- before { WebMock.disable_net_connect! }
11
-
12
- describe '.at(cinema_id)' do
13
- subject { described_class.at(71) }
14
-
15
- before do
16
- website.expect(:sitemap, sitemap_html)
17
- website.expect(:showtimes, showtimes_html(71), [71])
18
- end
19
-
20
- it 'returns an array of screening attributes as hashes' do
21
- OdeonUk::Html::Website.stub :new, website do
22
- subject.must_be_instance_of(Array)
23
- subject.each do |screening|
24
- screening.must_be_instance_of(Hash)
25
- screening.keys.must_include(:film_name)
26
-
27
- screening.keys.must_include(:time)
28
- screening[:time].must_be_instance_of(Time)
29
-
30
- screening.keys.must_include(:variant)
31
-
32
- screening.keys.must_include(:dimension)
33
- screening[:dimension].must_match(/[23]d/)
34
- end
35
- end
36
- end
37
-
38
- it 'returns correct number of screenings' do
39
- OdeonUk::Html::Website.stub :new, website do
40
- subject.count.must_equal 212
41
- end
42
- end
43
- end
44
- end
@@ -1,67 +0,0 @@
1
- require_relative '../../../test_helper'
2
-
3
- describe OdeonUk::Html::Website do
4
- include WebsiteFixturesHelper
5
-
6
- let(:described_class) { OdeonUk::Html::Website }
7
-
8
- describe '#cinema(id)' do
9
- subject { described_class.new.cinema(71) }
10
-
11
- describe 'successful http request' do
12
- before { stub_get('cinemas/odeon/71/', cinema_html(71)) }
13
-
14
- it 'returns a string' do
15
- subject.class.must_equal String
16
- end
17
- end
18
-
19
- describe 'unsuccessful http request' do
20
- before { stub_get_with_500('cinemas/odeon/71/') }
21
-
22
- it 'returns an empty string' do
23
- subject.must_equal ''
24
- end
25
- end
26
- end
27
-
28
- describe '#sitemap' do
29
- subject { described_class.new.sitemap }
30
-
31
- describe 'successful http request' do
32
- before { stub_get('sitemap/', sitemap_html) }
33
-
34
- it 'returns a string' do
35
- subject.class.must_equal String
36
- end
37
- end
38
-
39
- describe 'unsuccessful http request' do
40
- before { stub_get_with_500('sitemap/') }
41
-
42
- it 'returns an empty string' do
43
- subject.must_equal ''
44
- end
45
- end
46
- end
47
-
48
- describe '#showtimes(id)' do
49
- subject { described_class.new.showtimes(71) }
50
-
51
- describe 'successful http request' do
52
- before { stub_get('showtimes/week/71/?siteId=71', showtimes_html(71)) }
53
-
54
- it 'returns a string' do
55
- subject.class.must_equal String
56
- end
57
- end
58
-
59
- describe 'unsuccessful http request' do
60
- before { stub_get_with_500('showtimes/week/71/?siteId=71') }
61
-
62
- it 'returns an empty string' do
63
- subject.must_equal ''
64
- end
65
- end
66
- end
67
- end
@@ -1,92 +0,0 @@
1
- require_relative '../../test_helper'
2
-
3
- describe OdeonUk::Screening, 'html' do
4
- include WebsiteFixturesHelper
5
-
6
- let(:described_class) { OdeonUk::Screening }
7
-
8
- let(:website) { Minitest::Mock.new }
9
-
10
- before do
11
- WebMock.disable_net_connect!
12
- end
13
-
14
- describe '.at(cinema_id)' do
15
- subject { described_class.at(71) }
16
-
17
- before do
18
- website.expect(:cinema, cinema_html(71), [71])
19
- website.expect(:showtimes, showtimes_html(71), [71])
20
- end
21
-
22
- it 'returns an array of screening attributes as hashes' do
23
- OdeonUk::Html::Website.stub :new, website do
24
- subject.must_be_instance_of(Array)
25
- subject.each do |screening|
26
- screening.must_be_instance_of(described_class)
27
- screening.cinema_name.must_equal('Brighton')
28
- screening.cinema_id.must_equal(71)
29
- screening.film_name.wont_be_nil
30
- screening.showing_at.must_be_instance_of(Time)
31
- screening.showing_on.must_be_instance_of(Date)
32
- screening.dimension.must_match(/[23]d/)
33
- end
34
- end
35
- end
36
-
37
- it 'returns correct number of screenings' do
38
- OdeonUk::Html::Website.stub :new, website do
39
- subject.count.must_equal 212
40
- end
41
- end
42
- end
43
- end
44
-
45
- describe OdeonUk::Screening, 'api' do
46
- include ApiFixturesHelper
47
-
48
- let(:described_class) { OdeonUk::Screening }
49
-
50
- let(:website) { Minitest::Mock.new }
51
-
52
- before do
53
- WebMock.disable_net_connect!
54
- end
55
-
56
- describe '.at(cinema_id)' do
57
- subject { described_class.at(71) }
58
-
59
- before do
60
- OdeonUk.configure { |config| config.method = :api }
61
-
62
- stub_post('app-init', nil, app_init_plist)
63
- film_times_plists(71).each do |name|
64
- film_id = name.match(/(\d+)\.plist/)[1]
65
- stub_post('film-times',
66
- { s: '71', m: film_id },
67
- film_times_plist(71, film_id))
68
- end
69
- end
70
-
71
- after do
72
- OdeonUk.configure { |config| config.method = :html }
73
- end
74
-
75
- it 'returns an array of screening attributes as hashes' do
76
- subject.must_be_instance_of(Array)
77
- subject.each do |screening|
78
- screening.must_be_instance_of(described_class)
79
- screening.cinema_name.must_equal('Brighton')
80
- screening.cinema_id.must_equal(71)
81
- screening.film_name.wont_be_nil
82
- screening.showing_at.must_be_instance_of(Time)
83
- screening.showing_on.must_be_instance_of(Date)
84
- screening.dimension.must_match(/[23]d/)
85
- end
86
- end
87
-
88
- it 'returns correct number of screenings' do
89
- subject.count.must_equal 159
90
- end
91
- end
92
- end
@@ -1,30 +0,0 @@
1
- module WebsiteFixturesHelper
2
- private
3
-
4
- def cinema_html(id)
5
- read_fixture("html/cinema/#{id}")
6
- end
7
-
8
- def showtimes_html(id, i = nil)
9
- read_fixture("html/showtimes/#{id}#{ "-#{i}" if i }")
10
- end
11
-
12
- def sitemap_html
13
- read_fixture('html/sitemap')
14
- end
15
-
16
- def read_fixture(filepath)
17
- File.read(File.expand_path("../../fixtures/#{filepath}.html", __FILE__))
18
- end
19
-
20
- def stub_get_with_500(site_path)
21
- url = "http://www.odeon.co.uk/#{site_path}"
22
- stub_request(:get, url).to_return(status: [500, 'Internal Server Error'])
23
- end
24
-
25
- def stub_get(site_path, response_body)
26
- url = "http://www.odeon.co.uk/#{site_path}"
27
- response = { status: 200, body: response_body, headers: {} }
28
- stub_request(:get, url).to_return(response)
29
- end
30
- end