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.
Files changed (80) hide show
  1. checksums.yaml +4 -4
  2. data/.rspec +2 -0
  3. data/Gemfile +2 -11
  4. data/README.md +50 -13
  5. data/TODO +3 -0
  6. data/lib/marver.rb +50 -40
  7. data/lib/marver/api.rb +8 -0
  8. data/lib/marver/api/client.rb +28 -0
  9. data/lib/marver/api/credentials.rb +21 -0
  10. data/lib/marver/{rest → api}/error.rb +1 -1
  11. data/lib/marver/{rest → api}/response.rb +1 -2
  12. data/lib/marver/client.rb +2 -3
  13. data/lib/marver/configuration.rb +10 -0
  14. data/lib/marver/entities/character.rb +33 -0
  15. data/lib/marver/entities/{core/comic.rb → comic.rb} +10 -12
  16. data/lib/marver/entities/commonable.rb +37 -0
  17. data/lib/marver/entities/{core/creator.rb → creator.rb} +10 -13
  18. data/lib/marver/entities/event.rb +34 -0
  19. data/lib/marver/entities/{common/image.rb → image.rb} +0 -0
  20. data/lib/marver/entities/{common/key_date.rb → key_date.rb} +0 -0
  21. data/lib/marver/entities/{common/price.rb → price.rb} +0 -0
  22. data/lib/marver/entities/queryable.rb +12 -0
  23. data/lib/marver/entities/serie.rb +37 -0
  24. data/lib/marver/entities/story.rb +33 -0
  25. data/lib/marver/entities/summarizable.rb +54 -0
  26. data/lib/marver/entities/summary.rb +10 -0
  27. data/lib/marver/entities/summary/character.rb +23 -0
  28. data/lib/marver/entities/summary/comic.rb +21 -0
  29. data/lib/marver/entities/summary/creator.rb +19 -0
  30. data/lib/marver/entities/summary/event.rb +20 -0
  31. data/lib/marver/entities/summary/serie.rb +19 -0
  32. data/lib/marver/entities/summary/story.rb +20 -0
  33. data/lib/marver/entities/{common/text_object.rb → text_object.rb} +0 -0
  34. data/lib/marver/entities/{common/url.rb → url.rb} +0 -0
  35. data/lib/marver/finders/character_finder.rb +2 -15
  36. data/lib/marver/helpers/string_helper.rb +2 -2
  37. data/lib/marver/version.rb +1 -1
  38. data/marver.gemspec +4 -0
  39. data/spec/marver/{rest → api}/client_spec.rb +2 -3
  40. data/spec/marver/api/credentials_spec.rb +17 -0
  41. data/spec/marver/{rest → api}/error_spec.rb +3 -3
  42. data/spec/marver/api/response_spec.rb +25 -0
  43. data/spec/marver/client_spec.rb +9 -4
  44. data/spec/marver/configuration_spec.rb +18 -0
  45. data/spec/marver/data_container_spec.rb +1 -1
  46. data/spec/marver/entities/{core/character_spec.rb → character_spec.rb} +11 -16
  47. data/spec/marver/entities/{core/comic_spec.rb → comic_spec.rb} +12 -13
  48. data/spec/marver/entities/{core/creator_spec.rb → creator_spec.rb} +10 -12
  49. data/spec/marver/entities/{core/event_spec.rb → event_spec.rb} +17 -19
  50. data/spec/marver/entities/{core/serie_spec.rb → serie_spec.rb} +17 -25
  51. data/spec/marver/entities/{core/story_spec.rb → story_spec.rb} +10 -11
  52. data/spec/marver/entities/{summaries/character_summary_spec.rb → summary/character_spec.rb} +7 -10
  53. data/spec/marver/entities/{summaries/comic_summary_spec.rb → summary/comic_spec.rb} +7 -10
  54. data/spec/marver/entities/summary/creator_spec.rb +63 -0
  55. data/spec/marver/entities/summary/event_spec.rb +60 -0
  56. data/spec/marver/entities/summary/serie_spec.rb +57 -0
  57. data/spec/marver/entities/summary/story_spec.rb +61 -0
  58. data/spec/marver/finders/character_finder_spec.rb +1 -10
  59. data/spec/spec_helper.rb +20 -1
  60. metadata +121 -57
  61. data/lib/marver/builders/common_entities_builder.rb +0 -46
  62. data/lib/marver/builders/core_entities_builder.rb +0 -34
  63. data/lib/marver/credentials.rb +0 -23
  64. data/lib/marver/entities/core/character.rb +0 -35
  65. data/lib/marver/entities/core/event.rb +0 -35
  66. data/lib/marver/entities/core/serie.rb +0 -37
  67. data/lib/marver/entities/core/story.rb +0 -36
  68. data/lib/marver/entities/summaries/character_summary.rb +0 -22
  69. data/lib/marver/entities/summaries/comic_summary.rb +0 -20
  70. data/lib/marver/entities/summaries/creator_summary.rb +0 -12
  71. data/lib/marver/entities/summaries/event_summary.rb +0 -14
  72. data/lib/marver/entities/summaries/serie_summary.rb +0 -13
  73. data/lib/marver/entities/summaries/story_summary.rb +0 -14
  74. data/lib/marver/rest/client.rb +0 -22
  75. data/spec/marver/credentials_spec.rb +0 -19
  76. data/spec/marver/entities/summaries/creator_summary_spec.rb +0 -23
  77. data/spec/marver/entities/summaries/event_summary_spec.rb +0 -30
  78. data/spec/marver/entities/summaries/serie_summary_spec.rb +0 -26
  79. data/spec/marver/entities/summaries/story_summary_spec.rb +0 -30
  80. 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
@@ -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
@@ -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