marver 0.0.2 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (80) hide show
  1. checksums.yaml +4 -4
  2. data/.rspec +2 -0
  3. data/Gemfile +2 -11
  4. data/README.md +50 -13
  5. data/TODO +3 -0
  6. data/lib/marver.rb +50 -40
  7. data/lib/marver/api.rb +8 -0
  8. data/lib/marver/api/client.rb +28 -0
  9. data/lib/marver/api/credentials.rb +21 -0
  10. data/lib/marver/{rest → api}/error.rb +1 -1
  11. data/lib/marver/{rest → api}/response.rb +1 -2
  12. data/lib/marver/client.rb +2 -3
  13. data/lib/marver/configuration.rb +10 -0
  14. data/lib/marver/entities/character.rb +33 -0
  15. data/lib/marver/entities/{core/comic.rb → comic.rb} +10 -12
  16. data/lib/marver/entities/commonable.rb +37 -0
  17. data/lib/marver/entities/{core/creator.rb → creator.rb} +10 -13
  18. data/lib/marver/entities/event.rb +34 -0
  19. data/lib/marver/entities/{common/image.rb → image.rb} +0 -0
  20. data/lib/marver/entities/{common/key_date.rb → key_date.rb} +0 -0
  21. data/lib/marver/entities/{common/price.rb → price.rb} +0 -0
  22. data/lib/marver/entities/queryable.rb +12 -0
  23. data/lib/marver/entities/serie.rb +37 -0
  24. data/lib/marver/entities/story.rb +33 -0
  25. data/lib/marver/entities/summarizable.rb +54 -0
  26. data/lib/marver/entities/summary.rb +10 -0
  27. data/lib/marver/entities/summary/character.rb +23 -0
  28. data/lib/marver/entities/summary/comic.rb +21 -0
  29. data/lib/marver/entities/summary/creator.rb +19 -0
  30. data/lib/marver/entities/summary/event.rb +20 -0
  31. data/lib/marver/entities/summary/serie.rb +19 -0
  32. data/lib/marver/entities/summary/story.rb +20 -0
  33. data/lib/marver/entities/{common/text_object.rb → text_object.rb} +0 -0
  34. data/lib/marver/entities/{common/url.rb → url.rb} +0 -0
  35. data/lib/marver/finders/character_finder.rb +2 -15
  36. data/lib/marver/helpers/string_helper.rb +2 -2
  37. data/lib/marver/version.rb +1 -1
  38. data/marver.gemspec +4 -0
  39. data/spec/marver/{rest → api}/client_spec.rb +2 -3
  40. data/spec/marver/api/credentials_spec.rb +17 -0
  41. data/spec/marver/{rest → api}/error_spec.rb +3 -3
  42. data/spec/marver/api/response_spec.rb +25 -0
  43. data/spec/marver/client_spec.rb +9 -4
  44. data/spec/marver/configuration_spec.rb +18 -0
  45. data/spec/marver/data_container_spec.rb +1 -1
  46. data/spec/marver/entities/{core/character_spec.rb → character_spec.rb} +11 -16
  47. data/spec/marver/entities/{core/comic_spec.rb → comic_spec.rb} +12 -13
  48. data/spec/marver/entities/{core/creator_spec.rb → creator_spec.rb} +10 -12
  49. data/spec/marver/entities/{core/event_spec.rb → event_spec.rb} +17 -19
  50. data/spec/marver/entities/{core/serie_spec.rb → serie_spec.rb} +17 -25
  51. data/spec/marver/entities/{core/story_spec.rb → story_spec.rb} +10 -11
  52. data/spec/marver/entities/{summaries/character_summary_spec.rb → summary/character_spec.rb} +7 -10
  53. data/spec/marver/entities/{summaries/comic_summary_spec.rb → summary/comic_spec.rb} +7 -10
  54. data/spec/marver/entities/summary/creator_spec.rb +63 -0
  55. data/spec/marver/entities/summary/event_spec.rb +60 -0
  56. data/spec/marver/entities/summary/serie_spec.rb +57 -0
  57. data/spec/marver/entities/summary/story_spec.rb +61 -0
  58. data/spec/marver/finders/character_finder_spec.rb +1 -10
  59. data/spec/spec_helper.rb +20 -1
  60. metadata +121 -57
  61. data/lib/marver/builders/common_entities_builder.rb +0 -46
  62. data/lib/marver/builders/core_entities_builder.rb +0 -34
  63. data/lib/marver/credentials.rb +0 -23
  64. data/lib/marver/entities/core/character.rb +0 -35
  65. data/lib/marver/entities/core/event.rb +0 -35
  66. data/lib/marver/entities/core/serie.rb +0 -37
  67. data/lib/marver/entities/core/story.rb +0 -36
  68. data/lib/marver/entities/summaries/character_summary.rb +0 -22
  69. data/lib/marver/entities/summaries/comic_summary.rb +0 -20
  70. data/lib/marver/entities/summaries/creator_summary.rb +0 -12
  71. data/lib/marver/entities/summaries/event_summary.rb +0 -14
  72. data/lib/marver/entities/summaries/serie_summary.rb +0 -13
  73. data/lib/marver/entities/summaries/story_summary.rb +0 -14
  74. data/lib/marver/rest/client.rb +0 -22
  75. data/spec/marver/credentials_spec.rb +0 -19
  76. data/spec/marver/entities/summaries/creator_summary_spec.rb +0 -23
  77. data/spec/marver/entities/summaries/event_summary_spec.rb +0 -30
  78. data/spec/marver/entities/summaries/serie_summary_spec.rb +0 -26
  79. data/spec/marver/entities/summaries/story_summary_spec.rb +0 -30
  80. data/spec/marver/rest/response_spec.rb +0 -22
