marver 0.0.6 → 0.1.0

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.
Files changed (105) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +8 -14
  3. data/lib/marver.rb +16 -2
  4. data/lib/marver/api.rb +9 -1
  5. data/lib/marver/api/client.rb +9 -6
  6. data/lib/marver/api/credentials.rb +1 -1
  7. data/lib/marver/api/errors.rb +33 -0
  8. data/lib/marver/client.rb +3 -1
  9. data/lib/marver/entities/character.rb +11 -23
  10. data/lib/marver/entities/comic.rb +19 -35
  11. data/lib/marver/entities/creator.rb +5 -26
  12. data/lib/marver/entities/event.rb +17 -26
  13. data/lib/marver/entities/serie.rb +15 -29
  14. data/lib/marver/entities/story.rb +11 -23
  15. data/lib/marver/entities/summary/character.rb +2 -2
  16. data/lib/marver/entities/summary/comic.rb +4 -4
  17. data/lib/marver/entities/summary/creator.rb +4 -2
  18. data/lib/marver/entities/summary/event.rb +2 -2
  19. data/lib/marver/entities/summary/serie.rb +3 -3
  20. data/lib/marver/entities/summary/story.rb +2 -2
  21. data/lib/marver/entities/url.rb +3 -3
  22. data/lib/marver/factories/character.rb +28 -0
  23. data/lib/marver/factories/comic.rb +27 -0
  24. data/lib/marver/factories/creator.rb +28 -0
  25. data/lib/marver/factories/date.rb +15 -0
  26. data/lib/marver/factories/event.rb +28 -0
  27. data/lib/marver/factories/factory.rb +20 -0
  28. data/lib/marver/factories/image.rb +15 -0
  29. data/lib/marver/factories/price.rb +15 -0
  30. data/lib/marver/factories/serie.rb +28 -0
  31. data/lib/marver/factories/story.rb +28 -0
  32. data/lib/marver/factories/summary/character.rb +23 -0
  33. data/lib/marver/factories/summary/comic.rb +23 -0
  34. data/lib/marver/factories/summary/creator.rb +23 -0
  35. data/lib/marver/factories/summary/event.rb +23 -0
  36. data/lib/marver/factories/summary/serie.rb +23 -0
  37. data/lib/marver/factories/summary/story.rb +23 -0
  38. data/lib/marver/factories/summary/summary.rb +12 -0
  39. data/lib/marver/factories/text_object.rb +16 -0
  40. data/lib/marver/factories/url.rb +15 -0
  41. data/lib/marver/finders/character_finder.rb +16 -2
  42. data/lib/marver/finders/comic_finder.rb +17 -1
  43. data/lib/marver/finders/creator_finder.rb +26 -0
  44. data/lib/marver/finders/event_finder.rb +16 -2
  45. data/lib/marver/finders/serie_finder.rb +16 -2
  46. data/lib/marver/finders/story_finder.rb +15 -2
  47. data/lib/marver/mappers/character_attributes_mapper.rb +25 -0
  48. data/lib/marver/mappers/comic_attributes_mapper.rb +40 -0
  49. data/lib/marver/mappers/creator_attributes_mapper.rb +29 -0
  50. data/lib/marver/mappers/event_attributes_mapper.rb +29 -0
  51. data/lib/marver/mappers/mappable.rb +86 -0
  52. data/lib/marver/mappers/serie_attributes_mapper.rb +32 -0
  53. data/lib/marver/mappers/story_attributes_mapper.rb +26 -0
  54. data/lib/marver/utils/finder_param_filter.rb +13 -0
  55. data/lib/marver/utils/string_helper.rb +7 -0
  56. data/lib/marver/version.rb +1 -1
  57. data/spec/marver/.DS_Store +0 -0
  58. data/spec/marver/api/client_spec.rb +1 -1
  59. data/spec/marver/api/credentials_spec.rb +2 -2
  60. data/spec/marver/api/error_spec.rb +9 -9
  61. data/spec/marver/client_spec.rb +8 -0
  62. data/spec/marver/entities/character_spec.rb +1 -1
  63. data/spec/marver/entities/comic_spec.rb +1 -1
  64. data/spec/marver/entities/creator_spec.rb +2 -2
  65. data/spec/marver/entities/event_spec.rb +1 -1
  66. data/spec/marver/entities/serie_spec.rb +2 -2
  67. data/spec/marver/entities/story_spec.rb +2 -2
  68. data/spec/marver/entities/summary/comic_spec.rb +9 -1
  69. data/spec/marver/factories/character_spec.rb +12 -0
  70. data/spec/marver/factories/comic_spec.rb +12 -0
  71. data/spec/marver/factories/creator_spec.rb +12 -0
  72. data/spec/marver/factories/date_spec.rb +13 -0
  73. data/spec/marver/factories/event_spec.rb +12 -0
  74. data/spec/marver/factories/image_spec.rb +13 -0
  75. data/spec/marver/factories/price_spec.rb +13 -0
  76. data/spec/marver/factories/serie_spec.rb +12 -0
  77. data/spec/marver/factories/story_spec.rb +12 -0
  78. data/spec/marver/factories/summary/character_spec.rb +13 -0
  79. data/spec/marver/factories/summary/comic_spec.rb +13 -0
  80. data/spec/marver/factories/summary/creator_spec.rb +13 -0
  81. data/spec/marver/factories/summary/event_spec.rb +13 -0
  82. data/spec/marver/factories/summary/serie_spec.rb +13 -0
  83. data/spec/marver/factories/summary/story_spec.rb +13 -0
  84. data/spec/marver/factories/text_object_spec.rb +13 -0
  85. data/spec/marver/factories/url_spec.rb +13 -0
  86. data/spec/marver/finders/character_finder_spec.rb +17 -9
  87. data/spec/marver/finders/comic_finder_spec.rb +11 -2
  88. data/spec/marver/finders/creator_finder_spec.rb +27 -0
  89. data/spec/marver/finders/event_finder_spec.rb +11 -2
  90. data/spec/marver/finders/serie_finder_spec.rb +10 -2
  91. data/spec/marver/finders/story_finder_spec.rb +11 -3
  92. data/spec/marver/mappers/character_attributes_mapper_spec.rb +14 -0
  93. data/spec/marver/mappers/comic_attributes_mapper_spec.rb +17 -0
  94. data/spec/marver/mappers/creator_attributes_mapper_spec.rb +15 -0
  95. data/spec/marver/mappers/event_attributes_mapper_spec.rb +14 -0
  96. data/spec/marver/mappers/serie_attributes_mapper_spec.rb +17 -0
  97. data/spec/marver/mappers/story_attributes_mapper_spec.rb +15 -0
  98. data/spec/marver/utils/finder_param_filter_spec.rb +17 -0
  99. data/spec/marver/utils/string_helper_spec.rb +7 -0
  100. metadata +86 -7
  101. data/TODO +0 -3
  102. data/lib/marver/api/error.rb +0 -13
  103. data/lib/marver/entities/commonable.rb +0 -37
  104. data/lib/marver/entities/queryable.rb +0 -12
  105. data/lib/marver/entities/summarizable.rb +0 -54
