marver 0.0.6 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (105) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +8 -14
  3. data/lib/marver.rb +16 -2
  4. data/lib/marver/api.rb +9 -1
  5. data/lib/marver/api/client.rb +9 -6
  6. data/lib/marver/api/credentials.rb +1 -1
  7. data/lib/marver/api/errors.rb +33 -0
  8. data/lib/marver/client.rb +3 -1
  9. data/lib/marver/entities/character.rb +11 -23
  10. data/lib/marver/entities/comic.rb +19 -35
  11. data/lib/marver/entities/creator.rb +5 -26
  12. data/lib/marver/entities/event.rb +17 -26
  13. data/lib/marver/entities/serie.rb +15 -29
  14. data/lib/marver/entities/story.rb +11 -23
  15. data/lib/marver/entities/summary/character.rb +2 -2
  16. data/lib/marver/entities/summary/comic.rb +4 -4
  17. data/lib/marver/entities/summary/creator.rb +4 -2
  18. data/lib/marver/entities/summary/event.rb +2 -2
  19. data/lib/marver/entities/summary/serie.rb +3 -3
  20. data/lib/marver/entities/summary/story.rb +2 -2
  21. data/lib/marver/entities/url.rb +3 -3
  22. data/lib/marver/factories/character.rb +28 -0
  23. data/lib/marver/factories/comic.rb +27 -0
  24. data/lib/marver/factories/creator.rb +28 -0
  25. data/lib/marver/factories/date.rb +15 -0
  26. data/lib/marver/factories/event.rb +28 -0
  27. data/lib/marver/factories/factory.rb +20 -0
  28. data/lib/marver/factories/image.rb +15 -0
  29. data/lib/marver/factories/price.rb +15 -0
  30. data/lib/marver/factories/serie.rb +28 -0
  31. data/lib/marver/factories/story.rb +28 -0
  32. data/lib/marver/factories/summary/character.rb +23 -0
  33. data/lib/marver/factories/summary/comic.rb +23 -0
  34. data/lib/marver/factories/summary/creator.rb +23 -0
  35. data/lib/marver/factories/summary/event.rb +23 -0
  36. data/lib/marver/factories/summary/serie.rb +23 -0
  37. data/lib/marver/factories/summary/story.rb +23 -0
  38. data/lib/marver/factories/summary/summary.rb +12 -0
  39. data/lib/marver/factories/text_object.rb +16 -0
  40. data/lib/marver/factories/url.rb +15 -0
  41. data/lib/marver/finders/character_finder.rb +16 -2
  42. data/lib/marver/finders/comic_finder.rb +17 -1
  43. data/lib/marver/finders/creator_finder.rb +26 -0
  44. data/lib/marver/finders/event_finder.rb +16 -2
  45. data/lib/marver/finders/serie_finder.rb +16 -2
  46. data/lib/marver/finders/story_finder.rb +15 -2
  47. data/lib/marver/mappers/character_attributes_mapper.rb +25 -0
  48. data/lib/marver/mappers/comic_attributes_mapper.rb +40 -0
  49. data/lib/marver/mappers/creator_attributes_mapper.rb +29 -0
  50. data/lib/marver/mappers/event_attributes_mapper.rb +29 -0
  51. data/lib/marver/mappers/mappable.rb +86 -0
  52. data/lib/marver/mappers/serie_attributes_mapper.rb +32 -0
  53. data/lib/marver/mappers/story_attributes_mapper.rb +26 -0
  54. data/lib/marver/utils/finder_param_filter.rb +13 -0
  55. data/lib/marver/utils/string_helper.rb +7 -0
  56. data/lib/marver/version.rb +1 -1
  57. data/spec/marver/.DS_Store +0 -0
  58. data/spec/marver/api/client_spec.rb +1 -1
  59. data/spec/marver/api/credentials_spec.rb +2 -2
  60. data/spec/marver/api/error_spec.rb +9 -9
  61. data/spec/marver/client_spec.rb +8 -0
  62. data/spec/marver/entities/character_spec.rb +1 -1
  63. data/spec/marver/entities/comic_spec.rb +1 -1
  64. data/spec/marver/entities/creator_spec.rb +2 -2
  65. data/spec/marver/entities/event_spec.rb +1 -1
  66. data/spec/marver/entities/serie_spec.rb +2 -2
  67. data/spec/marver/entities/story_spec.rb +2 -2
  68. data/spec/marver/entities/summary/comic_spec.rb +9 -1
  69. data/spec/marver/factories/character_spec.rb +12 -0
  70. data/spec/marver/factories/comic_spec.rb +12 -0
  71. data/spec/marver/factories/creator_spec.rb +12 -0
  72. data/spec/marver/factories/date_spec.rb +13 -0
  73. data/spec/marver/factories/event_spec.rb +12 -0
  74. data/spec/marver/factories/image_spec.rb +13 -0
  75. data/spec/marver/factories/price_spec.rb +13 -0
  76. data/spec/marver/factories/serie_spec.rb +12 -0
  77. data/spec/marver/factories/story_spec.rb +12 -0
  78. data/spec/marver/factories/summary/character_spec.rb +13 -0
  79. data/spec/marver/factories/summary/comic_spec.rb +13 -0
  80. data/spec/marver/factories/summary/creator_spec.rb +13 -0
  81. data/spec/marver/factories/summary/event_spec.rb +13 -0
  82. data/spec/marver/factories/summary/serie_spec.rb +13 -0
  83. data/spec/marver/factories/summary/story_spec.rb +13 -0
  84. data/spec/marver/factories/text_object_spec.rb +13 -0
  85. data/spec/marver/factories/url_spec.rb +13 -0
  86. data/spec/marver/finders/character_finder_spec.rb +17 -9
  87. data/spec/marver/finders/comic_finder_spec.rb +11 -2
  88. data/spec/marver/finders/creator_finder_spec.rb +27 -0
  89. data/spec/marver/finders/event_finder_spec.rb +11 -2
  90. data/spec/marver/finders/serie_finder_spec.rb +10 -2
  91. data/spec/marver/finders/story_finder_spec.rb +11 -3
  92. data/spec/marver/mappers/character_attributes_mapper_spec.rb +14 -0
  93. data/spec/marver/mappers/comic_attributes_mapper_spec.rb +17 -0
  94. data/spec/marver/mappers/creator_attributes_mapper_spec.rb +15 -0
  95. data/spec/marver/mappers/event_attributes_mapper_spec.rb +14 -0
  96. data/spec/marver/mappers/serie_attributes_mapper_spec.rb +17 -0
  97. data/spec/marver/mappers/story_attributes_mapper_spec.rb +15 -0
  98. data/spec/marver/utils/finder_param_filter_spec.rb +17 -0
  99. data/spec/marver/utils/string_helper_spec.rb +7 -0
  100. metadata +86 -7
  101. data/TODO +0 -3
  102. data/lib/marver/api/error.rb +0 -13
  103. data/lib/marver/entities/commonable.rb +0 -37
  104. data/lib/marver/entities/queryable.rb +0 -12
  105. data/lib/marver/entities/summarizable.rb +0 -54