@@ -0,0 +1,34 @@
1
+ module Marver
2
+ class Event
3
+ include Marver::Summarizable
4
+ include Marver::Commonable
5
+
6
+ attr_reader :json, :title, :resource_uri,
7
+ :description, :start, :end, :next, :previous
8
+
9
+ class << self
10
+ def build(results)
11
+ if results.kind_of?(Array)
12
+ results.collect do |event|
13
+ Marver::Event.new(event)
14
+ end
15
+ else
16
+ new(results)
17
+ end
18
+ end
19
+ end
20
+
21
+ def initialize(json)
22
+ @json = json
23
+
24
+ @title = @json['title']
25
+ @resource_uri = @json['resourceURI']
26
+
27
+ @description = @json['description']
28
+ @start = Date.parse(@json['start'])
29
+ @end = Date.parse(@json['end'])
30
+ @next = Marver::Summary::Event.new(@json['next'])
31
+ @previous = Marver::Summary::Event.new(@json['previous'])
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,12 @@
1
+ require './lib/marver.rb'
2
+
3
+ module Marver
4
+ module Queryable
5
+ def hash_to_querystring(hash)
6
+ hash.keys.inject('') do |query_string, key|
7
+ query_string << '&' unless key == hash.keys.first
8
+ query_string << "#{URI.encode(key.to_s)}=#{URI.encode(hash[key])}"
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,37 @@
1
+ module Marver
2
+ class Serie
3
+ include Marver::Summarizable
4
+ include Marver::Commonable
5
+
6
+ attr_reader :json, :id, :title, :resource_uri, :description,
7
+ :start_year, :end_year, :rating, :next, :previous
8
+
9
+ class << self
10
+ def build(results)
11
+ if results.kind_of?(Array)
12
+ results.collect do |serie|
13
+ Marver::Serie.new(serie)
14
+ end
15
+ else
16
+ new(results)
17
+ end
18
+ end
19
+ end
20
+
21
+ def initialize(json)
22
+ @json = json
23
+
24
+ @id = @json['id']
25
+ @title = @json['title']
26
+ @resource_uri = @json['resourceURI']
27
+ @description = @json['description']
28
+ @start_year = @json['startYear']
29
+ @end_year = @json['endYear']
30
+ @rating = @json['rating']
31
+
32
+ @next = Marver::Summary::Serie.new(@json['next'])
33
+ @previous = Marver::Summary::Serie.new(@json['previous'])
34
+ end
35
+
36
+ end
37
+ end
@@ -0,0 +1,33 @@
1
+ require './lib/marver.rb'
2
+
3
+ module Marver
4
+ class Story
5
+ include Marver::Summarizable
6
+ include Marver::Commonable
7
+
8
+ attr_reader :json, :title, :type, :resource_uri, :description, :thumbnail, :original_issue
9
+
10
+ class << self
11
+ def build(results)
12
+ if results.kind_of?(Array)
13
+ results.collect do |story|
14
+ Marver::Story.new(story)
15
+ end
16
+ else
17
+ new(results)
18
+ end
19
+ end
20
+ end
21
+
22
+ def initialize(json)
23
+ @json = json
24
+
25
+ @title = @json['title']
26
+ @type = @json['type']
27
+ @resource_uri = @json['resourceURI']
28
+ @description = @json['description']
29
+
30
+ @original_issue = Marver::Summary::Comic.new(@json['originalIssue'])
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,54 @@
1
+ module Marver
2
+ module Summarizable
3
+
4
+ def characters
5
+ @characters ||= entity_items('characters').collect do |character|
6
+ Marver::Summary::Character.new(character)
7
+ end
8
+ end
9
+
10
+ def creators
11
+ @creators ||= entity_items('creators').collect do |creator|
12
+ Marver::Summary::Creator.new(creator)
13
+ end
14
+ end
15
+
16
+ def events
17
+ @events ||= entity_items('events').collect do |event|
18
+ Marver::Summary::Event.new(event)
19
+ end
20
+ end
21
+
22
+ def series
23
+ @series ||= entity_items('series').collect do |serie|
24
+ Marver::Summary::Serie.new(serie)
25
+ end
26
+ end
27
+
28
+ def stories
29
+ @stories ||= entity_items('stories').collect do |story|
30
+ Marver::Summary::Story.new(story)
31
+ end
32
+ end
33
+
34
+ def characters
35
+ @characters ||= entity_items('characters').collect do |character|
36
+ Marver::Summary::Character.new(character)
37
+ end
38
+ end
39
+
40
+ def comics
41
+ @comics ||= entity_items('comics').collect do |comic|
42
+ Marver::Summary::Comic.new(comic)
43
+ end
44
+ end
45
+
46
+ def entity_items(entity)
47
+ if json[entity].kind_of?(Hash) && json[entity].has_key?('items')
48
+ [json[entity]['items']].compact.flatten(1)
49
+ else
50
+ [json[entity]].compact.flatten(1)
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,10 @@
1
+ module Marver
2
+ module Summary
3
+ autoload :Character, 'marver/entities/summary/character'
4
+ autoload :Comic, 'marver/entities/summary/comic'
5
+ autoload :Story, 'marver/entities/summary/story'
6
+ autoload :Event, 'marver/entities/summary/event'
7
+ autoload :Serie, 'marver/entities/summary/serie'
8
+ autoload :Creator, 'marver/entities/summary/creator'
9
+ end
10
+ end
@@ -0,0 +1,23 @@
1
+ require './lib/marver.rb'
2
+
3
+ module Marver
4
+ module Summary
5
+ class Character
6
+ attr_reader :id, :name, :resource_uri, :type
7
+
8
+ def initialize(json)
9
+ @id = json['id'].to_i
10
+ @name = json['name']
11
+ @resource_uri = json['resourceURI']
12
+ @type = json['type'] || nil
13
+ end
14
+
15
+ def full
16
+ response = Marver::API::Response.new(RestClient.get(@resource_uri))
17
+ data = Marver::DataContainer.new(response).results
18
+ Marver::Character.build(data)
19
+ end
20
+
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,21 @@
1
+ require './lib/marver.rb'
2
+
3
+ module Marver
4
+ module Summary
5
+ class Comic
6
+ attr_reader :id, :name, :resource_uri, :type
7
+
8
+ def initialize(json)
9
+ @name = json['name']
10
+ @resource_uri = json['resourceURI']
11
+ @id = json['id'].to_i
12
+ end
13
+
14
+ def full
15
+ response = Marver::API::Response.new(RestClient.get(@resource_uri))
16
+ data = Marver::DataContainer.new(response)
17
+ Marver::Comic.build(data)
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,19 @@
1
+ module Marver
2
+ module Summary
3
+ class Creator
4
+ attr_reader :name, :resource_uri, :role
5
+
6
+ def initialize(json)
7
+ @name = json['name']
8
+ @resource_uri = json['resourceURI']
9
+ @role = json['role']
10
+ end
11
+
12
+ def full
13
+ response = Marver::API::Response.new(RestClient.get(@resource_uri))
14
+ data = Marver::DataContainer.new(response).results
15
+ Marver::Creator.build(data)
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,20 @@
1
+ module Marver
2
+ module Summary
3
+ class Event
4
+ attr_reader :id, :name, :resource_uri, :type
5
+
6
+ def initialize(json)
7
+ @id = json['id'].to_i
8
+ @name = json['name']
9
+ @resource_uri = json['resourceURI']
10
+ @type = json['type'] || nil
11
+ end
12
+
13
+ def full
14
+ response = Marver::API::Response.new(RestClient.get(@resource_uri))
15
+ data = Marver::DataContainer.new(response).results
16
+ Marver::Event.build(data)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,19 @@
1
+ module Marver
2
+ module Summary
3
+ class Serie
4
+ attr_reader :id, :name, :resource_uri, :type
5
+
6
+ def initialize(json)
7
+ @name = json['name']
8
+ @resource_uri = json['resourceURI']
9
+ end
10
+
11
+ def full
12
+ response = Marver::API::Response.new(RestClient.get(@resource_uri))
13
+ data = Marver::DataContainer.new(response).results
14
+ Marver::Serie.build(data)
15
+ end
16
+
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,20 @@
1
+ module Marver
2
+ module Summary
3
+ class Story
4
+ attr_reader :id, :name, :resource_uri, :type
5
+
6
+ def initialize(json)
7
+ @name = json['name']
8
+ @resource_uri = json['resourceURI']
9
+ @type = json['type'] || nil
10
+ @id = json['id'].to_i
11
+ end
12
+
13
+ def full
14
+ response = Marver::API::Response.new(RestClient.get(@resource_uri))
15
+ data = Marver::DataContainer.new(response).results
16
+ Marver::Story.build(data)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -2,23 +2,10 @@ require './lib/marver.rb'
2
2
 
