omdbapi 0.2.1 → 0.3.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.
- checksums.yaml +4 -4
- data/lib/omdbapi/client.rb +9 -6
- data/lib/omdbapi/version.rb +1 -1
- data/omdbapi.gemspec +5 -3
- data/spec/omdbapi/client_spec.rb +107 -59
- data/spec/omdbapi/default_spec.rb +4 -6
- data/spec/spec_helper.rb +6 -7
- data/spec/vcr/id/existing.yml +73 -0
- data/spec/vcr/id/nonexistent.yml +55 -0
- data/spec/vcr/search/empty.yml +55 -0
- data/spec/vcr/search/find.yml +205 -0
- data/spec/vcr/search/result.yml +114 -0
- data/spec/vcr/search/results.yml +104 -0
- data/spec/vcr/title/episode.yml +72 -0
- data/spec/vcr/title/nonexistent.yml +55 -0
- data/spec/vcr/title/plot.yml +149 -0
- data/spec/vcr/title/season.yml +63 -0
- data/spec/vcr/title/season_and_episode.yml +61 -0
- data/spec/vcr/title/tomatoes.yml +64 -0
- data/spec/vcr/title/valid.yml +57 -0
- data/spec/vcr/title/year.yml +119 -0
- metadata +76 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 40dd8088ca9737b6860e5fc19e7107459be09dc3
|
4
|
+
data.tar.gz: 4d45a4457544555a7105bed0a11c8b0e12853f9d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3daf4e22024a8d57e23da703dde0a28f7157c788541ed66bc844a5bcc2cc62e10bdd40d0676f7e870d0a91a88c5039d53b0415b84a33a56bb3039b835f562e8a
|
7
|
+
data.tar.gz: d67b7e3a2e8bcbfb401e49b981e9c0cbb0b95c71a7a148709963aa55f6cd912af318fc9ba7272f10520284cf997d817e81f905f880724d35f3099bbb120afd37
|
data/lib/omdbapi/client.rb
CHANGED
@@ -16,27 +16,31 @@ module OMDB
|
|
16
16
|
# @option options [String] :plot 'short' (default), 'full'
|
17
17
|
# @option options [Integer] :season The season to retrieve.
|
18
18
|
# @option options [Integer] :episode The episode to retrieve. Requires the season parameter.
|
19
|
+
# @option options [Boolean] :tomatoes Include Rotten Tomatoes ratings.
|
19
20
|
# @return [Hash]
|
20
21
|
# @example
|
21
22
|
# OMDB.title('Game of Thrones')
|
22
|
-
def title(title, options={})
|
23
|
+
def title(title, options = {})
|
23
24
|
params = { t: title }
|
24
25
|
params[:y] = options[:year] if options[:year]
|
25
26
|
params[:plot] = options[:plot] if options[:plot]
|
26
27
|
params[:season] = options[:season] if options[:season]
|
27
28
|
params[:episode] = options[:episode] if options[:episode]
|
29
|
+
params[:tomatoes] = options[:tomatoes] if options[:tomatoes]
|
28
30
|
get '/', params
|
29
31
|
end
|
30
32
|
|
31
|
-
|
32
33
|
# Retrieves a movie or show based on its IMDb ID.
|
33
34
|
#
|
34
35
|
# @param imdb_id [String] The IMDb ID of the movie or show.
|
36
|
+
# @option options [Boolean] :tomatoes Include Rotten Tomatoes ratings.
|
35
37
|
# @return [Hash]
|
36
38
|
# @example
|
37
39
|
# OMDB.id('tt0944947')
|
38
|
-
def id(imdb_id)
|
39
|
-
|
40
|
+
def id(imdb_id, options = {})
|
41
|
+
params = { i: imdb_id }
|
42
|
+
params[:tomatoes] = options[:tomatoes] if options[:tomatoes]
|
43
|
+
get '/', params
|
40
44
|
end
|
41
45
|
|
42
46
|
# Search for a movie by its title.
|
@@ -82,7 +86,6 @@ module OMDB
|
|
82
86
|
# @return [Hash]
|
83
87
|
def build_params(title, options)
|
84
88
|
params = { t: title }
|
85
|
-
|
86
89
|
params[:y] = options[:year] if options[:year]
|
87
90
|
params
|
88
91
|
end
|
@@ -99,4 +102,4 @@ module OMDB
|
|
99
102
|
convert_hash_keys(request.parsed_response)
|
100
103
|
end
|
101
104
|
end
|
102
|
-
end
|
105
|
+
end
|
data/lib/omdbapi/version.rb
CHANGED
data/omdbapi.gemspec
CHANGED
@@ -19,7 +19,9 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
21
|
spec.add_development_dependency "bundler", "~> 1.3"
|
22
|
-
spec.add_development_dependency "rake"
|
23
|
-
spec.add_development_dependency "rspec"
|
24
|
-
spec.
|
22
|
+
spec.add_development_dependency "rake", "~> 11.1"
|
23
|
+
spec.add_development_dependency "rspec", "~> 3.4"
|
24
|
+
spec.add_development_dependency "vcr", "~> 3.0"
|
25
|
+
spec.add_development_dependency "webmock", "~> 1.24"
|
26
|
+
spec.add_dependency 'httparty', '~> 0.13'
|
25
27
|
end
|
data/spec/omdbapi/client_spec.rb
CHANGED
@@ -1,172 +1,220 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe OMDB::Client do
|
4
|
-
|
5
4
|
it 'should include HTTParty' do
|
6
|
-
OMDB::Client.
|
5
|
+
expect(OMDB::Client).to include(HTTParty)
|
7
6
|
end
|
8
7
|
|
9
8
|
it 'should have the correct API endpoint' do
|
10
|
-
OMDB::Client.base_uri.
|
9
|
+
expect(OMDB::Client.base_uri).to eq(OMDB::Default::API_ENDPOINT)
|
11
10
|
end
|
12
11
|
|
13
12
|
describe 'methods' do
|
14
|
-
|
15
13
|
describe 'title' do
|
16
14
|
describe 'with a movie that exists' do
|
17
|
-
|
15
|
+
before(:all) do
|
16
|
+
VCR.use_cassette('title/valid') do
|
17
|
+
@title = OMDB.title('Star Wars')
|
18
|
+
end
|
19
|
+
end
|
18
20
|
|
19
21
|
it 'should return a hash of movie attributes' do
|
20
|
-
title.
|
22
|
+
expect(@title).to be_instance_of Hash
|
21
23
|
end
|
22
24
|
|
23
25
|
it 'should contain a title' do
|
24
|
-
title.title.
|
26
|
+
expect(@title.title).to be_instance_of String
|
25
27
|
end
|
26
28
|
end
|
27
29
|
|
28
30
|
describe 'with the year parameter' do
|
29
|
-
let(:title1) { OMDB.title('True Grit') }
|
30
|
-
let(:title2) { OMDB.title('True Grit', year: '1969') }
|
31
|
-
|
32
31
|
it 'should not be the same title' do
|
33
|
-
|
32
|
+
VCR.use_cassette('title/year') do
|
33
|
+
title1 = OMDB.title('True Grit')
|
34
|
+
title2 = OMDB.title('True Grit', year: '1969')
|
35
|
+
expect(title1).not_to eq(title2)
|
36
|
+
end
|
34
37
|
end
|
35
38
|
end
|
36
39
|
|
37
40
|
describe 'with the plot parameter' do
|
38
|
-
let(:title1) { OMDB.title('Game of Thrones') }
|
39
|
-
let(:title2) { OMDB.title('Game of Thrones', plot: 'full') }
|
40
|
-
|
41
41
|
it 'should have different plots' do
|
42
|
-
|
42
|
+
VCR.use_cassette('title/plot') do
|
43
|
+
title1 = OMDB.title('Game of Thrones')
|
44
|
+
title2 = OMDB.title('Game of Thrones', plot: 'full')
|
45
|
+
expect(title1.plot).not_to eq(title2.plot)
|
46
|
+
end
|
43
47
|
end
|
44
48
|
end
|
45
49
|
|
46
50
|
describe 'with the season and episode parameters' do
|
47
|
-
let(:title) { OMDB.title('True Detective', episode: 1, season: 1) }
|
48
|
-
|
49
51
|
it 'should include season and episode in the response' do
|
50
|
-
|
51
|
-
|
52
|
+
VCR.use_cassette('title/season_and_episode') do
|
53
|
+
title = OMDB.title('True Detective', episode: 1, season: 1)
|
54
|
+
expect(title.season).to eq('1')
|
55
|
+
expect(title.episode).to eq('1')
|
56
|
+
end
|
52
57
|
end
|
53
58
|
end
|
54
59
|
|
55
60
|
describe 'with only the season parameter, missing the episode parameter' do
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
+
it 'should not include episode in the response' do
|
62
|
+
VCR.use_cassette('title/season') do
|
63
|
+
title = OMDB.title('True Detective', season: 1)
|
64
|
+
expect { title.episode }.to raise_error(NoMethodError)
|
65
|
+
end
|
61
66
|
end
|
62
67
|
end
|
63
68
|
|
64
69
|
describe 'with only the episode parameter, missing the season parameter' do
|
65
|
-
let(:title) { OMDB.title('True Detective', episode: 1) }
|
66
|
-
|
67
70
|
it 'should not include season and episode in the response' do
|
68
|
-
|
69
|
-
|
71
|
+
VCR.use_cassette('title/episode') do
|
72
|
+
title = OMDB.title('True Detective', episode: 1)
|
73
|
+
expect { title.season }.to raise_error(NoMethodError)
|
74
|
+
expect { title.episode }.to raise_error(NoMethodError)
|
75
|
+
end
|
70
76
|
end
|
71
77
|
end
|
72
78
|
|
73
|
-
describe
|
74
|
-
|
75
|
-
|
79
|
+
describe "with a movie that doesn't exist" do
|
80
|
+
before(:all) do
|
81
|
+
VCR.use_cassette('title/nonexistent') do
|
82
|
+
@title = OMDB.title('lsdfoweirjrpwef323423dsfkip')
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
76
86
|
it 'should return a hash' do
|
77
|
-
title.
|
87
|
+
expect(@title).to be_instance_of Hash
|
78
88
|
end
|
79
89
|
|
80
90
|
it 'should return a hash with a false response' do
|
81
|
-
title.response.
|
91
|
+
expect(@title.response).to eq('False')
|
82
92
|
end
|
83
93
|
|
84
94
|
it 'should return a hash with an error message' do
|
85
|
-
title.error.
|
95
|
+
expect(@title.error).to be_instance_of String
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
describe 'with the tomatoes option' do
|
100
|
+
before(:all) do
|
101
|
+
VCR.use_cassette('title/tomatoes') do
|
102
|
+
@title = OMDB.title('inception', :tomatoes => true)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
it 'should contain tomato rating' do
|
107
|
+
expect(@title.tomato_rating).to be_instance_of String
|
108
|
+
end
|
109
|
+
|
110
|
+
it 'should contain tomato meter' do
|
111
|
+
expect(@title.tomato_meter).to be_instance_of String
|
112
|
+
end
|
113
|
+
|
114
|
+
it 'should contain tomato reviews' do
|
115
|
+
expect(@title.tomato_reviews).to be_instance_of String
|
86
116
|
end
|
87
117
|
end
|
88
118
|
end
|
89
119
|
|
90
120
|
describe 'id' do
|
91
|
-
|
92
121
|
describe 'with a title that exists' do
|
93
|
-
|
122
|
+
before(:all) do
|
123
|
+
VCR.use_cassette('id/existing') do
|
124
|
+
@title = OMDB.id('tt0411008')
|
125
|
+
end
|
126
|
+
end
|
94
127
|
|
95
128
|
it 'should return a hash of movie attributes' do
|
96
|
-
title.
|
129
|
+
expect(@title).to be_instance_of Hash
|
97
130
|
end
|
98
131
|
|
99
132
|
it 'should contain a title' do
|
100
|
-
title.title.
|
133
|
+
expect(@title.title).to be_instance_of String
|
101
134
|
end
|
102
135
|
end
|
103
136
|
|
104
|
-
describe
|
105
|
-
|
106
|
-
|
137
|
+
describe "with a movie that doesn't exist" do
|
138
|
+
before(:all) do
|
139
|
+
VCR.use_cassette('id/nonexistent') do
|
140
|
+
@title = OMDB.id('tt1231230123')
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
107
144
|
it 'should return a hash' do
|
108
|
-
title.
|
145
|
+
expect(@title).to be_instance_of Hash
|
109
146
|
end
|
110
147
|
|
111
148
|
it 'should return a hash with a false response' do
|
112
|
-
title.response.
|
149
|
+
expect(@title.response).to eq('False')
|
113
150
|
end
|
114
151
|
|
115
152
|
it 'should return a hash with an error message' do
|
116
|
-
title.error.
|
153
|
+
expect(@title.error).to be_instance_of String
|
117
154
|
end
|
118
155
|
end
|
119
156
|
end
|
120
157
|
|
121
158
|
describe 'search' do
|
122
|
-
|
123
159
|
describe 'with search results' do
|
124
|
-
|
160
|
+
before(:all) do
|
161
|
+
VCR.use_cassette('search/results') do
|
162
|
+
@results = OMDB.search('Star Wars')
|
163
|
+
end
|
164
|
+
end
|
125
165
|
|
126
166
|
it 'should return an array' do
|
127
|
-
results.
|
167
|
+
expect(@results).to be_instance_of Array
|
128
168
|
end
|
129
169
|
|
130
170
|
it 'should return an array with hash contents' do
|
131
|
-
results
|
171
|
+
expect(@results.first).to be_instance_of Hash
|
132
172
|
end
|
133
173
|
end
|
134
174
|
|
135
175
|
describe 'with a single search result' do
|
136
|
-
|
176
|
+
before(:all) do
|
177
|
+
VCR.use_cassette('search/result') do
|
178
|
+
@result = OMDB.search('Star Wars Episode IV A New Hope')
|
179
|
+
end
|
180
|
+
end
|
137
181
|
|
138
182
|
it 'should return a hash of the title' do
|
139
|
-
result.
|
183
|
+
expect(@result).to be_instance_of Hash
|
140
184
|
end
|
141
185
|
|
142
186
|
it 'should have a title' do
|
143
|
-
result.title.
|
187
|
+
expect(@result.title).to eq('Star Wars: Episode IV - A New Hope')
|
144
188
|
end
|
145
189
|
end
|
146
190
|
|
147
191
|
describe 'with no search results' do
|
148
|
-
|
192
|
+
before(:all) do
|
193
|
+
VCR.use_cassette('search/empty') do
|
194
|
+
@results = OMDB.search('lsdfoweirjrpwef323423dsfkip')
|
195
|
+
end
|
196
|
+
end
|
149
197
|
|
150
198
|
it 'should return a hash' do
|
151
|
-
results.
|
199
|
+
expect(@results).to be_instance_of Hash
|
152
200
|
end
|
153
201
|
|
154
202
|
it 'should return a hash with a false response' do
|
155
|
-
results.response.
|
203
|
+
expect(@results.response).to eq('False')
|
156
204
|
end
|
157
205
|
|
158
206
|
it 'should return a hash with an error message' do
|
159
|
-
results.error.
|
207
|
+
expect(@results.error).to be_instance_of String
|
160
208
|
end
|
161
209
|
end
|
162
210
|
|
163
211
|
describe 'should be aliased to find' do
|
164
212
|
it 'should be the same method' do
|
165
|
-
|
213
|
+
VCR.use_cassette('search/find') do
|
214
|
+
expect(OMDB.search('Star Wars')).to eq(OMDB.find('Star Wars'))
|
215
|
+
end
|
166
216
|
end
|
167
217
|
end
|
168
218
|
end
|
169
|
-
|
170
219
|
end
|
171
|
-
|
172
|
-
end
|
220
|
+
end
|
@@ -1,19 +1,17 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe OMDB::Default do
|
4
|
-
|
5
4
|
describe 'Hash#method_missing' do
|
6
|
-
let(:hash) { { a: 'a', b: 'b', c: 'c' } }
|
5
|
+
let(:hash) { { a: 'a', b: 'b', c: 'c' } }
|
7
6
|
|
8
7
|
it 'should allow value access through dot notation' do
|
9
|
-
hash.a.
|
8
|
+
expect(hash.a).to eq('a')
|
10
9
|
end
|
11
10
|
end
|
12
11
|
|
13
12
|
describe 'String#to_snake_case' do
|
14
13
|
it 'should convert strings to snake case' do
|
15
|
-
|
14
|
+
expect('CamelCasedString'.to_snake_case).to eq('camel_cased_string')
|
16
15
|
end
|
17
16
|
end
|
18
|
-
|
19
|
-
end
|
17
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,13 +1,12 @@
|
|
1
|
-
# This file was generated by the `rspec --init` command. Conventionally, all
|
2
|
-
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
|
3
|
-
# Require this file using `require "spec_helper.rb"` to ensure that it is only
|
4
|
-
# loaded once.
|
5
|
-
#
|
6
|
-
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
|
7
1
|
require 'omdbapi'
|
2
|
+
require 'vcr'
|
8
3
|
|
9
4
|
RSpec.configure do |config|
|
10
|
-
config.treat_symbols_as_metadata_keys_with_true_values = true
|
11
5
|
config.run_all_when_everything_filtered = true
|
12
6
|
config.filter_run :focus
|
13
7
|
end
|
8
|
+
|
9
|
+
VCR.configure do |config|
|
10
|
+
config.cassette_library_dir = 'spec/vcr'
|
11
|
+
config.hook_into :webmock
|
12
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: http://omdbapi.com/?i=tt0411008
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
Accept-Encoding:
|
11
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
12
|
+
Accept:
|
13
|
+
- "*/*"
|
14
|
+
User-Agent:
|
15
|
+
- Ruby
|
16
|
+
response:
|
17
|
+
status:
|
18
|
+
code: 200
|
19
|
+
message: OK
|
20
|
+
headers:
|
21
|
+
Date:
|
22
|
+
- Sat, 16 Apr 2016 17:33:40 GMT
|
23
|
+
Content-Type:
|
24
|
+
- application/json; charset=utf-8
|
25
|
+
Transfer-Encoding:
|
26
|
+
- chunked
|
27
|
+
Connection:
|
28
|
+
- keep-alive
|
29
|
+
Set-Cookie:
|
30
|
+
- __cfduid=d86fa77388fd45e0f6873017c9fbf61b41460828020; expires=Sun, 16-Apr-17
|
31
|
+
17:33:40 GMT; path=/; domain=.omdbapi.com; HttpOnly
|
32
|
+
Cache-Control:
|
33
|
+
- public, max-age=3600
|
34
|
+
Expires:
|
35
|
+
- Sat, 16 Apr 2016 18:34:06 GMT
|
36
|
+
Last-Modified:
|
37
|
+
- Sat, 16 Apr 2016 17:34:06 GMT
|
38
|
+
Vary:
|
39
|
+
- "*"
|
40
|
+
X-Aspnet-Version:
|
41
|
+
- 4.0.30319
|
42
|
+
X-Powered-By:
|
43
|
+
- ASP.NET
|
44
|
+
Access-Control-Allow-Origin:
|
45
|
+
- "*"
|
46
|
+
Server:
|
47
|
+
- cloudflare-nginx
|
48
|
+
Cf-Ray:
|
49
|
+
- 2949623630d616be-ARN
|
50
|
+
body:
|
51
|
+
encoding: ASCII-8BIT
|
52
|
+
string: !binary |-
|
53
|
+
eyJUaXRsZSI6Ikxvc3QiLCJZZWFyIjoiMjAwNOKAkzIwMTAiLCJSYXRlZCI6
|
54
|
+
IlRWLTE0IiwiUmVsZWFzZWQiOiIyMiBTZXAgMjAwNCIsIlJ1bnRpbWUiOiI0
|
55
|
+
NCBtaW4iLCJHZW5yZSI6IkFkdmVudHVyZSwgRHJhbWEsIEZhbnRhc3kiLCJE
|
56
|
+
aXJlY3RvciI6Ik4vQSIsIldyaXRlciI6IkouSi4gQWJyYW1zLCBKZWZmcmV5
|
57
|
+
IExpZWJlciwgRGFtb24gTGluZGVsb2YiLCJBY3RvcnMiOiJOYXZlZW4gQW5k
|
58
|
+
cmV3cywgTWF0dGhldyBGb3gsIEpvcmdlIEdhcmNpYSwgSm9zaCBIb2xsb3dh
|
59
|
+
eSIsIlBsb3QiOiJUaGUgc3Vydml2b3JzIG9mIGEgcGxhbmUgY3Jhc2ggYXJl
|
60
|
+
IGZvcmNlZCB0byB3b3JrIHRvZ2V0aGVyIGluIG9yZGVyIHRvIHN1cnZpdmUg
|
61
|
+
b24gYSBzZWVtaW5nbHkgZGVzZXJ0ZWQgdHJvcGljYWwgaXNsYW5kLiIsIkxh
|
62
|
+
bmd1YWdlIjoiRW5nbGlzaCwgUG9ydHVndWVzZSwgU3BhbmlzaCwgQXJhYmlj
|
63
|
+
LCBGcmVuY2gsIEtvcmVhbiwgR2VybWFuLCBMYXRpbiwgUnVzc2lhbiwgSmFw
|
64
|
+
YW5lc2UiLCJDb3VudHJ5IjoiVVNBIiwiQXdhcmRzIjoiV29uIDEgR29sZGVu
|
65
|
+
IEdsb2JlLiBBbm90aGVyIDg0IHdpbnMgJiAzMzYgbm9taW5hdGlvbnMuIiwi
|
66
|
+
UG9zdGVyIjoiaHR0cDovL2lhLm1lZGlhLWltZGIuY29tL2ltYWdlcy9NL01W
|
67
|
+
NUJNakEzTnpNeU16VTFNVjVCTWw1QmFuQm5Ya0Z0WlRjd05qYzFPRFV3TWdA
|
68
|
+
QC5fVjFfU1gzMDAuanBnIiwiTWV0YXNjb3JlIjoiTi9BIiwiaW1kYlJhdGlu
|
69
|
+
ZyI6IjguNSIsImltZGJWb3RlcyI6IjM2MywwODUiLCJpbWRiSUQiOiJ0dDA0
|
70
|
+
MTEwMDgiLCJUeXBlIjoic2VyaWVzIiwiUmVzcG9uc2UiOiJUcnVlIn0=
|
71
|
+
http_version:
|
72
|
+
recorded_at: Sat, 16 Apr 2016 17:33:40 GMT
|
73
|
+
recorded_with: VCR 3.0.1
|