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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a429ebb07df62f8290bad6d714177c7dccfc63fd
4
- data.tar.gz: 800a8e3a54a341ac5a2e145395aea0c27de03c16
3
+ metadata.gz: fd4c0d07e5c64d82c439ce0e0dfa39fde695ec10
4
+ data.tar.gz: eeccacdfd8ae9c5494d4f9cb5e8d5ff967faa338
5
5
  SHA512:
6
- metadata.gz: 718e41cc32a28c9077895c4966120fb0b8dfb9991f70aead3ad73a2ac2de093595ad26378d2b420c914d63ac795d08c7c7faf7dcffc7d6cb05e1da800bccb5c3
7
- data.tar.gz: 6ef523f611f82bd7ea8c2b88347d0106537bc7e34ce93db782339091648ecc7caba9760c94b21c3ccee2c4376a70d628d27a2f8959921abbe039bb8aad232eb2
6
+ metadata.gz: 8ba5b9c60dfc3c054e6e6f1df6456bbd0910341737948e2d3ee158e48e9d65a67274b64588187f00ac407a9946cafd9b2c7c1fab0a460e3b35f1986a100f9fe0
7
+ data.tar.gz: ef5b9b289ebb6bd66fd1f4372ad8a1f376d4197eaf3c807b4854a9d475e05e120f5697337d577267094cf2290f9597797225e95758145e26270d2be28393e05f
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format progress
data/Gemfile CHANGED
@@ -1,13 +1,4 @@
1
1
  source "https://rubygems.org/"
2
2
 
3
- gem 'rest-client'
4
-
5
- group :development do
6
- gem 'pry'
7
- end
8
-
9
- group :test do
10
- gem 'rspec'
11
- gem 'webmock'
12
- end
13
-
3
+ # Specify your gem's dependencies in forecastr.gemspec
4
+ gemspec
data/README.md CHANGED
@@ -1,17 +1,58 @@
1
1
  Marver
2
2
  ======
3
3
 