3
3
  module Marver
4
4
  class CharacterFinder
5
- attr_reader :credentials, :rest_client
6
-
7
- def initialize(credentials)
8
- @credentials = credentials
9
- @rest_client = Marver::REST::Client.new
10
- end
11
-
12
5
  def find(options = {})
13
- response = @rest_client.get_request(url)
6
+ response = Marver::API::Client.new.get(:characters, options)
14
7
  results = Marver::DataContainer.new(response).results
15
- Marver::Character.build(results, @credentials)
16
- end
17
-
18
- private
19
-
20
- def url
21
- "characters?#{@credentials.to_s}"
8
+ Marver::Character.build(results)
22
9
  end
23
10
  end
24
11
  end
@@ -1,7 +1,7 @@
1
1
  module Marver
2
2
  module StringHelper
3
3
  def summary_class(entity)
4
- constantize("Marver::#{refined(entity)}Summary")
4
+ constantize("Marver::Summary::#{refined(entity)}")
5
5
  end
6
6
 
7
7
  def common_class(entity)
@@ -31,6 +31,6 @@ module Marver
31
31
  end
32
32
  constant
33
33
  end
34
- end
35
34
 
35
+ end
36
36
  end
@@ -1,3 +1,3 @@
1
1
  module Marver
2
- VERSION = '0.0.2'
2
+ VERSION = '0.0.4'
3
3
  end
