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