traktr 0.5.0 → 0.7.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 (57) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +4 -0
  3. data/lib/traktr.rb +1 -2
  4. data/lib/traktr/account.rb +5 -18
  5. data/lib/traktr/activity.rb +20 -45
  6. data/lib/traktr/activity/user.rb +12 -27
  7. data/lib/traktr/calendar.rb +13 -0
  8. data/lib/traktr/client.rb +52 -1
  9. data/lib/traktr/comment.rb +18 -0
  10. data/lib/traktr/endpoint.rb +38 -0
  11. data/lib/traktr/genres.rb +11 -0
  12. data/lib/traktr/lists.rb +22 -0
  13. data/lib/traktr/lists/items.rb +15 -0
  14. data/lib/traktr/movie.rb +29 -93
  15. data/lib/traktr/movies.rb +4 -22
  16. data/lib/traktr/network.rb +27 -0
  17. data/lib/traktr/rate.rb +30 -0
  18. data/lib/traktr/recommendations.rb +19 -0
  19. data/lib/traktr/search.rb +11 -46
  20. data/lib/traktr/server.rb +7 -0
  21. data/lib/traktr/show.rb +32 -99
  22. data/lib/traktr/show/episode.rb +13 -54
  23. data/lib/traktr/show/season.rb +3 -20
  24. data/lib/traktr/shows.rb +4 -22
  25. data/lib/traktr/user.rb +33 -36
  26. data/lib/traktr/user/calendar.rb +4 -12
  27. data/lib/traktr/user/library.rb +9 -7
  28. data/lib/traktr/user/library/movies.rb +6 -24
  29. data/lib/traktr/user/library/shows.rb +6 -24
  30. data/lib/traktr/user/network.rb +5 -23
  31. data/lib/traktr/user/progress.rb +4 -17
  32. data/lib/traktr/user/ratings.rb +5 -23
  33. data/lib/traktr/user/watchlist.rb +5 -23
  34. data/lib/traktr/version.rb +1 -1
  35. data/spec/calendar_spec.rb +78 -0
  36. data/spec/comment_spec.rb +65 -0
  37. data/spec/genres_spec.rb +33 -0
  38. data/spec/lists_items_spec.rb +65 -0
  39. data/spec/lists_spec.rb +64 -0
  40. data/spec/movie_spec.rb +8 -0
  41. data/spec/network_spec.rb +94 -0
  42. data/spec/rate_spec.rb +110 -0
  43. data/spec/recommendations_spec.rb +71 -0
  44. data/spec/server_spec.rb +25 -0
  45. data/spec/show_episode_spec.rb +8 -0
  46. data/spec/show_spec.rb +12 -0
  47. data/spec/spec.yaml.sample +11 -4
  48. data/spec/spec_helper.rb +13 -4
  49. data/spec/user_calendar_spec.rb +51 -0
  50. data/spec/user_library_movies_spec.rb +59 -0
  51. data/spec/user_library_shows_spec.rb +59 -0
  52. data/spec/user_network_spec.rb +59 -0
  53. data/spec/user_progress_spec.rb +47 -0
  54. data/spec/user_ratings_spec.rb +59 -0
  55. data/spec/user_spec.rb +115 -0
  56. data/spec/user_watchlist_spec.rb +59 -0
  57. metadata +46 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 35dcdf1ab6c39e98d9b42e94f9200abe412e3a7b
4
- data.tar.gz: 54f5fe728f8f6b69ba87aa982ddc2fed6aad30c1
3
+ metadata.gz: db67a432e2a5b6097971f8c15ae75f5932a3e074
4
+ data.tar.gz: 0a9c53bb550ff334c20b8748ca60d385c98f0397
5
5
  SHA512:
