tvrage_api 0.0.2 → 0.1.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 (46) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +26 -13
  3. data/lib/tvrage_api/base.rb +25 -6
  4. data/lib/tvrage_api/client.rb +13 -0
  5. data/lib/tvrage_api/search.rb +9 -0
  6. data/lib/tvrage_api/show.rb +14 -19
  7. data/lib/tvrage_api/update.rb +5 -0
  8. data/lib/tvrage_api/version.rb +1 -1
  9. data/lib/tvrage_api.rb +3 -7
  10. data/spec/integrations/client_spec.rb +55 -0
  11. data/spec/integrations/search_spec.rb +7 -7
  12. data/spec/integrations/show_spec.rb +12 -12
  13. data/spec/integrations/update_spec.rb +5 -6
  14. data/spec/tvrage_api/base_spec.rb +56 -0
  15. data/spec/tvrage_api/client_spec.rb +23 -0
  16. data/spec/tvrage_api/search_spec.rb +22 -0
  17. data/spec/tvrage_api/show_spec.rb +18 -59
  18. data/spec/tvrage_api/update_spec.rb +14 -0
  19. data/tvrage_api.gemspec +1 -2
  20. metadata +15 -53
  21. data/lib/tvrage_api/element.rb +0 -3
  22. data/lib/tvrage_api/episode.rb +0 -9
  23. data/lib/tvrage_api/request/base.rb +0 -57
  24. data/lib/tvrage_api/request/search.rb +0 -13
  25. data/lib/tvrage_api/request/show.rb +0 -37
  26. data/lib/tvrage_api/request/update.rb +0 -13
  27. data/lib/tvrage_api/utility/aka_array.rb +0 -9
  28. data/lib/tvrage_api/utility/date.rb +0 -9
  29. data/lib/tvrage_api/utility/date_or_integer.rb +0 -11
  30. data/lib/tvrage_api/utility/episode_array.rb +0 -15
  31. data/lib/tvrage_api/utility/genre_array.rb +0 -9
  32. data/lib/tvrage_api/utility/hashie/extensions/key_replace.rb +0 -42
  33. data/lib/tvrage_api/utility/integer.rb +0 -5
  34. data/lib/tvrage_api/utility/string.rb +0 -11
  35. data/lib/tvrage_api/utility.rb +0 -8
  36. data/spec/tvrage_api/episode_spec.rb +0 -51
  37. data/spec/tvrage_api/request/base_spec.rb +0 -113
  38. data/spec/tvrage_api/request/search_spec.rb +0 -30
  39. data/spec/tvrage_api/request/show_spec.rb +0 -71
  40. data/spec/tvrage_api/request/update_spec.rb +0 -28
  41. data/spec/tvrage_api/utility/aka_array_spec.rb +0 -17
  42. data/spec/tvrage_api/utility/date_or_integer_spec.rb +0 -13
  43. data/spec/tvrage_api/utility/date_spec.rb +0 -13
  44. data/spec/tvrage_api/utility/genre_array_spec.rb +0 -17
  45. data/spec/tvrage_api/utility/integer_spec.rb +0 -9
  46. data/spec/tvrage_api/utility/string_spec.rb +0 -9
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tvrage_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Krzysztof Wawer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-07 00:00:00.000000000 Z
11
+ date: 2013-12-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -24,20 +24,6 @@ dependencies:
24
24
  - - '>='
25
25
  - !ruby/object:Gem::Version
26
26
  version: 0.12.0
27
- - !ruby/object:Gem::Dependency
28
- name: hashie
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - '>='
32
- - !ruby/object:Gem::Version
33
- version: 2.0.5
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - '>='
39
- - !ruby/object:Gem::Version
40
- version: 2.0.5
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: bundler
43
29
  requirement: !ruby/object:Gem::Requirement
@@ -109,39 +95,21 @@ files:
109
95
  - Rakefile
110
96
  - lib/tvrage_api.rb
111
97
  - lib/tvrage_api/base.rb