4
- Marver is (going to be an) easy to use Ruby gem for [Marvel's API](http://developer.marvel.com/). It is still in development and any contribution is welcomed.
4
+ Marver is (going to be an) easy to use Ruby gem for [Marvel's API](http://developer.marvel.com/).
5
+ It is **still VERY MUCH in development** and it doesn't really do much right now. Also, any kind of contribution is **welcomed**.
5
6
 
7
+ ## Installation
6
8
 
7
- ### TO DO:
9
+ Add this line to your application's Gemfile:
10
+
11
+ gem 'marver'
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install marver
20
+
21
+ ## Usage
22
+
23
+ ```ruby
24
+ Marver.configure do |config|
25
+ config.public_key = 'your_public_key'
26
+ config.private_key = 'your_private_key'
27
+ end
28
+
29
+ client = Marver::Client.new
30
+ client.characters.find({ name: 'Hulk' }) # Returns Hulk
31
+ client.serie.find({ name: 'The Avengers' }) # Returns The Avengers
32
+ ```
8
33
 
9
- ##### Write core classes
10
- * Serie
11
- * Event
12
- * Creator
13
- * More?
34
+ Also, you can inspect summary (trimmed) objects of the associated entities to one entity.
14
35
 
36
+ ```ruby
37
+ Marver.configure do |config|
38
+ config.public_key = 'your_public_key'
39
+ config.private_key = 'your_private_key'
40
+ end
41
+
42
+ client = Marver::Client.new
43
+ hulk = client.characters.find({ name: 'Hulk' })
44
+ hulk.comics # Returns an array of comics summaries
45
+ hulk.stories # Returns an array of stories where Hulk appears
46
+ ```
47
+
48
+ A summary object can also morph into a "full view" object.
49
+
50
+ ```ruby
51
+ comic = hulk.comics.first # Take first comic where Hulk appears
52
+ comic.full # This will issue an API call and grab the full object with all data for that comic
53
+ ```
54
+
55
+ ### TO DO:
15
56
 
16
57
  ##### Entity Finder classes
17
58
  Should be implemented within the Marver::Client class.
@@ -23,10 +64,6 @@ Should be implemented within the Marver::Client class.
23
64
  * EventFinder
24
65
  * More?
25
66
 
26
-
27
- Refactor generation of resource lists for core classes, maybe add a builder module?
28
-
29
-
30
-
31
67
  #### Author
32
- Ile Eftimov - [@fteem](http://twitter.com/fteem)
68
+ Ile Eftimov <br/>
69
+ [twitter](http://twitter.com/fteem) [website](http://eftimov.net)
data/TODO ADDED
@@ -0,0 +1,3 @@
1
+ 1. Fix grouping of classes by directory. Should be in context of namespacing.
2
+ 3. Build objects when data is parsed.
3
+ 4. Improve Marver::REST::Client by returning parsed JSON.
@@ -1,42 +1,52 @@
1
1
  require 'rest_client'
2
+ require 'marver/version'
3
+
4
+ module Marver
5
+
6
+ # Base Classes
7
+ autoload :Client, 'marver/client'
8
+ autoload :Configuration, 'marver/configuration'
9
+ autoload :DataContainer, 'marver/data_container'
10
+
11
+ # Finders
12
+ autoload :CharacterFinder, 'marver/finders/character_finder'
13
+
14
+ # API
15
+ autoload :API, 'marver/api'
16
+
17
+ # Helpers & builders
18
+ autoload :StringHelper, 'marver/helpers/string_helper'
19
+
20
+ # Common Entities
21
+ autoload :TextObject, 'marver/entities/text_object'
22
+ autoload :Image, 'marver/entities/image'
23
+ autoload :Url, 'marver/entities/url'
24
+ autoload :KeyDate, 'marver/entities/key_date'
25
+ autoload :Price, 'marver/entities/price'
26
+
27
+ # Core Entities
28
+ autoload :Event, 'marver/entities/event'
29
+ autoload :Serie, 'marver/entities/serie'
30
+ autoload :Story, 'marver/entities/story'
31
+ autoload :Character, 'marver/entities/character'
32
+ autoload :Creator, 'marver/entities/creator'
33
+ autoload :Comic, 'marver/entities/comic'
34
+
35
+ # Summary Entities
36
+ autoload :Summary, 'marver/entities/summary'
37
+
38
+ autoload :Summarizable, 'marver/entities/summarizable'
39
+ autoload :Commonable, 'marver/entities/commonable'
40
+ autoload :Queryable, 'marver/entities/queryable'
41
+
42
+
43
+ class << self
44
+ attr_accessor :configuration
45
+
46
+ def configure
47
+ self.configuration ||= Configuration.new
48
+ yield(configuration)
49
+ end
50
+ end
51
+ end
2
52
 
3
- # Base Classes
4
- require './lib/marver/client.rb'
5
- require './lib/marver/version.rb'
6
- require './lib/marver/credentials.rb'
7
- require './lib/marver/data_container.rb'
8
-
9
- # Finders
10
- require './lib/marver/finders/character_finder.rb'
11
-
12
- # REST
13
- require './lib/marver/rest/client.rb'
14
- require './lib/marver/rest/response.rb'
15
-
16
- # Helpers & builders
17
- require './lib/marver/helpers/string_helper.rb'
18
- require './lib/marver/builders/core_entities_builder.rb'
19
- require './lib/marver/builders/common_entities_builder.rb'
20
-
21
- # Common Entities
22
- require './lib/marver/entities/common/text_object.rb'
23
- require './lib/marver/entities/common/image.rb'
24
- require './lib/marver/entities/common/url.rb'
25
- require './lib/marver/entities/common/key_date.rb'
26
- require './lib/marver/entities/common/price.rb'
27
-
28
- # Core Entities
29
- require './lib/marver/entities/core/event.rb'
30
- require './lib/marver/entities/core/serie.rb'
31
- require './lib/marver/entities/core/story.rb'
32
- require './lib/marver/entities/core/character.rb'
33
- require './lib/marver/entities/core/creator.rb'
34
- require './lib/marver/entities/core/comic.rb'
35
-
36
- # Summary Entities
37
- require './lib/marver/entities/summaries/character_summary.rb'
38
- require './lib/marver/entities/summaries/comic_summary.rb'
39
- require './lib/marver/entities/summaries/story_summary.rb'
40
- require './lib/marver/entities/summaries/event_summary.rb'
41
- require './lib/marver/entities/summaries/serie_summary.rb'
42
- require './lib/marver/entities/summaries/creator_summary.rb'
@@ -0,0 +1,8 @@
1
+ module Marver
2
+ module API
3
+ autoload :Client, 'marver/api/client'
4
+ autoload :Response, 'marver/api/response'
5
+ autoload :Credentials, 'marver/api/credentials'
6
+ autoload :Error, 'marver/api/error'
7
+ end
8
+ end
@@ -0,0 +1,28 @@
1
+ require './lib/marver.rb'
2
+ require 'digest/md5'
3
+
4
+ module Marver
5
+ module API
6
+ class Client
7
+ include Marver::Queryable
8
+
9
+ API_VERSION = "v1"
10
+ API_ENDPOINT = "http://gateway.marvel.com"
11
+
12
+ def get(entity, options)
13
+ query_string = options.empty? ? "" : hash_to_querystring(options)
14
+ url = endpoint + "#{entity.to_s}?" + query_string + credentials
15
+ Marver::API::Response.new(RestClient.get(url))
16
+ end
17
+
18
+ def endpoint
19
+ "#{API_ENDPOINT}/#{API_VERSION}/public/"
20
+ end
21
+
22
+ def credentials
23
+ Credentials.get
24
+ end
25
+
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,21 @@
1
+ require 'digest/md5'
2
+ require 'marver/configuration'
3
+
4
+ module Marver
5
+ module API
6
+ class Credentials
7
+
8
+ class << self
9
+ def get
10
+ public_key = Marver.configuration.public_key
11
+ private_key = Marver.configuration.private_key
12
+ timestamp = Time.now.to_i.to_s
13
+ hash = Digest::MD5.hexdigest(timestamp + private_key + public_key)
14
+
15
+ "&ts=#{timestamp}&apikey=#{public_key}&hash=#{hash}"
16
+ end
17
+ end
18
+
19
+ end
20
+ end
21
+ end
@@ -1,5 +1,5 @@
1
1
  module Marver
2
- module REST
2
+ module API
3
3
  class Error
4
4
  attr_reader :code, :status
5
5
 
@@ -1,8 +1,7 @@
1
1
  require 'json'
2
- require './lib/marver.rb'
3
2
 
4
3
  module Marver
5
- module REST
4
+ module API
6
5
  class Response
7
6
  attr_reader :code, :status, :data, :results
8
7
 
@@ -4,9 +4,8 @@ module Marver
4
4
  class Client
5
5
  attr_reader :characters
6
6
 
7
- def initialize(private_key, public_key)
8
- @credentials = Marver::Credentials.new(private_key, public_key)
9
- @characters = Marver::CharacterFinder.new(@credentials)
7
+ def initialize
8
+ @characters = Marver::CharacterFinder.new
10
9
  end
11
10
 
12
11
  end
@@ -0,0 +1,10 @@
1
+ module Marver
2
+ class Configuration
3
+ attr_accessor :public_key, :private_key
4
+
5
+ def initialize
6
+ @public_key = 'your_public_key_here'
7
+ @private_key = 'your_private_key_here'
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,33 @@
1
+ require './lib/marver.rb'
2
+
3
+ module Marver
4
+ class Character
5
+ include Marver::Summarizable
6
+ include Marver::Commonable
7
+
8
+ attr_reader :json, :id, :resource_uri, :description, :name
9
+
10
+ class << self
11
+ def build(results)
12
+ if results.kind_of?(Array)
13
+ results.collect do |character|
14
+ Marver::Character.new(character)
15
+ end
16
+ else
17
+ new(results)
18
+ end
19
+ end
20
+ end
21
+
22
+ def initialize(json)
23
+ @json = json
24
+
25
+ @description = json['description']
26
+
27
+ @id = json['id'].to_i
28
+ @name = json['name']
29
+ @resource_uri = json['resourceURI']
30
+ end
31
+
32
+ end
33
+ end
@@ -2,29 +2,30 @@ require './lib/marver.rb'
2
2
 
3
3
  module Marver
4
4
  class Comic
5
- attr_reader :json, :credentials, :id, :digital_id, :title, :issue_number,
5
+ include Marver::Summarizable
6
+ include Marver::Commonable
7
+
8
+ attr_reader :json, :id, :digital_id, :title, :issue_number,
6
9
  :variant_description, :description, :isbn,
7
10
  :upc, :diamond_code, :ean, :issn, :format,
8
- :page_count, :resource_uri, :thumbnail, :text_objects
9
-
11
+ :page_count, :resource_uri
10
12
 
11
13
  class << self
12
- def build(response, credentials)
14
+ def build(response)
13
15
  if response.kind_of?(Array)
14
16
  response.collect do |comic|
15
- new(comic, credentials)
17
+ new(comic)
16
18
  end
17
19
  else
18
- new(response.results, credentials)
20
+ new(response.results)
19
21
  end
20
22
  end
21
23
  end
22
24
 
23
- def initialize(json, credentials)
25
+ def initialize(json)
24
26
  @json = json
25
- @credentials = credentials
26
27
  @title = json['title']
27
- @resource_uri = "#{json['resourceURI']}?#{@credentials.to_s}"
28
+ @resource_uri = json['resourceURI']
28
29
  @id = json['id'].to_i
29
30
  @digital_id = json['digitalId']
30
31
  @issue_number = json['issueNumber']
@@ -37,9 +38,6 @@ module Marver
37
38
  @issn = json['issn']
38
39
  @format = json['format']
39
40
  @page_count = json['pageCount']
40
-
41
- CoreEntitiesBuilder.build!(self)
42
- CommonEntitiesBuilder.build!(self)
43
41
  end
44
42
 
45
43
  end
@@ -0,0 +1,37 @@
1
+ module Marver
2
+ module Commonable
3
+ def prices
4
+ @prices ||= entity_items('prices').collect do |price|
5
+ Marver::Price.new(price)
6
+ end
7
+ end
8
+
9
+ def images
10
+ @images ||= entity_items('images').collect do |image|
11
+ Marver::Image.new(image)
12
+ end
13
+ end
14
+
15
+ def urls
16
+ @urls ||= entity_items('urls').collect do |url|
17
+ Marver::Url.new(url)
18
+ end
19
+ end
20
+
21
+ def text_objects
22
+ @text_objects ||= entity_items('textObjects').collect do |text_object|
23
+ Marver::TextObject.new(text_object)
24
+ end
25
+ end
26
+
27
+ def thumbnail
28
+ @thumbnail ||= Marver::Image.new(json['thumbnail'])
29
+ end
30
+
31
+ def dates
32
+ @dates ||= entity_items('dates').collect do |date|
33
+ Marver::KeyDate.new(date)
34
+ end
35
+ end
36
+ end
37
+ end
@@ -1,35 +1,32 @@
1
1
  module Marver
2
2
  class Creator
3
+ include Marver::Summarizable
4
+ include Marver::Commonable
5
+
3
6
  attr_reader :id, :first_name, :middle_name, :last_name, :full_name,
4
- :suffix, :resource_uri, :json, :credentials
7
+ :suffix, :resource_uri, :json
5
8
 
6
9
  class << self
7
- def build(response, credentials)
8
- if response.kind_of?(Array)
9
- response.collect do |creator|
10
- Marver::Creator.new(creator, credentials)
10
+ def build(results)
11
+ if results.kind_of?(Array)
12
+ results.collect do |creator|
13
+ Marver::Creator.new(creator)
11
14
  end
12
15
  else
13
- new(response.results, credentials)
16
+ new(results)
14
17
  end
15
18
  end
16
19
  end
17
20
 
18
- def initialize(json, credentials)
21
+ def initialize(json)
19
22
  @json = json
20
- @credentials = credentials
21
-
22
23
  @id = @json['id']
23
24
  @first_name = @json['firstName']
24
25
  @middle_name = @json['middleName']
25
26
  @last_name = @json['lastName']
26
27
  @full_name = @json['fullName']
27
28
  @suffix = @json['suffix']
28
-
29
29
  @resource_uri = @json['resourceURI']
30
-
31
- CommonEntitiesBuilder.build!(self)
32
- CoreEntitiesBuilder.build!(self)
33
30
  end
34
31
 
35
32
  end