marver 0.0.2 → 0.0.4
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.
- 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
@@ -1,46 +0,0 @@
|
|
1
|
-
require './lib/marver.rb'
|
2
|
-
|
3
|
-
# TODO: Refactor, I guess?
|
4
|
-
module Marver
|
5
|
-
module CommonEntitiesBuilder
|
6
|
-
COMMON_ENTITIES = %w(prices images urls textObjects thumbnail dates)
|
7
|
-
|
8
|
-
extend Marver::StringHelper
|
9
|
-
|
10
|
-
def self.build!(object)
|
11
|
-
COMMON_ENTITIES.each do |entity|
|
12
|
-
# If the object's JSON has this entity..
|
13
|
-
if object.json.has_key?(entity)
|
14
|
-
# get the entity lists
|
15
|
-
entities = entity_items(object, entity)
|
16
|
-
# find the class for this type of entity
|
17
|
-
klass = common_class(entity)
|
18
|
-
# parameterize the entity string
|
19
|
-
# i.e. textObjects => TextObject
|
20
|
-
parameterized_entity = parameterize(entity)
|
21
|
-
|
22
|
-
if entities.kind_of?(Array)
|
23
|
-
object.class.send(:define_method, parameterized_entity) do
|
24
|
-
entities.collect do |ent|
|
25
|
-
klass.new(ent)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
else
|
29
|
-
object.class.send(:define_method, parameterized_entity) do
|
30
|
-
klass.new(entities)
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
def self.entity_items(object, entity)
|
38
|
-
if object.json[entity].kind_of?(Hash) && object.json[entity].has_key?('items')
|
39
|
-
[object.json[entity]['items']].compact.flatten(1)
|
40
|
-
else
|
41
|
-
object.json[entity]
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
end
|
46
|
-
end
|
@@ -1,34 +0,0 @@
|
|
1
|
-
require './lib/marver.rb'
|
2
|
-
|
3
|
-
# TODO: Refactor, I guess?
|
4
|
-
module Marver
|
5
|
-
module CoreEntitiesBuilder
|
6
|
-
CORE_ENTITIES = %w(comics series creators stories characters events)
|
7
|
-
|
8
|
-
extend Marver::StringHelper
|
9
|
-
|
10
|
-
def self.build!(object)
|
11
|
-
CORE_ENTITIES.each do |entity|
|
12
|
-
if object.json.has_key?(entity)
|
13
|
-
klass = self.summary_class(entity)
|
14
|
-
entity_items = self.entity_items(object, entity)
|
15
|
-
|
16
|
-
object.class.send(:define_method, entity) do
|
17
|
-
entity_items.collect do |ent|
|
18
|
-
klass.new(ent, object.credentials)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
def self.entity_items(object, entity)
|
26
|
-
if object.json[entity].kind_of?(Hash) && object.json[entity].has_key?('items')
|
27
|
-
[object.json[entity]['items']].compact.flatten(1)
|
28
|
-
else
|
29
|
-
[object.json[entity]].compact.flatten(1)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
end
|
34
|
-
end
|
data/lib/marver/credentials.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
require 'digest/md5'
|
2
|
-
|
3
|
-
module Marver
|
4
|
-
class Credentials
|
5
|
-
attr_reader :public_key, :private_key, :timestamp
|
6
|
-
|
7
|
-
def initialize(private_key, public_key)
|
8
|
-
@public_key = public_key
|
9
|
-
@private_key = private_key
|
10
|
-
@timestamp = Time.now.to_i.to_s
|
11
|
-
end
|
12
|
-
|
13
|
-
def to_s
|
14
|
-
"ts=#{@timestamp}&apikey=#{@public_key}&hash=#{md5_hash(@timestamp)}"
|
15
|
-
end
|
16
|
-
|
17
|
-
private
|
18
|
-
|
19
|
-
def md5_hash(ts)
|
20
|
-
Digest::MD5.hexdigest(@timestamp + @private_key + @public_key)
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
@@ -1,35 +0,0 @@
|
|
1
|
-
require './lib/marver.rb'
|
2
|
-
|
3
|
-
module Marver
|
4
|
-
class Character
|
5
|
-
attr_reader :id, :resource_uri, :description, :urls, :name,
|
6
|
-
:thumbnail, :comics, :stories, :events, :series, :json, :credentials
|
7
|
-
|
8
|
-
class << self
|
9
|
-
def build(response, credentials)
|
10
|
-
if response.kind_of?(Array)
|
11
|
-
response.collect do |character|
|
12
|
-
Marver::Character.new(character, credentials)
|
13
|
-
end
|
14
|
-
else
|
15
|
-
new(response.results, credentials)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
def initialize(json, credentials)
|
21
|
-
@credentials = credentials
|
22
|
-
@json = json
|
23
|
-
|
24
|
-
@description = json['description']
|
25
|
-
@id = json['id'].to_i
|
26
|
-
@credentials = credentials
|
27
|
-
@name = json['name']
|
28
|
-
@resource_uri = "#{json['resourceURI']}?#{@credentials.to_s}"
|
29
|
-
|
30
|
-
CoreEntitiesBuilder.build!(self)
|
31
|
-
CommonEntitiesBuilder.build!(self)
|
32
|
-
end
|
33
|
-
|
34
|
-
end
|
35
|
-
end
|
@@ -1,35 +0,0 @@
|
|
1
|
-
module Marver
|
2
|
-
class Event
|
3
|
-
attr_reader :json, :credentials, :title, :resource_uri,
|
4
|
-
:description, :start, :end, :next, :previous
|
5
|
-
|
6
|
-
class << self
|
7
|
-
def build(response, credentials)
|
8
|
-
if response.kind_of?(Array)
|
9
|
-
response.collect do |event|
|
10
|
-
Marver::Event.new(event, credentials)
|
11
|
-
end
|
12
|
-
else
|
13
|
-
new(response.results, credentials)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
def initialize(json, credentials)
|
19
|
-
@credentials = credentials
|
20
|
-
@json = json
|
21
|
-
|
22
|
-
@title = @json['title']
|
23
|
-
@resource_uri = "#{@json['resourceURI']}?#{@credentials.to_s}"
|
24
|
-
|
25
|
-
@description = @json['description']
|
26
|
-
@start = Date.parse(@json['start'])
|
27
|
-
@end = Date.parse(@json['end'])
|
28
|
-
@next = Marver::EventSummary.new(@json['next'], @credentials)
|
29
|
-
@previous = Marver::EventSummary.new(@json['previous'], @credentials)
|
30
|
-
|
31
|
-
CommonEntitiesBuilder.build!(self)
|
32
|
-
CoreEntitiesBuilder.build!(self)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
@@ -1,37 +0,0 @@
|
|
1
|
-
module Marver
|
2
|
-
class Serie
|
3
|
-
attr_reader :json, :credentials, :id, :title, :resource_uri, :description,
|
4
|
-
:start_year, :end_year, :rating, :next, :previous
|
5
|
-
|
6
|
-
class << self
|
7
|
-
def build(response, credentials)
|
8
|
-
if response.kind_of?(Array)
|
9
|
-
response.collect do |serie|
|
10
|
-
Marver::Serie.new(serie, credentials)
|
11
|
-
end
|
12
|
-
else
|
13
|
-
new(response.results, credentials)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
def initialize(json, credentials)
|
19
|
-
@json = json
|
20
|
-
@credentials = credentials
|
21
|
-
|
22
|
-
@id = @json['id']
|
23
|
-
@title = @json['title']
|
24
|
-
@resource_uri = @json['resourceURI']
|
25
|
-
@description = @json['description']
|
26
|
-
@start_year = @json['startYear']
|
27
|
-
@end_year = @json['endYear']
|
28
|
-
@rating = @json['rating']
|
29
|
-
|
30
|
-
@next = Marver::SerieSummary.new(@json['next'], @credentials)
|
31
|
-
@previous = Marver::SerieSummary.new(@json['previous'], @credentials)
|
32
|
-
|
33
|
-
CommonEntitiesBuilder.build!(self)
|
34
|
-
CoreEntitiesBuilder.build!(self)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
@@ -1,36 +0,0 @@
|
|
1
|
-
require './lib/marver.rb'
|
2
|
-
|
3
|
-
module Marver
|
4
|
-
class Story
|
5
|
-
attr_reader :id, :json, :title, :type, :resource_uri, :description, :thumbnail,
|
6
|
-
:comics, :series, :events, :characters, :creators, :original_issue,
|
7
|
-
:credentials
|
8
|
-
|
9
|
-
class << self
|
10
|
-
def build(response, credentials)
|
11
|
-
if response.kind_of?(Array)
|
12
|
-
response.collect do |story|
|
13
|
-
Marver::Story.new(story, credentials)
|
14
|
-
end
|
15
|
-
else
|
16
|
-
new(response.results, credentials)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def initialize(json, credentials)
|
22
|
-
@credentials = credentials
|
23
|
-
@json = json
|
24
|
-
|
25
|
-
@title = @json['title']
|
26
|
-
@type = @json['type']
|
27
|
-
@resource_uri = "#{@json['resourceURI']}?#{@credentials.to_s}"
|
28
|
-
@description = @json['description']
|
29
|
-
|
30
|
-
@original_issue = Marver::ComicSummary.new(@json['originalIssue'], @credentials)
|
31
|
-
|
32
|
-
CoreEntitiesBuilder.build!(self)
|
33
|
-
CommonEntitiesBuilder.build!(self)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
require './lib/marver.rb'
|
2
|
-
|
3
|
-
module Marver
|
4
|
-
class CharacterSummary
|
5
|
-
attr_reader :id, :name, :resource_uri, :type
|
6
|
-
|
7
|
-
def initialize(json, credentials)
|
8
|
-
@id = json['id'].to_i
|
9
|
-
@credentials = credentials
|
10
|
-
@name = json['name']
|
11
|
-
@resource_uri = "#{json['resourceURI']}?#{@credentials.to_s}"
|
12
|
-
@type = json['type'] || nil
|
13
|
-
end
|
14
|
-
|
15
|
-
def full
|
16
|
-
response = Marver::REST::Response.new(RestClient.get(@resource_uri))
|
17
|
-
data = Marver::DataContainer.new(response)
|
18
|
-
Marver::Character.build(data, @credentials)
|
19
|
-
end
|
20
|
-
|
21
|
-
end
|
22
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
require './lib/marver.rb'
|
2
|
-
|
3
|
-
module Marver
|
4
|
-
class ComicSummary
|
5
|
-
attr_reader :id, :name, :resource_uri, :type
|
6
|
-
|
7
|
-
def initialize(json, credentials)
|
8
|
-
@credentials = credentials
|
9
|
-
@name = json['name']
|
10
|
-
@resource_uri = "#{json['resourceURI']}?#{@credentials.to_s}"
|
11
|
-
@id = json['id'].to_i
|
12
|
-
end
|
13
|
-
|
14
|
-
def full
|
15
|
-
response = Marver::REST::Response.new(RestClient.get(@resource_uri))
|
16
|
-
data = Marver::DataContainer.new(response)
|
17
|
-
Marver::Comic.build(data, @credentials)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
@@ -1,12 +0,0 @@
|
|
1
|
-
module Marver
|
2
|
-
class CreatorSummary
|
3
|
-
attr_reader :name, :resource_uri, :role
|
4
|
-
|
5
|
-
def initialize(json, credentials)
|
6
|
-
@credentials = credentials
|
7
|
-
@name = json['name']
|
8
|
-
@resource_uri = "#{json['resourceURI']}?#{@credentials.to_s}"
|
9
|
-
@role = json['role']
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
@@ -1,14 +0,0 @@
|
|
1
|
-
module Marver
|
2
|
-
class EventSummary
|
3
|
-
attr_reader :id, :name, :resource_uri, :type
|
4
|
-
|
5
|
-
def initialize(json, credentials)
|
6
|
-
@id = json['id'].to_i
|
7
|
-
@credentials = credentials
|
8
|
-
@name = json['name']
|
9
|
-
@resource_uri = "#{json['resourceURI']}?#{@credentials.to_s}"
|
10
|
-
@type = json['type'] || nil
|
11
|
-
end
|
12
|
-
|
13
|
-
end
|
14
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
module Marver
|
2
|
-
class SerieSummary
|
3
|
-
attr_reader :id, :name, :resource_uri, :type
|
4
|
-
|
5
|
-
def initialize(json, credentials)
|
6
|
-
@credentials = credentials
|
7
|
-
|
8
|
-
@name = json['name']
|
9
|
-
@resource_uri = "#{json['resourceURI']}?#{@credentials.to_s}"
|
10
|
-
end
|
11
|
-
|
12
|
-
end
|
13
|
-
end
|
@@ -1,14 +0,0 @@
|
|
1
|
-
module Marver
|
2
|
-
class StorySummary
|
3
|
-
attr_reader :id, :name, :resource_uri, :type
|
4
|
-
|
5
|
-
def initialize(json, credentials)
|
6
|
-
@credentials = credentials
|
7
|
-
@name = json['name']
|
8
|
-
@resource_uri = "#{json['resourceURI']}?#{@credentials.to_s}"
|
9
|
-
@type = json['type'] || nil
|
10
|
-
@id = json['id'].to_i
|
11
|
-
end
|
12
|
-
|
13
|
-
end
|
14
|
-
end
|
data/lib/marver/rest/client.rb
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
require 'rest_client'
|
2
|
-
require 'digest/md5'
|
3
|
-
require_relative 'response'
|
4
|
-
|
5
|
-
module Marver
|
6
|
-
module REST
|
7
|
-
class Client
|
8
|
-
API_VERSION = "v1"
|
9
|
-
API_ENDPOINT = "http://gateway.marvel.com"
|
10
|
-
|
11
|
-
def get_request(query_string)
|
12
|
-
url = endpoint + query_string
|
13
|
-
Marver::REST::Response.new(RestClient.get(url))
|
14
|
-
end
|
15
|
-
|
16
|
-
def endpoint
|
17
|
-
"#{API_ENDPOINT}/#{API_VERSION}/public/"
|
18
|
-
end
|
19
|
-
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
require './lib/marver.rb'
|
2
|
-
|
3
|
-
describe Marver::Credentials do
|
4
|
-
let(:credentials) { Marver::Credentials.new("priv_key", "pub_key") }
|
5
|
-
|
6
|
-
it "has a API private key" do
|
7
|
-
expect(credentials.public_key).to eq "pub_key"
|
8
|
-
end
|
9
|
-
|
10
|
-
it "has a API public key" do
|
11
|
-
expect(credentials.private_key).to eq "priv_key"
|
12
|
-
end
|
13
|
-
|
14
|
-
it 'has a timestamp' do
|
15
|
-
Time.stub_chain(:now, :to_i, :to_s).and_return "1"
|
16
|
-
expect(credentials.timestamp).to eq "1"
|
17
|
-
end
|
18
|
-
|
19
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
require './lib/marver.rb'
|
2
|
-
|
3
|
-
describe Marver::CreatorSummary do
|
4
|
-
before :each do
|
5
|
-
Time.stub_chain(:now, :to_i, :to_s).and_return "1"
|
6
|
-
credentials = Marver::Credentials.new('priv_key', 'pub_key')
|
7
|
-
@creator = Marver::CreatorSummary.new({
|
8
|
-
"resourceURI" => "http://gateway.marvel.com/v1/public/creators/648", "name" => "Simone Bianchi", "role" => "penciller (cover)"
|
9
|
-
}, credentials)
|
10
|
-
end
|
11
|
-
|
12
|
-
it "#name - creator's name" do
|
13
|
-
expect(@creator.name).to eq "Simone Bianchi"
|
14
|
-
end
|
15
|
-
|
16
|
-
it '#resource_uri - The canonical URL identifier for this resource.' do
|
17
|
-
expect(@creator.resource_uri).to eq "http://gateway.marvel.com/v1/public/creators/648?ts=1&apikey=pub_key&hash=3d4ce88a477c7e4a5accbf6cd2c8b819"
|
18
|
-
end
|
19
|
-
|
20
|
-
it '#role - the role this creator took' do
|
21
|
-
expect(@creator.role).to eq "penciller (cover)"
|
22
|
-
end
|
23
|
-
end
|
@@ -1,30 +0,0 @@
|
|
1
|
-
require './lib/marver/entities/summaries/event_summary'
|
2
|
-
require './lib/marver/credentials'
|
3
|
-
|
4
|
-
describe Marver::EventSummary do
|
5
|
-
let(:credentials) { Marver::Credentials.new('priv_key', 'pub_key') }
|
6
|
-
let(:event_summary) { Marver::EventSummary.new({ "id" => "123", "resourceURI" => "http://example.net", "name" => "Breathing" }, credentials) }
|
7
|
-
|
8
|
-
it '#id' do
|
9
|
-
expect(event_summary.id).to eq 123
|
10
|
-
end
|
11
|
-
|
12
|
-
it '#resource_uri' do
|
13
|
-
Time.stub_chain(:now, :to_i, :to_s).and_return "1"
|
14
|
-
expect(event_summary.resource_uri).to eq "http://example.net?ts=1&apikey=pub_key&hash=3d4ce88a477c7e4a5accbf6cd2c8b819"
|
15
|
-
end
|
16
|
-
|
17
|
-
it '#type should always be nil' do
|
18
|
-
expect(event_summary.type).to eq nil
|
19
|
-
end
|
20
|
-
|
21
|
-
it '#name' do
|
22
|
-
expect(event_summary.name).to eq "Breathing"
|
23
|
-
end
|
24
|
-
|
25
|
-
describe '#full' do
|
26
|
-
it 'fetches the full view of the entity' do
|
27
|
-
pending
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|