112
- - lib/tvrage_api/element.rb
113
- - lib/tvrage_api/episode.rb
114
- - lib/tvrage_api/request/base.rb
115
- - lib/tvrage_api/request/search.rb
116
- - lib/tvrage_api/request/show.rb
117
- - lib/tvrage_api/request/update.rb
98
+ - lib/tvrage_api/client.rb
99
+ - lib/tvrage_api/search.rb
118
100
  - lib/tvrage_api/show.rb
119
- - lib/tvrage_api/utility.rb
120
- - lib/tvrage_api/utility/aka_array.rb
121
- - lib/tvrage_api/utility/date.rb
122
- - lib/tvrage_api/utility/date_or_integer.rb
123
- - lib/tvrage_api/utility/episode_array.rb
124
- - lib/tvrage_api/utility/genre_array.rb
125
- - lib/tvrage_api/utility/hashie/extensions/key_replace.rb
126
- - lib/tvrage_api/utility/integer.rb
127
- - lib/tvrage_api/utility/string.rb
101
+ - lib/tvrage_api/update.rb
128
102
  - lib/tvrage_api/version.rb
103
+ - spec/integrations/client_spec.rb
129
104
  - spec/integrations/search_spec.rb
130
105
  - spec/integrations/show_spec.rb
131
106
  - spec/integrations/update_spec.rb
132
107
  - spec/spec_helper.rb
133
- - spec/tvrage_api/episode_spec.rb
134
- - spec/tvrage_api/request/base_spec.rb
135
- - spec/tvrage_api/request/search_spec.rb
136
- - spec/tvrage_api/request/show_spec.rb
137
- - spec/tvrage_api/request/update_spec.rb
108
+ - spec/tvrage_api/base_spec.rb
109
+ - spec/tvrage_api/client_spec.rb
110
+ - spec/tvrage_api/search_spec.rb
138
111
  - spec/tvrage_api/show_spec.rb
139
- - spec/tvrage_api/utility/aka_array_spec.rb
140
- - spec/tvrage_api/utility/date_or_integer_spec.rb
141
- - spec/tvrage_api/utility/date_spec.rb
142
- - spec/tvrage_api/utility/genre_array_spec.rb
143
- - spec/tvrage_api/utility/integer_spec.rb
144
- - spec/tvrage_api/utility/string_spec.rb
112
+ - spec/tvrage_api/update_spec.rb
145
113
  - tvrage_api.gemspec
146
114
  homepage: http://github.com/wafcio/tvrage_api
147
115
  licenses:
@@ -168,19 +136,13 @@ signing_key:
168
136
  specification_version: 4
169
137
  summary: Ruby client for tvrage.com API
170
138
  test_files:
139
+ - spec/integrations/client_spec.rb
171
140
  - spec/integrations/search_spec.rb
172
141
  - spec/integrations/show_spec.rb
173
142
  - spec/integrations/update_spec.rb
174
143
  - spec/spec_helper.rb
175
- - spec/tvrage_api/episode_spec.rb
176
- - spec/tvrage_api/request/base_spec.rb
177
- - spec/tvrage_api/request/search_spec.rb
178
- - spec/tvrage_api/request/show_spec.rb
179
- - spec/tvrage_api/request/update_spec.rb
144
+ - spec/tvrage_api/base_spec.rb
145
+ - spec/tvrage_api/client_spec.rb
146
+ - spec/tvrage_api/search_spec.rb
180
147
  - spec/tvrage_api/show_spec.rb