@@ -0,0 +1,32 @@
1
+ module Marver
2
+ class SerieAttributesMapper
3
+
4
+ include Marver::Mappable
5
+
6
+ def initialize(results)
7
+ @results = results
8
+ end
9
+
10
+ def map
11
+ {
12
+ title: @results['title'],
13
+ resource_uri: @results['resourceURI'],
14
+ description: @results['description'],
15
+ id: @results['id'].to_i,
16
+ type: @results['type'],
17
+ start_year: @results['startYear'],
18
+ end_year: @results['endYear'],
19
+ rating: @results['rating'],
20
+ comics: comics,
21
+ stories: stories,
22
+ events: events,
23
+ creators: creators,
24
+ characters: characters,
25
+ next: next_serie.first,
26
+ previous: prev_serie.first,
27
+ urls: urls,
28
+ thumbnail: thumbnail
29
+ }
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,26 @@
1
+ module Marver
2
+ class StoryAttributesMapper
3
+
4
+ include Marver::Mappable
5
+
6
+ def initialize(results)
7
+ @results = results
8
+ end
9
+
10
+ def map
11
+ {
12
+ title: @results['title'],
13
+ resource_uri: @results['resourceURI'],
14
+ description: @results['description'],
15
+ id: @results['id'].to_i,
16
+ type: @results['type'],
17
+ characters: characters,
18
+ creators: creators,
19
+ events: events,
20
+ series: series,
21
+ comics: comics,
22
+ original_issue: original_issue
23
+ }
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,13 @@
1
+ module Marver
2
+ class FinderParamFilter
3
+ class << self
4
+ def filter!(params, allowed_params)
5
+ unallowed = params.keys - allowed_params
6
+ raise UnallowedParamsError.new("Unallowed params: #{unallowed}") unless unallowed.empty?
7
+ return true
8
+ end
9
+ end
10
+ end
11
+
12
+ class UnallowedParamsError < Exception; end
13
+ end
@@ -0,0 +1,7 @@
1
+ module Marver
2
+ class StringHelper
3
+ def self.parameterize(string)
4
+ string.split(/(?=[A-Z])/).join('_').downcase
5
+ end
6
+ end
7
+ end
@@ -1,3 +1,3 @@
1
1
  module Marver