6
- metadata.gz: 8f9d95f33efc71ca758f0b77d24a7b3072d3e2dc9b55097a0b0d90e0b3dfee4ecacc0cd159ec8beab91aee4195d95c06307cbd490010fa44c4b97dfb3b8739f4
7
- data.tar.gz: 0d7679d865a45535648f005555082bd6bdbb1572094fb199cec6275b426192e914f071e0db49bcd43934d521e4f3c5692a4ff2ecda545da56abac481901deeae
6
+ metadata.gz: 7ac01b20430e9209469e3172db3fbf8aeb40b7db919c1990493aaf4e1b6b138a02a6c1e0bda6d27df2e7aa19f7e4cf73c85366a7177e5ce09bc744e3f1074478
7
+ data.tar.gz: c262df780c94cfa49753eab8c458e075b291fee20e40bdc9e34e79f6a76cf257bb096cdae2773182137a6c63b1946e262b71e4a49e75282c7ba116c6dc550e27
data/Rakefile CHANGED
@@ -1 +1,5 @@
1
1
  require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+ task :build => :spec
@@ -4,8 +4,7 @@ require 'mash'
4
4
 
5
5
  module Traktr
6
6
  include HTTParty
7
- base_uri "http://api.trakt.tv"
7
+ base_uri "https://api.trakt.tv"
8
8
  end
9
9
 
10
-
11
10
  require 'traktr/client'
@@ -1,26 +1,13 @@
1
1
  module Traktr
2
- class Account
3
- include HTTParty
4
- base_uri File.join(Traktr.base_uri, "account")
5
-
6
- def initialize(client)
7
- @client = client
8
- end
9
-
2
+ class Account < Endpoint
10
3
  def settings
11
- data = { username: @client.username, password: @client.password }
12
- response = self.class.post("/" + File.join("settings", @client.api_key), body: data.to_json, headers: { 'Content-Type' => 'application/json'})
13
- raise ResponseError.new(response) if response.code != 200
14
-
15
- Mash.new(response.parsed_response)
4
+ response = self.class.post("/" + File.join("settings", @client.api_key), body: @auth.to_json, headers: { 'Content-Type' => 'application/json'})
5
+ parse_response(response)
16
6
  end
17
7
 
18
8
  def test
19
- data = { username: @client.username, password: @client.password }
20
- response = self.class.post("/" + File.join("test", @client.api_key), body: data.to_json, headers: { 'Content-Type' => 'application/json'})
21
- raise ResponseError.new(response) if response.code != 200
22
-
23
- Mash.new(response.parsed_response)
9
+ response = self.class.post("/" + File.join("test", @client.api_key), body: @auth.to_json, headers: { 'Content-Type' => 'application/json'})
10
+ parse_response(response)
24
11
  end
25
12
  end
26
13
  end
@@ -1,70 +1,45 @@
1
1
  module Traktr
2
- class Activity
3
- include HTTParty
4
- base_uri File.join(Traktr.base_uri, 'activity')
5
-
6
- def initialize(client)
7
- @client = client
8
- end
9
-
10
- ##
11
- ## activity GET methods
12
- ##
2
+ class Activity < Endpoint
13
3
  def community(types = :all, actions = :all, start_ts = 0, end_ts = Time.now.to_i)
14
- response = self.class.get('/' + File.join('community.json', @client.api_key, types.to_s, actions.to_s, start_ts.to_s, end_ts.to_s))
15
- raise ResponseError.new(response) if response.code != 200
16
-
17
- Mash.new(response.parsed_response)
4
+ types = types.class == Array ? types.join(",") : types.to_s
5
+ actions = actions.class == Array ? actions.join(",") : actions.to_s
6
+ parse_response self.class.get('/' + File.join('community.json', @client.api_key, types, actions, start_ts.to_s, end_ts.to_s))
18
7
  end
19
8
 
20
9
  def episodes(title, season, episode, actions = :all, start_ts = 0, end_ts = Time.now.to_i)