@@ -0,0 +1,23 @@
1
+ require './lib/marver'
2
+
3
+ module Marver
4
+ module Factory
5
+ module Summary
6
+ class Event
7
+ def initialize results
8
+ @results = results
9
+ end
10
+
11
+ def build
12
+ if @results.kind_of?(Array)
13
+ @results.collect do |event|
14
+ Marver::Summary::Event.new(event)
15
+ end
16
+ else
17
+ [Marver::Summary::Event.new(@results)]
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,23 @@
1
+ require './lib/marver'
2
+
3
+ module Marver
4
+ module Factory
5
+ module Summary
6
+ class Serie
7
+ def initialize results
8
+ @results = results
9
+ end
10
+
11
+ def build
12
+ if @results.kind_of?(Array)
13
+ @results.collect do |serie|
14
+ Marver::Summary::Serie.new(serie)
15
+ end
16
+ else
17
+ [Marver::Summary::Serie.new(@results)]
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,23 @@
1
+ require './lib/marver'
2
+
3
+ module Marver
4
+ module Factory
5
+ module Summary
6
+ class Story
7
+ def initialize results
8
+ @results = results
9
+ end
10
+
11
+ def build
12
+ if @results.kind_of?(Array)
13
+ @results.collect do |story|
14
+ Marver::Summary::Story.new(story)
15
+ end
16
+ else
17
+ [Marver::Summary::Story.new(@results)]
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,12 @@
1
+ module Marver
2
+ module Factory
3
+ module Summary
4
+ autoload :Character, 'marver/factories/summary/character'
5
+ autoload :Comic, 'marver/factories/summary/comic'
6
+ autoload :Story, 'marver/factories/summary/story'
7
+ autoload :Event, 'marver/factories/summary/event'
8
+ autoload :Serie, 'marver/factories/summary/serie'
9
+ autoload :Creator, 'marver/factories/summary/creator'
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,16 @@
1
+ module Marver
2
+ module Factory
3
+ class TextObject
4
+ def initialize text_objects
5
+ @text_objects = text_objects
6
+ end
7
+
8
+ def build
9
+ @text_objects.collect do |text_object|
10
+ Marver::TextObject.new(text_object)
11
+ end
12
+ end
13
+
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,15 @@
1
+ module Marver
2
+ module Factory
3
+ class Url
4
+ def initialize(urls)
5
+ @urls = urls
6
+ end
7
+
8
+ def build
9
+ @urls.collect do |url|
10
+ Marver::Url.new(url)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -1,11 +1,25 @@
1
- require './lib/marver.rb'
1
+ require './lib/marver/api/client'
2
+ require './lib/marver/data_container'
3
+ require './lib/marver/entities/character'
2
4
 
