marvelite 0.0.7 → 0.0.8
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/lib/marvelite/api/client.rb +4 -3
- data/lib/marvelite/api/router.rb +12 -10
- data/lib/marvelite/version.rb +1 -1
- data/spec/fixtures/characters/character_2.json +274 -0
- data/spec/marvelite/api/client_characters_endpoints_spec.rb +2 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9fae621a9e418a9fe75672e1396eb40051c5cdc3
|
4
|
+
data.tar.gz: 41780b252611dd2583165018b35b4714bacc641d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fc07167d0661bf2ef69613946f72c8ce14bf22cceaacbabdfc6c1b0c1f0dde638fa6d3558a5671ad0d151cd5be566eb22b856dfef374c4469a4a1cae14d3358c
|
7
|
+
data.tar.gz: 03d5d7bae87bd64d4f5ebc0839fe0bc4b6f2da3781f2562a0bebe7bce8e633dae0db1524e5c64d650c58b6fd78c8df3c6f512c0e7646d183820edca862cc1d23
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,17 @@
|
|
1
1
|
## Changelog
|
2
2
|
|
3
|
+
### 0.0.8
|
4
|
+
* Fixes a problem where the `Marvelite::API::Router` was replacing the value of its return path string when asked for a route. Thanks to [Patrick Hereford (@phereford)](https://github.com/phereford) for reporting the issue.
|
5
|
+
|
6
|
+
### 0.0.7
|
7
|
+
* Adds the following endpoints:
|
8
|
+
* retrieve stories by connecting to the API's `/stories` endpoint
|
9
|
+
* retieve a story by connecting to the API's `/stories/:id` enpoint
|
10
|
+
* retrieve story characters by connecting to the API's `/stories/:id/characters` endpoint.
|
11
|
+
* retrieve story comics by connecting to the API's `/stories/:id/comics` endpoint.
|
12
|
+
* retrieve story creators by connecting to the API's `/stories/:id/creators` endpoint.
|
13
|
+
* retrieve story events by connecting to the API's `/stories/:id/events` endpoint.
|
14
|
+
|
3
15
|
### 0.0.6
|
4
16
|
* Rewrites `Marvelite::API::Client` to allow for self discovery of available methods, depending on the `Marvelite::API::Router` injected at initialization.
|
5
17
|
* Adds the following endpoints:
|
data/lib/marvelite/api/client.rb
CHANGED
@@ -45,7 +45,7 @@ module Marvelite
|
|
45
45
|
def find_by_name_or_title(endpoint, column, value)
|
46
46
|
response = self.send(endpoint, { column.to_sym => value })
|
47
47
|
return false unless response[:data][:count] > 0
|
48
|
-
response
|
48
|
+
response[:id] = response[:data][:results][0][:id]
|
49
49
|
response
|
50
50
|
end
|
51
51
|
|
@@ -79,11 +79,12 @@ module Marvelite
|
|
79
79
|
endpoint = route.split("_")[0]+"s"
|
80
80
|
resource = find_by_name_or_title(endpoint.to_sym, :name, id)
|
81
81
|
return false unless resource
|
82
|
-
resource
|
82
|
+
resource[:id]
|
83
83
|
end
|
84
84
|
|
85
85
|
def build_methods
|
86
|
-
@router.routes.each do |
|
86
|
+
@router.routes.each do |_, hash|
|
87
|
+
name = hash[:name]
|
87
88
|
self.class.send(:define_method, name) do |*args|
|
88
89
|
params = process_arguments(*args)
|
89
90
|
response = fetch_response(name, params)
|
data/lib/marvelite/api/router.rb
CHANGED
@@ -6,9 +6,8 @@ module Marvelite
|
|
6
6
|
|
7
7
|
def initialize(attrs = {})
|
8
8
|
@api_version = attrs.fetch(:api_version) { 'v1' }
|
9
|
-
@routes =
|
9
|
+
@routes = {}
|
10
10
|
load_routes_from_file("#{api_version}.yml")
|
11
|
-
map_routes
|
12
11
|
end
|
13
12
|
|
14
13
|
def inspect
|
@@ -28,21 +27,24 @@ module Marvelite
|
|
28
27
|
end
|
29
28
|
|
30
29
|
def add_route(name, endpoint)
|
31
|
-
|
32
|
-
routes << route
|
30
|
+
routes["#{name}_path".to_sym] = { :name => name, :endpoint => endpoint }
|
33
31
|
end
|
34
32
|
|
35
|
-
def
|
36
|
-
routes.
|
37
|
-
|
38
|
-
|
39
|
-
|
33
|
+
def method_missing(method, *args, &block)
|
34
|
+
if routes.keys.include?(method)
|
35
|
+
endpoint = "#{routes[method][:endpoint]}"
|
36
|
+
params = *args
|
37
|
+
if params.any?
|
38
|
+
params[0].each do |p_key, p_value|
|
40
39
|
endpoint.gsub!(":#{p_key.to_s}", p_value.to_s)
|
41
40
|
end
|
42
|
-
"/#{api_version}#{endpoint}"
|
43
41
|
end
|
42
|
+
"/#{api_version}#{endpoint}"
|
43
|
+
else
|
44
|
+
super
|
44
45
|
end
|
45
46
|
end
|
47
|
+
|
46
48
|
end
|
47
49
|
end
|
48
50
|
end
|
data/lib/marvelite/version.rb
CHANGED
@@ -0,0 +1,274 @@
|
|
1
|
+
{
|
2
|
+
"code": 200,
|
3
|
+
"status": "Ok",
|
4
|
+
"etag": "0008d7adbeae74e36a2196b902d36aba282c8ca2",
|
5
|
+
"data": {
|
6
|
+
"offset": 0,
|
7
|
+
"limit": 20,
|
8
|
+
"total": 1,
|
9
|
+
"count": 1,
|
10
|
+
"results": [
|
11
|
+
{
|
12
|
+
"id": 1009227,
|
13
|
+
"name": "Carnage",
|
14
|
+
"description": "",
|
15
|
+
"modified": "2011-11-09T17:46:06-0500",
|
16
|
+
"thumbnail": {
|
17
|
+
"path": "http://i.annihil.us/u/prod/marvel/i/mg/c/20/4ebb024c894db",
|
18
|
+
"extension": "jpg"
|
19
|
+
},
|
20
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/characters/1009227",
|
21
|
+
"comics": {
|
22
|
+
"available": 21,
|
23
|
+
"collectionURI": "http://gateway.marvel.com/v1/public/characters/1009227/comics",
|
24
|
+
"items": [
|
25
|
+
{
|
26
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/comics/6809",
|
27
|
+
"name": "Amazing Spider-Man (1963) #394"
|
28
|
+
},
|
29
|
+
{
|
30
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/comics/34628",
|
31
|
+
"name": "Carnage (2010) #1"
|
32
|
+
},
|
33
|
+
{
|
34
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/comics/36404",
|
35
|
+
"name": "Carnage (2010) #1"
|
36
|
+
},
|
37
|
+
{
|
38
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/comics/39011",
|
39
|
+
"name": "Carnage (2010) #1 (2nd Printing Variant)"
|
40
|
+
},
|
41
|
+
{
|
42
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/comics/37072",
|
43
|
+
"name": "Carnage (2010) #1 (ADAMS VARIANT)"
|
44
|
+
},
|
45
|
+
{
|
46
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/comics/36271",
|
47
|
+
"name": "Carnage (2010) #2"
|
48
|
+
},
|
49
|
+
{
|
50
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/comics/39010",
|
51
|
+
"name": "Carnage (2010) #2 (2nd Printing Variant)"
|
52
|
+
},
|
53
|
+
{
|
54
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/comics/34623",
|
55
|
+
"name": "Carnage (2010) #3"
|
56
|
+
},
|
57
|
+
{
|
58
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/comics/39650",
|
59
|
+
"name": "Carnage (2010) #3 (2nd Printing Variant)"
|
60
|
+
},
|
61
|
+
{
|
62
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/comics/36273",
|
63
|
+
"name": "Carnage (2010) #4"
|
64
|
+
},
|
65
|
+
{
|
66
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/comics/36269",
|
67
|
+
"name": "Carnage (2010) #5"
|
68
|
+
},
|
69
|
+
{
|
70
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/comics/40355",
|
71
|
+
"name": "Carnage, U.S.A. (2011) #1"
|
72
|
+
},
|
73
|
+
{
|
74
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/comics/40353",
|
75
|
+
"name": "Carnage, U.S.A. (2011) #2"
|
76
|
+
},
|
77
|
+
{
|
78
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/comics/14656",
|
79
|
+
"name": "Peter Parker, the Spectacular Spider-Man (1976) #201"
|
80
|
+
},
|
81
|
+
{
|
82
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/comics/14657",
|
83
|
+
"name": "Peter Parker, the Spectacular Spider-Man (1976) #202"
|
84
|
+
},
|
85
|
+
{
|
86
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/comics/14658",
|
87
|
+
"name": "Peter Parker, the Spectacular Spider-Man (1976) #203"
|
88
|
+
},
|
89
|
+
{
|
90
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/comics/14691",
|
91
|
+
"name": "Peter Parker, the Spectacular Spider-Man (1976) #233"
|
92
|
+
},
|
93
|
+
{
|
94
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/comics/10518",
|
95
|
+
"name": "Peter Parker: Spider-Man (1999) #10"
|
96
|
+
},
|
97
|
+
{
|
98
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/comics/10521",
|
99
|
+
"name": "Peter Parker: Spider-Man (1999) #13"
|
100
|
+
},
|
101
|
+
{
|
102
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/comics/5396",
|
103
|
+
"name": "Spider-Man Family Featuring Spider-Clan (2006) #1"
|
104
|
+
}
|
105
|
+
],
|
106
|
+
"returned": 20
|
107
|
+
},
|
108
|
+
"series": {
|
109
|
+
"available": 7,
|
110
|
+
"collectionURI": "http://gateway.marvel.com/v1/public/characters/1009227/series",
|
111
|
+
"items": [
|
112
|
+
{
|
113
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/series/1987",
|
114
|
+
"name": "Amazing Spider-Man (1963 - 1998)"
|
115
|
+
},
|
116
|
+
{
|
117
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/series/11942",
|
118
|
+
"name": "Carnage (2010 - 2011)"
|
119
|
+
},
|
120
|
+
{
|
121
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/series/14984",
|
122
|
+
"name": "Carnage, U.S.A. (2011 - 2012)"
|
123
|
+
},
|
124
|
+
{
|
125
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/series/2271",
|
126
|
+
"name": "Peter Parker, the Spectacular Spider-Man (1976 - 1998)"
|
127
|
+
},
|
128
|
+
{
|
129
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/series/2060",
|
130
|
+
"name": "Peter Parker: Spider-Man (1999 - 2003)"
|
131
|
+
},
|
132
|
+
{
|
133
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/series/1091",
|
134
|
+
"name": "Spider-Man Family Featuring Spider-Clan (2006)"
|
135
|
+
},
|
136
|
+
{
|
137
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/series/13532",
|
138
|
+
"name": "Spider-Man: With Great Power Comes Great Responsibility (2010 - 2011)"
|
139
|
+
}
|
140
|
+
],
|
141
|
+
"returned": 7
|
142
|
+
},
|
143
|
+
"stories": {
|
144
|
+
"available": 23,
|
145
|
+
"collectionURI": "http://gateway.marvel.com/v1/public/characters/1009227/stories",
|
146
|
+
"items": [
|
147
|
+
{
|
148
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/stories/5990",
|
149
|
+
"name": "Cover #5990",
|
150
|
+
"type": "cover"
|
151
|
+
},
|
152
|
+
{
|
153
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/stories/14248",
|
154
|
+
"name": "Carnage",
|
155
|
+
"type": "profile"
|
156
|
+
},
|
157
|
+
{
|
158
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/stories/25562",
|
159
|
+
"name": "Venom Triumphant!",
|
160
|
+
"type": "interiorStory"
|
161
|
+
},
|
162
|
+
{
|
163
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/stories/25569",
|
164
|
+
"name": "When Carnage comes calling!",
|
165
|
+
"type": "cover"
|
166
|
+
},
|
167
|
+
{
|
168
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/stories/29779",
|
169
|
+
"name": "Maximum Carnage, Part 5 of 14",
|
170
|
+
"type": "cover"
|
171
|
+
},
|
172
|
+
{
|
173
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/stories/29782",
|
174
|
+
"name": "Maximum Carnage, Part 9 of 14",
|
175
|
+
"type": "cover"
|
176
|
+
},
|
177
|
+
{
|
178
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/stories/29785",
|
179
|
+
"name": "Maximum Carnage, Part 13 of 14",
|
180
|
+
"type": "cover"
|
181
|
+
},
|
182
|
+
{
|
183
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/stories/29914",
|
184
|
+
"name": "Web of Carnage, Part 4 of 4",
|
185
|
+
"type": "cover"
|
186
|
+
},
|
187
|
+
{
|
188
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/stories/76812",
|
189
|
+
"name": "Carnage #3",
|
190
|
+
"type": "cover"
|
191
|
+
},
|
192
|
+
{
|
193
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/stories/76813",
|
194
|
+
"name": "Carnage #3",
|
195
|
+
"type": "interiorStory"
|
196
|
+
},
|
197
|
+
{
|
198
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/stories/80312",
|
199
|
+
"name": "Carnage #5",
|
200
|
+
"type": "interiorStory"
|
201
|
+
},
|
202
|
+
{
|
203
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/stories/80318",
|
204
|
+
"name": "Interior #80318",
|
205
|
+
"type": "interiorStory"
|
206
|
+
},
|
207
|
+
{
|
208
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/stories/80322",
|
209
|
+
"name": "Interior #80322",
|
210
|
+
"type": "interiorStory"
|
211
|
+
},
|
212
|
+
{
|
213
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/stories/80326",
|
214
|
+
"name": "Carnage (2010) #4",
|
215
|
+
"type": "interiorStory"
|
216
|
+
},
|
217
|
+
{
|
218
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/stories/80823",
|
219
|
+
"name": "Interior #80823",
|
220
|
+
"type": "interiorStory"
|
221
|
+
},
|
222
|
+
{
|
223
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/stories/80825",
|
224
|
+
"name": "Interior #80825",
|
225
|
+
"type": "interiorStory"
|
226
|
+
},
|
227
|
+
{
|
228
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/stories/80827",
|
229
|
+
"name": "Interior #80827",
|
230
|
+
"type": "interiorStory"
|
231
|
+
},
|
232
|
+
{
|
233
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/stories/80829",
|
234
|
+
"name": "Interior #80829",
|
235
|
+
"type": "interiorStory"
|
236
|
+
},
|
237
|
+
{
|
238
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/stories/82181",
|
239
|
+
"name": "Interior #82181",
|
240
|
+
"type": "interiorStory"
|
241
|
+
},
|
242
|
+
{
|
243
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/stories/89988",
|
244
|
+
"name": "CARNAGE 3 2ND PRINTING VARIANT",
|
245
|
+
"type": "interiorStory"
|
246
|
+
}
|
247
|
+
],
|
248
|
+
"returned": 20
|
249
|
+
},
|
250
|
+
"events": {
|
251
|
+
"available": 1,
|
252
|
+
"collectionURI": "http://gateway.marvel.com/v1/public/characters/1009227/events",
|
253
|
+
"items": [
|
254
|
+
{
|
255
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/events/151",
|
256
|
+
"name": "Maximum Carnage"
|
257
|
+
}
|
258
|
+
],
|
259
|
+
"returned": 1
|
260
|
+
},
|
261
|
+
"urls": [
|
262
|
+
{
|
263
|
+
"type": "detail",
|
264
|
+
"url": "http://marvel.com/comics/characters/1009227/carnage?utm_campaign=apiRef&utm_source=85ec0830b5958f4f46ea2fa898a76ef2"
|
265
|
+
},
|
266
|
+
{
|
267
|
+
"type": "wiki",
|
268
|
+
"url": "http://marvel.com/universe/Carnage_(Cletus_Kasady)?utm_campaign=apiRef&utm_source=85ec0830b5958f4f46ea2fa898a76ef2"
|
269
|
+
}
|
270
|
+
]
|
271
|
+
}
|
272
|
+
]
|
273
|
+
}
|
274
|
+
}
|
@@ -23,6 +23,7 @@ describe Marvelite::API::Client do
|
|
23
23
|
before do
|
24
24
|
stub_get('characters?name=Spider-Man&apikey=123456&ts=1&hash=d4f1bab013916a533ef31e3ad5fb0887', 'characters/character.json')
|
25
25
|
stub_get('characters/1009610?apikey=123456&ts=1&hash=d4f1bab013916a533ef31e3ad5fb0887', 'characters/character.json')
|
26
|
+
stub_get('characters/1009227?apikey=123456&ts=1&hash=d4f1bab013916a533ef31e3ad5fb0887', 'characters/character_2.json')
|
26
27
|
end
|
27
28
|
it 'returns a Marvelite::API::Response object' do
|
28
29
|
expect(client.character(1009610)).to be_a(Marvelite::API::Response)
|
@@ -34,6 +35,7 @@ describe Marvelite::API::Client do
|
|
34
35
|
|
35
36
|
it 'accepts an Integer as character id' do
|
36
37
|
expect(client.character(1009610)[:data][:results][0][:name]).to eq('Spider-Man')
|
38
|
+
expect(client.character(1009227)[:data][:results][0][:name]).to eq('Carnage')
|
37
39
|
end
|
38
40
|
|
39
41
|
it 'accepts a String as character name' do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: marvelite
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Antonio Antillon
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-02-
|
11
|
+
date: 2014-02-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|
@@ -136,6 +136,7 @@ files:
|
|
136
136
|
- lib/marvelite/version.rb
|
137
137
|
- lib/marvelite.rb
|
138
138
|
- spec/fixtures/characters/character.json
|
139
|
+
- spec/fixtures/characters/character_2.json
|
139
140
|
- spec/fixtures/characters/character_comics.json
|
140
141
|
- spec/fixtures/characters/character_events.json
|
141
142
|
- spec/fixtures/characters/character_series.json
|
@@ -206,6 +207,7 @@ specification_version: 4
|
|
206
207
|
summary: Simple wrapper around the Marvel Comics API
|
207
208
|
test_files:
|
208
209
|
- spec/fixtures/characters/character.json
|
210
|
+
- spec/fixtures/characters/character_2.json
|
209
211
|
- spec/fixtures/characters/character_comics.json
|
210
212
|
- spec/fixtures/characters/character_events.json
|
211
213
|
- spec/fixtures/characters/character_series.json
|