crapi 0.1.0 → 0.1.1

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
  SHA256:
3
- metadata.gz: e07d4b09fda54c274d947572692e0ca65cffeea63cc0dddb7d007417e21db00f
4
- data.tar.gz: f7ac47fd70689d196806c773e3c68de646a57582ae53532d0393da1591e12b53
3
+ metadata.gz: 9b8a75306ad51c628ac62d5acfffa0ea9690e0cd530b46f1454a81e35eeef69c
4
+ data.tar.gz: 6fe28e880625a02743eede743da273095ba07f94d2263c335bd2d6eee46d41d8
5
5
  SHA512:
6
- metadata.gz: e60ac2a214b04c9ba04e873242f12524dea1c26e1e97f9583ae42c0090908cce490b457e41cc0ac6bacbf88956b195df9ca805102c03de0ff54d24e79625e0fa
7
- data.tar.gz: 58c452c73c69a95ce88567a0fc7d794c9920c085051db8f18450b87e93e82a23a7783794dca576c82a14c406a662cb6191f05f7e150d058947534e8b7295caf5
6
+ metadata.gz: d1272a0e4b796300a017d4e34a8d736319ef02631070722cafbd44fbdaab0ddbb3336d4969ba18e33ad342098397548266038c1724991c5d278278672fc60ceb
7
+ data.tar.gz: 6a98ec9905c69ca5d6e26bfd70c0a02d96a8f2ed68e2ecdaa353c474fcf7e38516ddb5641caef395d4368f14ecf08fad318b0d222995cd77f22b87a39cd54974
@@ -1,8 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- crapi (0.1.0)
5
- activesupport (~> 5.2)
4
+ crapi (0.1.1)
5
+ activesupport (~> 5.2.0)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
@@ -59,4 +59,4 @@ DEPENDENCIES
59
59
  rspec_junit_formatter (~> 0.3)
60
60
 
61
61
  BUNDLED WITH
62
- 1.16.1
62
+ 1.16.2
@@ -27,5 +27,5 @@ Gem::Specification.new do |spec|
27
27
  spec.add_development_dependency 'rspec', '~> 3.0'
28
28
  spec.add_development_dependency 'rspec_junit_formatter', '~> 0.3'
29
29
 
30
- spec.add_dependency 'activesupport', '~> 5.2'
30
+ spec.add_dependency 'activesupport', '~> 5.2.0'
31
31
  end
@@ -4,136 +4,138 @@ require 'openssl'
4
4
 
5
5
  require 'crapi/proxy'
6
6
 
7
- class Crapi::Client
8
- attr_accessor :default_headers
9
-
10
- JSON_CONTENT_TYPE = 'application/json'.freeze
11
- FORM_CONTENT_TYPE = 'application/x-www-form-urlencoded'.freeze
12
-
13
- def initialize(base_uri, opts = {})
14
- @base_uri = case base_uri
15
- when URI then base_uri
16
- when String then URI(base_uri)
17
- else raise Crapi::ArgumentError, %(Unexpected "base_url" type: #{base_url.class})
18
- end
19
-
20
- @proxy_host = opts[:proxy_host]
21
- @proxy_port = opts[:proxy_port]
22
- @proxy_username = opts[:proxy_username]
23
- @proxy_password = opts[:proxy_password]
7
+ module Crapi
8
+ class Client
9
+ attr_accessor :default_headers
10
+
11
+ JSON_CONTENT_TYPE = 'application/json'.freeze
12
+ FORM_CONTENT_TYPE = 'application/x-www-form-urlencoded'.freeze
13
+
14
+ def initialize(base_uri, opts = {})
15
+ @base_uri = case base_uri
16
+ when URI then base_uri
17
+ when String then URI(base_uri)
18
+ else raise ArgumentError, %(Unexpected "base_url" type: #{base_url.class})
19
+ end
20
+
21
+ @proxy_host = opts[:proxy_host]
22
+ @proxy_port = opts[:proxy_port]
23
+ @proxy_username = opts[:proxy_username]
24
+ @proxy_password = opts[:proxy_password]
25
+
26
+ @http = Net::HTTP.new(@base_uri.host, @base_uri.port,
27
+ @proxy_host, @proxy_port, @proxy_username, @proxy_password)
28
+ @http.use_ssl = (@base_uri.scheme == 'https')
29
+ @http.verify_mode = ::OpenSSL::SSL::VERIFY_NONE if opts[:insecure].present?
30
+
31
+ @default_headers = { 'Content-Type': JSON_CONTENT_TYPE }.with_indifferent_access
32
+ end
24
33
 
25
- @http = Net::HTTP.new(@base_uri.host, @base_uri.port,
26
- @proxy_host, @proxy_port, @proxy_username, @proxy_password)
27
- @http.use_ssl = (@base_uri.scheme == 'https')
28
- @http.verify_mode = ::OpenSSL::SSL::VERIFY_NONE if opts[:insecure].present?
34
+ def new_proxy(segment = '/', headers: nil)
35
+ Proxy.new(add: segment, to: self, headers: headers)
36
+ end
29
37
 
30
- @default_headers = { 'Content-Type': JSON_CONTENT_TYPE }.with_indifferent_access
31
- end
38
+ ## CRUD methods ...
32
39
 
33
- def new_proxy(segment = '/', headers: nil)
34
- Crapi::Proxy.new(add: segment, to: self, headers: headers)
35
- end
40
+ def delete(path, headers: {}, query: {})
41
+ headers = @default_headers.merge(headers)
36
42
 
37
- ## CRUD methods ...
43
+ response = @http.delete(full_path(path, query: query), headers)
44
+ ensure_success!(response)
45
+ parse_response(response)
46
+ end
38
47
 
39
- def delete(path, headers: {}, query: {})
40
- headers = @default_headers.merge(headers)
48
+ def get(path, headers: {}, query: {})
49
+ headers = @default_headers.merge(headers)
41
50
 
42
- response = @http.delete(full_path(path, query: query), headers)
43
- ensure_success!(response)
44
- parse_response(response)
45
- end
51
+ response = @http.get(full_path(path, query: query), headers)
52
+ ensure_success!(response)
53
+ parse_response(response)
54
+ end
46
55
 
47
- def get(path, headers: {}, query: {})
48
- headers = @default_headers.merge(headers)
56
+ def patch(path, headers: {}, query: {}, payload: {})
57
+ headers = @default_headers.merge(headers)
58
+ payload = format_payload(payload, as: headers[:'Content-Type'])
49
59
 
50
- response = @http.get(full_path(path, query: query), headers)
51
- ensure_success!(response)
52
- parse_response(response)
53
- end
54
-
55
- def patch(path, headers: {}, query: {}, payload: {})
56
- headers = @default_headers.merge(headers)
57
- payload = format_payload(payload, as: headers[:'Content-Type'])
60
+ response = @http.patch(full_path(path, query: query), payload, headers)
61
+ ensure_success!(response)
62
+ parse_response(response)
63
+ end
58
64
 
59
- response = @http.patch(full_path(path, query: query), payload, headers)
60
- ensure_success!(response)
61
- parse_response(response)
62
- end
65
+ def post(path, headers: {}, query: {}, payload: {})
66
+ headers = @default_headers.merge(headers)
67
+ payload = format_payload(payload, as: headers[:'Content-Type'])
63
68
 
64
- def post(path, headers: {}, query: {}, payload: {})
65
- headers = @default_headers.merge(headers)
66
- payload = format_payload(payload, as: headers[:'Content-Type'])
69
+ response = @http.post(full_path(path, query: query), payload, headers)
70
+ ensure_success!(response)
71
+ parse_response(response)
72
+ end
67
73
 
68
- response = @http.post(full_path(path, query: query), payload, headers)
69
- ensure_success!(response)
70
- parse_response(response)
71
- end
74
+ def put(path, headers: {}, query: {}, payload: {})
75
+ headers = @default_headers.merge(headers)
76
+ payload = format_payload(payload, as: headers[:'Content-Type'])
72
77
 
73
- def put(path, headers: {}, query: {}, payload: {})
74
- headers = @default_headers.merge(headers)
75
- payload = format_payload(payload, as: headers[:'Content-Type'])
78
+ response = @http.put(full_path(path, query: query), payload, headers)
79
+ ensure_success!(response)
80
+ parse_response(response)
81
+ end
76
82
 
77
- response = @http.put(full_path(path, query: query), payload, headers)
78
- ensure_success!(response)
79
- parse_response(response)
80
- end
83
+ ##
81
84
 
82
- ##
85
+ private
83
86
 
84
- private
87
+ ##
85
88
 
86
- ##
89
+ def full_path(path, query: {})
90
+ path = [@base_uri.path, path].map { |i| i.gsub(%r{^/|/$}, '') }.keep_if(&:present?)
91
+ path = "/#{path.join('/')}"
87
92
 
88
- def full_path(path, query: {})
89
- path = [@base_uri.path, path].map { |i| i.gsub(%r{^/|/$}, '') }.keep_if(&:present?)
90
- path = "/#{path.join('/')}"
93
+ if query.present?
94
+ path += case query
95
+ when Hash, Array then "?#{URI.encode_www_form(query)}"
96
+ when String then "?#{query}"
97
+ else raise ArgumentError, %(Unexpected "query" type: #{query.class})
98
+ end
99
+ end
91
100
 
92
- if query.present?
93
- path += case query
94
- when Hash, Array then "?#{URI.encode_www_form(query)}"
95
- when String then "?#{query}"
96
- else raise Crapi::ArgumentError, %(Unexpected "query" type: #{query.class})
97
- end
101
+ path
98
102
  end
99
103
 
100
- path
101
- end
102
-
103
- def ensure_success!(response)
104
- return if response.is_a? Net::HTTPSuccess
105
- raise(Crapi::BadHttpResponseError, "#{response.code} - #{response.message}")
106
- end
104
+ def ensure_success!(response)
105
+ return if response.is_a? Net::HTTPSuccess
106
+ raise BadHttpResponseError, "#{response.code} - #{response.message}"
107
+ end
107
108
 
108
- def format_payload(payload, as: JSON_CONTENT_TYPE)
109
- ## Non-Hash payloads are passed through as-is.
110
- return payload unless payload.is_a? Hash
111
-
112
- ## Massage Hash-like payloads into a suitable format.
113
- case as
114
- when JSON_CONTENT_TYPE
115
- JSON.generate(payload.as_json)
116
- when FORM_CONTENT_TYPE
117
- payload.to_query
118
- else
119
- payload.to_s
109
+ def format_payload(payload, as: JSON_CONTENT_TYPE)
110
+ ## Non-Hash payloads are passed through as-is.
111
+ return payload unless payload.is_a? Hash
112
+
113
+ ## Massage Hash-like payloads into a suitable format.
114
+ case as
115
+ when JSON_CONTENT_TYPE
116
+ JSON.generate(payload.as_json)
117
+ when FORM_CONTENT_TYPE
118
+ payload.to_query
119
+ else
120
+ payload.to_s
121
+ end
120
122
  end
121
- end
122
123
 
123
- def parse_response(response)
124
- case response.content_type
125
- when JSON_CONTENT_TYPE
126
- JSON.parse(response.body, quirks_mode: true, symbolize_names: true)
127
- else
128
- response.body
124
+ def parse_response(response)
125
+ case response.content_type
126
+ when JSON_CONTENT_TYPE
127
+ JSON.parse(response.body, quirks_mode: true, symbolize_names: true)
128
+ else
129
+ response.body
130
+ end
129
131
  end
130
132
  end
131
- end
132
133
 
133
- ## Net::HTTP needs a shortcut instance method for PUT calls like it does for GET/DELETE/PATCH/POST.
134
- ##
135
- class Net::HTTP
136
- def put(path, data, initheader = nil, dest = nil, &block)
137
- send_entity(path, data, initheader, dest, Put, &block)
134
+ ## Net::HTTP needs a shortcut instance method for PUT calls like it does for GET/DELETE/PATCH/POST.
135
+ ##
136
+ class Net::HTTP
137
+ def put(path, data, initheader = nil, dest = nil, &block)
138
+ send_entity(path, data, initheader, dest, Put, &block)
139
+ end
138
140
  end
139
141
  end
@@ -1,42 +1,44 @@
1
1
  require 'active_support/all'
2
2
 
3
- class Crapi::Proxy
4
- attr_accessor :default_headers
5
-
6
- def initialize(add:, to:, headers: nil)
7
- @parent = to
8
- @segment = add
9
- @default_headers = (headers || {}).with_indifferent_access
10
- end
11
-
12
- def new_proxy(segment = '/', headers: nil)
13
- Crapi::Proxy.new(add: segment, to: self, headers: headers)
14
- end
15
-
16
- ## CRUD methods ...
17
-
18
- def delete(path, headers: {}, query: {})
19
- @parent.delete("/#{@segment}/#{path}".gsub(%r{/+}, '/'),
20
- headers: @default_headers.merge(headers), query: query)
21
- end
22
-
23
- def get(path, headers: {}, query: {})
24
- @parent.get("/#{@segment}/#{path}".gsub(%r{/+}, '/'),
25
- headers: @default_headers.merge(headers), query: query)
26
- end
27
-
28
- def patch(path, headers: {}, query: {}, payload: {})
29
- @parent.patch("/#{@segment}/#{path}".gsub(%r{/+}, '/'),
30
- heades: @default_headers.merge(headers), query: query, payload: payload)
31
- end
32
-
33
- def post(path, headers: {}, query: {}, payload: {})
34
- @parent.post("/#{@segment}/#{path}".gsub(%r{/+}, '/'),
35
- headers: @default_headers.merge(headers), query: query, payload: payload)
36
- end
37
-
38
- def put(path, headers: {}, query: {}, payload: {})
39
- @parent.put("/#{@segment}/#{path}".gsub(%r{/+}, '/'),
40
- headers: @default_headers.merge(headers), query: query, payload: payload)
3
+ module Crapi
4
+ class Proxy
5
+ attr_accessor :default_headers
6
+
7
+ def initialize(add:, to:, headers: nil)
8
+ @parent = to
9
+ @segment = add
10
+ @default_headers = (headers || {}).with_indifferent_access
11
+ end
12
+
13
+ def new_proxy(segment = '/', headers: nil)
14
+ Proxy.new(add: segment, to: self, headers: headers)
15
+ end
16
+
17
+ ## CRUD methods ...
18
+
19
+ def delete(path, headers: {}, query: {})
20
+ @parent.delete("/#{@segment}/#{path}".gsub(%r{/+}, '/'),
21
+ headers: @default_headers.merge(headers), query: query)
22
+ end
23
+
24
+ def get(path, headers: {}, query: {})
25
+ @parent.get("/#{@segment}/#{path}".gsub(%r{/+}, '/'),
26
+ headers: @default_headers.merge(headers), query: query)
27
+ end
28
+
29
+ def patch(path, headers: {}, query: {}, payload: {})
30
+ @parent.patch("/#{@segment}/#{path}".gsub(%r{/+}, '/'),
31
+ heades: @default_headers.merge(headers), query: query, payload: payload)
32
+ end
33
+
34
+ def post(path, headers: {}, query: {}, payload: {})
35
+ @parent.post("/#{@segment}/#{path}".gsub(%r{/+}, '/'),
36
+ headers: @default_headers.merge(headers), query: query, payload: payload)
37
+ end
38
+
39
+ def put(path, headers: {}, query: {}, payload: {})
40
+ @parent.put("/#{@segment}/#{path}".gsub(%r{/+}, '/'),
41
+ headers: @default_headers.merge(headers), query: query, payload: payload)
42
+ end
41
43
  end
42
44
  end
@@ -1,3 +1,3 @@
1
1
  module Crapi
2
- VERSION = '0.1.0'.freeze
2
+ VERSION = '0.1.1'.freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: crapi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nestor Custodio
@@ -100,14 +100,14 @@ dependencies:
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '5.2'
103
+ version: 5.2.0
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '5.2'
110
+ version: 5.2.0
111
111
  description:
112
112
  email:
113
113
  - sakimorix@gmail.com