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 +4 -4
- data/lib/mores_marvel/client.rb +5 -2
- data/lib/mores_marvel/resource.rb +44 -13
- data/lib/mores_marvel/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 180b81e4535febfcc5090d2d355b3636de03e92a
|
|
4
|
+
data.tar.gz: 567394d2d4436a13f88abb104c4619dd3dd921ae
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 8e2c456ef7cb26e6466f4308ae757f71a7084cde5bb810dc9452b1a1c7a5a99ec154ca40fd11a73dbf0bf24e8f9608e2286d26bf05ec4760553bc5789045a906
|
|
7
|
+
data.tar.gz: 79c6b63295100f16178f43addd90660834c8763749e5f35cfc4d54f3d1b0f6e4f9d752356749000cab9bd9669c030f13cdd93c027b8706c752e69f2d66364ecc
|
data/lib/mores_marvel/client.rb
CHANGED
|
@@ -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
|
-
|
|
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
|
-
#
|
|
7
|
-
def
|
|
8
|
-
get_resource(
|
|
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
|
-
#
|
|
11
|
-
def
|
|
12
|
-
get_resource("/v1/public
|
|
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
|
|
16
|
-
|
|
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
|
-
|
|
20
|
-
|
|
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
|
|
24
|
-
if MODELS.include?(
|
|
25
|
-
|
|
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
|
data/lib/mores_marvel/version.rb
CHANGED
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.
|
|
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-
|
|
11
|
+
date: 2018-06-21 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|