vinegar 0.0.1
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/.gitignore +32 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +88 -0
- data/Rakefile +1 -0
- data/lib/vinegar.rb +19 -0
- data/lib/vinegar/authentication.rb +21 -0
- data/lib/vinegar/client.rb +40 -0
- data/lib/vinegar/client/movie.rb +55 -0
- data/lib/vinegar/client/movie/cast.rb +25 -0
- data/lib/vinegar/client/movie/clip.rb +25 -0
- data/lib/vinegar/client/movie/review.rb +98 -0
- data/lib/vinegar/client/movie/similar.rb +29 -0
- data/lib/vinegar/client/root.rb +23 -0
- data/lib/vinegar/configuration.rb +29 -0
- data/lib/vinegar/connection.rb +16 -0
- data/lib/vinegar/request.rb +29 -0
- data/lib/vinegar/version.rb +3 -0
- data/spec/fixtures/authentication.yml.sample +3 -0
- data/spec/spec_helper.rb +45 -0
- data/spec/vinegar/client/movies/cast_spec.rb +53 -0
- data/spec/vinegar/client/movies/clip_spec.rb +65 -0
- data/spec/vinegar/client/movies/review_spec.rb +109 -0
- data/spec/vinegar/client/movies/similar_spec.rb +183 -0
- data/spec/vinegar/client/movies_spec.rb +298 -0
- data/spec/vinegar/client_spec.rb +25 -0
- data/vinegar.gemspec +33 -0
- metadata +295 -0
data/.gitignore
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
*.gem
|
2
|
+
*.rbc
|
3
|
+
.bundle
|
4
|
+
.config
|
5
|
+
.yardoc
|
6
|
+
Gemfile.lock
|
7
|
+
InstalledFiles
|
8
|
+
_yardoc
|
9
|
+
coverage
|
10
|
+
doc/
|
11
|
+
lib/bundler/man
|
12
|
+
pkg
|
13
|
+
rdoc
|
14
|
+
spec/reports
|
15
|
+
test/tmp
|
16
|
+
test/version_tmp
|
17
|
+
tmp
|
18
|
+
|
19
|
+
spec/cassettes
|
20
|
+
spec/.DS_Store
|
21
|
+
|
22
|
+
spec/fixtures/authentications.yml
|
23
|
+
|
24
|
+
spec/vinegar/.DS_Store
|
25
|
+
|
26
|
+
lib/vinegar/.DS_Store
|
27
|
+
|
28
|
+
lib/vinegar/client/movies/.DS_Store
|
29
|
+
|
30
|
+
lib/vinegar/client/movie/.DS_Store
|
31
|
+
|
32
|
+
spec/vinegar/client/movies/.DS_Store
|
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2013 Jason Truluck
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,88 @@
|
|
1
|
+
# Vinegar
|
2
|
+
|
3
|
+
Rotten Tomatoes API Wrapper in Ruby. Currently the wrapper supports the movies api and lists api is comming shortly.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
gem 'vinegar'
|
10
|
+
|
11
|
+
And then execute:
|
12
|
+
|
13
|
+
$ bundle
|
14
|
+
|
15
|
+
Or install it yourself as:
|
16
|
+
|
17
|
+
$ gem install vinegar
|
18
|
+
|
19
|
+
## Documentation
|
20
|
+
|
21
|
+
http://rdoc.info/github/jasontruluck/vinegar
|
22
|
+
|
23
|
+
## Usage
|
24
|
+
|
25
|
+
### Setup a new client
|
26
|
+
|
27
|
+
```ruby
|
28
|
+
client = Vinegar::Client.new(:api_key => 1234567890)
|
29
|
+
```
|
30
|
+
|
31
|
+
### [Search for movies](http://rdoc.info/github/jasontruluck/vinegar/Vinegar/Client/Movie#movies_search-instance_method)
|
32
|
+
|
33
|
+
```ruby
|
34
|
+
client.movies_search("Star Wars")
|
35
|
+
```
|
36
|
+
|
37
|
+
### [View a single movie](http://rdoc.info/github/jasontruluck/vinegar/Vinegar/Client/Movie#movie-instance_method)
|
38
|
+
|
39
|
+
```ruby
|
40
|
+
client.movie(12345) #12345 is the movies Rotten Tomatoes ID
|
41
|
+
```
|
42
|
+
|
43
|
+
### [Get the cast for a movie](http://rdoc.info/github/jasontruluck/vinegar/Vinegar/Client/Cast)
|
44
|
+
|
45
|
+
```ruby
|
46
|
+
client.full_movie_cast(12345) #12345 is the movies Rotten Tomatoes ID
|
47
|
+
```
|
48
|
+
|
49
|
+
### [Get reviews for a movie](http://rdoc.info/github/jasontruluck/vinegar/Vinegar/Client/Review)
|
50
|
+
|
51
|
+
```ruby
|
52
|
+
client.all_movie_reviews(12345) #12345 is the movies Rotten Tomatoes ID
|
53
|
+
```
|
54
|
+
|
55
|
+
### [Get similar movies for a movie](http://rdoc.info/github/jasontruluck/vinegar/Vinegar/Client/Similar)
|
56
|
+
|
57
|
+
```ruby
|
58
|
+
client.similar_movies(12345) #12345 is the movies Rotten Tomatoes ID
|
59
|
+
```
|
60
|
+
|
61
|
+
### [Get clips for a movie](http://rdoc.info/github/jasontruluck/vinegar/Vinegar/Client/Clip)
|
62
|
+
|
63
|
+
```ruby
|
64
|
+
client.clips_for_movie(12345) #12345 is the movies Rotten Tomatoes ID
|
65
|
+
```
|
66
|
+
|
67
|
+
## Testing
|
68
|
+
|
69
|
+
This gem uses VCR to record requests to the api so you must test using a valid API key from Rotten Tomatoes.
|
70
|
+
|
71
|
+
Add a sample authentications file to your `spec/fixtures` directory:
|
72
|
+
|
73
|
+
```ruby
|
74
|
+
#spec/fixtures/authentications.yml
|
75
|
+
api_key: 1234567890 # Your API key
|
76
|
+
movies_search: "Star Wars" # Movie title you would like to use for search tests
|
77
|
+
movie_id: 9 # ID of a movie you would like to use for movie tests
|
78
|
+
```
|
79
|
+
|
80
|
+
A sample is included in the [directory](https://github.com/jasontruluck/vinegar/blob/master/spec/fixtures/authentication.yml.sample).
|
81
|
+
|
82
|
+
## Contributing
|
83
|
+
|
84
|
+
1. Fork it
|
85
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
86
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
87
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
88
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
data/lib/vinegar.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
require "vinegar/version"
|
2
|
+
require "vinegar/configuration"
|
3
|
+
require "vinegar/client"
|
4
|
+
|
5
|
+
module Vinegar
|
6
|
+
extend Configuration
|
7
|
+
|
8
|
+
class << self
|
9
|
+
# Alias for Vinegar::Client.new
|
10
|
+
# @return [Vinegar::Client]
|
11
|
+
def new(options = {})
|
12
|
+
Vinegar::Client.new(options)
|
13
|
+
end
|
14
|
+
|
15
|
+
def respond_to?(method, include_private=false)
|
16
|
+
new.respond_to?(method, include_private) || super(method, include_private)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# Authentication Module
|
2
|
+
module Vinegar
|
3
|
+
module Authentication
|
4
|
+
def authentication
|
5
|
+
if api_key
|
6
|
+
{ :api_key => api_key}
|
7
|
+
else
|
8
|
+
{}
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def authenticated?
|
13
|
+
!authentication.empty?
|
14
|
+
end
|
15
|
+
|
16
|
+
def login_token(api_key = "")
|
17
|
+
return if api_key.nil?
|
18
|
+
self.api_key = api_key
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# Client Module
|
2
|
+
require "vinegar/authentication"
|
3
|
+
require "vinegar/connection"
|
4
|
+
require "vinegar/request"
|
5
|
+
|
6
|
+
require "vinegar/client/root"
|
7
|
+
require "vinegar/client/movie"
|
8
|
+
require "vinegar/client/movie/review"
|
9
|
+
require "vinegar/client/movie/cast"
|
10
|
+
require "vinegar/client/movie/similar"
|
11
|
+
require "vinegar/client/movie/clip"
|
12
|
+
|
13
|
+
module Vinegar
|
14
|
+
class Client
|
15
|
+
attr_accessor(*Configuration::VALID_OPTIONS_KEYS)
|
16
|
+
|
17
|
+
def initialize(options = {})
|
18
|
+
Vinegar.reset!
|
19
|
+
options = Vinegar.options.merge(options)
|
20
|
+
|
21
|
+
Configuration::VALID_OPTIONS_KEYS.each do |key|
|
22
|
+
send("#{key}=", options[key])
|
23
|
+
end
|
24
|
+
|
25
|
+
login_token(options[:api_key])
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
include Vinegar::Authentication
|
30
|
+
include Vinegar::Connection
|
31
|
+
include Vinegar::Request
|
32
|
+
|
33
|
+
include Vinegar::Client::Root
|
34
|
+
include Vinegar::Client::Movie
|
35
|
+
include Vinegar::Client::Review
|
36
|
+
include Vinegar::Client::Cast
|
37
|
+
include Vinegar::Client::Similar
|
38
|
+
include Vinegar::Client::Clip
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# Movies
|
2
|
+
module Vinegar
|
3
|
+
class Client
|
4
|
+
# Movies Search
|
5
|
+
#
|
6
|
+
# @see http://developer.rottentomatoes.com/docs/json/v10/Movies_Search
|
7
|
+
module Movie
|
8
|
+
# Returns the response from querying the movies search endpoint
|
9
|
+
#
|
10
|
+
# @see http://developer.rottentomatoes.com/docs/json/v10/Movies_Search
|
11
|
+
#
|
12
|
+
# @param [String] query The query you want to search on
|
13
|
+
# @param [Integer] page_limit The amount of movie search results to show per page
|
14
|
+
# @param [Integer] page The selected page of movie search results
|
15
|
+
#
|
16
|
+
# @return [Hashie::Mash] Movies serach Response
|
17
|
+
#
|
18
|
+
# @example Get the search results for a query
|
19
|
+
# @client.movies_search("Movie Title")
|
20
|
+
#
|
21
|
+
# @example Get the search results for a query with a page limit
|
22
|
+
# @client.movies_search("Movie Title", 10)
|
23
|
+
#
|
24
|
+
# @example Get the search results for a query with a page limit and a page
|
25
|
+
# @client.movies_search("Movie Title", 10, 1)
|
26
|
+
#
|
27
|
+
# @author Jason Truluck
|
28
|
+
def movies_search(query, per_page = "", page = "", options = {})
|
29
|
+
options.merge!(
|
30
|
+
:q => query,
|
31
|
+
:page_limit => per_page,
|
32
|
+
:page => page
|
33
|
+
)
|
34
|
+
get("movies.json", options)
|
35
|
+
end
|
36
|
+
|
37
|
+
# Detailed information on a specific movie specified by Id. You can use the movies search endpoint
|
38
|
+
# or peruse the lists of movies/dvds to get the urls to movies.
|
39
|
+
#
|
40
|
+
# @see http://developer.rottentomatoes.com/docs/json/v10/Movie_Info
|
41
|
+
#
|
42
|
+
# @param [Integer] Movie ID from Rotten Tomatoes
|
43
|
+
#
|
44
|
+
# @return [Hashie::Mash] Movie Response
|
45
|
+
#
|
46
|
+
# @example Get the results for a specific movie id
|
47
|
+
# @client.movie(12345)
|
48
|
+
#
|
49
|
+
# @author Jason Truluck
|
50
|
+
def movie(movie_id, options = {})
|
51
|
+
get("movies/#{movie_id}.json", options)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# Cast
|
2
|
+
module Vinegar
|
3
|
+
class Client
|
4
|
+
# Cast
|
5
|
+
#
|
6
|
+
# @see http://developer.rottentomatoes.com/docs/json/v10/Movie_Cast
|
7
|
+
module Cast
|
8
|
+
# Pulls the complete movie cast for a movie
|
9
|
+
#
|
10
|
+
# @see http://developer.rottentomatoes.com/docs/json/v10/Movie_Cast
|
11
|
+
#
|
12
|
+
# @param [Integer] movie_id The id of the movie from Rotten Tomatoes
|
13
|
+
#
|
14
|
+
# @return [Hashie::Mash] Movie cast response
|
15
|
+
#
|
16
|
+
# @example Get the cast results for a movie
|
17
|
+
# @client.full_movie_cast(12345)
|
18
|
+
#
|
19
|
+
# @author Jason Truluck
|
20
|
+
def full_movie_cast(movie_id, options = {})
|
21
|
+
get("movies/#{movie_id}/cast.json", options)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# Clip
|
2
|
+
module Vinegar
|
3
|
+
class Client
|
4
|
+
# Clip
|
5
|
+
#
|
6
|
+
# @see http://developer.rottentomatoes.com/docs/json/v10/Movie_Clips
|
7
|
+
module Clip
|
8
|
+
# Related movie clips and trailers for a movie
|
9
|
+
#
|
10
|
+
# @see http://developer.rottentomatoes.com/docs/json/v10/Movie_Clips
|
11
|
+
#
|
12
|
+
# @param [Integer] movie_id The id of the movie from Rotten Tomatoes
|
13
|
+
#
|
14
|
+
# @return [Hashie::Mash] Clips movies response
|
15
|
+
#
|
16
|
+
# @example Get the similar movies for a movie
|
17
|
+
# @client.clips_for_movie(12345)
|
18
|
+
#
|
19
|
+
# @author Jason Truluck
|
20
|
+
def clips_for_movie(movie_id, options = {})
|
21
|
+
get("movies/#{movie_id}/clips.json", options)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
# Reviews
|
2
|
+
module Vinegar
|
3
|
+
class Client
|
4
|
+
# Reviews
|
5
|
+
#
|
6
|
+
# @see http://developer.rottentomatoes.com/docs/json/v10/Movie_Reviews
|
7
|
+
module Review
|
8
|
+
# Retrieves all reviews for a movie. Results are paginated if they go past the specified page limit
|
9
|
+
#
|
10
|
+
# @see http://developer.rottentomatoes.com/docs/json/v10/Movie_Reviews
|
11
|
+
#
|
12
|
+
# @param [Integer] movie_id The id of the movie from Rotten Tomatoes
|
13
|
+
# @param [String] country Provides localized data for the selected country if available. Otherwise, returns US data.
|
14
|
+
# @param [Integer] page_limit The amount of movie search results to show per page
|
15
|
+
# @param [Integer] page The selected page of movie search results
|
16
|
+
#
|
17
|
+
# @return [Hashie::Mash] Movies reviews Response
|
18
|
+
#
|
19
|
+
# @example Get the search results for a query
|
20
|
+
# @client.all_movie_reviews("12345")
|
21
|
+
#
|
22
|
+
# @author Jason Truluck
|
23
|
+
def all_movie_reviews(movie_id, country = "us", per_page = "", page = "", options = {})
|
24
|
+
options.merge!(
|
25
|
+
:review_type => :all,
|
26
|
+
:country => country,
|
27
|
+
:page_limit => per_page,
|
28
|
+
:page => page
|
29
|
+
)
|
30
|
+
reviews(movie_id, options)
|
31
|
+
end
|
32
|
+
|
33
|
+
# Retrieves top_critic reviews for a movie. Results are paginated if they go past the specified page limit
|
34
|
+
#
|
35
|
+
# @see http://developer.rottentomatoes.com/docs/json/v10/Movie_Reviews
|
36
|
+
#
|
37
|
+
# @param [Integer] movie_id The id of the movie from Rotten Tomatoes
|
38
|
+
# @param [String] country Provides localized data for the selected country if available. Otherwise, returns US data.
|
39
|
+
# @param [Integer] page_limit The amount of movie search results to show per page
|
40
|
+
# @param [Integer] page The selected page of movie search results
|
41
|
+
#
|
42
|
+
# @return [Hashie::Mash] Movies reviews Response
|
43
|
+
#
|
44
|
+
# @example Get the search results for a query
|
45
|
+
# @client.top_critic_movie_reviews("12345")
|
46
|
+
#
|
47
|
+
# @author Jason Truluck
|
48
|
+
def top_critic_movie_reviews(movie_id, country = "us", per_page = "", page = "", options = {})
|
49
|
+
options.merge!(
|
50
|
+
:review_type => :top_critic,
|
51
|
+
:country => country,
|
52
|
+
:page_limit => per_page,
|
53
|
+
:page => page
|
54
|
+
)
|
55
|
+
reviews(movie_id, options)
|
56
|
+
end
|
57
|
+
|
58
|
+
# Retrieves dvd reviews for a movie. Results are paginated if they go past the specified page limit
|
59
|
+
#
|
60
|
+
# @see http://developer.rottentomatoes.com/docs/json/v10/Movie_Reviews
|
61
|
+
#
|
62
|
+
# @param [Integer] movie_id The id of the movie from Rotten Tomatoes
|
63
|
+
# @param [String] country Provides localized data for the selected country if available. Otherwise, returns US data.
|
64
|
+
# @param [Integer] page_limit The amount of movie search results to show per page
|
65
|
+
# @param [Integer] page The selected page of movie search results
|
66
|
+
#
|
67
|
+
# @return [Hashie::Mash] Movies reviews Response
|
68
|
+
#
|
69
|
+
# @example Get the search results for a query
|
70
|
+
# @client.dvd_movie_reviews("12345")
|
71
|
+
#
|
72
|
+
# @author Jason Truluck
|
73
|
+
def dvd_movie_reviews(movie_id, country = "us", per_page = "", page = "", options = {})
|
74
|
+
options.merge!(
|
75
|
+
:review_type => :dvd,
|
76
|
+
:country => country,
|
77
|
+
:page_limit => per_page,
|
78
|
+
:page => page
|
79
|
+
)
|
80
|
+
reviews(movie_id, options)
|
81
|
+
end
|
82
|
+
|
83
|
+
private
|
84
|
+
# @private
|
85
|
+
#
|
86
|
+
# General method to handle endpoints for grabing reviews
|
87
|
+
#
|
88
|
+
# @param [Integer] movie_id The id of the movie from Rotten Tomatoes
|
89
|
+
#
|
90
|
+
# @return [Hashie::Mash] Movies reviews Response
|
91
|
+
#
|
92
|
+
# @author Jason Truluck
|
93
|
+
def reviews(movie_id, options)
|
94
|
+
get("movies/#{movie_id}/reviews.json", options)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|