marver 0.0.2 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rspec +2 -0
- data/Gemfile +2 -11
- data/README.md +50 -13
- data/TODO +3 -0
- data/lib/marver.rb +50 -40
- data/lib/marver/api.rb +8 -0
- data/lib/marver/api/client.rb +28 -0
- data/lib/marver/api/credentials.rb +21 -0
- data/lib/marver/{rest → api}/error.rb +1 -1
- data/lib/marver/{rest → api}/response.rb +1 -2
- data/lib/marver/client.rb +2 -3
- data/lib/marver/configuration.rb +10 -0
- data/lib/marver/entities/character.rb +33 -0
- data/lib/marver/entities/{core/comic.rb → comic.rb} +10 -12
- data/lib/marver/entities/commonable.rb +37 -0
- data/lib/marver/entities/{core/creator.rb → creator.rb} +10 -13
- data/lib/marver/entities/event.rb +34 -0
- data/lib/marver/entities/{common/image.rb → image.rb} +0 -0
- data/lib/marver/entities/{common/key_date.rb → key_date.rb} +0 -0
- data/lib/marver/entities/{common/price.rb → price.rb} +0 -0
- data/lib/marver/entities/queryable.rb +12 -0
- data/lib/marver/entities/serie.rb +37 -0
- data/lib/marver/entities/story.rb +33 -0
- data/lib/marver/entities/summarizable.rb +54 -0
- data/lib/marver/entities/summary.rb +10 -0
- data/lib/marver/entities/summary/character.rb +23 -0
- data/lib/marver/entities/summary/comic.rb +21 -0
- data/lib/marver/entities/summary/creator.rb +19 -0
- data/lib/marver/entities/summary/event.rb +20 -0
- data/lib/marver/entities/summary/serie.rb +19 -0
- data/lib/marver/entities/summary/story.rb +20 -0
- data/lib/marver/entities/{common/text_object.rb → text_object.rb} +0 -0
- data/lib/marver/entities/{common/url.rb → url.rb} +0 -0
- data/lib/marver/finders/character_finder.rb +2 -15
- data/lib/marver/helpers/string_helper.rb +2 -2
- data/lib/marver/version.rb +1 -1
- data/marver.gemspec +4 -0
- data/spec/marver/{rest → api}/client_spec.rb +2 -3
- data/spec/marver/api/credentials_spec.rb +17 -0
- data/spec/marver/{rest → api}/error_spec.rb +3 -3
- data/spec/marver/api/response_spec.rb +25 -0
- data/spec/marver/client_spec.rb +9 -4
- data/spec/marver/configuration_spec.rb +18 -0
- data/spec/marver/data_container_spec.rb +1 -1
- data/spec/marver/entities/{core/character_spec.rb → character_spec.rb} +11 -16
- data/spec/marver/entities/{core/comic_spec.rb → comic_spec.rb} +12 -13
- data/spec/marver/entities/{core/creator_spec.rb → creator_spec.rb} +10 -12
- data/spec/marver/entities/{core/event_spec.rb → event_spec.rb} +17 -19
- data/spec/marver/entities/{core/serie_spec.rb → serie_spec.rb} +17 -25
- data/spec/marver/entities/{core/story_spec.rb → story_spec.rb} +10 -11
- data/spec/marver/entities/{summaries/character_summary_spec.rb → summary/character_spec.rb} +7 -10
- data/spec/marver/entities/{summaries/comic_summary_spec.rb → summary/comic_spec.rb} +7 -10
- data/spec/marver/entities/summary/creator_spec.rb +63 -0
- data/spec/marver/entities/summary/event_spec.rb +60 -0
- data/spec/marver/entities/summary/serie_spec.rb +57 -0
- data/spec/marver/entities/summary/story_spec.rb +61 -0
- data/spec/marver/finders/character_finder_spec.rb +1 -10
- data/spec/spec_helper.rb +20 -1
- metadata +121 -57
- data/lib/marver/builders/common_entities_builder.rb +0 -46
- data/lib/marver/builders/core_entities_builder.rb +0 -34
- data/lib/marver/credentials.rb +0 -23
- data/lib/marver/entities/core/character.rb +0 -35
- data/lib/marver/entities/core/event.rb +0 -35
- data/lib/marver/entities/core/serie.rb +0 -37
- data/lib/marver/entities/core/story.rb +0 -36
- data/lib/marver/entities/summaries/character_summary.rb +0 -22
- data/lib/marver/entities/summaries/comic_summary.rb +0 -20
- data/lib/marver/entities/summaries/creator_summary.rb +0 -12
- data/lib/marver/entities/summaries/event_summary.rb +0 -14
- data/lib/marver/entities/summaries/serie_summary.rb +0 -13
- data/lib/marver/entities/summaries/story_summary.rb +0 -14
- data/lib/marver/rest/client.rb +0 -22
- data/spec/marver/credentials_spec.rb +0 -19
- data/spec/marver/entities/summaries/creator_summary_spec.rb +0 -23
- data/spec/marver/entities/summaries/event_summary_spec.rb +0 -30
- data/spec/marver/entities/summaries/serie_summary_spec.rb +0 -26
- data/spec/marver/entities/summaries/story_summary_spec.rb +0 -30
- 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
|
File without changes
|
File without changes
|
File without changes
|
@@ -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
|
File without changes
|
File without changes
|
@@ -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 =
|
6
|
+
response = Marver::API::Client.new.get(:characters, options)
|
14
7
|
results = Marver::DataContainer.new(response).results
|
15
|
-
Marver::Character.build(results
|
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)}
|
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
|
data/lib/marver/version.rb
CHANGED
data/marver.gemspec
CHANGED
@@ -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::
|
5
|
-
let(:client) { Marver::
|
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 '
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Marver::
|
4
|
-
let(:error) { Marver::
|
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
|