2
- VERSION = '0.0.6'
2
+ VERSION = '0.1.0'
3
3
  end
Binary file
@@ -4,6 +4,6 @@ describe Marver::API::Client do
4
4
  let(:client) { Marver::API::Client.new }
5
5
 
6
6
  it '#endpoint' do
7
- expect(client.endpoint).to eq "http://gateway.marvel.com/v1/public/"
7
+ expect(client.endpoint).to eq "http://gateway.marvel.com/v1/public"
8
8
  end
9
9
  end
@@ -11,7 +11,7 @@ describe Marver::API::Credentials do
11
11
 
12
12
  end
13
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"
14
+ it "returns api credentials as hash" do
15
+ expect(Marver::API::Credentials.get).to eq({ ts: "1", apikey: "pub_key", hash: "3d4ce88a477c7e4a5accbf6cd2c8b819" })
16
16
  end
17
17
  end
@@ -1,14 +1,14 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Marver::API::Error do
4
- let(:error) { Marver::API::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
- it '#code - the http status code of the error' do
7
- expect(error.code).to eq 404
8
- end
6
+ # it '#code - the http status code of the error' do
7
+ # expect(error.code).to eq 404
8
+ # end
9
9
 
10
- it '#status - description of the error' do
11
- expect(error.status).to eq "Not found."
12
- end
10
+ # it '#status - description of the error' do
11
+ # expect(error.status).to eq "Not found."
12
+ # end
13
13
 
14
- end
14
+ # end
@@ -25,4 +25,12 @@ describe Marver::Client do
25
25
  it 'has a story finder' do
26
26
  expect(@client.stories.class).to eq Marver::StoryFinder
27
27
  end
28
+
29
+ it 'has a creator finder' do
30
+ expect(@client.creators.class).to eq Marver::CreatorFinder
31
+ end
32
+
33
+ it 'has a event finder' do
34
+ expect(@client.events.class).to eq Marver::EventFinder
35
+ end
28
36
  end
@@ -6,7 +6,7 @@ describe Marver::Character do
6
6
  let(:json) { fixture('character.json').read }
7
7
  let(:response) { Marver::API::Response.new(json) }
8
8
  let(:data_container) { Marver::DataContainer.new(response) }
9
- let(:character) { Marver::Character.new(data_container.results) }
9
+ let(:character) { Marver::Factory::Character.new(data_container.results).build }
10
10
 
11
11
  it '#id - The unique ID of the character resource' do
12
12
  expect(character.id).to eq 1009220
@@ -5,7 +5,7 @@ describe Marver::Comic do
5
5
  let(:json) { fixture('comic.json').read }
6
6
  let(:response) { Marver::API::Response.new(json) }
7
7
  let(:data_container) { Marver::DataContainer.new(response) }
8
- let(:comic) { Marver::Comic.new(data_container.results) }
8
+ let(:comic) { Marver::Factory::Comic.new(data_container.results).build }
9
9
 
10
10
  it '#id - The unique ID of the comic resource' do
11
11
  expect(comic.id).to eq 38524
@@ -5,8 +5,8 @@ describe Marver::Creator do
5
5
 
6
6
  let(:json) { fixture('creator.json').read }
7
7
  let(:response) { Marver::API::Response.new(json) }
8
- let(:data_container) { Marver::DataContainer.new(response) }
9
- let(:creator) { Marver::Creator.new(data_container.results) }
8
+ let(:results) { Marver::DataContainer.new(response).results }
9
+ let(:creator) { Marver::Factory::Creator.new(results).build }
10
10
 
11
11
  it '#id - The unique ID of the creator resource.' do
12
12
  expect(creator.id).to eq 648
@@ -5,7 +5,7 @@ describe Marver::Event do
5
5
  let(:json) { fixture('event.json').read }
6
6
  let(:response) { Marver::API::Response.new(json) }
7
7
  let(:data_container) { Marver::DataContainer.new(response) }
8
- let(:event) { Marver::Event.new(data_container.results) }
8
+ let(:event) { Marver::Factory::Event.new(data_container.results).build }
9
9
 
10
10
  it "#title - The title of the event." do
11
11
  expect(event.title).to eq "Fall of the Mutants"
@@ -5,8 +5,8 @@ describe Marver::Serie do
5
5
 
6
6
  let(:json) { fixture('serie.json').read }
7
7
  let(:response) { Marver::API::Response.new(json) }
8
- let(:data_container) { Marver::DataContainer.new(response) }
9
- let(:serie) { Marver::Serie.new(data_container.results) }
8
+ let(:results) { Marver::DataContainer.new(response).results }
9
+ let(:serie) { Marver::Factory::Serie.new(results).build }
10
10
 
11
11
  it '#id - The unique ID of the series resource.' do
12
12
  expect(serie.id).to eq 2002
@@ -4,8 +4,8 @@ describe Marver::Story do
4
4
  describe "Attributes" do
5
5
  let(:json) { fixture('story.json').read }
6
6
  let(:response) { Marver::API::Response.new(json) }
7
- let(:data_container) { Marver::DataContainer.new(response) }
8
- let(:story) { Marver::Story.new(data_container.results) }
7
+ let(:results) { Marver::DataContainer.new(response).results }
8
+ let(:story) { Marver::Factory::Story.new(results).build }
9
9
 
10
10
  it "#title - The story title." do
11
11
  expect(story.title).to eq "Cover #892"
@@ -1,6 +1,14 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Marver::Summary::Comic do
4
+
5
+ before do
6
+ Marver.configure do |config|
7
+ config.public_key = "pub_key"
8
+ config.private_key = "priv_key"
9
+ end
10
+ end
11
+
4
12
  let(:comic_summary) { Marver::Summary::Comic.new({ "id" => "123", "resourceURI" => "http://example.net", "name" => "Hulk" }) }
5
13
 
6
14
  it '#id' do
@@ -23,7 +31,7 @@ describe Marver::Summary::Comic do
23
31
  describe '#full' do
24
32
  before :each do
25
33
  Time.stub_chain(:now, :to_i, :to_s).and_return "1"
26
- stub_get(comic_summary.resource_uri).to_return(:body => fixture('comic.json'), :headers => {:content_type => 'application/json; charset=utf-8'})
34
+ stub_get(comic_summary.resource_uri + "?apikey=pub_key&hash=3d4ce88a477c7e4a5accbf6cd2c8b819&ts=1").to_return(:body => fixture('comic.json'), :headers => {:content_type => 'application/json; charset=utf-8'})
27
35
  @full_comic = comic_summary.full
28
36
  end
29
37
 
@@ -0,0 +1,12 @@
1
+ require 'spec_helper'
2
+
3
+ describe Marver::Factory::Character do
4
+ let(:json) { fixture('character.json').read }
5
+ let(:response) { Marver::API::Response.new(json) }
6
+ let(:results) { Marver::DataContainer.new(response).results }
7
+ let(:factory) { described_class.new(results) }
8
+
9
+ it 'builds a character out of api results' do
10
+ expect(factory.build).to be_kind_of Marver::Character
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ require 'spec_helper'
2
+
3
+ describe Marver::Factory::Comic do
4
+ let(:json) { fixture('comic.json').read }
5
+ let(:response) { Marver::API::Response.new(json) }
6
+ let(:results) { Marver::DataContainer.new(response).results }
7
+ let(:factory) { described_class.new(results) }
8
+
9
+ it 'builds a comic out of api results' do
10
+ expect(factory.build).to be_kind_of Marver::Comic
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ require 'spec_helper'
2
+
3
+ describe Marver::Factory::Creator do
4
+ let(:json) { fixture('creator.json').read }
5
+ let(:response) { Marver::API::Response.new(json) }
6
+ let(:results) { Marver::DataContainer.new(response).results }
7
+ let(:factory) { described_class.new(results) }
8
+
9
+ it 'builds a creator out of api results' do
10
+ expect(factory.build).to be_kind_of Marver::Creator
11
+ end
12
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe Marver::Factory::Date do
4
+ let(:json) { fixture('comic.json').read }
5
+ let(:response) { Marver::API::Response.new(json) }
6
+ let(:results) { Marver::DataContainer.new(response).results }
7
+ let(:factory) { described_class.new(results['dates']) }
8
+
9
+ it 'builds a list of dates from api results' do
10
+ expect(factory.build).to be_kind_of Array
11
+ expect(factory.build.first).to be_kind_of Marver::KeyDate
12
+ end
13
+ end
@@ -0,0 +1,12 @@
1
+ require 'spec_helper'
2
+
3
+ describe Marver::Factory::Event do
4
+ let(:json) { fixture('event.json').read }
5
+ let(:response) { Marver::API::Response.new(json) }
6
+ let(:results) { Marver::DataContainer.new(response).results }
7
+ let(:factory) { described_class.new(results) }
8
+
9
+ it 'builds an event out of api results' do
10
+ expect(factory.build).to be_kind_of Marver::Event
11
+ end
12
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe Marver::Factory::Image do
4
+ let(:json) { fixture('comic.json').read }
5
+ let(:response) { Marver::API::Response.new(json) }
6
+ let(:results) { Marver::DataContainer.new(response).results }
7
+ let(:factory) { described_class.new(results['images']) }
8
+
9
+ it 'builds a list of images from api results' do
10
+ expect(factory.build).to be_kind_of Array
11
+ expect(factory.build.first).to be_kind_of Marver::Image
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe Marver::Factory::Price do
4
+ let(:json) { fixture('comic.json').read }
5
+ let(:response) { Marver::API::Response.new(json) }
6
+ let(:results) { Marver::DataContainer.new(response).results }
7
+ let(:factory) { described_class.new(results['prices']) }
8
+
9
+ it 'builds a list of prices from api results' do
10
+ expect(factory.build).to be_kind_of Array
11
+ expect(factory.build.first).to be_kind_of Marver::Price
12
+ end
13
+ end
@@ -0,0 +1,12 @@
1
+ require 'spec_helper'
2
+
3
+ describe Marver::Factory::Serie do
4
+ let(:json) { fixture('serie.json').read }
5
+ let(:response) { Marver::API::Response.new(json) }
6
+ let(:results) { Marver::DataContainer.new(response).results }
7
+ let(:factory) { described_class.new(results) }
8
+
9
+ it 'builds a serie out of api results' do
10
+ expect(factory.build).to be_kind_of Marver::Serie
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ require 'spec_helper'
2
+
3
+ describe Marver::Factory::Story do
4
+ let(:json) { fixture('story.json').read }
5
+ let(:response) { Marver::API::Response.new(json) }
6
+ let(:results) { Marver::DataContainer.new(response).results }
7
+ let(:factory) { described_class.new(results) }
8
+
9
+ it 'builds a story out of api results' do
10
+ expect(factory.build).to be_kind_of Marver::Story
11
+ end
12
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe Marver::Factory::Summary::Character do
4
+ let(:json) { fixture('event.json').read }
5
+ let(:response) { Marver::API::Response.new(json) }
6
+ let(:results) { Marver::DataContainer.new(response).results }
7
+ let(:factory) { described_class.new(results['series']['items']) }
8
+
9
+ it 'builds a character summary out of api results' do
10
+ expect(factory.build).to be_kind_of Array
11
+ expect(factory.build.first).to be_kind_of Marver::Summary::Character
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe Marver::Factory::Summary::Comic do
4
+ let(:json) { fixture('character.json').read }
5
+ let(:response) { Marver::API::Response.new(json) }
6
+ let(:results) { Marver::DataContainer.new(response).results }
7
+ let(:factory) { described_class.new(results['comics']['items']) }
8
+
9
+ it 'builds a comic summary out of api results' do
10
+ expect(factory.build).to be_kind_of Array
11
+ expect(factory.build.first).to be_kind_of Marver::Summary::Comic
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe Marver::Factory::Summary::Creator do
4
+ let(:json) { fixture('comic.json').read }
5
+ let(:response) { Marver::API::Response.new(json) }
6
+ let(:results) { Marver::DataContainer.new(response).results }
7
+ let(:factory) { described_class.new(results['creators']['items']) }
8
+
9
+ it 'builds a creator summary out of api results' do
10
+ expect(factory.build).to be_kind_of Array
11
+ expect(factory.build.first).to be_kind_of Marver::Summary::Creator
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe Marver::Factory::Summary::Event do
4
+ let(:json) { fixture('character.json').read }
5
+ let(:response) { Marver::API::Response.new(json) }
6
+ let(:results) { Marver::DataContainer.new(response).results }
7
+ let(:factory) { described_class.new(results['events']['items']) }
8
+
9
+ it 'builds an event summary out of api results' do
10
+ expect(factory.build).to be_kind_of Array
11
+ expect(factory.build.first).to be_kind_of Marver::Summary::Event
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe Marver::Factory::Summary::Serie do
4
+ let(:json) { fixture('character.json').read }
5
+ let(:response) { Marver::API::Response.new(json) }
6
+ let(:results) { Marver::DataContainer.new(response).results }
7
+ let(:factory) { described_class.new(results['series']['items']) }
8
+
9
+ it 'builds a serie summary out of api results' do
10
+ expect(factory.build).to be_kind_of Array
11
+ expect(factory.build.first).to be_kind_of Marver::Summary::Serie
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe Marver::Factory::Summary::Story do
4
+ let(:json) { fixture('event.json').read }
5
+ let(:response) { Marver::API::Response.new(json) }
6
+ let(:results) { Marver::DataContainer.new(response).results }
7
+ let(:factory) { described_class.new(results['stories']['items']) }
8
+
9
+ it 'builds a story summary out of api results' do
10
+ expect(factory.build).to be_kind_of Array
11
+ expect(factory.build.first).to be_kind_of Marver::Summary::Story
12
+ end
13
+ end