marver 0.0.6 → 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 (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