marver 0.0.0 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +17 -0
- data/.ruby-version +1 -0
- data/Gemfile +13 -0
- data/LICENSE +20 -0
- data/README.md +32 -0
- data/Rakefile +1 -0
- data/lib/marver.rb +35 -21
- data/lib/marver/builders/common_entities_builder.rb +46 -0
- data/lib/marver/builders/core_entities_builder.rb +34 -0
- data/lib/marver/client.rb +13 -0
- data/lib/marver/credentials.rb +23 -0
- data/lib/marver/data_container.rb +18 -0
- data/lib/marver/entities/common/image.rb +9 -0
- data/lib/marver/entities/common/key_date.rb +10 -0
- data/lib/marver/entities/common/price.rb +10 -0
- data/lib/marver/entities/common/text_object.rb +11 -0
- data/lib/marver/entities/common/url.rb +10 -0
- data/lib/marver/entities/core/character.rb +35 -0
- data/lib/marver/entities/core/comic.rb +46 -0
- data/lib/marver/entities/core/creator.rb +36 -0
- data/lib/marver/entities/core/event.rb +35 -0
- data/lib/marver/entities/core/serie.rb +37 -0
- data/lib/marver/entities/core/story.rb +36 -0
- data/lib/marver/entities/summaries/character_summary.rb +22 -0
- data/lib/marver/entities/summaries/comic_summary.rb +20 -0
- data/lib/marver/entities/summaries/creator_summary.rb +12 -0
- data/lib/marver/entities/summaries/event_summary.rb +14 -0
- data/lib/marver/entities/summaries/serie_summary.rb +13 -0
- data/lib/marver/entities/summaries/story_summary.rb +14 -0
- data/lib/marver/finders/character_finder.rb +24 -0
- data/lib/marver/helpers/string_helper.rb +36 -0
- data/lib/marver/rest/client.rb +22 -0
- data/lib/marver/rest/error.rb +13 -0
- data/lib/marver/rest/response.rb +18 -0
- data/lib/marver/version.rb +3 -0
- data/marver.gemspec +23 -0
- data/spec/fixtures/character.json +398 -0
- data/spec/fixtures/comic.json +243 -0
- data/spec/fixtures/creator.json +345 -0
- data/spec/fixtures/event.json +104 -0
- data/spec/fixtures/raw_json.json +398 -0
- data/spec/fixtures/serie.json +102 -0
- data/spec/fixtures/story.json +94 -0
- data/spec/marver/client_spec.rb +12 -0
- data/spec/marver/credentials_spec.rb +19 -0
- data/spec/marver/data_container_spec.rb +23 -0
- data/spec/marver/entities/core/character_spec.rb +76 -0
- data/spec/marver/entities/core/comic_spec.rb +150 -0
- data/spec/marver/entities/core/creator_spec.rb +83 -0
- data/spec/marver/entities/core/event_spec.rb +106 -0
- data/spec/marver/entities/core/serie_spec.rb +106 -0
- data/spec/marver/entities/core/story_spec.rb +70 -0
- data/spec/marver/entities/image_spec.rb +9 -0
- data/spec/marver/entities/key_date_spec.rb +17 -0
- data/spec/marver/entities/price_spec.rb +13 -0
- data/spec/marver/entities/summaries/character_summary_spec.rb +65 -0
- data/spec/marver/entities/summaries/comic_summary_spec.rb +64 -0
- data/spec/marver/entities/summaries/creator_summary_spec.rb +23 -0
- data/spec/marver/entities/summaries/event_summary_spec.rb +30 -0
- data/spec/marver/entities/summaries/serie_summary_spec.rb +26 -0
- data/spec/marver/entities/summaries/story_summary_spec.rb +30 -0
- data/spec/marver/entities/text_object_spec.rb +20 -0
- data/spec/marver/entities/url_spec.rb +16 -0
- data/spec/marver/finders/character_finder_spec.rb +27 -0
- data/spec/marver/rest/client_spec.rb +10 -0
- data/spec/marver/rest/error_spec.rb +14 -0
- data/spec/marver/rest/response_spec.rb +22 -0
- data/spec/spec_helper.rb +17 -0
- metadata +137 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a429ebb07df62f8290bad6d714177c7dccfc63fd
|
4
|
+
data.tar.gz: 800a8e3a54a341ac5a2e145395aea0c27de03c16
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 718e41cc32a28c9077895c4966120fb0b8dfb9991f70aead3ad73a2ac2de093595ad26378d2b420c914d63ac795d08c7c7faf7dcffc7d6cb05e1da800bccb5c3
|
7
|
+
data.tar.gz: 6ef523f611f82bd7ea8c2b88347d0106537bc7e34ce93db782339091648ecc7caba9760c94b21c3ccee2c4376a70d628d27a2f8959921abbe039bb8aad232eb2
|
data/.gitignore
ADDED
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.0.0-p353
|
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2014 Ile Eftimov
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
6
|
+
this software and associated documentation files (the "Software"), to deal in
|
7
|
+
the Software without restriction, including without limitation the rights to
|
8
|
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
9
|
+
the Software, and to permit persons to whom the Software is furnished to do so,
|
10
|
+
subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
17
|
+
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
18
|
+
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
19
|
+
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
20
|
+
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
Marver
|
2
|
+
======
|
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.
|
5
|
+
|
6
|
+
|
7
|
+
### TO DO:
|
8
|
+
|
9
|
+
##### Write core classes
|
10
|
+
* Serie
|
11
|
+
* Event
|
12
|
+
* Creator
|
13
|
+
* More?
|
14
|
+
|
15
|
+
|
16
|
+
##### Entity Finder classes
|
17
|
+
Should be implemented within the Marver::Client class.
|
18
|
+
|
19
|
+
* CharacterFinder (in progress)
|
20
|
+
* SerieFinder
|
21
|
+
* StoryFinder
|
22
|
+
* ComicFinder
|
23
|
+
* EventFinder
|
24
|
+
* More?
|
25
|
+
|
26
|
+
|
27
|
+
Refactor generation of resource lists for core classes, maybe add a builder module?
|
28
|
+
|
29
|
+
|
30
|
+
|
31
|
+
#### Author
|
32
|
+
Ile Eftimov - [@fteem](http://twitter.com/fteem)
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
data/lib/marver.rb
CHANGED
@@ -1,28 +1,42 @@
|
|
1
1
|
require 'rest_client'
|
2
|
-
require 'digest/md5'
|
3
2
|
|
4
|
-
|
5
|
-
|
6
|
-
|
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'
|
7
8
|
|
8
|
-
|
9
|
+
# Finders
|
10
|
+
require './lib/marver/finders/character_finder.rb'
|
9
11
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
end
|
12
|
+
# REST
|
13
|
+
require './lib/marver/rest/client.rb'
|
14
|
+
require './lib/marver/rest/response.rb'
|
14
15
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
end
|
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
20
|
|
21
|
-
|
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'
|
22
27
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
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,46 @@
|
|
1
|
+
require './lib/marver.rb'
|
2
|
+
|
3
|
+
# TODO: Refactor, I guess?
|
4
|
+
module Marver
|
5
|
+
module CommonEntitiesBuilder
|
6
|
+
COMMON_ENTITIES = %w(prices images urls textObjects thumbnail dates)
|
7
|
+
|
8
|
+
extend Marver::StringHelper
|
9
|
+
|
10
|
+
def self.build!(object)
|
11
|
+
COMMON_ENTITIES.each do |entity|
|
12
|
+
# If the object's JSON has this entity..
|
13
|
+
if object.json.has_key?(entity)
|
14
|
+
# get the entity lists
|
15
|
+
entities = entity_items(object, entity)
|
16
|
+
# find the class for this type of entity
|
17
|
+
klass = common_class(entity)
|
18
|
+
# parameterize the entity string
|
19
|
+
# i.e. textObjects => TextObject
|
20
|
+
parameterized_entity = parameterize(entity)
|
21
|
+
|
22
|
+
if entities.kind_of?(Array)
|
23
|
+
object.class.send(:define_method, parameterized_entity) do
|
24
|
+
entities.collect do |ent|
|
25
|
+
klass.new(ent)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
else
|
29
|
+
object.class.send(:define_method, parameterized_entity) do
|
30
|
+
klass.new(entities)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.entity_items(object, entity)
|
38
|
+
if object.json[entity].kind_of?(Hash) && object.json[entity].has_key?('items')
|
39
|
+
[object.json[entity]['items']].compact.flatten(1)
|
40
|
+
else
|
41
|
+
object.json[entity]
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require './lib/marver.rb'
|
2
|
+
|
3
|
+
# TODO: Refactor, I guess?
|
4
|
+
module Marver
|
5
|
+
module CoreEntitiesBuilder
|
6
|
+
CORE_ENTITIES = %w(comics series creators stories characters events)
|
7
|
+
|
8
|
+
extend Marver::StringHelper
|
9
|
+
|
10
|
+
def self.build!(object)
|
11
|
+
CORE_ENTITIES.each do |entity|
|
12
|
+
if object.json.has_key?(entity)
|
13
|
+
klass = self.summary_class(entity)
|
14
|
+
entity_items = self.entity_items(object, entity)
|
15
|
+
|
16
|
+
object.class.send(:define_method, entity) do
|
17
|
+
entity_items.collect do |ent|
|
18
|
+
klass.new(ent, object.credentials)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.entity_items(object, entity)
|
26
|
+
if object.json[entity].kind_of?(Hash) && object.json[entity].has_key?('items')
|
27
|
+
[object.json[entity]['items']].compact.flatten(1)
|
28
|
+
else
|
29
|
+
[object.json[entity]].compact.flatten(1)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require './lib/marver.rb'
|
2
|
+
|
3
|
+
module Marver
|
4
|
+
class Client
|
5
|
+
attr_reader :characters
|
6
|
+
|
7
|
+
def initialize(private_key, public_key)
|
8
|
+
@credentials = Marver::Credentials.new(private_key, public_key)
|
9
|
+
@characters = Marver::CharacterFinder.new(@credentials)
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'digest/md5'
|
2
|
+
|
3
|
+
module Marver
|
4
|
+
class Credentials
|
5
|
+
attr_reader :public_key, :private_key, :timestamp
|
6
|
+
|
7
|
+
def initialize(private_key, public_key)
|
8
|
+
@public_key = public_key
|
9
|
+
@private_key = private_key
|
10
|
+
@timestamp = Time.now.to_i.to_s
|
11
|
+
end
|
12
|
+
|
13
|
+
def to_s
|
14
|
+
"ts=#{@timestamp}&apikey=#{@public_key}&hash=#{md5_hash(@timestamp)}"
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def md5_hash(ts)
|
20
|
+
Digest::MD5.hexdigest(@timestamp + @private_key + @public_key)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Marver
|
2
|
+
class DataContainer
|
3
|
+
attr_reader :offset, :limit, :total, :results
|
4
|
+
|
5
|
+
def initialize(response)
|
6
|
+
json_results = response.data
|
7
|
+
|
8
|
+
@offset = json_results['offset'].to_i
|
9
|
+
@limit = json_results['limit'].to_i
|
10
|
+
@total = json_results['total'].to_i
|
11
|
+
if @total == 1
|
12
|
+
@results = json_results['results'].first
|
13
|
+
else
|
14
|
+
@results = json_results['results']
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require './lib/marver.rb'
|
2
|
+
|
3
|
+
module Marver
|
4
|
+
class Character
|
5
|
+
attr_reader :id, :resource_uri, :description, :urls, :name,
|
6
|
+
:thumbnail, :comics, :stories, :events, :series, :json, :credentials
|
7
|
+
|
8
|
+
class << self
|
9
|
+
def build(response, credentials)
|
10
|
+
if response.kind_of?(Array)
|
11
|
+
response.collect do |character|
|
12
|
+
Marver::Character.new(character, credentials)
|
13
|
+
end
|
14
|
+
else
|
15
|
+
new(response.results, credentials)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def initialize(json, credentials)
|
21
|
+
@credentials = credentials
|
22
|
+
@json = json
|
23
|
+
|
24
|
+
@description = json['description']
|
25
|
+
@id = json['id'].to_i
|
26
|
+
@credentials = credentials
|
27
|
+
@name = json['name']
|
28
|
+
@resource_uri = "#{json['resourceURI']}?#{@credentials.to_s}"
|
29
|
+
|
30
|
+
CoreEntitiesBuilder.build!(self)
|
31
|
+
CommonEntitiesBuilder.build!(self)
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require './lib/marver.rb'
|
2
|
+
|
3
|
+
module Marver
|
4
|
+
class Comic
|
5
|
+
attr_reader :json, :credentials, :id, :digital_id, :title, :issue_number,
|
6
|
+
:variant_description, :description, :isbn,
|
7
|
+
:upc, :diamond_code, :ean, :issn, :format,
|
8
|
+
:page_count, :resource_uri, :thumbnail, :text_objects
|
9
|
+
|
10
|
+
|
11
|
+
class << self
|
12
|
+
def build(response, credentials)
|
13
|
+
if response.kind_of?(Array)
|
14
|
+
response.collect do |comic|
|
15
|
+
new(comic, credentials)
|
16
|
+
end
|
17
|
+
else
|
18
|
+
new(response.results, credentials)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def initialize(json, credentials)
|
24
|
+
@json = json
|
25
|
+
@credentials = credentials
|
26
|
+
@title = json['title']
|
27
|
+
@resource_uri = "#{json['resourceURI']}?#{@credentials.to_s}"
|
28
|
+
@id = json['id'].to_i
|
29
|
+
@digital_id = json['digitalId']
|
30
|
+
@issue_number = json['issueNumber']
|
31
|
+
@variant_description = json['variantDescription']
|
32
|
+
@description = json['description']
|
33
|
+
@isbn = json['isbn']
|
34
|
+
@upc = json['upc']
|
35
|
+
@diamond_code = json['diamondCode']
|
36
|
+
@ean = json['ean']
|
37
|
+
@issn = json['issn']
|
38
|
+
@format = json['format']
|
39
|
+
@page_count = json['pageCount']
|
40
|
+
|
41
|
+
CoreEntitiesBuilder.build!(self)
|
42
|
+
CommonEntitiesBuilder.build!(self)
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
end
|