marvelite 0.0.5 → 0.0.6.a
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/CHANGELOG.md +12 -0
- data/README.md +21 -230
- data/Rakefile +8 -1
- data/lib/marvelite.rb +1 -4
- data/lib/marvelite/api/client.rb +52 -5
- data/lib/marvelite/api/config/v1.yml +22 -1
- data/lib/marvelite/version.rb +1 -1
- data/spec/fixtures/series/serie.json +427 -0
- data/spec/fixtures/series/serie_characters.json +5159 -0
- data/spec/fixtures/series/serie_comics.json +3107 -0
- data/spec/fixtures/series/serie_creators.json +5991 -0
- data/spec/fixtures/series/serie_events.json +1367 -0
- data/spec/fixtures/series/serie_stories.json +1312 -0
- data/spec/fixtures/series/series.json +3399 -0
- data/spec/marvelite/api/client_characters_endpoints_spec.rb +1 -0
- data/spec/marvelite/api/client_events_endpoints_spec.rb +4 -4
- data/spec/marvelite/api/client_series_endpoints_spec.rb +135 -0
- data/spec/marvelite/api/client_spec.rb +0 -20
- metadata +20 -7
- data/lib/marvelite/api/character_methods.rb +0 -70
- data/lib/marvelite/api/comic_methods.rb +0 -35
- data/lib/marvelite/api/event_methods.rb +0 -80
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9f5021f591254b35d1aa7a672d428f10d7d6a027
|
4
|
+
data.tar.gz: ac7b2af321f54b2f7865af4d019c55784413f707
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bd7170f1d3f353a2fb890e38d31d2d286728272df87cd1904aeb8d95eea39c1249423dc32967f63cf5ca076bc0a040110194a2301e51c07b269050b155304554
|
7
|
+
data.tar.gz: 7fabd1e5145ef5ebabfa04068fcc15be5bf18306a63e2d36154bbbc6e7e55a3a25ef6b493ca0ef132e76d7784de9590d03712fa63eb04f9b605c5a734e1b6cc3
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,17 @@
|
|
1
1
|
## Changelog
|
2
2
|
|
3
|
+
### 0.0.6
|
4
|
+
* Rewrites `Marvelite::API::Client` to allow for self discovery of available methods, depending on the `Marvelite::API::Router` injected at initialization.
|
5
|
+
* Adds the following endpoints:
|
6
|
+
* retrieve series by connecting to the API's `/series` endpoint
|
7
|
+
* retieve a serie by connecting to the API's `/series/:id` enpoint
|
8
|
+
* retrieve serie characters by connecting to the API's `/series/:id/characters` endpoint.
|
9
|
+
* retrieve serie comics by connecting to the API's `/series/:id/comics` endpoint.
|
10
|
+
* retrieve serie creators by connecting to the API's `/series/:id/creators` endpoint.
|
11
|
+
* retrieve serie events by connecting to the API's `/series/:id/events` endpoint.
|
12
|
+
* retrieve serie stories by connecting to the API's `/series/:id/stories` endpoint.
|
13
|
+
|
14
|
+
|
3
15
|
### 0.0.5
|
4
16
|
* Rewrites `Marvelite::API::Router` class to make flexible to future API versioning changes from Marvel.
|
5
17
|
* Adds the following endpoints:
|
data/README.md
CHANGED
@@ -22,7 +22,6 @@ Or install it yourself as:
|
|
22
22
|
## Contents
|
23
23
|
|
24
24
|
* [Usage](#usage)
|
25
|
-
* [Methods](#methods)
|
26
25
|
* [Responses](#responses)
|
27
26
|
|
28
27
|
|
@@ -37,264 +36,56 @@ client = Marvelite::API::Client.new(
|
|
37
36
|
:public_key => 'abcd1234',
|
38
37
|
:private_key => '5678efgh'
|
39
38
|
)
|
40
|
-
```
|
41
39
|
|
42
|
-
|
43
|
-
|
44
|
-
| Method | Description |
|
45
|
-
| ------ | ----------- |
|
46
|
-
| [#characters](#characters) | Fetches a list of comic characters. |
|
47
|
-
| [#character](#character) | Fetches a single character resource. |
|
48
|
-
| [#character_comics](#character_comics) | Fetches a list of comics containing a specific character. |
|
49
|
-
| [#character_events](#character_events) | Fetches a list of events in which a specific character appears. |
|
50
|
-
| [#character_series](#character_series) | Fetches a list of comic series in which a specific character appears. |
|
51
|
-
| [#character_stories](#character_stories) | Fetches a list of comic stories featuring a specific character. |
|
52
|
-
| [#comics](#comics) | Fetches a list of comics. |
|
53
|
-
| [#comic](#comic) | Fetches a single comic resource. |
|
54
|
-
| [#comic_characters](#comic_characters) | Fetches a list of characters which appear in a specific comic. |
|
55
|
-
| [#comic_creators](#comic_creators) | Fetches a list of comic creators whose work appears in a specific comic. |
|
56
|
-
| [#comic_events](#comic_events) | Fetches a list of events in which a comic appears. |
|
57
|
-
| [#comic_stories](#comic_stories) | Fetches a list of comic stories in a specific comic issue. |
|
58
|
-
| [#events](#events) | Fetches a list of events. |
|
59
|
-
| [#event](#event) | Fetches a single event resource. |
|
60
|
-
| [#event_characters](#event_characters) | Fetches a list of characters which appear in a specific event. |
|
61
|
-
| [#event_comics](#event_comics) | Fetches a list of comics which take place during a specific event. |
|
62
|
-
| [#event_creators](#event_creators) | Fetches a list of event creators whose work appears in a specific event. |
|
63
|
-
| [#event_series](#event_series) | Fetches a list of comic series in which a specific event takes place. |
|
64
|
-
| [#event_stories](#event_stories) | Fetches a list of comic stories from a specific event. |
|
65
|
-
|
66
|
-
|
67
|
-
#### characters
|
68
|
-
Fetches a list of comic characters. Can receive optional params.
|
69
|
-
```ruby
|
40
|
+
# fetch a list of characters
|
70
41
|
client.characters
|
71
42
|
client.characters(:name => 'Spider-Man')
|
72
43
|
client.characters(:limit => 10, :offset => 400, :orderBy => 'name')
|
73
|
-
```
|
74
|
-
|
75
|
-
|
76
|
-
See the [Marvel Comics Interactive API Tester](http://developer.marvel.com/docs#!/public/getCreatorCollection_get_0) for a complete list of params that you can pass to the `#characters` method.
|
77
|
-
|
78
|
-
#### character
|
79
|
-
|
80
|
-
Fetches a single character resource. Accepts an integer or string value as character id.
|
81
44
|
|
82
|
-
|
45
|
+
# fetch a single character
|
83
46
|
client.character(1009610)
|
84
47
|
client.character('Spider-Man')
|
85
|
-
```
|
86
|
-
|
87
|
-
#### character_comics
|
88
|
-
|
89
|
-
Fetches a list of comics containing a specific character. Requires a character id value (integer or string). Accepts optional params.
|
90
|
-
|
91
|
-
```ruby
|
92
|
-
client.character_comics(1009610)
|
93
|
-
client.character_comics('Spider-Man')
|
94
|
-
client.character_comics(
|
95
|
-
1009610,
|
96
|
-
{ :format => 'graphic novel', :limit => 10, :orderBy => 'title' }
|
97
|
-
)
|
98
|
-
client.character_comics(
|
99
|
-
'Spider-Man',
|
100
|
-
{ :format => 'graphic novel', :limit => 10, :orderBy => 'title' }
|
101
|
-
)
|
102
|
-
```
|
103
|
-
|
104
|
-
See the [Marvel Comics Interactive API Tester](http://developer.marvel.com/docs#!/public/getComicsCharacterCollection_get_2) for a complete list of params that you can pass to the `#character_comics` method.
|
105
|
-
|
106
|
-
#### character_events
|
107
|
-
|
108
|
-
Fetches a list of events in which a specific character appears. Requires a character id value (integer or string). Accepts optional params.
|
109
|
-
|
110
|
-
```ruby
|
111
|
-
client.character_events(1009610)
|
112
|
-
client.character_events('Spider-Man')
|
113
|
-
client.character_events(
|
114
|
-
1009610,
|
115
|
-
{ :limit => 10, :orderBy => 'name' }
|
116
|
-
)
|
117
|
-
client.character_events(
|
118
|
-
'Spider-Man',
|
119
|
-
{ :limit => 10, :orderBy => 'name' }
|
120
|
-
)
|
121
|
-
```
|
122
|
-
|
123
|
-
See the [Marvel Comics Interactive API Tester](http://developer.marvel.com/docs#!/public/getCharacterEventsCollection_get_3) for a complete list of params that you can pass to the `#character_events` method.
|
124
|
-
|
125
|
-
|
126
|
-
#### character_series
|
127
48
|
|
128
|
-
|
129
|
-
|
130
|
-
```ruby
|
131
|
-
client.character_series(1009610)
|
132
|
-
client.character_series('Spider-Man')
|
133
|
-
client.character_series(
|
134
|
-
1009610,
|
135
|
-
{ :seriesType => 'ongoing', :limit => 10, :orderBy => 'title' }
|
136
|
-
)
|
137
|
-
client.character_series(
|
138
|
-
'Spider-Man',
|
139
|
-
{ :seriesType => 'ongoing', :limit => 10, :orderBy => 'title' }
|
140
|
-
)
|
141
|
-
```
|
142
|
-
|
143
|
-
See the [Marvel Comics Interactive API Tester](http://developer.marvel.com/docs#!/public/getCharacterSeriesCollection_get_4) for a complete list of params that you can pass to the `#character_series` method.
|
144
|
-
|
145
|
-
|
146
|
-
#### character_stories
|
147
|
-
|
148
|
-
Fetches a list of comic stories featuring a specific character. Requires a character id value (integer or string). Accepts optional params.
|
149
|
-
|
150
|
-
```ruby
|
151
|
-
client.character_stories(1009610)
|
152
|
-
client.character_stories('Spider-Man')
|
153
|
-
client.character_stories(1009610, { :limit => 10, :offset => 20 })
|
154
|
-
client.character_stories('Spider-Man', { :limit => 10, :offset => 20 })
|
155
|
-
```
|
156
|
-
|
157
|
-
See the [Marvel Comics Interactive API Tester](http://developer.marvel.com/docs#!/public/getCharacterStoryCollection_get_5) for a complete list of params that you can pass to the `#character_stories` method.
|
158
|
-
|
159
|
-
|
160
|
-
#### comics
|
161
|
-
|
162
|
-
Fetches a list of comics. Accepts optional params.
|
163
|
-
|
164
|
-
```ruby
|
49
|
+
# fetch a list of comics
|
165
50
|
client.comics
|
166
51
|
client.comics(:format => 'graphic novel', :limit => 10, :offset => 20 })
|
167
|
-
```
|
168
|
-
|
169
|
-
See the [Marvel Comics Interactive API Tester](http://developer.marvel.com/docs#!/public/getComicsCollection_get_6) for a complete list of params that you can pass to the `#comics` method.
|
170
|
-
|
171
|
-
#### comic
|
172
52
|
|
173
|
-
|
174
|
-
|
175
|
-
```ruby
|
53
|
+
# fetch a single comic
|
176
54
|
client.comic(40128)
|
177
|
-
```
|
178
55
|
|
179
|
-
|
180
|
-
|
181
|
-
Fetches a list of characters which appear in a specific comic. Requires a comic id value (integer). Accepts optional params.
|
182
|
-
|
183
|
-
```ruby
|
56
|
+
# fetch a list of comic characters
|
184
57
|
client.comic_characters(40128)
|
185
58
|
client.comic_characters(40128, :orderBy => 'name', :limit => 30, :offset => 20)
|
186
|
-
```
|
187
|
-
|
188
|
-
See the [Marvel Comics Interactive API Tester](http://developer.marvel.com/docs#!/public/getComicCharacterCollection_get_8) for a complete list of params that you can pass to the `#comic_characters` method.
|
189
|
-
|
190
|
-
#### comic_creators
|
191
|
-
|
192
|
-
Fetches a list of comic creators whose work appears in a specific comic. Requires a comic id value (integer). Accepts optional params.
|
193
|
-
|
194
|
-
```ruby
|
195
|
-
client.comic_creators(40128)
|
196
|
-
client.comic_creators(40128, :lastName => 'Romita')
|
197
|
-
```
|
198
|
-
|
199
|
-
See the [Marvel Comics Interactive API Tester](http://developer.marvel.com/docs#!/public/getCreatorCollection_get_9) for a complete list of params that you can pass to the `#comic_creators` method.
|
200
|
-
|
201
|
-
#### comic_events
|
202
|
-
|
203
|
-
Fetches a list of events in which a comic appears. Requires a comic id value (integer). Accepts optional params.
|
204
|
-
|
205
|
-
```ruby
|
206
|
-
client.comic_events(40128)
|
207
|
-
client.comic_events(40128, :orderBy => 'name', :limit => 10)
|
208
|
-
```
|
209
|
-
|
210
|
-
See the [Marvel Comics Interactive API Tester](http://developer.marvel.com/docs#!/public/getIssueEventsCollection_get_10) for a complete list of params that you can pass to the `#comic_events` method.
|
211
59
|
|
212
|
-
|
213
|
-
|
214
|
-
Fetches a list of comic stories in a specific comic issue. Requires a comic id value (integer). Accepts optional params.
|
215
|
-
|
216
|
-
```ruby
|
217
|
-
client.comic_stories(40128)
|
218
|
-
client.comic_stories(40128, :orderBy => 'name', :limit => 10)
|
219
|
-
```
|
220
|
-
|
221
|
-
See the [Marvel Comics Interactive API Tester](http://developer.marvel.com/docs#!/public/getComicStoryCollection_get_11) for a complete list of params that you can pass to the `#comic_stories` method.
|
222
|
-
|
223
|
-
#### events
|
224
|
-
|
225
|
-
Fetches a list of events. Accepts optional params.
|
226
|
-
|
227
|
-
```ruby
|
60
|
+
# fetch a list of events
|
228
61
|
client.events
|
229
62
|
client.events(:name => 'Acts of Vengeance')
|
230
63
|
client.events(:orderBy => 'name')
|
231
|
-
```
|
232
|
-
|
233
|
-
See the [Marvel Comics Interactive API Tester](http://developer.marvel.com/docs#!/public/getEventsCollection_get_18) for a complete list of params that you can pass to the `#events` method.
|
234
|
-
|
235
|
-
#### event
|
236
|
-
|
237
|
-
Fetches a single comic resource. Requires an event id value (integer).
|
238
64
|
|
239
|
-
|
65
|
+
# fetch a single event
|
240
66
|
client.event(116)
|
241
|
-
|
242
|
-
|
243
|
-
#### event_characters
|
244
|
-
|
245
|
-
Fetches a list of characters which appear in a specific event. Requires an event id value (integer). Accepts optional params.
|
246
|
-
|
247
|
-
```ruby
|
248
|
-
client.event_characters(116)
|
249
|
-
client.event_characters(116, :orderBy => 'name', :limit => 30, :offset => 20)
|
250
|
-
```
|
251
|
-
|
252
|
-
See the [Marvel Comics Interactive API Tester](http://developer.marvel.com/docs#!/public/getEventCharacterCollection_get_20) for a complete list of params that you can pass to the `#event_characters` method.
|
253
|
-
|
254
|
-
#### event_creators
|
255
|
-
|
256
|
-
Fetches a list of comic creators whose work appears in a specific event. Requires an event id value (integer). Accepts optional params.
|
257
|
-
|
258
|
-
```ruby
|
259
|
-
client.event_creators(116)
|
260
|
-
client.event_creators(116, :lastName => 'Romita')
|
261
|
-
```
|
262
|
-
|
263
|
-
See the [Marvel Comics Interactive API Tester](http://developer.marvel.com/docs#!/public/getCreatorCollection_get_22) for a complete list of params that you can pass to the `#event_creators` method.
|
67
|
+
client.event('Acts of Vengeance!')
|
264
68
|
|
265
|
-
|
266
|
-
|
267
|
-
Fetches a list of comics which take place during a specific event. Requires an event id value (integer). Accepts optional params.
|
268
|
-
|
269
|
-
```ruby
|
69
|
+
# fetch a list of comics in an event
|
270
70
|
client.event_comics(116)
|
71
|
+
client.event_comics('Acts of Vengeance!')
|
271
72
|
client.event_comics(116, :format => 'graphic novel', :orderBy => 'title', :limit => 10)
|
272
|
-
|
73
|
+
client.event_comics('Acts of Vengeance!', :format => 'graphic novel', :orderBy => 'title', :limit => 10)
|
273
74
|
|
274
|
-
|
75
|
+
# fetch a list of series
|
76
|
+
client.series
|
77
|
+
client.series(:title => 'Spider-Man')
|
78
|
+
client.series(:orderBy => 'title')
|
275
79
|
|
276
|
-
|
80
|
+
# fetch a single serie
|
81
|
+
client.serie(2069)
|
277
82
|
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
client.event_series(116)
|
282
|
-
client.event_series(116, :orderBy => 'title', :limit => 10)
|
83
|
+
# fetch a list of comics in a serie
|
84
|
+
client.series_comics(2069)
|
85
|
+
client.series_comics(2069, :format => 'graphic novel', :orderBy => 'title', :limit => 10)
|
283
86
|
```
|
284
87
|
|
285
|
-
See the
|
286
|
-
|
287
|
-
#### event_stories
|
288
|
-
|
289
|
-
Fetches a list of comic stories from a specific event. Requires an event id value (integer). Accepts optional params.
|
290
|
-
|
291
|
-
```ruby
|
292
|
-
client.event_stories(116)
|
293
|
-
client.event_stories(116, :limit => 10)
|
294
|
-
```
|
295
|
-
|
296
|
-
See the [Marvel Comics Interactive API Tester](http://developer.marvel.com/docs#!/public/getEventStoryCollection_get_24) for a complete list of params that you can pass to the `#event_stories` method.
|
297
|
-
|
88
|
+
See the list of [available methods](https://github.com/antillas21/marvelite/wiki/Documentation) in the wiki.
|
298
89
|
|
299
90
|
|
300
91
|
## Responses
|
data/Rakefile
CHANGED
data/lib/marvelite.rb
CHANGED
@@ -1,13 +1,10 @@
|
|
1
1
|
require 'active_model'
|
2
|
-
require 'digest'
|
2
|
+
require 'digest/md5'
|
3
3
|
require 'httparty'
|
4
4
|
require 'hashie'
|
5
5
|
|
6
6
|
require "marvelite/version"
|
7
7
|
require "marvelite/api/router"
|
8
|
-
require "marvelite/api/character_methods"
|
9
|
-
require "marvelite/api/comic_methods"
|
10
|
-
require "marvelite/api/event_methods"
|
11
8
|
require "marvelite/api/client"
|
12
9
|
require "marvelite/api/response"
|
13
10
|
|
data/lib/marvelite/api/client.rb
CHANGED
@@ -2,11 +2,6 @@ module Marvelite
|
|
2
2
|
module API
|
3
3
|
class Client
|
4
4
|
include ActiveModel::Model
|
5
|
-
|
6
|
-
include Marvelite::API::CharacterMethods
|
7
|
-
include Marvelite::API::ComicMethods
|
8
|
-
include Marvelite::API::EventMethods
|
9
|
-
|
10
5
|
include HTTParty
|
11
6
|
base_uri 'http://gateway.marvel.com'
|
12
7
|
|
@@ -19,6 +14,7 @@ module Marvelite
|
|
19
14
|
super
|
20
15
|
@api_version = attrs.fetch(:api_version) { 'v1' }
|
21
16
|
@router = attrs.fetch(:router) { Marvelite.router(:api_version => @api_version) }
|
17
|
+
build_methods
|
22
18
|
end
|
23
19
|
|
24
20
|
private
|
@@ -45,6 +41,57 @@ module Marvelite
|
|
45
41
|
ErrorResponse.new(response)
|
46
42
|
end
|
47
43
|
end
|
44
|
+
|
45
|
+
def find_by_name_or_title(endpoint, column, value)
|
46
|
+
response = self.send(endpoint, { column.to_sym => value })
|
47
|
+
return false unless response[:data][:count] > 0
|
48
|
+
response.id = response[:data][:results][0][:id]
|
49
|
+
response
|
50
|
+
end
|
51
|
+
|
52
|
+
def process_arguments(*args)
|
53
|
+
temp_id, temp_options = *args
|
54
|
+
if temp_id && temp_id.is_a?(Hash)
|
55
|
+
id = nil
|
56
|
+
options = temp_id || {}
|
57
|
+
elsif temp_id
|
58
|
+
id = temp_id
|
59
|
+
options = temp_options || {}
|
60
|
+
else
|
61
|
+
options = {}
|
62
|
+
end
|
63
|
+
{ id: id, options: options}
|
64
|
+
end
|
65
|
+
|
66
|
+
def fetch_response(route, params_hash = {})
|
67
|
+
id = params_hash[:id]
|
68
|
+
options = params_hash[:options]
|
69
|
+
|
70
|
+
if id.nil?
|
71
|
+
self.class.get(router.send("#{route}_path".to_sym), :query => params(options))
|
72
|
+
else
|
73
|
+
id = fetch_resource_id(route, id) if id.is_a?(String)
|
74
|
+
self.class.get(router.send("#{route}_path".to_sym, {:id => id}), :query => params(options))
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def fetch_resource_id(route, id)
|
79
|
+
endpoint = route.split("_")[0]+"s"
|
80
|
+
resource = find_by_name_or_title(endpoint.to_sym, :name, id)
|
81
|
+
return false unless resource
|
82
|
+
resource.id
|
83
|
+
end
|
84
|
+
|
85
|
+
def build_methods
|
86
|
+
@router.routes.each do |name, _|
|
87
|
+
self.class.send(:define_method, name) do |*args|
|
88
|
+
params = process_arguments(*args)
|
89
|
+
response = fetch_response(name, params)
|
90
|
+
build_response_object(response)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
48
95
|
end
|
49
96
|
end
|
50
97
|
end
|
@@ -54,4 +54,25 @@
|
|
54
54
|
path: '/public/events/:id/stories'
|
55
55
|
19:
|
56
56
|
name: 'event_series'
|
57
|
-
path: '/public/events/:id/series'
|
57
|
+
path: '/public/events/:id/series'
|
58
|
+
20:
|
59
|
+
name: 'series'
|
60
|
+
path: '/public/series'
|
61
|
+
21:
|
62
|
+
name: 'serie'
|
63
|
+
path: '/public/series/:id'
|
64
|
+
22:
|
65
|
+
name: 'series_characters'
|
66
|
+
path: '/public/series/:id/characters'
|
67
|
+
23:
|
68
|
+
name: 'series_comics'
|
69
|
+
path: '/public/series/:id/comics'
|
70
|
+
24:
|
71
|
+
name: 'series_creators'
|
72
|
+
path: '/public/series/:id/creators'
|
73
|
+
25:
|
74
|
+
name: 'series_events'
|
75
|
+
path: '/public/series/:id/events'
|
76
|
+
26:
|
77
|
+
name: 'series_stories'
|
78
|
+
path: '/public/series/:id/stories'
|