pipeline_deals_api 0.1.4 → 0.1.5
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/pipeline_deals_api/client.rb +52 -0
- data/lib/pipeline_deals_api/clients/deal.rb +20 -0
- data/lib/pipeline_deals_api/clients/helper.rb +12 -0
- data/lib/pipeline_deals_api/configuration.rb +6 -0
- data/lib/pipeline_deals_api/credentials.rb +14 -0
- data/lib/pipeline_deals_api/http_client.rb +145 -0
- data/lib/pipeline_deals_api/version.rb +1 -1
- data/lib/pipeline_deals_api.rb +5 -2
- data/pipeline_deals_api.gemspec +1 -0
- metadata +21 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1a0369766e73baf651ae94addd30794c1a18a0742a24c20110d1036742eb3c57
|
4
|
+
data.tar.gz: e657b46c2e3a7ea0d1570b8111f1b3a22793762b6e1350967db7798ebfa4f0c1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bf26366c15922b70c75269d1c5d67b45b2fa8224824a174329891ea467f6b8303d6f826157375d71d1109db2d4b9d923e20eec4849d255f17ec65442fe80b051
|
7
|
+
data.tar.gz: c5abf799a2ef17262a4508eaae8bd4460f45c83261a60ae01f357ba114a665105b2f3befa93e721cd3532a57a21de7c832701f3902b82f88cb0fd7faf3b62155
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module PipelineDealsApi
|
2
|
+
# NOTE(asinner): The Client class is responsible for giving you an object
|
3
|
+
# for communicating with the API.
|
4
|
+
#
|
5
|
+
# To create a new client call the Client class constructor and pass your
|
6
|
+
# credentials using named parameters:
|
7
|
+
#
|
8
|
+
# ```
|
9
|
+
# client = PipelineDealsApi::Client.new(api_key: 'your-api-key')
|
10
|
+
# ```
|
11
|
+
# If you have an `app_key` token you may also pass that in addition to your
|
12
|
+
# `api_key`
|
13
|
+
#
|
14
|
+
# ```
|
15
|
+
# client = PipelineDealsApi::Client.new(
|
16
|
+
# api_key: 'your-api-key',
|
17
|
+
# app_key: 'your-app-key'
|
18
|
+
# )
|
19
|
+
# ```
|
20
|
+
class Client
|
21
|
+
attr_reader :credentials
|
22
|
+
|
23
|
+
def initialize(api_key:, app_key: nil)
|
24
|
+
@credentials = Credentials.new(
|
25
|
+
api_key: api_key,
|
26
|
+
app_key: app_key
|
27
|
+
)
|
28
|
+
init_config
|
29
|
+
init_clients
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
attr_reader :http_client, :deal_client
|
35
|
+
|
36
|
+
def init_clients
|
37
|
+
@deal_client = Cients::Deal.new(
|
38
|
+
http_client: http_client
|
39
|
+
)
|
40
|
+
end
|
41
|
+
|
42
|
+
def init_config
|
43
|
+
init_http_client
|
44
|
+
end
|
45
|
+
|
46
|
+
def init_http_client
|
47
|
+
@http_client ||= HttpClient.new(
|
48
|
+
credentials: @credentials
|
49
|
+
)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module PipelineDealsApi
|
2
|
+
module Clients
|
3
|
+
class Deal
|
4
|
+
include Helper
|
5
|
+
|
6
|
+
def initialize(http_client:,)
|
7
|
+
@http_client = http_client
|
8
|
+
end
|
9
|
+
|
10
|
+
def create_deal(body)
|
11
|
+
body = wrap_body(body)
|
12
|
+
http_client.post('/deals.json', body)
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
attr_reader :http_client
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,145 @@
|
|
1
|
+
module PipelineDealsApi
|
2
|
+
class HttpClient
|
3
|
+
def initialize(credentials:)
|
4
|
+
@credentials = credentials
|
5
|
+
end
|
6
|
+
|
7
|
+
def get(url, body = {}, headers = {})
|
8
|
+
http_request(:get, url, body, headers)
|
9
|
+
end
|
10
|
+
|
11
|
+
def put(url, body = {}, headers = {})
|
12
|
+
http_request(:put, url, body, headers)
|
13
|
+
end
|
14
|
+
|
15
|
+
def post(url, body = {}, headers = {})
|
16
|
+
http_request(:post, url, body, headers)
|
17
|
+
end
|
18
|
+
|
19
|
+
def delete(url, body = {}, headers = {})
|
20
|
+
http_request(:delete, url, body, headers)
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
attr_reader :http_client
|
26
|
+
|
27
|
+
def http_request(method, url = '', body = {}, headers = {})
|
28
|
+
body = with_default_body(body).to_json
|
29
|
+
headers = with_default_headers(headers)
|
30
|
+
resp = RestClient.send(method, url, body, headers)
|
31
|
+
handle_response(Response.new(resp))
|
32
|
+
rescue RestClient::ExceptionWithResponse => e
|
33
|
+
resp = Response.new(e.response)
|
34
|
+
handle_response(resp)
|
35
|
+
end
|
36
|
+
|
37
|
+
def handle_response(resp)
|
38
|
+
return resp.json if resp.code < 400
|
39
|
+
case resp.code
|
40
|
+
when 400
|
41
|
+
raise BadRequestError.new('400 - Bad Request', resp)
|
42
|
+
when 401
|
43
|
+
raise UnauthorizedError.new('401 - Unauthorized', resp)
|
44
|
+
when 402
|
45
|
+
raise PaymentRequiredError.new('402 - Payment Required', resp)
|
46
|
+
when 403
|
47
|
+
when 404
|
48
|
+
raise NotFoundError.new('404 - Not Found', resp)
|
49
|
+
when 405
|
50
|
+
raise MethodNotAllowed.new('405 - Method Not Allowed', resp)
|
51
|
+
when 408
|
52
|
+
raise RequestTimeoutError.new('408 - Request Timeout', resp)
|
53
|
+
when 409
|
54
|
+
raise ConflictError.new('409 - Conflict', resp)
|
55
|
+
when 414
|
56
|
+
raise RequestURITooLongError.new('414 - Request URI Too Long', resp)
|
57
|
+
when 422
|
58
|
+
raise UnprocessableEntityError.new('422 - Unprocessable Entity', resp)
|
59
|
+
when 429
|
60
|
+
raise TooManyRequestsError.new('429 - Too Many Requests', resp)
|
61
|
+
when 500
|
62
|
+
raise InternalServerError.new('500 - Internal Server', resp)
|
63
|
+
when 502
|
64
|
+
raise BadGatewayError.new('502 - Bad Gateway', resp)
|
65
|
+
when 503
|
66
|
+
raise BadGatewayError.new('503 - Service Unavailable', resp)
|
67
|
+
when 504
|
68
|
+
raise GatewayTimeoutError.new('504 - Gateway Timeout', resp)
|
69
|
+
else
|
70
|
+
raise ClientError.new("#{resp.code} - Client Error", resp) if resp.code >= 400 && resp.code < 500
|
71
|
+
raise ServerError.new("#{resp.code} - Server Error", resp) if resp.code >= 500 && resp.code < 600
|
72
|
+
raise UnknownError.new("#{resp.code} - Unhandled Response error", resp)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def with_default_headers(headers = {})
|
77
|
+
defaults = {
|
78
|
+
content_type: :json,
|
79
|
+
accept: :json
|
80
|
+
}
|
81
|
+
|
82
|
+
defaults.merge(headers)
|
83
|
+
end
|
84
|
+
|
85
|
+
def with_default_body(body = {})
|
86
|
+
defaults = {
|
87
|
+
api_key: credentials.api_key,
|
88
|
+
app_key: credentials.app_key
|
89
|
+
}
|
90
|
+
|
91
|
+
defaults.merge(body)
|
92
|
+
end
|
93
|
+
|
94
|
+
class Response
|
95
|
+
def initialize(response)
|
96
|
+
@response = response
|
97
|
+
end
|
98
|
+
|
99
|
+
def code
|
100
|
+
@response.code
|
101
|
+
end
|
102
|
+
|
103
|
+
def body
|
104
|
+
@response.body
|
105
|
+
end
|
106
|
+
|
107
|
+
def json
|
108
|
+
@json ||= JSON.parse(response.body)
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
class ResponseError < StandardError
|
113
|
+
attr_reader :response
|
114
|
+
|
115
|
+
def initialize(msg = '', response)
|
116
|
+
@response = response
|
117
|
+
super(msg)
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
# 4xx error codes
|
122
|
+
class BadRequestError < ResponseError; end
|
123
|
+
class UnauthorizedError < ResponseError; end
|
124
|
+
class PaymentRequiredError < ResponseError; end
|
125
|
+
class ForbiddenError < ResponseError; end
|
126
|
+
class NotFoundError < ResponseError; end
|
127
|
+
class MethodNotAllowed < ResponseError; end
|
128
|
+
class RequestTimeoutError < ResponseError; end
|
129
|
+
class ConflictError < ResponseError; end
|
130
|
+
class RequestURITooLongError < ResponseError; end
|
131
|
+
class UnprocessableEntityError < ResponseError; end
|
132
|
+
class TooManyRequestsError < ResponseError; end
|
133
|
+
class ClientError < ResponseError; end # Catch-all
|
134
|
+
|
135
|
+
# 5xx error codes
|
136
|
+
class InternalServerError < ResponseError; end
|
137
|
+
class BadGatewayError < ResponseError; end
|
138
|
+
class ServiceUnavailableError < ResponseError; end
|
139
|
+
class GatewayTimeoutError < ResponseError; end
|
140
|
+
class ServerError < ResponseError; end # Catch-all
|
141
|
+
|
142
|
+
# Catch-all for catch-all
|
143
|
+
class UnknownError < ResponseError; end
|
144
|
+
end
|
145
|
+
end
|
data/lib/pipeline_deals_api.rb
CHANGED
data/pipeline_deals_api.gemspec
CHANGED
@@ -15,6 +15,7 @@ Gem::Specification.new do |spec|
|
|
15
15
|
spec.bindir = "exe"
|
16
16
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
17
17
|
spec.require_paths = ["lib"]
|
18
|
+
spec.add_runtime_dependency "rest-client"
|
18
19
|
spec.add_development_dependency "bundler", "~> 1.16"
|
19
20
|
spec.add_development_dependency "rake", "~> 10.0"
|
20
21
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pipeline_deals_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Sinner
|
@@ -10,6 +10,20 @@ bindir: exe
|
|
10
10
|
cert_chain: []
|
11
11
|
date: 2018-05-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rest-client
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: bundler
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -52,6 +66,12 @@ files:
|
|
52
66
|
- bin/console
|
53
67
|
- bin/setup
|
54
68
|
- lib/pipeline_deals_api.rb
|
69
|
+
- lib/pipeline_deals_api/client.rb
|
70
|
+
- lib/pipeline_deals_api/clients/deal.rb
|
71
|
+
- lib/pipeline_deals_api/clients/helper.rb
|
72
|
+
- lib/pipeline_deals_api/configuration.rb
|
73
|
+
- lib/pipeline_deals_api/credentials.rb
|
74
|
+
- lib/pipeline_deals_api/http_client.rb
|
55
75
|
- lib/pipeline_deals_api/version.rb
|
56
76
|
- pipeline_deals_api.gemspec
|
57
77
|
homepage:
|