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
@@ -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
|