3
5
  module Marver
4
6
  class CharacterFinder
7
+ ALLOWED_PARAMS = [:name, :nameStartsWith, :modifiedSince, :comics, :series, :events, :stories]
8
+
9
+ ALLOWED_PARAMS.each do |param|
10
+ parameterized_param = StringHelper.parameterize(param.to_s)
11
+ define_method("find_by_#{parameterized_param}") do |value|
12
+ find({ "#{param}".to_sym => value })
13
+ end
14
+ end
15
+
16
+ private
17
+
5
18
  def find(options = {})
19
+ FinderParamFilter.filter!(options, ALLOWED_PARAMS)
6
20
  response = Marver::API::Client.new.get(:characters, options)
7
21
  results = Marver::DataContainer.new(response).results
8
- Marver::Character.build(results)
22
+ Marver::Factory::Character.new(results).build
9
23
  end
10
24
  end
11
25
  end
@@ -2,10 +2,26 @@ require './lib/marver.rb'
2
2
 
3
3
  module Marver
4
4
  class ComicFinder
5
+ ALLOWED_PARAMS = [:format, :formatType, :noVariants, :dateDescriptor,
6
+ :dateRange, :title, :titleStartsWith, :startYear, :issueNumber, :diamondCode,
7
+ :digitalId, :upc, :isbn, :ean, :issn, :hasDigitalIssue, :modifiedSince,
8
+ :creators, :characters, :series, :events, :stories, :sharedAppereances,
9
+ :collaborators]
10
+
11
+ ALLOWED_PARAMS.each do |param|
12
+ parameterized_param = StringHelper.parameterize(param.to_s)
13
+ define_method("find_by_#{parameterized_param}") do |value|
14
+ find({ "#{param}".to_sym => value })
15
+ end
16
+ end
17
+
18
+ private
19
+
5
20
  def find(options = {})
21
+ FinderParamFilter.filter!(options, ALLOWED_PARAMS)
6
22
  response = Marver::API::Client.new.get(:comics, options)
7
23
  results = Marver::DataContainer.new(response).results
8
- Marver::Comic.build(results)
24
+ Marver::Factory::Comic.new(results).build
9
25
  end
10
26
  end
11
27
  end
@@ -0,0 +1,26 @@
1
+ require './lib/marver/api/client'
2
+ require './lib/marver/data_container'
3
+ require './lib/marver/entities/creator'
4
+
5
+ module Marver
6
+ class CreatorFinder
7
+ ALLOWED_PARAMS = [:firstName, :middleName, :lastName, :suffix, :nameStartsWith,
8
+ :firstNameStartsWith, :middleNameStartsWith, :lastNameStartsWith, :modifiedSince,
9
+ :comics, :series, :events, :stories]
10
+
11
+ ALLOWED_PARAMS.each do |param|
12
+ parameterized_param = StringHelper.parameterize(param.to_s)
13
+ define_method("find_by_#{parameterized_param}") do |value|
14
+ find({ "#{param}".to_sym => value })
15
+ end
16
+ end
17
+
18
+ private
19
+ def find(conditions = {})
20
+ FinderParamFilter.filter!(conditions, ALLOWED_PARAMS)
21
+ response = Marver::API::Client.new.get(:creators, conditions)
22
+ results = Marver::DataContainer.new(response).results
23
+ Marver::Factory::Creator.new(results).build
24
+ end
25
+ end
26
+ end
@@ -1,11 +1,25 @@
1
- require './lib/marver.rb'
1
+ require './lib/marver/api/client'
2
+ require './lib/marver/data_container'
3
+ require './lib/marver/entities/event'
2
4
 
3
5
  module Marver
4
6
  class EventFinder
