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
@@ -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
@@ -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
@@ -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 = @rest_client.get_request(url)
6
+ response = Marver::API::Client.new.get(:characters, options)
14
7
  results = Marver::DataContainer.new(response).results
15
- Marver::Character.build(results, @credentials)
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)}Summary")
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
@@ -1,3 +1,3 @@
1
1
  module Marver
2
- VERSION = '0.0.2'
2
+ VERSION = '0.0.4'
3
3
  end
@@ -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::REST::Client do
5
- let(:client) { Marver::REST::Client.new }
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 './lib/marver/rest/error.rb'
1
+ require 'spec_helper'
2
2
 
3
- describe Marver::REST::Error do
4
- let(:error) { Marver::REST::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
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