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
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fd4c0d07e5c64d82c439ce0e0dfa39fde695ec10
|
4
|
+
data.tar.gz: eeccacdfd8ae9c5494d4f9cb5e8d5ff967faa338
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8ba5b9c60dfc3c054e6e6f1df6456bbd0910341737948e2d3ee158e48e9d65a67274b64588187f00ac407a9946cafd9b2c7c1fab0a460e3b35f1986a100f9fe0
|
7
|
+
data.tar.gz: ef5b9b289ebb6bd66fd1f4372ad8a1f376d4197eaf3c807b4854a9d475e05e120f5697337d577267094cf2290f9597797225e95758145e26270d2be28393e05f
|
data/.rspec
ADDED
data/Gemfile
CHANGED
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/).
|
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
|
-
|
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
|
-
|
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
|
68
|
+
Ile Eftimov <br/>
|
69
|
+
[twitter](http://twitter.com/fteem) [website](http://eftimov.net)
|
data/TODO
ADDED
data/lib/marver.rb
CHANGED
@@ -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'
|
data/lib/marver/api.rb
ADDED
@@ -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
|
data/lib/marver/client.rb
CHANGED
@@ -4,9 +4,8 @@ module Marver
|
|
4
4
|
class Client
|
5
5
|
attr_reader :characters
|
6
6
|
|
7
|
-
def initialize
|
8
|
-
@
|
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,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
|
-
|
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
|
9
|
-
|
11
|
+
:page_count, :resource_uri
|
10
12
|
|
11
13
|
class << self
|
12
|
-
def build(response
|
14
|
+
def build(response)
|
13
15
|
if response.kind_of?(Array)
|
14
16
|
response.collect do |comic|
|
15
|
-
new(comic
|
17
|
+
new(comic)
|
16
18
|
end
|
17
19
|
else
|
18
|
-
new(response.results
|
20
|
+
new(response.results)
|
19
21
|
end
|
20
22
|
end
|
21
23
|
end
|
22
24
|
|
23
|
-
def initialize(json
|
25
|
+
def initialize(json)
|
24
26
|
@json = json
|
25
|
-
@credentials = credentials
|
26
27
|
@title = json['title']
|
27
|
-
@resource_uri =
|
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
|
7
|
+
:suffix, :resource_uri, :json
|
5
8
|
|
6
9
|
class << self
|
7
|
-
def build(
|
8
|
-
if
|
9
|
-
|
10
|
-
Marver::Creator.new(creator
|
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(
|
16
|
+
new(results)
|
14
17
|
end
|
15
18
|
end
|
16
19
|
end
|
17
20
|
|
18
|
-
def initialize(json
|
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
|