7
+ ALLOWED_PARAMS = [:name, :nameStartsWith, :modifiedSince, :creators, :characters,
8
+ :series, :comics, :stories, :orderBy, :limit, :offset]
9
+
10
+ ALLOWED_PARAMS.each do |param|
11
+ parameterized_param = StringHelper.parameterize(param.to_s)
12
+ define_method("find_by_#{parameterized_param}") do |value|
13
+ find({ "#{param}".to_sym => value })
14
+ end
15
+ end
16
+
17
+ private
5
18
  def find(options = {})
19
+ FinderParamFilter.filter!(options, ALLOWED_PARAMS)
6
20
  response = Marver::API::Client.new.get(:events, options)
7
21
  results = Marver::DataContainer.new(response).results
8
- Marver::Event.build(results)
22
+ Marver::Factory::Event.new(results).build
9
23
  end
10
24
  end
11
25
  end
@@ -1,11 +1,25 @@
1
- require './lib/marver.rb'
1
+ require './lib/marver/api/client'
2
+ require './lib/marver/data_container'
3
+ require './lib/marver/entities/serie'
2
4
 
3
5
  module Marver
4
6
  class SerieFinder
7
+ ALLOWED_PARAMS = [:name, :modifiedSince, :creators, :characters, :series,
8
+ :comics, :stories, :orderBy, :limit, :offset]
9
+
10
+ ALLOWED_PARAMS.each do |param|
11
+ parameterized_param = StringHelper.parameterize(param.to_s)
12
+ define_method("find_by_#{parameterized_param}") do |value|
13
+ find({ "#{param}".to_sym => value })
14
+ end
15
+ end
16
+
17
+ private
5
18
  def find(conditions = {})
19
+ FinderParamFilter.filter!(conditions, ALLOWED_PARAMS)
6
20
  response = Marver::API::Client.new.get(:series, conditions)
7
21
  results = Marver::DataContainer.new(response).results
8
- Marver::Serie.build(results)
22
+ Marver::Factory::Serie.new(results).build
9
23
  end
10
24
  end
11
25
  end
@@ -1,11 +1,24 @@
1
- require './lib/marver.rb'
1
+ require './lib/marver/api/client'
2
+ require './lib/marver/data_container'
3
+ require './lib/marver/entities/story'
2
4
 
3
5
  module Marver
4
6
  class StoryFinder
7
+ ALLOWED_PARAMS = [:modifiedSince, :comics, :series, :events, :creators, :characters]
8
+
9
+ ALLOWED_PARAMS.each do |param|
10
+ parameterized_param = StringHelper.parameterize(param.to_s)
11
+ define_method("find_by_#{parameterized_param}") do |value|
12
+ find({ "#{param}".to_sym => value })
13
+ end
14
+ end
15
+
16
+ private
5
17
  def find(conditions = {})
18
+ FinderParamFilter.filter!(conditions, ALLOWED_PARAMS)
6
19
  response = Marver::API::Client.new.get(:stories, conditions)
7
20
  results = Marver::DataContainer.new(response).results
8
- Marver::Story.build(results)
21
+ Marver::Factory::Story.new(results).build
9
22
  end
10
23
  end
11
24
  end
