tomato_power 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (70) hide show
  1. data/.gitignore +18 -0
  2. data/.rspec +2 -0
  3. data/Gemfile +4 -0
  4. data/Guardfile +9 -0
  5. data/LICENSE.txt +22 -0
  6. data/README.md +57 -0
  7. data/Rakefile +1 -0
  8. data/lib/tomato_power/api/api.rb +97 -0
  9. data/lib/tomato_power/api/tomato_methods.rb +82 -0
  10. data/lib/tomato_power/client.rb +35 -0
  11. data/lib/tomato_power/helpers/helpers.rb +12 -0
  12. data/lib/tomato_power/helpers/parsers.rb +28 -0
  13. data/lib/tomato_power/movie/actor.rb +12 -0
  14. data/lib/tomato_power/movie/clip.rb +10 -0
  15. data/lib/tomato_power/movie/movie.rb +56 -0
  16. data/lib/tomato_power/movie/review.rb +15 -0
  17. data/lib/tomato_power/version.rb +3 -0
  18. data/lib/tomato_power.rb +22 -0
  19. data/spec/spec_helper.rb +5 -0
  20. data/spec/support/sample_data/no_results +1 -0
  21. data/spec/support/sample_data/sample_actor +5 -0
  22. data/spec/support/sample_data/sample_actors +186 -0
  23. data/spec/support/sample_data/sample_alias +64 -0
  24. data/spec/support/sample_data/sample_clip +6 -0
  25. data/spec/support/sample_data/sample_clips +147 -0
  26. data/spec/support/sample_data/sample_movie +1 -0
  27. data/spec/support/sample_data/sample_movies +46 -0
  28. data/spec/support/sample_data/sample_review +8 -0
  29. data/spec/support/sample_data/sample_reviews +191 -0
  30. data/spec/support/vcr/TomatoPower_API/API_Methods/valid_methods/should_create_methods.yml +598 -0
  31. data/spec/support/vcr/TomatoPower_API/API_options_validation/valid_options/should_consider_0_options_valid.yml +306 -0
  32. data/spec/support/vcr/TomatoPower_API/API_options_validation/valid_options/should_not_raise_error.yml +101 -0
  33. data/spec/support/vcr/TomatoPower_API/List_request/searching_by_title/should_return_a_list_of_movie_objects.yml +101 -0
  34. data/spec/support/vcr/TomatoPower_API/List_request/searching_by_title/should_url_encode_search_string_before_sending.yml +102 -0
  35. data/spec/support/vcr/TomatoPower_API/List_request/should_return_a_list_of_movie_objects.yml +101 -0
  36. data/spec/support/vcr/TomatoPower_API/List_request/should_url_encode_search_string_before_sending.yml +102 -0
  37. data/spec/support/vcr/TomatoPower_API/Movie_request/cast/should_return_cast_of_movie.yml +356 -0
  38. data/spec/support/vcr/TomatoPower_API/Movie_request/clips/should_return_clips_of_movie.yml +638 -0
  39. data/spec/support/vcr/TomatoPower_API/Movie_request/no_results/should_return_error_string_if_no_results_are_found.yml +49 -0
  40. data/spec/support/vcr/TomatoPower_API/Movie_request/reviews/should_return_reviews.yml +271 -0
  41. data/spec/support/vcr/TomatoPower_API/Movie_request/should_return_single_movie.yml +161 -0
  42. data/spec/support/vcr/TomatoPower_API/Movie_request/similar/should_return_similar_movies.yml +121 -0
  43. data/spec/support/vcr/TomatoPower_Client/box_office_movies/should_return_list_of_movies.yml +396 -0
  44. data/spec/support/vcr/TomatoPower_Client/current_release_dvds/should_return_list_of_movies.yml +427 -0
  45. data/spec/support/vcr/TomatoPower_Client/in_theaters_movies/should_return_list_of_movies.yml +380 -0
  46. data/spec/support/vcr/TomatoPower_Client/new_release_dvds/should_return_list_of_movies.yml +392 -0
  47. data/spec/support/vcr/TomatoPower_Client/opening_movies/should_return_list_of_movies.yml +213 -0
  48. data/spec/support/vcr/TomatoPower_Client/search_by_id/should_return_list_of_movies_by_id.yml +88 -0
  49. data/spec/support/vcr/TomatoPower_Client/search_by_title/should_return_list_of_movies_by_title.yml +89 -0
  50. data/spec/support/vcr/TomatoPower_Client/top_rentals/should_return_list_of_movies.yml +409 -0
  51. data/spec/support/vcr/TomatoPower_Client/upcoming_dvds/should_return_list_of_movies.yml +359 -0
  52. data/spec/support/vcr/TomatoPower_Client/upcoming_movies/should_return_list_of_movies.yml +341 -0
  53. data/spec/support/vcr/TomatoPower_Movie/clips/should_return_clips.yml +250 -0
  54. data/spec/support/vcr/TomatoPower_Movie/full_cast/should_return_cast.yml +279 -0
  55. data/spec/support/vcr/TomatoPower_Movie/reviews/should_return_reviews.yml +205 -0
  56. data/spec/support/vcr/TomatoPower_Movie/similar/should_return_similar_movies.yml +231 -0
  57. data/spec/support/vcr/TomatoPower_Movie/similar/should_return_similars.yml +81 -0
  58. data/spec/support/vcr.rb +13 -0
  59. data/spec/unit_specs/actor_spec.rb +16 -0
  60. data/spec/unit_specs/api_spec.rb +126 -0
  61. data/spec/unit_specs/client_spec.rb +73 -0
  62. data/spec/unit_specs/clip_spec.rb +14 -0
  63. data/spec/unit_specs/helpers.rb +50 -0
  64. data/spec/unit_specs/helpers_spec.rb +4 -0
  65. data/spec/unit_specs/movie_spec.rb +75 -0
  66. data/spec/unit_specs/parsers_spec.rb +55 -0
  67. data/spec/unit_specs/review_spec.rb +17 -0
  68. data/spec/unit_specs/tomato_power_spec.rb +6 -0
  69. data/tomato_power.gemspec +29 -0
  70. metadata +295 -0