21
- response = self.class.get('/' + File.join('episodes.json', @client.api_key, title, season.to_s, episode.to_s, actions.to_s, start_ts.to_s, end_ts.to_s))
22
- raise ResponseError.new(response) if response.code != 200
23
-
24
- Mash.new(response.parsed_response)
25
- end
10
+ actions = actions.class == Array ? actions.join(",") : actions.to_s
11
+ parse_response self.class.get('/' + File.join('episodes.json', @client.api_key, title, season.to_s, episode.to_s, actions, start_ts.to_s, end_ts.to_s))
12
+ end
26
13
 
27
14
  def movies(title, actions = :all, start_ts = 0, end_ts = Time.now.to_i)
28
- response = self.class.get('/' + File.join('movies.json', @client.api_key, title, actions.to_s, start_ts.to_s, end_ts.to_s))
29
- raise ResponseError.new(response) if response.code != 200
30
-
31
- Mash.new(response.parsed_response)
15
+ actions = actions.class == Array ? actions.join(",") : actions.to_s
16
+ parse_response self.class.get('/' + File.join('movies.json', @client.api_key, title, actions, start_ts.to_s, end_ts.to_s))
32
17
  end
33
18
 
34
19
  def seasons(title, season, actions = :all, start_ts = 0, end_ts = Time.now.to_i)
35
- response = self.class.get('/' + File.join('seasons.json', @client.api_key, title, season.to_s, actions.to_s, start_ts.to_s, end_ts.to_s))
36
- raise ResponseError.new(response) if response.code != 200
37
-
38
- Mash.new(response.parsed_response)
20
+ actions = actions.class == Array ? actions.join(",") : actions.to_s
21
+ parse_response self.class.get('/' + File.join('seasons.json', @client.api_key, title, season.to_s, actions, start_ts.to_s, end_ts.to_s))
39
22
  end
40
23
 
41
24
  def shows(title, actions = :all, start_ts = 0, end_ts = Time.now.to_i)
42
- response = self.class.get('/' + File.join('shows.json', @client.api_key, title, actions.to_s, start_ts.to_s, end_ts.to_s))
43
- raise ResponseError.new(response) if response.code != 200
44
-
45
- Mash.new(response.parsed_response)
25
+ actions = actions.class == Array ? actions.join(",") : actions.to_s
26
+ parse_response self.class.get('/' + File.join('shows.json', @client.api_key, title, actions, start_ts.to_s, end_ts.to_s))
46
27
  end
47
28
 
48
29
  def user(username = nil, types = :all, actions = :all, start_ts = 0, end_ts = Time.now.to_i)
49
30
  if username
50
- response = self.class.get('/' + File.join('user.json', @client.api_key, username, types.to_s, actions.to_s, start_ts.to_s, end_ts.to_s))
51
- raise ResponseError.new(response) if response.code != 200
52
-
53
- Mash.new(response.parsed_response)
31
+ types = types.class == Array ? types.join(",") : types.to_s
32
+ actions = actions.class == Array ? actions.join(",") : actions.to_s
33
+ parse_response self.class.get('/' + File.join('user.json', @client.api_key, username, types, actions, start_ts.to_s, end_ts.to_s))
54
34
  else
55
35
  @user ||= Traktr::Activity::User.new(@client)
56
36
  end
57
37
  end
58
38
 
59
- ##
60
- ## activity POST methods
61
- ##
62
39
  def friends(types = :all, actions = :all, start_ts = 0, end_ts = Time.now.to_i)
63
- data = { username: @client.username, password: @client.password }
64
- response = self.class.post('/' + File.join('friends.json', @client.api_key, types.to_s, actions.to_s, start_ts.to_s, end_ts.to_s), body: data.to_json, headers: { 'Content-Type' => 'application/json'})
65
- raise ResponseError.new(response) if response.code != 200
66
-
67
- Mash.new(response.parsed_response)
68
- end
40
+ types = types.class == Array ? types.join(",") : types.to_s
41
+ actions = actions.class == Array ? actions.join(",") : actions.to_s
42
+ parse_response self.class.post('/' + File.join('friends.json', @client.api_key, types, actions, start_ts.to_s, end_ts.to_s), body: @auth.to_json, headers: { 'Content-Type' => 'application/json'})
43
+ end
69
44
  end
70
45
  end
@@ -1,40 +1,25 @@
1
1
  module Traktr
2
2
  class Activity
3
- class User
4
- include HTTParty
5
- base_uri File.join(Traktr::Activity.base_uri, "user")
6
-
7
- def initialize(client)
8
- @client = client
9
- end
10
-
3
+ class User < Endpoint
11
4
  def episodes(username, title, season, episode, actions = :all, start_ts = 0, end_ts = Time.now.to_i)
12
- response = self.class.get('/' + File.join('episodes.json', @client.api_key, username, title, season.to_s, episode.to_s, actions.to_s, start_ts.to_s, end_ts.to_s))
13
- raise ResponseError.new(response) if response.code != 200
14
-
15
- Mash.new(response.parsed_response)
16
- end
5
+ actions = actions.class == Array ? actions.join(",") : actions.to_s
6
+ parse_response self.class.get('/' + File.join('episodes.json', @client.api_key, username, title, season.to_s, episode.to_s, actions, start_ts.to_s, end_ts.to_s))
7
+ end
17
8
 
18
9
  def movies(username, title, actions = :all, start_ts = 0, end_ts = Time.now.to_i)
19
- response = self.class.get('/' + File.join('movies.json', @client.api_key, username, title, actions.to_s, start_ts.to_s, end_ts.to_s))
20
- raise ResponseError.new(response) if response.code != 200
21
-
22
- Mash.new(response.parsed_response)
10
+ actions = actions.class == Array ? actions.join(",") : actions.to_s
11
+ parse_response self.class.get('/' + File.join('movies.json', @client.api_key, username, title, actions, start_ts.to_s, end_ts.to_s))
23
12
  end
24
13
 
25
14
  def seasons(username, title, season, actions = :all, start_ts = 0, end_ts = Time.now.to_i)
26
- response = self.class.get('/' + File.join('seasons.json', @client.api_key, username, title, season.to_s, actions.to_s, start_ts.to_s, end_ts.to_s))
27
- raise ResponseError.new(response) if response.code != 200
28
-
29
- Mash.new(response.parsed_response)
15
+ actions = actions.class == Array ? actions.join(",") : actions.to_s
16
+ parse_response self.class.get('/' + File.join('seasons.json', @client.api_key, username, title, season.to_s, actions, start_ts.to_s, end_ts.to_s))
30
17
  end
31
18
 
32
19
  def shows(username, title, actions = :all, start_ts = 0, end_ts = Time.now.to_i)
33
- response = self.class.get('/' + File.join('shows.json', @client.api_key, username, title, actions.to_s, start_ts.to_s, end_ts.to_s))
34
- raise ResponseError.new(response) if response.code != 200
35
-
36
- Mash.new(response.parsed_response)
37
- end
20
+ actions = actions.class == Array ? actions.join(",") : actions.to_s
21
+ parse_response self.class.get('/' + File.join('shows.json', @client.api_key, username, title, actions, start_ts.to_s, end_ts.to_s))
22
+ end
38
23
  end
39
24
  end
40
- end
25
+ end
@@ -0,0 +1,13 @@
1
+ module Traktr
2
+ class Calendar < Endpoint
3
+ def premieres(date = Date.today, days = 7)
4
+ date = date.class == Date ? date.strftime("%Y%m%d") : date.to_s
5
+ parse_response self.class.get('/' + File.join('premieres.json', @client.api_key, date, days.to_s), :basic_auth => @auth)
6
+ end
7
+
8
+ def shows(date = Date.today, days = 7)
9
+ date = date.class == Date ? date.strftime("%Y%m%d") : date.to_s
10
+ parse_response self.class.get('/' + File.join('shows.json', @client.api_key, date, days.to_s), :basic_auth => @auth)
11
+ end
12
+ end
13
+ end
@@ -1,16 +1,35 @@
1
1
  require 'digest/sha1'
2
2
 
3
+ require 'traktr/endpoint'
4
+
3
5
  require 'traktr/account'
4
6
  require 'traktr/activity'
5
7
  require 'traktr/activity/user'
8
+ require 'traktr/calendar'
9
+ require 'traktr/comment'
10
+ require 'traktr/genres'
11
+ require 'traktr/lists'
12
+ require 'traktr/lists/items'
6
13
  require 'traktr/movie'
7
14
  require 'traktr/movies'
15
+ require 'traktr/network'
16
+ require 'traktr/rate'
17
+ require 'traktr/recommendations'
8
18
  require 'traktr/search'
19
+ require 'traktr/server'
9
20
  require 'traktr/show'
10
21
  require 'traktr/show/episode'
11
22
  require 'traktr/show/season'
12
23
  require 'traktr/shows'
13
24
  require 'traktr/user'
25
+ require 'traktr/user/calendar'
26
+ require 'traktr/user/library'
27
+ require 'traktr/user/library/movies'
28
+ require 'traktr/user/library/shows'
29
+ require 'traktr/user/network'
30
+ require 'traktr/user/progress'
31
+ require 'traktr/user/ratings'
32
+ require 'traktr/user/watchlist'
14
33
  require 'traktr/version'
15
34
 
16
35
 
@@ -32,6 +51,26 @@ module Traktr
32
51
  @activity ||= Traktr::Activity.new(self)
33
52
  end
34
53
 
54
+ def calendar
55
+ @calendar ||= Traktr::Calendar.new(self)
56
+ end
57
+
58
+ def comment
59
+ @comment ||= Traktr::Comment.new(self)
60
+ end
61
+
62
+ def genres
63
+ @genres ||= Traktr::Genres.new(self)
64
+ end
65
+
66
+ def lists
67
+ @lists ||= Traktr::Lists.new(self)
68
+ end
69
+
70
+ def network
71
+ @network ||= Traktr::Network.new(self)
72
+ end
73
+
35
74
  def movie
36
75
  @movie ||= Traktr::Movie.new(self)
37
76
  end
@@ -40,10 +79,22 @@ module Traktr
40
79
  @movies ||= Traktr::Movies.new(self)
41
80
  end
42
81
 
82
+ def rate
83
+ @rate ||= Traktr::Rate.new(self)
84
+ end
85
+
86
+ def recommendations
87
+ @recommendations ||= Traktr::Recommendations.new(self)
88
+ end
89
+
43
90
  def search
44
91
  @search ||= Traktr::Search.new(self)
45
92
  end
46
93
 
94
+ def server
95
+ @server ||= Traktr::Server.new(self)
96
+ end
97
+
47
98
  def show
48
99
  @show ||= Traktr::Show.new(self)
49
100
  end
@@ -60,4 +111,4 @@ module Traktr
60
111
  @version ||= Traktr::Version.new(self)
61
112
  end
62
113
  end
63
- end
114
+ end
@@ -0,0 +1,18 @@
1
+ module Traktr
2
+ class Comment < Endpoint
3
+ def episode( data )
4
+ data.merge!(@auth.merge({ review: data[:comment].split(/\s+/).length > 200 }))
5
+ parse_response self.class.post('/' + File.join('episode', @client.api_key), body: data.to_json, headers: { 'Content-Type' => 'application/json'})
6
+ end
7
+
8
+ def movie( data )
9
+ data.merge!(@auth.merge({ review: data[:comment].split(/\s+/).length > 200 }))
10
+ parse_response self.class.post('/' + File.join('movie', @client.api_key), body: data.to_json, headers: { 'Content-Type' => 'application/json'})
11
+ end
12
+
13
+ def show( data )
14
+ data.merge!(@auth.merge({ review: data[:comment].split(/\s+/).length > 200 }))
15
+ parse_response self.class.post('/' + File.join('show', @client.api_key), body: data.to_json, headers: { 'Content-Type' => 'application/json'})
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,38 @@
1
+ module Traktr
2
+ class Endpoint
3
+ include HTTParty
4
+
5
+ def initialize(client)
6
+ self.class.base_uri File.join(Traktr.base_uri, self.class.to_s.split("::")[1..-1].join("/").downcase)
7
+ @client = client
8
+ @auth = { username: @client.username, password: @client.password }
9
+ end
10
+
11
+ private
12
+
13
+ def parse_response( response )
14
+ raise ResponseError.new(response) if response.code != 200
15
+ data = response.parsed_response
16
+ if data.class == Array
17
+ data.collect { |i| Mash.new(i) }
18
+ elsif data.class == Hash
19
+ Mash.new(data)
20
+ elsif data.class == String
21
+ #
22
+ # TODO: Trakt's response header's "Content-Type" parameter is sometimes set to "text/html",
23
+ # but HTTParty needs it to be "application/json" to correctly parse.
24
+ #
25
+ # Endpoints with this issue are:
26
+ # - 'lists/items/add'
27
+ # - 'movie/library'
28
+ # - 'movie/watchlist'
29
+ # - 'movie/seen'
30
+ # - 'show/watchlist'
31
+ #
32
+ Mash.new(JSON.parse(response))
33
+ else
34
+ data
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,11 @@
1
+ module Traktr
2
+ class Genres < Endpoint
3
+ def movies
4
+ parse_response self.class.get('/' + File.join('movies.json', @client.api_key))
5
+ end
6
+
7
+ def shows
8
+ parse_response self.class.get('/' + File.join('shows.json', @client.api_key))
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,22 @@
1
+ module Traktr
2
+ class Lists < Endpoint
3
+ def add( data )
4
+ data.merge!(@auth)
5
+ parse_response self.class.post('/' + File.join('add', @client.api_key), body: data.to_json, headers: { 'Content-Type' => 'application/json'})
6
+ end
7
+
8
+ def delete( slug )
9
+ data = @auth.merge({:slug => slug})
10
+ parse_response self.class.post('/' + File.join('delete', @client.api_key), body: data.to_json, headers: { 'Content-Type' => 'application/json'})
11
+ end
12
+
13
+ def update( slug, data )
14
+ data.merge!(@auth.merge({:slug => slug}))
15
+ parse_response self.class.post('/' + File.join('update', @client.api_key), body: data.to_json, headers: { 'Content-Type' => 'application/json'})
16
+ end
17
+
18
+ def items
19
+ @items ||= Traktr::Lists::Items.new(@client)
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,15 @@
1
+ module Traktr
2
+ class Lists
3
+ class Items < Endpoint
4
+ def add( slug, items )
5
+ data = @auth.merge({:slug => slug, :items => items.class == Array ? items : [items]})
6
+ parse_response self.class.post('/' + File.join('add', @client.api_key), body: data.to_json, headers: { 'Content-Type' => 'application/json'})
7
+ end
8
+
9
+ def delete( slug, items )
10
+ data = @auth.merge({:slug => slug, :items => items.class == Array ? items : [items]})
11
+ parse_response self.class.post('/' + File.join('delete', @client.api_key), body: data.to_json, headers: { 'Content-Type' => 'application/json'})
12
+ end
13
+ end
14
+ end
15
+ end
@@ -1,132 +1,68 @@
1
1
  module Traktr
2
- class Movie
3
- include HTTParty
4
- base_uri File.join(Traktr.base_uri, 'movie')
5
-
6
- def initialize(client)
7
- @client = client
8
- end
9
-
10
- ##
11
- ## movie GET methods
12
- ##
2
+ class Movie < Endpoint
13
3
  def comments(title, type = :all)
14
- response = self.class.get('/' + File.join('comments.json', @client.api_key, title, type.to_s))
15
- raise ResponseError.new(response) if response.code != 200
16
-
17
- response.parsed_response.collect do |comment|
18
- Mash.new(comment)
19
- end
4
+ type = [:all, :shouts, :reviews].include?(type) ? type.to_s : ""
5
+ parse_response self.class.get('/' + File.join('comments.json', @client.api_key, title, type))
20
6
  end
21
7
 
22
- def related(title, hidewatched = false)
23
- response = self.class.get('/' + File.join('related.json', @client.api_key, title, hidewatched.to_s))
24
- raise ResponseError.new(response) if response.code != 200
25
-
26
- response.parsed_response.collect do |summary|
27
- Mash.new(summary)
28
- end
8
+ def related(title, hidewatched = nil)
9
+ hidewatched = hidewatched == false || hidewatched == nil ? "" : "hidewatched"
10
+ parse_response self.class.get('/' + File.join('related.json', @client.api_key, title, hidewatched), :basic_auth => @auth)
29
11
  end
30
12
 
31
- def summary(title, extended = :min)
32
- response = self.class.get('/' + File.join('summary.json', @client.api_key, title.to_s, extended.to_s))
33
- raise ResponseError.new(response) if response.code != 200
34
-
35
- Mash.new(response.parsed_response)
13
+ def stats(title)
14
+ parse_response self.class.get('/' + File.join('stats.json', @client.api_key, title))
36
15
  end
37
16
 
38
- def summaries(titles, extended = :min)
39
- titles = [titles] if titles.class == String
40
- response = self.class.get('/' + File.join('summaries.json', @client.api_key, titles.join(','), extended.to_s))
41
- raise ResponseError.new(response) if response.code != 200
17
+ def summary(title, extended = nil)
18
+ extended = [:normal, :full].include?(extended) ? extended.to_s : ""
19
+ parse_response self.class.get('/' + File.join('summary.json', @client.api_key, title.to_s, extended), :basic_auth => @auth)
20
+ end
42
21
 
43
- response.parsed_response.collect do |summary|
44
- Mash.new(summary)
45
- end
22
+ def summaries(titles, extended = nil)
23
+ titles = titles.join(",") if titles.class == Array
24
+ extended = [:normal, :full].include?(extended) ? extended.to_s : ""
25
+ parse_response self.class.get('/' + File.join('summaries.json', @client.api_key, titles, extended))
46
26
  end
47
27
 
48
28
  def watchingnow(title)
49
- response = self.class.get('/' + File.join('watchingnow.json', @client.api_key, title))
50
- raise ResponseError.new(response) if response.code != 200
51
-
52
- response.parsed_response.collect do |user|
53
- Mash.new(user)
54
- end
29
+ parse_response self.class.get('/' + File.join('watchingnow.json', @client.api_key, title), :basic_auth => @auth)
55
30
  end
56
31
 
57
- ##
58
- ## movie POST methods
59
- ##
60
32
  def library(movies)
61
33
  movies = [ movies ] if movies.class != Array
62
- data = {
63
- username: @client.username, password: @client.password,
64
- movies: movies.collect{ |s| { title: s.title, year: s.year, imdb_id: s.imdb_id, tmdb_id: s.tmdb_id }}
65
- }
66
- response = self.class.post('/' + File.join('library', @client.api_key), body: data.to_json, headers: { 'Content-Type' => 'application/json'})
67
- raise ResponseError.new(response) if response.code != 200
68
-
69
- Mash.new(JSON.parse(response.parsed_response))
34
+ data = @auth.merge({ :movies => movies })
35
+ parse_response self.class.post('/' + File.join('library', @client.api_key), body: data.to_json, headers: { 'Content-Type' => 'application/json'})
70
36
  end
71
37
 
72
38
  def unlibrary(movies)
73
39
  movies = [ movies ] if movies.class != Array
74
- data = {
75
- username: @client.username, password: @client.password,
76
- movies: movies.collect{ |s| { title: s.title, year: s.year, imdb_id: s.imdb_id, tmdb_id: s.tmdb_id }}
77
- }
78
- response = self.class.post('/' + File.join('unlibrary', @client.api_key), body: data.to_json, headers: { 'Content-Type' => 'application/json'})
79
- raise ResponseError.new(response) if response.code != 200
80
-
81
- Mash.new(response.parsed_response)
40
+ data = @auth.merge({ :movies => movies })
41
+ parse_response self.class.post('/' + File.join('unlibrary', @client.api_key), body: data.to_json, headers: { 'Content-Type' => 'application/json'})
82
42
  end
83
43
 
84
44
  def watchlist(movies)
85
45
  movies = [ movies ] if movies.class != Array
86
- data = {
87
- username: @client.username, password: @client.password,
88
- movies: movies.collect{ |s| { title: s.title, year: s.year, imdb_id: s.imdb_id, tmdb_id: s.tmdb_id }}
89
- }
90
- response = self.class.post('/' + File.join('watchlist', @client.api_key), body: data.to_json, headers: { 'Content-Type' => 'application/json'})
91
- raise ResponseError.new(response) if response.code != 200
92
-
93
- Mash.new(JSON.parse(response.parsed_response))
46
+ data = @auth.merge({ :movies => movies })
47
+ parse_response self.class.post('/' + File.join('watchlist', @client.api_key), body: data.to_json, headers: { 'Content-Type' => 'application/json'})
94
48
  end
95
49
 
96
50
  def unwatchlist(movies)
97
51
  movies = [ movies ] if movies.class != Array
98
- data = {
99
- username: @client.username, password: @client.password,
100
- movies: movies.collect{ |s| { title: s.title, year: s.year, imdb_id: s.imdb_id, tmdb_id: s.tmdb_id }}
101
- }
102
- response = self.class.post('/' + File.join('unwatchlist', @client.api_key), body: data.to_json, headers: { 'Content-Type' => 'application/json'})
103
- raise ResponseError.new(response) if response.code != 200
104
-
105
- Mash.new(response.parsed_response)
52
+ data = @auth.merge({ :movies => movies })
53
+ parse_response self.class.post('/' + File.join('unwatchlist', @client.api_key), body: data.to_json, headers: { 'Content-Type' => 'application/json'})
106
54
  end
107
55
 
108
56
  def seen(movies)
109
57
  movies = [ movies ] if movies.class != Array
110
- data = {
111
- username: @client.username, password: @client.password,
112
- movies: movies.collect{ |s| { title: s.title, year: s.year, imdb_id: s.imdb_id, tmdb_id: s.tmdb_id }}
113
- }
114
- response = self.class.post('/' + File.join('seen', @client.api_key), body: data.to_json, headers: { 'Content-Type' => 'application/json'})
115
- raise ResponseError.new(response) if response.code != 200
116
-
117
- Mash.new(JSON.parse(response.parsed_response))
58
+ data = @auth.merge({ :movies => movies })
59
+ parse_response self.class.post('/' + File.join('seen', @client.api_key), body: data.to_json, headers: { 'Content-Type' => 'application/json'})
118
60
  end
119
61
 
120
62
  def unseen(movies)
121
63
  movies = [ movies ] if movies.class != Array
122
- data = {
123
- username: @client.username, password: @client.password,
124
- movies: movies.collect{ |s| { title: s.title, year: s.year, imdb_id: s.imdb_id, tmdb_id: s.tmdb_id }}
125
- }
126
- response = self.class.post('/' + File.join('unseen', @client.api_key), body: data.to_json, headers: { 'Content-Type' => 'application/json'})
127
- raise ResponseError.new(response) if response.code != 200
128
-
129
- Mash.new(response.parsed_response)
64
+ data = @auth.merge({ :movies => movies })
65
+ parse_response self.class.post('/' + File.join('unseen', @client.api_key), body: data.to_json, headers: { 'Content-Type' => 'application/json'})
130
66
  end
131
67
  end
132
68
  end