harkness 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.rubocop.yml +94 -0
- data/.yardopts +1 -0
- data/CHANGELOG.md +5 -0
- data/CODE_OF_CONDUCT.md +84 -0
- data/CONTRIBUTING.MD +91 -0
- data/Gemfile +7 -0
- data/LICENSE.txt +21 -0
- data/README.md +155 -0
- data/Rakefile +12 -0
- data/harkness.gemspec +42 -0
- data/lib/harkness/client.rb +70 -0
- data/lib/harkness/error.rb +63 -0
- data/lib/harkness/models/base/data_container.rb +21 -0
- data/lib/harkness/models/base/data_wrapper.rb +34 -0
- data/lib/harkness/models/base/summary.rb +17 -0
- data/lib/harkness/models/character.rb +54 -0
- data/lib/harkness/models/character_list.rb +27 -0
- data/lib/harkness/models/comic.rb +53 -0
- data/lib/harkness/models/comic_list.rb +12 -0
- data/lib/harkness/models/creator.rb +28 -0
- data/lib/harkness/models/creator_list.rb +14 -0
- data/lib/harkness/models/event.rb +30 -0
- data/lib/harkness/models/event_list.rb +12 -0
- data/lib/harkness/models/image.rb +9 -0
- data/lib/harkness/models/series.rb +32 -0
- data/lib/harkness/models/series_list.rb +12 -0
- data/lib/harkness/models/story.rb +26 -0
- data/lib/harkness/models/story_list.rb +13 -0
- data/lib/harkness/models/text_object.rb +10 -0
- data/lib/harkness/models/url.rb +9 -0
- data/lib/harkness/resource.rb +36 -0
- data/lib/harkness/resources/character.rb +63 -0
- data/lib/harkness/resources/comic.rb +63 -0
- data/lib/harkness/resources/creator.rb +63 -0
- data/lib/harkness/resources/event.rb +72 -0
- data/lib/harkness/resources/series.rb +72 -0
- data/lib/harkness/resources/story.rb +72 -0
- data/lib/harkness/version.rb +5 -0
- data/lib/harkness.rb +42 -0
- metadata +254 -0
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Harkness
|
4
|
+
module Base
|
5
|
+
# The top level wrapper of a response from the API.
|
6
|
+
class DataWrapper < Shale::Mapper
|
7
|
+
# @!attribute [r] code
|
8
|
+
# @return [Integer] the HTTP status code of the returned result.
|
9
|
+
attribute :code, Shale::Type::Integer
|
10
|
+
# @!attribute [r] status
|
11
|
+
# @return [String] a string description of the call status.
|
12
|
+
attribute :status, Shale::Type::String
|
13
|
+
# @!attribute [r] copyright
|
14
|
+
# @return [String] the copyright notice for the returned result.
|
15
|
+
attribute :copyright, Shale::Type::String
|
16
|
+
# @!attribute [r] attributionText
|
17
|
+
# @return [String] the attribution notice for this result.
|
18
|
+
# Please display either this notice or the contents of the attributionHTML field on all
|
19
|
+
# screens which contain data from the Marvel Comics API.
|
20
|
+
attribute :attributionText, Shale::Type::String
|
21
|
+
# @!attribute [r] attributionHTML
|
22
|
+
# @return [String] an HTML representation of the attribution notice for this result.
|
23
|
+
# Please display either this notice or the contents of the attributionText field on all
|
24
|
+
# screens which contain data from the Marvel Comics API.
|
25
|
+
attribute :attributionHTML, Shale::Type::String
|
26
|
+
# @!attribute [r] data
|
27
|
+
# @return [Harkness::Base::DataContainer] the results returned by the call.
|
28
|
+
attribute :data, Harkness::Base::DataContainer
|
29
|
+
# @!attribute [r] etag
|
30
|
+
# @return [String] a digest value of the content returned by the call.
|
31
|
+
attribute :etag, Shale::Type::String
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Harkness
|
4
|
+
module Base
|
5
|
+
# Base class for the "summary" objects in an API response. These summary objects are
|
6
|
+
# linked objects to the main API response. For example, when retrieving a Character,
|
7
|
+
# one of the summary objects is a Series.
|
8
|
+
class Summary < Shale::Mapper
|
9
|
+
# @!attribute [r] resourceURI
|
10
|
+
# @return [String] the path to the individual resource.
|
11
|
+
attribute :resourceURI, Shale::Type::String
|
12
|
+
# @!attribute [r] name
|
13
|
+
# @return [String] the canonical name of the resource.
|
14
|
+
attribute :name, Shale::Type::String
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Harkness
|
4
|
+
# An individual character.
|
5
|
+
class Character < Shale::Mapper
|
6
|
+
# @!attribute [r] id
|
7
|
+
# @return [Integer] the unique ID of the character resource.
|
8
|
+
attribute :id, Shale::Type::Integer
|
9
|
+
# @!attribute [r] name
|
10
|
+
# @return [String] the name of the character.
|
11
|
+
attribute :name, Shale::Type::String
|
12
|
+
# @!attribute [r] description
|
13
|
+
# @return [String] a short bio or description of the character
|
14
|
+
attribute :description, Shale::Type::String
|
15
|
+
# @!attribute [r] modified
|
16
|
+
# @return [String] the date the resource was most recently modified.
|
17
|
+
attribute :modified, Shale::Type::String
|
18
|
+
# @!attribute [r] resourceURI
|
19
|
+
# @return [String] the canonical URL identifier for this resource.
|
20
|
+
attribute :resourceURI, Shale::Type::String
|
21
|
+
# @!attribute [r] urls
|
22
|
+
# @return [Array<Harkness::URL>] a set of public web site URLs for the resource.
|
23
|
+
attribute :urls, Harkness::URL, collection: true
|
24
|
+
# @!attribute [r] thumbnail
|
25
|
+
# @return [Harkness::Image] the representative image for this character.
|
26
|
+
attribute :thumbnail, Harkness::Image
|
27
|
+
# @!attribute [r] comics
|
28
|
+
# @return [Harkness::ComicList] a resource list containing comics which feature this character.
|
29
|
+
attribute :comics, Harkness::ComicList
|
30
|
+
# @!attribute [r] stories
|
31
|
+
# @return [Harkness::StoryList] a resource list of stories in which this character appears.
|
32
|
+
attribute :stories, Harkness::StoryList
|
33
|
+
# @!attribute [r] events
|
34
|
+
# @return [Harkness::EventList] a resource list of events in which this character appears.
|
35
|
+
attribute :events, Harkness::EventList
|
36
|
+
# @!attribute [r] series
|
37
|
+
# @return [Harkness::SeriesList] a resource list of series in which this character appears.
|
38
|
+
attribute :series, Harkness::SeriesList
|
39
|
+
end
|
40
|
+
|
41
|
+
# Container class that holds pagination information and results
|
42
|
+
class CharacterDataContainer < Harkness::Base::DataContainer
|
43
|
+
# @!attribute [r] results
|
44
|
+
# @return [Array<Harkness::Character>] the list of characters returned by the call.
|
45
|
+
attribute :results, Harkness::Character, collection: true
|
46
|
+
end
|
47
|
+
|
48
|
+
# The top level wrapper of a response from the API.
|
49
|
+
class CharacterDataWrapper < Harkness::Base::DataWrapper
|
50
|
+
# @!attribute [r] data
|
51
|
+
# @return [CharacterDataContainer] the results returned by the call.
|
52
|
+
attribute :data, Harkness::CharacterDataContainer
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Harkness
|
4
|
+
# The summary of a character.
|
5
|
+
class CharacterSummary < Harkness::Base::Summary
|
6
|
+
# @!attribute [r] role
|
7
|
+
# @return [String] the role of the creator in the parent entity.
|
8
|
+
attribute :role, Shale::Type::String
|
9
|
+
end
|
10
|
+
|
11
|
+
# A list of characters.
|
12
|
+
class CharacterList < Shale::Mapper
|
13
|
+
# @!attribute [r] available
|
14
|
+
# @return [Integer] the number of total available characters in this list.
|
15
|
+
# Will always be greater than or equal to the "returned" value.
|
16
|
+
attribute :available, Shale::Type::Integer
|
17
|
+
# @!attribute [r] returned
|
18
|
+
# @return [Integer] the number of characters returned in this collection (up to 20).
|
19
|
+
attribute :returned, Shale::Type::Integer
|
20
|
+
# @!attribute [r] collectionURI
|
21
|
+
# @return [String] the path to the full list of characters in this collection.
|
22
|
+
attribute :collectionURI, Shale::Type::String
|
23
|
+
# @!attribute [r] offset
|
24
|
+
# @return [Array<Harkness::CharacterSummary>] the list of returned characters in this collection.
|
25
|
+
attribute :items, Harkness::CharacterSummary, collection: true
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Harkness
|
4
|
+
class ComicDate < Shale::Mapper
|
5
|
+
attribute :type, Shale::Type::String
|
6
|
+
attribute :date, Shale::Type::String
|
7
|
+
end
|
8
|
+
|
9
|
+
class ComicPrice < Shale::Mapper
|
10
|
+
attribute :type, Shale::Type::String
|
11
|
+
attribute :price, Shale::Type::Float
|
12
|
+
end
|
13
|
+
|
14
|
+
class Comic < Shale::Mapper
|
15
|
+
attribute :id, Shale::Type::Integer
|
16
|
+
attribute :digitalId, Shale::Type::Integer
|
17
|
+
attribute :title, Shale::Type::String
|
18
|
+
attribute :issueNumber, Shale::Type::Integer
|
19
|
+
attribute :variantDescription, Shale::Type::String
|
20
|
+
attribute :description, Shale::Type::String
|
21
|
+
attribute :modified, Shale::Type::String
|
22
|
+
attribute :isbn, Shale::Type::String
|
23
|
+
attribute :upc, Shale::Type::String
|
24
|
+
attribute :diamondCode, Shale::Type::String
|
25
|
+
attribute :ean, Shale::Type::String
|
26
|
+
attribute :issn, Shale::Type::String
|
27
|
+
attribute :format, Shale::Type::String
|
28
|
+
attribute :pageCount, Shale::Type::Integer
|
29
|
+
attribute :textObjects, Harkness::TextObject, collection: true
|
30
|
+
attribute :resourceURI, Shale::Type::String
|
31
|
+
attribute :urls, Harkness::URL, collection: true
|
32
|
+
attribute :series, Harkness::SeriesSummary
|
33
|
+
attribute :variants, Harkness::ComicSummary, collection: true
|
34
|
+
attribute :collections, Harkness::ComicSummary, collection: true
|
35
|
+
attribute :collectedIssues, Harkness::ComicSummary, collection: true
|
36
|
+
attribute :dates, Harkness::ComicDate, collection: true
|
37
|
+
attribute :prices, Harkness::ComicPrice, collection: true
|
38
|
+
attribute :thumbnail, Harkness::Image
|
39
|
+
attribute :images, Harkness::Image, collection: true
|
40
|
+
attribute :creators, Harkness::CreatorList
|
41
|
+
attribute :characters, Harkness::CharacterList
|
42
|
+
attribute :stories, Harkness::StoryList
|
43
|
+
attribute :events, Harkness::EventList
|
44
|
+
end
|
45
|
+
|
46
|
+
class ComicDataContainer < Harkness::Base::DataContainer
|
47
|
+
attribute :results, Harkness::Comic, collection: true
|
48
|
+
end
|
49
|
+
|
50
|
+
class ComicDataWrapper < Harkness::Base::DataWrapper
|
51
|
+
attribute :data, Harkness::ComicDataContainer
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Harkness
|
4
|
+
class ComicSummary < Harkness::Base::Summary
|
5
|
+
end
|
6
|
+
|
7
|
+
class ComicList < Shale::Mapper
|
8
|
+
attribute :available, Shale::Type::Integer
|
9
|
+
attribute :collectionURI, Shale::Type::String
|
10
|
+
attribute :items, Harkness::ComicSummary, collection: true
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Harkness
|
4
|
+
class Creator < Shale::Mapper
|
5
|
+
attribute :id, Shale::Type::Integer
|
6
|
+
attribute :firstName, Shale::Type::String
|
7
|
+
attribute :middleName, Shale::Type::String
|
8
|
+
attribute :lastName, Shale::Type::String
|
9
|
+
attribute :suffix, Shale::Type::String
|
10
|
+
attribute :fullName, Shale::Type::String
|
11
|
+
attribute :modified, Shale::Type::String
|
12
|
+
attribute :resourceURI, Shale::Type::String
|
13
|
+
attribute :urls, Harkness::URL, collection: true
|
14
|
+
attribute :thumbnail, Harkness::Image
|
15
|
+
attribute :series, Harkness::SeriesList
|
16
|
+
attribute :stories, Harkness::StoryList
|
17
|
+
attribute :comics, Harkness::ComicList
|
18
|
+
attribute :events, Harkness::EventList
|
19
|
+
end
|
20
|
+
|
21
|
+
class CreatorDataContainer < Harkness::Base::DataContainer
|
22
|
+
attribute :results, Harkness::Creator, collection: true
|
23
|
+
end
|
24
|
+
|
25
|
+
class CreatorDataWrapper < Harkness::Base::DataWrapper
|
26
|
+
attribute :data, Harkness::CreatorDataContainer
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Harkness
|
4
|
+
class CreatorSummary < Harkness::Base::Summary
|
5
|
+
attribute :role, Shale::Type::String
|
6
|
+
end
|
7
|
+
|
8
|
+
class CreatorList < Shale::Mapper
|
9
|
+
attribute :available, Shale::Type::Integer
|
10
|
+
attribute :returned, Shale::Type::Integer
|
11
|
+
attribute :collectionURI, Shale::Type::String
|
12
|
+
attribute :items, Harkness::CreatorSummary, collection: true
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Harkness
|
4
|
+
class Event < Shale::Mapper
|
5
|
+
attribute :id, Shale::Type::Integer
|
6
|
+
attribute :title, Shale::Type::String
|
7
|
+
attribute :description, Shale::Type::String
|
8
|
+
attribute :resourceURI, Shale::Type::String
|
9
|
+
attribute :urls, Harkness::URL, collection: true
|
10
|
+
attribute :modified, Shale::Type::String
|
11
|
+
attribute :start, Shale::Type::String
|
12
|
+
attribute :end, Shale::Type::String
|
13
|
+
attribute :thumbnail, Harkness::Image
|
14
|
+
attribute :comics, Harkness::ComicList
|
15
|
+
attribute :stories, Harkness::StoryList
|
16
|
+
attribute :series, Harkness::SeriesList
|
17
|
+
attribute :characters, Harkness::CharacterList
|
18
|
+
attribute :creators, Harkness::CreatorList
|
19
|
+
attribute :next, Harkness::EventSummary
|
20
|
+
attribute :previous, Harkness::EventSummary
|
21
|
+
end
|
22
|
+
|
23
|
+
class EventDataContainer < Harkness::Base::DataContainer
|
24
|
+
attribute :results, Harkness::Event, collection: true
|
25
|
+
end
|
26
|
+
|
27
|
+
class EventDataWrapper < Harkness::Base::DataWrapper
|
28
|
+
attribute :data, Harkness::EventDataContainer
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Harkness
|
4
|
+
class EventSummary < Harkness::Base::Summary
|
5
|
+
end
|
6
|
+
|
7
|
+
class EventList < Shale::Mapper
|
8
|
+
attribute :available, Shale::Type::Integer
|
9
|
+
attribute :collectionURI, Shale::Type::String
|
10
|
+
attribute :items, Harkness::EventSummary, collection: true
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Harkness
|
4
|
+
class Series < Shale::Mapper
|
5
|
+
attribute :id, Shale::Type::Integer
|
6
|
+
attribute :title, Shale::Type::String
|
7
|
+
attribute :description, Shale::Type::String
|
8
|
+
attribute :resourceURI, Shale::Type::String
|
9
|
+
attribute :urls, Harkness::URL, collection: true
|
10
|
+
|
11
|
+
attribute :startYear, Shale::Type::Integer
|
12
|
+
attribute :endYear, Shale::Type::Integer
|
13
|
+
attribute :rating, Shale::Type::String
|
14
|
+
attribute :modified, Shale::Type::String
|
15
|
+
attribute :thumbnail, Harkness::Image
|
16
|
+
attribute :comics, Harkness::ComicList
|
17
|
+
attribute :stories, Harkness::StoryList
|
18
|
+
attribute :events, Harkness::EventList
|
19
|
+
attribute :characters, Harkness::CharacterList
|
20
|
+
attribute :creators, Harkness::CreatorList
|
21
|
+
attribute :next, Harkness::SeriesSummary
|
22
|
+
attribute :previous, Harkness::SeriesSummary
|
23
|
+
end
|
24
|
+
|
25
|
+
class SeriesDataContainer < Harkness::Base::DataContainer
|
26
|
+
attribute :results, Harkness::Series, collection: true
|
27
|
+
end
|
28
|
+
|
29
|
+
class SeriesDataWrapper < Harkness::Base::DataWrapper
|
30
|
+
attribute :data, Harkness::SeriesDataContainer
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Harkness
|
4
|
+
class SeriesSummary < Harkness::Base::Summary
|
5
|
+
end
|
6
|
+
|
7
|
+
class SeriesList < Shale::Mapper
|
8
|
+
attribute :available, Shale::Type::Integer
|
9
|
+
attribute :collectionURI, Shale::Type::String
|
10
|
+
attribute :items, Harkness::SeriesSummary, collection: true
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Harkness
|
4
|
+
class Story < Shale::Mapper
|
5
|
+
attribute :id, Shale::Type::Integer
|
6
|
+
attribute :title, Shale::Type::String
|
7
|
+
attribute :description, Shale::Type::String
|
8
|
+
attribute :resourceURI, Shale::Type::String
|
9
|
+
attribute :type, Shale::Type::String
|
10
|
+
attribute :modified, Shale::Type::String
|
11
|
+
attribute :thumbnail, Harkness::Image
|
12
|
+
attribute :comics, Harkness::ComicList
|
13
|
+
attribute :series, Harkness::SeriesList
|
14
|
+
attribute :events, Harkness::EventList
|
15
|
+
attribute :characters, Harkness::CharacterList
|
16
|
+
attribute :originalIssue, Harkness::ComicSummary
|
17
|
+
end
|
18
|
+
|
19
|
+
class StoryDataContainer < Harkness::Base::DataContainer
|
20
|
+
attribute :results, Harkness::Story, collection: true
|
21
|
+
end
|
22
|
+
|
23
|
+
class StoryDataWrapper < Harkness::Base::DataWrapper
|
24
|
+
attribute :data, Harkness::StoryDataContainer
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Harkness
|
4
|
+
class StorySummary < Harkness::Base::Summary
|
5
|
+
attribute :type, Shale::Type::String
|
6
|
+
end
|
7
|
+
|
8
|
+
class StoryList < Shale::Mapper
|
9
|
+
attribute :available, Shale::Type::Integer
|
10
|
+
attribute :collectionURI, Shale::Type::String
|
11
|
+
attribute :items, Harkness::StorySummary, collection: true
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "digest/md5"
|
4
|
+
|
5
|
+
module Harkness
|
6
|
+
class Resource
|
7
|
+
attr_reader :client
|
8
|
+
|
9
|
+
def initialize(client)
|
10
|
+
@client = client
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def get_request(url, params: {}, headers: {})
|
16
|
+
handle_response client.connection.get(url, authentication_params.merge(params), headers)
|
17
|
+
end
|
18
|
+
|
19
|
+
def authentication_params
|
20
|
+
timestamp = Time.now.to_i
|
21
|
+
{
|
22
|
+
ts: timestamp,
|
23
|
+
apikey: @client.public_key,
|
24
|
+
hash: Digest::MD5.hexdigest(timestamp.to_s + @client.private_key + @client.public_key)
|
25
|
+
}
|
26
|
+
end
|
27
|
+
|
28
|
+
def handle_response(response)
|
29
|
+
error_klass = Harkness::Error::STATUS_MAPPINGS[response.status]
|
30
|
+
message = JSON.parse(response.body)["status"] || "API request failed with an unknown error."
|
31
|
+
raise error_klass, message if error_klass
|
32
|
+
|
33
|
+
response
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Harkness
|
4
|
+
# The character resource.
|
5
|
+
class CharacterResource < Resource
|
6
|
+
# Get a list of characters.
|
7
|
+
# @param params [Hash] the params to pass to the API request.
|
8
|
+
# See the [characters documentation from Marvel](https://developer.marvel.com/docs#!/public/getCreatorCollection_get_0)
|
9
|
+
# for valid options.
|
10
|
+
# @return [Harkness::CharacterDataWrapper] the top level wrapper around the character API response.
|
11
|
+
# @example
|
12
|
+
# client.characters.list
|
13
|
+
# client.characters.list(nameStartsWith: "Ant-", limit: 10, orderBy: "-modified")
|
14
|
+
def list(**params)
|
15
|
+
CharacterDataWrapper.from_json(get_request("characters", params: params).body)
|
16
|
+
end
|
17
|
+
|
18
|
+
# Get a single character.
|
19
|
+
# @param character_id [Integer] the ID of the character.
|
20
|
+
# @return [Harkness::CharacterDataWrapper] the top level wrapper around the character API response.
|
21
|
+
# @example
|
22
|
+
# client.characters.retrieve(character_id: 1234)
|
23
|
+
def retrieve(character_id:)
|
24
|
+
CharacterDataWrapper.from_json(get_request("characters/#{character_id}").body)
|
25
|
+
end
|
26
|
+
|
27
|
+
# Get a list of comics for a particular character.
|
28
|
+
# @param character_id [Integer] the ID of the character.
|
29
|
+
# @return [Harkness::ComicDataWrapper] the top level wrapper around the comic API response.
|
30
|
+
# @example
|
31
|
+
# client.characters.comics(character_id: 1234)
|
32
|
+
def comics(character_id:)
|
33
|
+
ComicDataWrapper.from_json(get_request("characters/#{character_id}/comics").body)
|
34
|
+
end
|
35
|
+
|
36
|
+
# Get a list of events for a particular character.
|
37
|
+
# @param character_id [Integer] the ID of the character.
|
38
|
+
# @return [Harkness::EventDataWrapper] the top level wrapper around the event API response.
|
39
|
+
# @example
|
40
|
+
# client.characters.events(character_id: 1234)
|
41
|
+
def events(character_id:)
|
42
|
+
EventDataWrapper.from_json(get_request("characters/#{character_id}/events").body)
|
43
|
+
end
|
44
|
+
|
45
|
+
# Get a list of series for a particular character.
|
46
|
+
# @param character_id [Integer] the ID of the character.
|
47
|
+
# @return [Harkness::SeriesDataWrapper] the top level wrapper around the series API response.
|
48
|
+
# @example
|
49
|
+
# client.characters.series(character_id: 1234)
|
50
|
+
def series(character_id:)
|
51
|
+
SeriesDataWrapper.from_json(get_request("characters/#{character_id}/series").body)
|
52
|
+
end
|
53
|
+
|
54
|
+
# Get a list of stories for a particular character.
|
55
|
+
# @param character_id [Integer] the ID of the character.
|
56
|
+
# @return [Harkness::StoryDataWrapper] the top level wrapper around the story API response.
|
57
|
+
# @example
|
58
|
+
# client.stories.characters(character_id: 1234)
|
59
|
+
def stories(character_id:)
|
60
|
+
StoryDataWrapper.from_json(get_request("characters/#{character_id}/stories").body)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Harkness
|
4
|
+
# The comic resource.
|
5
|
+
class ComicResource < Resource
|
6
|
+
# Get a list of comics.
|
7
|
+
# @param params [Hash] the params to pass to the API request.
|
8
|
+
# See the [comics documentation from Marvel](https://developer.marvel.com/docs#!/public/getComicsCollection_get_6)
|
9
|
+
# for valid options.
|
10
|
+
# @return [Harkness::ComicDataWrapper] the top level wrapper around the comic API response.
|
11
|
+
# @example
|
12
|
+
# client.comics.list
|
13
|
+
# client.comics.list(titleStartsWith: "Spider", limit: 10, orderBy: "issueNumber")
|
14
|
+
def list(**params)
|
15
|
+
ComicDataWrapper.from_json(get_request("comics", params: params).body)
|
16
|
+
end
|
17
|
+
|
18
|
+
# Get a single comic.
|
19
|
+
# @param comic_id [Integer] the ID of the comic.
|
20
|
+
# @return [Harkness::ComicDataWrapper] the top level wrapper around the comic API response.
|
21
|
+
# @example
|
22
|
+
# client.comics.retrieve(comic_id: 1234)
|
23
|
+
def retrieve(comic_id:)
|
24
|
+
ComicDataWrapper.from_json(get_request("comics/#{comic_id}").body)
|
25
|
+
end
|
26
|
+
|
27
|
+
# Get a list of characters for a particular comic.
|
28
|
+
# @param comic_id [Integer] the ID of the comic.
|
29
|
+
# @return [Harkness::CharacterDataWrapper] the top level wrapper around the character API response.
|
30
|
+
# @example
|
31
|
+
# client.comics.characters(comic_id: 1234)
|
32
|
+
def characters(comic_id:)
|
33
|
+
CharacterDataWrapper.from_json(get_request("comics/#{comic_id}/characters").body)
|
34
|
+
end
|
35
|
+
|
36
|
+
# Get a list of creators for a particular comic.
|
37
|
+
# @param comic_id [Integer] the ID of the comic.
|
38
|
+
# @return [Harkness::CreatorDataWrapper] the top level wrapper around the creator API response.
|
39
|
+
# @example
|
40
|
+
# client.comics.creators(comic_id: 1234)
|
41
|
+
def creators(comic_id:)
|
42
|
+
CreatorDataWrapper.from_json(get_request("comics/#{comic_id}/creators").body)
|
43
|
+
end
|
44
|
+
|
45
|
+
# Get a list of events for a particular comic.
|
46
|
+
# @param comic_id [Integer] the ID of the comic.
|
47
|
+
# @return [Harkness::EventDataWrapper] the top level wrapper around the event API response.
|
48
|
+
# @example
|
49
|
+
# client.comics.events(comic_id: 1234)
|
50
|
+
def events(comic_id:)
|
51
|
+
EventDataWrapper.from_json(get_request("comics/#{comic_id}/events").body)
|
52
|
+
end
|
53
|
+
|
54
|
+
# Get a list of stories for a particular comic.
|
55
|
+
# @param comic_id [Integer] the ID of the comic.
|
56
|
+
# @return [Harkness::StoryDataWrapper] the top level wrapper around the story API response.
|
57
|
+
# @example
|
58
|
+
# client.comics.stories(comic_id: 1234)
|
59
|
+
def stories(comic_id:)
|
60
|
+
StoryDataWrapper.from_json(get_request("comics/#{comic_id}/stories").body)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Harkness
|
4
|
+
# The creator resource.
|
5
|
+
class CreatorResource < Resource
|
6
|
+
# Get a list of creators.
|
7
|
+
# @param params [Hash] the params to pass to the API request.
|
8
|
+
# See the [creators documentation from Marvel](https://developer.marvel.com/docs#!/public/getCreatorCollection_get_12)
|
9
|
+
# for valid options.
|
10
|
+
# @return [Harkness::CreatorDataWrapper] the top level wrapper around the creator API response.
|
11
|
+
# @example
|
12
|
+
# client.creators.list
|
13
|
+
# client.creators.list(firstNameStartsWith: "Ben", limit: 10, orderBy: "lastName")
|
14
|
+
def list(**params)
|
15
|
+
CreatorDataWrapper.from_json(get_request("creators", params: params).body)
|
16
|
+
end
|
17
|
+
|
18
|
+
# Get a single creator.
|
19
|
+
# @param creator_id [Integer] the ID of the creator.
|
20
|
+
# @return [Harkness::CreatorDataWrapper] the top level wrapper around the creator API response.
|
21
|
+
# @example
|
22
|
+
# client.creators.retrieve(creator_id: 1234)
|
23
|
+
def retrieve(creator_id:)
|
24
|
+
CreatorDataWrapper.from_json(get_request("creators/#{creator_id}").body)
|
25
|
+
end
|
26
|
+
|
27
|
+
# Get a list of comics for a particular creator.
|
28
|
+
# @param creator_id [Integer] the ID of the creator.
|
29
|
+
# @return [Harkness::ComicDataWrapper] the top level wrapper around the comic API response.
|
30
|
+
# @example
|
31
|
+
# client.creators.comics(creator_id: 1234)
|
32
|
+
def comics(creator_id:)
|
33
|
+
ComicDataWrapper.from_json(get_request("creators/#{creator_id}/comics").body)
|
34
|
+
end
|
35
|
+
|
36
|
+
# Get a list of events for a particular creator.
|
37
|
+
# @param creator_id [Integer] the ID of the creator.
|
38
|
+
# @return [Harkness::EventDataWrapper] the top level wrapper around the event API response.
|
39
|
+
# @example
|
40
|
+
# client.creators.events(creator_id: 1234)
|
41
|
+
def events(creator_id:)
|
42
|
+
EventDataWrapper.from_json(get_request("creators/#{creator_id}/events").body)
|
43
|
+
end
|
44
|
+
|
45
|
+
# Get a list of series for a particular creator.
|
46
|
+
# @param creator_id [Integer] the ID of the creator.
|
47
|
+
# @return [Harkness::SeriesDataWrapper] the top level wrapper around the series API response.
|
48
|
+
# @example
|
49
|
+
# client.creators.series(creator_id: 1234)
|
50
|
+
def series(creator_id:)
|
51
|
+
SeriesDataWrapper.from_json(get_request("creators/#{creator_id}/series").body)
|
52
|
+
end
|
53
|
+
|
54
|
+
# Get a list of stories for a particular creator.
|
55
|
+
# @param creator_id [Integer] the ID of the creator.
|
56
|
+
# @return [Harkness::StoryDataWrapper] the top level wrapper around the story API response.
|
57
|
+
# @example
|
58
|
+
# client.creators.stories(creator_id: 1234)
|
59
|
+
def stories(creator_id:)
|
60
|
+
StoryDataWrapper.from_json(get_request("creators/#{creator_id}/stories").body)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|