181
- - spec/tvrage_api/utility/aka_array_spec.rb
182
- - spec/tvrage_api/utility/date_or_integer_spec.rb
183
- - spec/tvrage_api/utility/date_spec.rb
184
- - spec/tvrage_api/utility/genre_array_spec.rb
185
- - spec/tvrage_api/utility/integer_spec.rb
186
- - spec/tvrage_api/utility/string_spec.rb
148
+ - spec/tvrage_api/update_spec.rb
@@ -1,3 +0,0 @@
1
- class TvrageApi::Element < TvrageApi::Base
2
- replace_key :__content__, :content
3
- end
@@ -1,9 +0,0 @@
1
- class TvrageApi::Episode < TvrageApi::Base
2
- replace_key :epnum, :episode_number
3
- replace_key :seasonnum, :season_number
4
- replace_key :prodnum, :production_number
5
-
6
- coerce_key :airdate, Date
7
- coerce_key :episode_number, Integer
8
- coerce_key :season_number, Integer
9
- end
@@ -1,57 +0,0 @@
1
- require 'httparty'
2
-
3
- class TvrageApi::Request::Base
4
- include HTTParty
5
-
6
- attr_reader :uri
7
-
8
- def initialize(uri, options = {})
9
- @uri = uri
10
- @options = options
11
- end
12
-
13
- def response
14
- @response ||= self.class.get(uri, request_options)
15
- end
16
-
17
- def request_options
18
- {
19
- query: @options,
20
- base_uri: 'http://services.tvrage.com/feeds/'
21
- }
22
- end
23
-
24
- def collection_response(key, klass)
25
- response_condition? ? array_mapped(klass, key) : []
26
- end
27
-
28
- def object_response(key, klass)
29
- response_condition? ? klass.new(data[key]) : nil
30
- end
31
-
32
- def response_condition?
33
- response.code == 200 && data.is_a?(Hash)
34
- end
35
-
36
- def array_normalize(key)
37
- dig(key).is_a?(Array) ? dig(key) : [dig(key)]
38
- end
39
-
40
- def array_mapped(klass, key)
41
- array_normalize(key).map { |data| klass.new(data) }
42
- end
43
-
44
- def dig(key)
45
- data[key]
46
- end
47
-
48
- def data
49
- response[data_key]
50
- end
51
-
52
- private
53
-
54
- def data_key
55
- 'Results'
56
- end
57
- end
@@ -1,13 +0,0 @@
1
- class TvrageApi::Request::Search < TvrageApi::Request::Base
2
- def self.find(name)
3
- new('search.php', show: name)
4
- end
5
-
6
- def self.find_full(name)
7
- new('full_search.php', show: name)
8
- end
9
-
10
- def result
11
- collection_response('show', TvrageApi::Show)
12
- end
13
- end
@@ -1,37 +0,0 @@
1
- class TvrageApi::Request::Show < TvrageApi::Request::Base
2
- def self.find(id)
3
- new('showinfo.php', :simple, sid: id)
4
- end
5
-
6
- def self.find_full(id)
7
- new('full_show_info.php', :full, sid: id)
8
- end
9
-
10
- def self.episodes(id)
11
- new('episode_list.php', :full, sid: id)
12
- end
13
-
14
- def self.episode(series_id, season, episode)
15
- new('episodeinfo.php', :episode, sid: series_id, ep: "#{season}x#{episode}")
16
- end
17
-
18
- def initialize(uri, kind, options = {})
19
- @kind = kind
20
- super(uri, options)
21
- end
22
-
23
- def result
24
- @result ||= case @kind
25
- when :simple
26
- object_response('Showinfo', TvrageApi::Show)
27
- when :full
28
- object_response('Show', TvrageApi::Show)
29
- when :episode
30
- object_response('show', TvrageApi::Show)
31
- end
32
- end
33
-
34
- def data
35
- response
36
- end
37
- end
@@ -1,13 +0,0 @@
1
- class TvrageApi::Request::Update < TvrageApi::Request::Base
2
- def self.all
3
- new('show_list.php')
4
- end
5
-
6
- def result
7
- collection_response('show', TvrageApi::Show)
8
- end
9
-
10
- def data_key
11
- 'shows'
12
- end
13
- end
@@ -1,9 +0,0 @@
1
- class AkaArray
2
- def self.coerce(value)
3
- if value.is_a?(Array)
4
- value
5
- else
6
- value.aka.map{ |aka| TvrageApi::Element.new(content: aka.__content__, country: aka.country) }
7
- end
8
- end
9
- end
@@ -1,9 +0,0 @@
1
- class Date
2
- def self.coerce(value)
3
- begin
4
- Date.parse(value)
5
- rescue => e
6
- nil
7
- end
8
- end
9
- end
@@ -1,11 +0,0 @@
1
- class DateOrInteger
2
- def self.coerce(value)
3
- if value.is_a?(String)
4
- if value.match('/')
5
- Date.parse(value)
6
- else
7
- value.to_i
8
- end
9
- end
10
- end
11
- end
@@ -1,15 +0,0 @@
1
- class EpisodeArray
2
- def self.coerce(value)
3
- episodes = []
4
-
5
- if value.respond_to?(:season)
6
- value.season.each do |season|
7
- season.episode.each do |episode|
8
- episodes << TvrageApi::Episode.new(episode.to_hash)
9
- end
10
- end
11
- end
12
-
13
- episodes
14
- end
15
- end
@@ -1,9 +0,0 @@
1
- class GenreArray
2
- def self.coerce(value)
3
- if value.is_a?(Array)
4
- value
5
- else
6
- value.genre
7
- end
8
- end
9
- end
@@ -1,42 +0,0 @@
1
- module Hashie
2
- module Extensions
3
- module KeyReplace
4
- def self.included(base)
5
- base.send :extend, ClassMethods
6
- end
7
-
8
- def initialize(source_hash = nil, default = nil, &blk)
9
- source_hash = replace_keys(source_hash)
10
- super
11
- end
12
-
13
- def replace_keys(source_hash)
14
- source_hash.keys.each do |key|
15
- new_key = self.class.key_replace(key) || key.to_s.underscore
16
-
17
- if new_key != key
18
- source_hash[new_key] = source_hash[key]
19
- source_hash.delete(key)
20
- end
21
- end
22
- source_hash
23
- end
24
-
25
- module ClassMethods
26
- def replace_key(*attrs)
27
- @key_replaces ||= {}
28
- into = attrs.pop
29
- attrs.each { |key| @key_replaces[key] = into }
30
- end
31
-
32
- def key_replaces
33
- @key_replaces || {}
34
- end
35
-
36
- def key_replace(key)
37
- key_replaces[key.to_sym]
38
- end
39
- end
40
- end
41
- end
42
- end
@@ -1,5 +0,0 @@
1
- class Integer
2
- def self.coerce(value)
3
- value.to_i
4
- end
5
- end
@@ -1,11 +0,0 @@
1
- class String
2
- def underscore
3
- word = self.dup
4
- word.gsub!(/::/, '/')
5
- word.gsub!(/([A-Z]+)([A-Z][a-z])/,'\1_\2')
6
- word.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
7
- word.tr!("-", "_")
8
- word.downcase!
9
- word
10
- end
11
- end
@@ -1,8 +0,0 @@
1
- require 'tvrage_api/utility/aka_array'
2
- require 'tvrage_api/utility/date'
3
- require 'tvrage_api/utility/date_or_integer'
4
- require 'tvrage_api/utility/episode_array'
5
- require 'tvrage_api/utility/genre_array'
6
- require 'tvrage_api/utility/integer'
7
- require 'tvrage_api/utility/string'
8
- require 'tvrage_api/utility/hashie/extensions/key_replace'
@@ -1,51 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe TvrageApi::Episode do
4
- let(:klass) { TvrageApi::Episode }
5
-
6
- shared_examples 'mapping' do |field, field_mapped|
7
- it "should save as #{field_mapped}" do
8
- klass.new(field => '123').send(field_mapped).should_not == nil
9
- end
10
- end
11
-
12
- shared_examples 'integer mapping' do |field|
13
- it 'should save as Integer' do
14
- klass.new(field => '123').send(field).should == 123
15
- end
16
- end
17
-
18
- shared_examples 'date mapping' do |field|
19
- it 'should save as Date' do
20
- klass.new(field => '2000-01-01').send(field).should == Date.new(2000, 1, 1)
21
- end
22
- end
23
-
24
- describe 'key mapping' do
25
- describe 'epnum attribute' do
26
- include_examples 'mapping', :epnum, :episode_number
27
- end
28
-
29
- describe 'seasonnum attribute' do
30
- include_examples 'mapping', :seasonnum, :season_number
31
- end
32
-
33
- describe 'prodnum attribute' do
34
- include_examples 'mapping', :prodnum, :production_number
35
- end
36
- end
37
-
38
- describe 'ceorce' do
39
- describe 'airdate attribute' do
40
- include_examples 'date mapping', :airdate
41
- end
42
-
43
- describe 'episode_number attribute' do
44
- include_examples 'integer mapping', :episode_number
45
- end
46
-
47
- describe 'season_number attribute' do
48
- include_examples 'integer mapping', :season_number
49
- end
50
- end
51
- end
@@ -1,113 +0,0 @@
1
- require 'spec_helper'
2
-
3
- class ExampleRequestClass < TvrageApi::Request::Base
4
- end
5
-
6
- describe TvrageApi::Request::Base do
7
- let(:klass) { ExampleRequestClass }
8
- let(:model) { klass.new('test') }
9
-
10
- describe '#response' do
11
- it 'should call get klass method' do
12
- klass.should_receive(:get)
13
- model.stub(:request_options).and_return({})
14
-
15
- model.response
16
- end
17
- end
18
-
19
- describe '#request_options' do
20
- it 'should return correct keys' do
21
- model.request_options.keys.sort.should == [:query, :base_uri].sort
22
- end
23
- end
24
-
25
- describe '#collection_response' do
26
- it 'should return filled array when condition is true' do
27
- model.stub(:response_condition?).and_return(true)
28
- model.stub(:array_mapped).and_return(['test'])
29
-
30
- model.collection_response('Series', OpenStruct).should_not be_empty
31
- end
32
-
33
- it 'should return empty array when condition is false' do
34
- model.stub(:response_condition?).and_return(false)
35
-
36
- model.collection_response('Series', OpenStruct).should be_empty
37
- end
38
- end
39
-
40
- describe '#object_response' do
41
- it 'should return object when condition is true' do
42
- model.stub(:response_condition?).and_return(true)
43
- model.stub_chain(:response, :[]).and_return({})
44
-
45
- model.object_response('Series', OpenStruct).class.should == OpenStruct
46
- end
47
-
48
- it 'should return nil when condition is false' do
49
- model.stub(:response_condition?).and_return(false)
50
-
51
- model.object_response('Series', OpenStruct).should be_nil
52
- end
53
- end
54
-
55
- describe '#response_condition?' do
56
- it 'should return true when code is 200 and return Data hash' do
57
- model.stub_chain(:response, :code).and_return 200
58
- model.stub_chain(:response, :[]).and_return({})
59
-
60
- model.response_condition?.should be_true
61
- end
62
-
63
- it 'should return false when code is different than 200' do
64
- model.stub_chain(:response, :code).and_return 400
65
- model.stub_chain(:response, :[]).and_return({})
66
-
67
- model.response_condition?.should be_false
68
- end
69
-
70
- it 'should return false when return blank response' do
71
- model.stub_chain(:response, :code).and_return 200
72
- model.stub_chain(:response, :[]).and_return('')
73
-
74
- model.response_condition?.should be_false
75
- end
76
- end
77
-
78
- describe '#array_normalize' do
79
- it 'should return Array when dig return Array' do
80
- model.stub(:dig).and_return(Array)
81
- model.array_normalize('Series').class.should == Array
82
- end
83
-
84
- it 'should return Array when dig return Hash' do
85
- model.stub(:dig).and_return(Hash)
86
- model.array_normalize('Series').class.should == Array
87
- end
88
- end
89
-
90
- describe '#array_mapped' do
91
- it 'should map Array elements to objects' do
92
- model.stub(:array_normalize).and_return([{ 'test' => 'value' }])
93
- model.array_mapped(OpenStruct, 'Series').first.class.should == OpenStruct
94
- end
95
- end
96
-
97
- describe '#dig' do
98
- it 'should dig to correct hash' do
99
- model.stub(:response).and_return({ 'Results' => { 'Series' => 'series value' } })
100
-
101
- model.dig('Series').should == 'series value'
102
- end
103
- end
104
-
105
- describe '#data' do
106
- it 'should return correct value' do
107
- model.stub(:response).and_return({ 'key' => 'value' })
108
- model.stub(:data_key).and_return('key')
109
-
110
- model.data.should == 'value'
111
- end
112
- end
113
- end
@@ -1,30 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe TvrageApi::Request::Search do
4
- let(:klass) { TvrageApi::Request::Search }
5
- let(:model) { klass.new('http://example.com', name: 'buffy') }
6
-
7
- describe '#find' do
8
- it 'should call new with specific params' do
9
- klass.should_receive(:new).with('search.php', show: 'buffy')
10
-
11
- klass.find('buffy')
12
- end
13
- end
14
-
15
- describe '#find_full' do
16
- it 'should call new with specific params' do
17
- klass.should_receive(:new).with('full_search.php', show: 'buffy')
18
-
19
- klass.find_full('buffy')
20
- end
21
- end
22
-
23
- describe '#result' do
24
- it 'should call collection_response method' do
25
- model.should_receive(:collection_response)
26
-
27
- model.result
28
- end
29
- end
30
- end
@@ -1,71 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe TvrageApi::Request::Show do
4
- let(:klass) { TvrageApi::Request::Show }
5
- let(:kind) { :simple }
6
- let(:model) { klass.new('http://example.com', kind, sid: 123) }
7
-
8
- describe '#find' do
9
- it 'should call new with specific params' do
10
- klass.should_receive(:new).with('showinfo.php', :simple, sid: 123)
11
-
12
- klass.find(123)
13
- end
14
- end
15
-
16
- describe '#find_full' do
17
- it 'should call new with specific params' do
18
- klass.should_receive(:new).with('full_show_info.php', :full, sid: 123)
19
-
20
- klass.find_full(123)
21
- end
22
- end
23
-
24
- describe '#episodes' do
25
- it 'should call new with specific params' do
26
- klass.should_receive(:new).with('episode_list.php', :full, sid: 123)
27
-
28
- klass.episodes(123)
29
- end
30
- end
31
-
32
- describe '#episode' do
33
- it 'should call new with specific params' do
34
- klass.should_receive(:new).with('episodeinfo.php', :episode, sid: 123, ep: '1x2')
35
-
36
- klass.episode(123, 1, 2)
37
- end
38
- end
39
-
40
- describe '#result' do
41
- describe 'when kind is simple' do
42
- let(:kind) { :simple }
43
-
44
- it 'should call collection_response method' do
45
- model.should_receive(:object_response).with('Showinfo', TvrageApi::Show)
46
-
47
- model.result
48
- end
49
- end
50
-
51
- describe 'when kind is full' do
52
- let(:kind) { :full }
53
-
54
- it 'should call collection_response method' do
55
- model.should_receive(:object_response).with('Show', TvrageApi::Show)
56
-
57
- model.result
58
- end
59
- end
60
-
61
- describe 'when kind is episode' do
62
- let(:kind) { :episode }
63
-
64
- it 'should call collection_response method' do
65
- model.should_receive(:object_response).with('show', TvrageApi::Show)
66
-
67
- model.result
68
- end
69
- end
70
- end
71
- end
@@ -1,28 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe TvrageApi::Request::Update do
4
- let(:klass) { TvrageApi::Request::Update }
5
- let(:model) { klass.new('http://example.com') }
6
-
7
- describe '#all' do
8
- it 'should call new with specific params' do
9
- klass.should_receive(:new).with('show_list.php')
10
-
11
- klass.all
12
- end
13
- end
14
-
15
- describe '#result' do
16
- it 'should call collection_response method' do
17
- model.should_receive(:collection_response)
18
-
19
- model.result
20
- end
21
- end
22
-
23
- describe '#data_key' do
24
- it 'should return correct value' do
25
- model.data_key.should == 'shows'
26
- end
27
- end
28
- end