mores_marvel 0.1.0 → 0.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6b1215cbbacd7538805935b32f1798e0b13c2316
4
- data.tar.gz: 2381438dc747df997a19fe469ea84d392208184e
3
+ metadata.gz: 180b81e4535febfcc5090d2d355b3636de03e92a
4
+ data.tar.gz: 567394d2d4436a13f88abb104c4619dd3dd921ae
5
5
  SHA512:
6
- metadata.gz: 2753ec524b3fa9cd2704903bd62c31cf811e380f28839e98fab3d2752f0a7b0301390b0c65ffae046f135ab5e84ce5b8bb5981cf0e9dc652459a3aa4bb6e780e
7
- data.tar.gz: 1a6aecc6d777050820a21191dd40f5803be08c0ed176df302e5bd04c2a7dddce4b6c1bfcf68c7e7a598273f01d614b3b2e7b24796c399cd7c176e4fffd488984
6
+ metadata.gz: 8e2c456ef7cb26e6466f4308ae757f71a7084cde5bb810dc9452b1a1c7a5a99ec154ca40fd11a73dbf0bf24e8f9608e2286d26bf05ec4760553bc5789045a906
7
+ data.tar.gz: 79c6b63295100f16178f43addd90660834c8763749e5f35cfc4d54f3d1b0f6e4f9d752356749000cab9bd9669c030f13cdd93c027b8706c752e69f2d66364ecc
@@ -7,7 +7,6 @@ module MoresMarvel
7
7
  class Client
8
8
  include MoresMarvel::Resource
9
9
 
10
- class ServiceClientError < StandardError; end
11
10
  def initialize config
12
11
  @public_key = config[:public_key]
13
12
  @private_key = config[:private_key]
@@ -17,7 +16,11 @@ module MoresMarvel
17
16
  def get_resource(resource, filters = {})
18
17
  api_end_point = "#{@base_uri}#{resource}"
19
18
  url_params = filters.empty? ? security_hash : security_hash.merge(filters)
20
- restructure_response RestClient.get(api_end_point, { params: url_params })
19
+ begin
20
+ restructure_response RestClient.get(api_end_point, { params: url_params })
21
+ rescue RestClient::Conflict, RestClient::NotFound => errors
22
+ errors
23
+ end
21
24
  end
22
25
 
23
26
  private
@@ -2,27 +2,58 @@ require_relative 'client'
2
2
 
3
3
  module MoresMarvel
4
4
  MODELS = %w(characters creators comics events series stories).freeze
5
+ ORDERBY = %w(name modified -name -modified).freeze
5
6
  module Resource
6
- # will be removed soon.
7
- def get_characters
8
- get_resource('/v1/public/characters')
7
+ # fetch all records
8
+ def fetch_all(model, filters = {})
9
+ get_resource("/v1/public/#{model}", filters) if model_exists?(model) && validate_filters(filters)
9
10
  end
10
- # will be removed soon.
11
- def get_character id
12
- get_resource("/v1/public/characters/#{id}")
11
+ # fetch a record by id
12
+ def fetch_by_id(model, id, filters = {})
13
+ get_resource("/v1/public/#{model}/#{id}", filters) if model_exists?(model) && validate_filters(filters)
13
14
  end
14
15
 
15
- def fetch_all(model, filters = {})
16
- get_resource("/v1/public/#{model}", filters) if MODELS.include?(model)
16
+ def fetch_filtered_by(params, filters = {})
17
+ if validate_filters(filters)
18
+ if params[:primary_model].eql?params[:secondary_model]
19
+ puts "Primary_model & Secondary_model can't be same.\n"
20
+ elsif model_exists?(params[:primary_model]) && model_exists?(params[:secondary_model])
21
+ get_resource("/v1/public/#{params[:primary_model]}/#{params[:id]}/#{params[:secondary_model]}", filters)
22
+ end
23
+ end
17
24
  end
18
25
 
19
- def fetch_by_id(model, id, filters = {})
20
- get_resource("/v1/public/#{model}/#{id}", filters) if MODELS.include?(model)
26
+ private
27
+ def validate_filters(filters)
28
+ return filters if filters.empty?
29
+
30
+ unless filters.empty?
31
+ filters_error= []
32
+ filters.keys.each do |key|
33
+ case key
34
+ when :limit
35
+ filters_error.push({error_message: "Invalid limit (Min: 1 & Max: 100)"}) if (filters[:limit] < 0 || filters[:limit] > 100)
36
+ when :orderBy
37
+ filters_error.push({error_message: "Invalid or unrecognized ordering parameter."}) if !(ORDERBY.include?(filters[:orderBy]))
38
+ end
39
+ end
40
+
41
+ return filters_error if filters_error.empty?
42
+
43
+ unless filters_error.empty?
44
+ puts "\n Request failed with following errors"
45
+ filters_error.each_with_index { |errors, index| puts "#{index+1} : #{errors[:error_message]}" }
46
+ false
47
+ end
48
+ end
21
49
  end
22
50
 
23
- def fetch_filtered_by(model_1, id, model_2, filters = {})
24
- if MODELS.include?(model_1) && MODELS.include?(model_2) && !(model_1.eql?model_2)
25
- get_resource("/v1/public/#{model_1}/#{id}/#{model_2}", filters)
51
+ def model_exists? model
52
+ if MODELS.include?(model)
53
+ true
54
+ else
55
+ puts "Invalid resource \"#{model}\" : #{MODELS.join(', ')} are only resources supported by Marvel.\n"
56
+ false
26
57
  end
27
58
  end
28
59
  end
@@ -1,3 +1,3 @@
1
1
  module MoresMarvel
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mores_marvel
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Manoj more
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-05-20 00:00:00.000000000 Z
11
+ date: 2018-06-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler