mores_marvel 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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