crapi 0.1.0 → 0.1.1

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
  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