@@ -20,4 +20,8 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_development_dependency "bundler", "~> 1.5"
22
22
  spec.add_development_dependency "rake"
23
+ spec.add_development_dependency "pry"
24
+ spec.add_development_dependency "rspec"
25
+ spec.add_development_dependency "webmock"
26
+ spec.add_dependency 'rest-client'
23
27
  end
@@ -1,8 +1,7 @@
1
1
  require 'spec_helper.rb'
2
- require './lib/marver/rest/client.rb'
3
2
 
4
- describe Marver::REST::Client do
5
- let(:client) { Marver::REST::Client.new }
3
+ describe Marver::API::Client do
4
+ let(:client) { Marver::API::Client.new }
6
5
 
7
6
  it '#endpoint' do
8
7
  expect(client.endpoint).to eq "http://gateway.marvel.com/v1/public/"
@@ -0,0 +1,17 @@
1
+ require './lib/marver.rb'
2
+
3
+ describe Marver::API::Credentials do
4
+ before :each do
5
+ Time.stub_chain(:now, :to_i, :to_s).and_return "1"
6
+
7
+ Marver.configure do |config|
8
+ config.public_key = 'pub_key'
9
+ config.private_key = 'priv_key'
10
+ end
11
+
12
+ end
13
+
14
+ it "returns api credentials as query string" do
15
+ expect(Marver::API::Credentials.get).to eq "&ts=1&apikey=pub_key&hash=3d4ce88a477c7e4a5accbf6cd2c8b819"
16
+ end
17
+ end
@@ -1,7 +1,7 @@
1
- require './lib/marver/rest/error.rb'
1
+ require 'spec_helper'
2
2
 
3
- describe Marver::REST::Error do
4
- let(:error) { Marver::REST::Error.new({ "code" => "404", "status" => "Not found."}) }
3
+ describe Marver::API::Error do
4
+ let(:error) { Marver::API::Error.new({ "code" => "404", "status" => "Not found."}) }
5
5
 
6
6
  it '#code - the http status code of the error' do
7
7
  expect(error.code).to eq 404
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ describe Marver::API::Response do
4
+
5
+ before :each do
6
+ stub_get("http://gateway.marvel.com/v1/public/characters?apikey=pub_key&hash=3d4ce88a477c7e4a5accbf6cd2c8b819&ts=1").to_return(:body => fixture('raw_json.json'), :headers => {:content_type => 'application/json; charset=utf-8'})
7
+
8
+ Time.stub_chain(:now, :to_i, :to_s).and_return "1"
9
+ Marver.configure do |config|
10
+ config.public_key = 'pub_key'
11
+ config.private_key = 'priv_key'
12
+ end
13
+
14
+ @response = Marver::API::Client.new.get(:characters, {})
15
+ end
16
+
17
+ it 'has a response code ' do
18
+ expect(@response.code).to eq 200
19
+ end
20
+
21
+ it 'has a status' do
22
+ expect(@response.status).to eq "Ok"
23
+ end
24
+
25
+ end