marver 0.0.2 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
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