@@ -0,0 +1,25 @@
1
+ module Marver
2
+ class CharacterAttributesMapper
3
+
4
+ include Marver::Mappable
5
+
6
+ def initialize(results)
7
+ @results = results
8
+ end
9
+
10
+ def map
11
+ {
12
+ id: @results["id"],
13
+ name: @results["name"],
14
+ description: @results["description"],
15
+ resource_uri: @results["resourceURI"],
16
+ comics: comics,
17
+ stories: stories,
18
+ series: series,
19
+ events: events,
20
+ urls: urls,
21
+ thumbnail: thumbnail
22
+ }
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,40 @@
1
+ module Marver
2
+ class ComicAttributesMapper
3
+
4
+ include Marver::Mappable
5
+
6
+ def initialize(results)
7
+ @results = results
8
+ end
9
+
10
+ def map
11
+ {
12
+ title: @results['title'],
13
+ resource_uri: @results['resourceURI'],
14
+ id: @results['id'].to_i,
15
+ digital_id: @results['digitalId'],
16
+ issue_number: @results['issueNumber'],
17
+ variant_description: @results['variantDescription'],
18
+ description: @results['description'],
19
+ isbn: @results['isbn'],
20
+ upc: @results['upc'],
21
+ diamond_code: @results['diamondCode'],
22
+ ean: @results['ean'],
23
+ issn: @results['issn'],
24
+ format: @results['format'],
25
+ page_count: @results['pageCount'],
26
+ characters: characters,
27
+ stories: stories,
28
+ creators: creators,
29
+ events: events,
30
+ series: series,
31
+ urls: urls,
32
+ prices: prices,
33
+ images: images,
34
+ thumbnail: thumbnail,
35
+ text_objects: text_objects,
36
+ dates: dates
37
+ }
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,29 @@
1
+ module Marver
2
+ class CreatorAttributesMapper
3
+
4
+ include Marver::Mappable
5
+
6
+ def initialize(results)
7
+ @results = results
8
+ end
9
+
10
+ def map
11
+ {
12
+ id: @results["id"],
13
+ first_name: @results["firstName"],
14
+ last_name: @results["lastName"],
15
+ middle_name: @results["middleName"],
16
+ suffix: @results['suffix'],
17
+ full_name: @results['fullName'],
18
+ description: @results["description"],
19
+ resource_uri: @results["resourceURI"],
20
+ series: series,
21
+ stories: stories,
22
+ comics: comics,
23
+ events: events,
24
+ urls: urls,
25
+ thumbnail: thumbnail
26
+ }
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,29 @@
1
+ module Marver
2
+ class EventAttributesMapper
3
+
4
+ include Marver::Mappable
5
+
6
+ def initialize(results)
7
+ @results = results
8
+ end
9
+
10
+ def map
11
+ { title: @results['title'],
12
+ resource_uri: @results['resourceURI'],
13
+ description: @results['description'],
14
+ id: @results['id'].to_i,
15
+ next: next_event,
16
+ previous: previous_event,
17
+ creators: creators,
18
+ characters: characters,
19
+ series: series,
20
+ stories: stories,
21
+ comics: comics,
22
+ urls: urls,
23
+ thumbnail: thumbnail,
24
+ start: start_date,
25
+ end: end_date
26
+ }
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,86 @@
1
+ require './lib/marver.rb'
2
+
3
+ module Marver
4
+ module Mappable
5
+ private
6
+ def next_event
7
+ Marver::Factory::Summary::Event.new(@results['next']).build.first
8
+ end
9
+
10
+ def previous_event
11
+ Marver::Factory::Summary::Event.new(@results['previous']).build.first
12
+ end
13
+
14
+ def creators
15
+ Marver::Factory::Summary::Creator.new(@results['creators']['items']).build
16
+ end
17
+
18
+ def characters
19
+ Marver::Factory::Summary::Character.new(@results['characters']['items']).build
20
+ end
21
+
22
+ def series
23
+ Marver::Factory::Summary::Serie.new(@results['series']['items'] || @results['series']).build
24
+ end
25
+
26
+ def stories
27
+ Marver::Factory::Summary::Story.new(@results['stories']['items']).build
28
+ end
29
+
30
+ def comics
31
+ Marver::Factory::Summary::Comic.new(@results['comics']['items']).build
32
+ end
33
+
34
+ def urls
35
+ Marver::Factory::Url.new(@results['urls']).build
36
+ end
37
+
38
+ def thumbnail
39
+ Marver::Image.new(@results['thumbnail']) if @results['thumbnail']
40
+ end
41
+
42
+ def start_date
43
+ DateTime.parse(@results['start'])
44
+ end
45
+
46
+ def end_date
47
+ DateTime.parse(@results['end'])
48
+ end
49
+
50
+ def urls
51
+ Marver::Factory::Url.new(@results['urls']).build
52
+ end
53
+
54
+ def events
55
+ Marver::Factory::Summary::Event.new(@results['events']['items']).build
56
+ end
57
+
58
+ def text_objects
59
+ Marver::Factory::TextObject.new(@results['textObjects']).build
60
+ end
61
+
62
+ def dates
63
+ Marver::Factory::Date.new(@results['dates']).build
64
+ end
65
+
66
+ def prices
67
+ Marver::Factory::Price.new(@results['prices']).build
68
+ end
69
+
70
+ def next_serie
71
+ Marver::Factory::Summary::Serie.new(@results['next']).build
72
+ end
73
+
74
+ def prev_serie
75
+ Marver::Factory::Summary::Serie.new(@results['previous']).build
76
+ end
77
+
78
+ def original_issue
79
+ Marver::Factory::Summary::Comic.new(@results['originalIssue']).build.first
80
+ end
81
+
82
+ def images
83
+ Marver::Factory::Image.new(@results['images']).build
84
+ end
85
+ end
86
+ end