@@ -0,0 +1,126 @@
1
+ require 'spec_helper'
2
+
3
+ module TomatoPower
4
+ describe TomatoPower::API , :vcr => {:record => :new_episodes} do
5
+ before do
6
+ @api = TomatoPower::API.new TestHelpers::api_key
7
+ end
8
+ describe "API Methods" do
9
+ describe "invalid methods" do
10
+ invalid_api_methods = [:invliad_search, :invalid_lookup]
11
+ invalid_api_methods.each do |method|
12
+
13
+ it "should raise error when called" do
14
+ expect{ @api.send method }.to raise_error(NoMethodError)
15
+ end
16
+
17
+ it "should not respond" do
18
+ @api.respond_to?(method).should be_false
19
+ end
20
+ end
21
+ end
22
+
23
+ describe "valid methods" do
24
+ valid_api_methods = [:movies_search, :upcoming_dvds, :opening_movies]
25
+
26
+ it "should create methods" do
27
+ valid_api_methods.each do |method|
28
+ expect{ @api.send method }.not_to raise_error(NoMethodError)
29
+ end
30
+
31
+ end
32
+ it "should respond" do
33
+ valid_api_methods.each do |method|
34
+ expect { respond_to? method}.to be_true
35
+ end
36
+ end
37
+ end
38
+ end
39
+
40
+ describe "API options validation" do
41
+
42
+ describe "valid options" do
43
+
44
+ it "should not raise error" do
45
+ expect {@api.movies_search({:q => "jack",:page => 1,
46
+ :page_limit => 2})}.not_to raise_error
47
+ end
48
+
49
+ it "should consider 0 options valid" do
50
+ expect {@api.box_office_movies}.not_to raise_error
51
+ expect {@api.movies_search}.not_to raise_error
52
+ end
53
+
54
+ end
55
+
56
+ describe "invalid options" do
57
+ it "should raise error" do
58
+ expect {@api.movies_search({:invalid => "jack",:invalid => 1,
59
+ :invalid => 2})}.to raise_error
60
+ end
61
+ end
62
+ end
63
+
64
+ describe "List request" do
65
+
66
+ describe "searching by title" do
67
+ it "should return a list of movie objects" do
68
+ movies = @api.movies_search({:q => "jack", :page_limit => 2})
69
+ movies.should be_kind_of(Array)
70
+ movies[0].should be_kind_of(TomatoPower::Movie)
71
+ end
72
+
73
+ it "should url encode search string before sending" do
74
+ movies = @api.movies_search({:q => "Mission Impossible", :page_limit => 2})
75
+ movies.should be_kind_of(Array)
76
+ movies[0].should be_kind_of(TomatoPower::Movie)
77
+ end
78
+ end
79
+ end
80
+
81
+ describe "Movie request" do
82
+ before do
83
+ @movie = TomatoPower::Movie.new TestHelpers::sample :movie
84
+ end
85
+
86
+ describe "cast" do
87
+ it "should return cast of movie" do
88
+ cast = @api.movie_cast({:movie_id => @movie.id})
89
+ cast.should be_kind_of(Array)
90
+ cast[0].should be_kind_of(Actor)
91
+ end
92
+ end
93
+
94
+ describe "clips" do
95
+ it "should return clips of movie" do
96
+ clips = @api.movie_clips({:movie_id => @movie.id})
97
+ clips.should be_kind_of(Array)
98
+ clips[0].should be_kind_of(Clip)
99
+ end
100
+ end
101
+
102
+ describe "reviews" do
103
+ it "should return reviews" do
104
+ reviews = @api.movie_reviews({:movie_id => @movie.id})
105
+ reviews.should be_kind_of(Array)
106
+ reviews[0].should be_kind_of(Review)
107
+ end
108
+ end
109
+
110
+ describe "similar" do
111
+ it "should return similar movies" do
112
+ similar = @api.movie_similar({:movie_id => @movie.id})
113
+ similar.should be_kind_of(Array)
114
+ similar[0].should be_kind_of(Movie)
115
+ end
116
+ end
117
+ describe "no results" do
118
+ it "should return error string if no results are found" do
119
+ reviews = @api.movie_reviews({:movie_id => 1})
120
+ reviews.should be_kind_of(Array)
121
+ reviews[0].include?('No Results').should be_true
122
+ end
123
+ end
124
+ end
125
+ end
126
+ end
@@ -0,0 +1,73 @@
1
+ require 'spec_helper'
2
+
3
+ module TomatoPower
4
+ describe TomatoPower::Client, :vcr => {:record => :new_episodes} do
5
+ before do
6
+ @client = TomatoPower.new TestHelpers::api_key
7
+ end
8
+ describe "search_by_title" do
9
+ it "should return list of movies by title" do
10
+ movies = @client.search_by_title("Mission Impossible", {page_limit: 1, page:1})
11
+ movies.should be_kind_of(Array)
12
+ movies[0].title.include?("Mission")
13
+ end
14
+ end
15
+ describe "search_by_id" do
16
+ it "should return list of movies by id" do
17
+ movies = @client.search_by_id "0031381"
18
+ movies.should be_kind_of(Array)
19
+ movies[0].title.include?("Gone with the Wind")
20
+ end
21
+ end
22
+ describe "box_office_movies" do
23
+ it "should return list of movies" do
24
+ movies = @client.box_office_movies({limit: 20, country: 'us'})
25
+ movies.should be_kind_of(Array)
26
+ movies.length <= 20
27
+ end
28
+ end
29
+ describe "in_theaters_movies" do
30
+ it "should return list of movies" do
31
+ movies = @client.movies_in_theaters({page_limit: 20, page: 1, country: 'us'})
32
+ movies.should be_kind_of(Array)
33
+ end
34
+ end
35
+ describe "opening_movies" do
36
+ it "should return list of movies" do
37
+ movies = @client.opening_movies({limit: 20, country: 'us'})
38
+ movies.should be_kind_of(Array)
39
+ movies.length <= 20
40
+ end
41
+ end
42
+ describe "upcoming_movies" do
43
+ it "should return list of movies" do
44
+ movies = @client.upcoming_movies({page_limit: 21, page: 1, country: 'us'})
45
+ movies.should be_kind_of(Array)
46
+ end
47
+ end
48
+ describe "top_rentals" do
49
+ it "should return list of movies" do
50
+ movies = @client.top_rentals({limit: 21,country: 'us'})
51
+ movies.should be_kind_of(Array)
52
+ end
53
+ end
54
+ describe "current_release_dvds" do
55
+ it "should return list of movies" do
56
+ movies = @client.current_release_dvds({page_limit: 21,page: 1,country:'us'})
57
+ movies.should be_kind_of(Array)
58
+ end
59
+ end
60
+ describe "new_release_dvds" do
61
+ it "should return list of movies" do
62
+ movies = @client.new_release_dvds({page_limit: 21,page: 1,country:'us'})
63
+ movies.should be_kind_of(Array)
64
+ end
65
+ end
66
+ describe "upcoming_dvds" do
67
+ it "should return list of movies" do
68
+ movies = @client.upcoming_dvds({page_limit: 21,page: 1,country:'us'})
69
+ movies.should be_kind_of(Array)
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+
3
+ module TomatoPower
4
+ describe TomatoPower::Clip do
5
+ before do
6
+ @clip = Clip.new TestHelpers::sample :clip
7
+ end
8
+ describe "attributes" do
9
+ it { should respond_to ( :title )}
10
+ it { should respond_to ( :duration )}
11
+ it { should respond_to ( :thumbnail )}
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,50 @@
1
+ module TestHelpers
2
+ String.class_eval do
3
+ def is_valid_url?
4
+ uri = URI.parse self
5
+ uri.kind_of? URI::HTTP
6
+ rescue URI::InvalidURIError
7
+ false
8
+ end
9
+ end
10
+
11
+ def self.api_key
12
+ begin
13
+ api_key = ENV.fetch("ROTTEN_TOMATOES_API_KEY")
14
+ rescue
15
+ api_key_file = File.join(File.expand_path(File.dirname(__FILE__)),
16
+ '../config', 'tomato_power_config.yaml')
17
+ raise "tomato_power_config not found" unless File.exists?(api_key_file)
18
+ ENV["ROTTEN_TOMATOES_API_KEY"] =
19
+ YAML::load(File.open(api_key_file))["ROTTEN_TOMATOES_API_KEY"]
20
+ end
21
+ end
22
+
23
+ def self.sample sample_type
24
+ case sample_type
25
+ when :movie
26
+ file = File.join(File.dirname(__FILE__), '../support/sample_data/sample_movie')
27
+ when :movies
28
+ file = File.join(File.dirname(__FILE__), '../support/sample_data/sample_movies')
29
+ when :actor
30
+ file = File.join(File.dirname(__FILE__), '../support/sample_data/sample_actor')
31
+ when :actors
32
+ file = File.join(File.dirname(__FILE__), '../support/sample_data/sample_actors')
33
+ when :clip
34
+ file = File.join(File.dirname(__FILE__), '../support/sample_data/sample_clip')
35
+ when :clips
36
+ file = File.join(File.dirname(__FILE__), '../support/sample_data/sample_clips')
37
+ when :review
38
+ file = File.join(File.dirname(__FILE__), '../support/sample_data/sample_review')
39
+ when :reviews
40
+ file = File.join(File.dirname(__FILE__), '../support/sample_data/sample_reviews')
41
+ when :alias
42
+ file = File.join(File.dirname(__FILE__), '../support/sample_data/sample_alias')
43
+ when :no_results
44
+ file = File.join(File.dirname(__FILE__), '../support/sample_data/no_results')
45
+ else
46
+ raise ArgumentError.new("Unrecognized type: #{type}")
47
+ end
48
+ JSON.parse(File.open(file).read)
49
+ end
50
+ end
@@ -0,0 +1,4 @@
1
+ require_relative 'helpers'
2
+
3
+ describe "Helpers" do
4
+ end
@@ -0,0 +1,75 @@
1
+ require 'spec_helper'
2
+ require 'json'
3
+
4
+ module TomatoPower
5
+ describe TomatoPower::Movie, :vcr => { :record => :new_episodes} do
6
+ before do
7
+ TomatoPower::api = TomatoPower::API.new TestHelpers::api_key
8
+ @movie = Movie.new TestHelpers::sample :movie
9
+ subject { @movie }
10
+ end
11
+
12
+ describe "attributes" do
13
+ it { should respond_to(:id)}
14
+ it { should respond_to(:info)}
15
+ it { should respond_to(:abridged_cast)}
16
+ it { should respond_to(:title)}
17
+ it { should respond_to(:ratings)}
18
+ it { should respond_to(:mpaa_rating)}
19
+ it { should respond_to(:runtime)}
20
+ it { should respond_to(:release_dates)}
21
+ it { should respond_to(:synopsis)}
22
+ it { should respond_to(:posters)}
23
+ it { should respond_to(:alternate_ids)}
24
+ it { should respond_to(:links)}
25
+ it { should respond_to(:abridged_directors)}
26
+ it { should respond_to(:studio)}
27
+ end
28
+
29
+ describe "valid methods" do
30
+ it "should respond to vaild methods" do
31
+ valid_api_methods = [:full_cast, :clips, :reviews]
32
+ valid_api_methods.each do |method|
33
+ expect { respond_to? method}.to be_true
34
+ end
35
+ end
36
+ end
37
+ describe "invalid methods" do
38
+ it "should not respond" do
39
+ invalid_api_methods = [:invalid_method, :invalid_clips, :invalid_reviews]
40
+ invalid_api_methods.each do |method|
41
+ @movie.respond_to?(method).should be_false
42
+ end
43
+ end
44
+ end
45
+ describe "full_cast" do
46
+ it "should return cast" do
47
+ cast = @movie.full_cast
48
+ cast.should be_kind_of(Array)
49
+ cast[0].should be_kind_of(Actor)
50
+ end
51
+ end
52
+ describe "clips" do
53
+ it "should return clips" do
54
+ clips = @movie.clips
55
+ clips.should be_kind_of(Array)
56
+ clips[0].should be_kind_of(Clip)
57
+ end
58
+ end
59
+ describe "reviews" do
60
+ it "should return reviews" do
61
+ reviews = @movie.reviews({:review_type => "all", :page => 1,
62
+ :country => 'us'})
63
+ reviews.should be_kind_of(Array)
64
+ reviews[0].should be_kind_of(Review)
65
+ end
66
+ end
67
+ describe "similar" do
68
+ it "should return similar movies" do
69
+ similar = @movie.similar
70
+ similar.should be_kind_of(Array)
71
+ similar[0].should be_kind_of(Movie)
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,55 @@
1
+ require 'spec_helper'
2
+ require 'json'
3
+
4
+ module TomatoPower
5
+ module Parser
6
+ describe TomatoPower::Parser do
7
+ describe "parse" do
8
+ before do
9
+ @movies = TestHelpers::sample :movies
10
+ @actors = TestHelpers::sample :actors
11
+ @clips = TestHelpers::sample :clips
12
+ @reviews = TestHelpers::sample :reviews
13
+ @no_results = TestHelpers::sample :no_results
14
+ @alias = TestHelpers::sample :alias
15
+ end
16
+ describe "movies" do
17
+ it "should return correct payload" do
18
+ payload = TomatoPower::Parser::parse @movies
19
+ payload.first.should be_kind_of(TomatoPower::Movie)
20
+ end
21
+ end
22
+ describe "actors" do
23
+ it "should return correct payload" do
24
+ payload = TomatoPower::Parser::parse @actors
25
+ payload.first.should be_kind_of(TomatoPower::Actor)
26
+ end
27
+ end
28
+ describe "clips" do
29
+ it "should return correct payload" do
30
+ payload = TomatoPower::Parser::parse @clips
31
+ payload.first.should be_kind_of(TomatoPower::Clip)
32
+ end
33
+ end
34
+ describe "reviews" do
35
+ it "should return correct payload" do
36
+ payload = TomatoPower::Parser::parse @reviews
37
+ payload.first.should be_kind_of(TomatoPower::Review)
38
+ end
39
+ end
40
+ describe "alias" do
41
+ it "should return correct payload" do
42
+ payload = TomatoPower::Parser::parse @alias
43
+ payload.first.should be_kind_of(TomatoPower::Movie)
44
+ end
45
+ end
46
+ describe "No results" do
47
+ it "should return payload with no results string" do
48
+ payload = TomatoPower::Parser::parse @no_results
49
+ payload.first.include?("No Results").should be_true
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ module TomatoPower
4
+ describe TomatoPower::Review do
5
+ before do
6
+ @review = TomatoPower::Review.new TestHelpers::sample :review
7
+ end
8
+ describe "attributes" do
9
+ it { should respond_to(:critic)}
10
+ it { should respond_to(:date)}
11
+ it { should respond_to(:freshness)}
12
+ it { should respond_to(:publication)}
13
+ it { should respond_to(:quote)}
14
+ it { should respond_to(:links)}
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,6 @@
1
+ require 'spec_helper'
2
+
3
+ module TomatoPower
4
+ describe TomatoPower do
5
+ end
6
+ end
@@ -0,0 +1,29 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'tomato_power/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "tomato_power"
8
+ gem.version = TomatoPower::VERSION
9
+ gem.authors = ["Sean Kay"]
10
+ gem.email = ["f.sean.kay@gmail.com\n"]
11
+ gem.description = %q{RottenTomatoes API wrapper}
12
+ gem.summary = %q{Easily access Rotten Tomatoes API methods}
13
+ gem.homepage = ""
14
+
15
+ gem.add_dependency "active_support"
16
+
17
+ gem.add_development_dependency "rspec"
18
+ gem.add_development_dependency "pry"
19
+ gem.add_development_dependency "fuubar"
20
+ gem.add_development_dependency "vcr"
21
+ gem.add_development_dependency "webmock"
22
+ gem.add_development_dependency "guard-rspec"
23
+ gem.add_development_dependency "rb-fsevent"
24
+
25
+ gem.files = `git ls-files`.split($/)
26
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
27
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
28
+ gem.require_paths = ["lib"]
29
+ end