eac_rest 0.1.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 +7 -0
- data/lib/eac_rest.rb +7 -0
- data/lib/eac_rest/api.rb +33 -0
- data/lib/eac_rest/entity.rb +10 -0
- data/lib/eac_rest/request.rb +41 -0
- data/lib/eac_rest/response.rb +72 -0
- data/lib/eac_rest/version.rb +5 -0
- metadata +81 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 0fd1d42c30c2b2eb6a4ba354738b91b1571e2d6d5a3d49e2b735e3908f0c37e3
|
4
|
+
data.tar.gz: 35d67e9b184559ff489a80309fd7e8cd9c8de38d01b58924244a50c18d8acff8
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c49a47e1b7aacb386e5d16184fffd6dc2b8218e1778f5b258ed8bfd1fe109be9ea3f9eb37fec09f9063e60964dfb1ce8c0e36a4e219026540038946352fd99b1
|
7
|
+
data.tar.gz: 680621128f7ea7b6323088bf2a917c30f16ac39f1387e8fd15fc9e5f7da37998184bb1f02156a2da6ba9c6b97a6b1f4e4fb9c6340b51e411da586ea4cb91321f
|
data/lib/eac_rest.rb
ADDED
data/lib/eac_rest/api.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'curb'
|
4
|
+
require 'eac_ruby_utils/core_ext'
|
5
|
+
|
6
|
+
module EacRest
|
7
|
+
# Abstract methods
|
8
|
+
# * self.issue_get_url_suffix(provider_issue_id)
|
9
|
+
class Api
|
10
|
+
require_sub __FILE__, include_modules: true
|
11
|
+
common_constructor :root_url, :username, :password, default: [nil, nil]
|
12
|
+
|
13
|
+
def request(service_url_suffix, headers = {}, &body_data_proc)
|
14
|
+
r = ::EacRest::Request.new(build_service_url(service_url_suffix),
|
15
|
+
body_data_proc)
|
16
|
+
headers.each { |name, value| r.header(name, value) }
|
17
|
+
r.autenticate(username, password) if username.present?
|
18
|
+
r
|
19
|
+
end
|
20
|
+
|
21
|
+
def request_json(service_url_suffix, headers = {}, &body_data_proc)
|
22
|
+
request(service_url_suffix, headers.merge('Accept' => 'application/json'), &body_data_proc)
|
23
|
+
end
|
24
|
+
|
25
|
+
def build_service_url(suffix)
|
26
|
+
s = ::Addressable::URI.parse(suffix)
|
27
|
+
r = ::Addressable::URI.parse(root_url)
|
28
|
+
r.path += s.path
|
29
|
+
r.query_values = r.query_values.if_present({}).merge(s.query_values.if_present({}))
|
30
|
+
r.to_s
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
4
|
+
require 'ostruct'
|
5
|
+
|
6
|
+
module EacRest
|
7
|
+
class Request
|
8
|
+
common_constructor :url, :body_data_proc, default: [nil]
|
9
|
+
|
10
|
+
def autenticate(username, password)
|
11
|
+
self.auth = ::OpenStruct.new(username: username, password: password)
|
12
|
+
end
|
13
|
+
|
14
|
+
def header(name, value)
|
15
|
+
headers[name.to_s] = value
|
16
|
+
end
|
17
|
+
|
18
|
+
def response
|
19
|
+
::EacRest::Response.new(build_curl, body_data_proc)
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
attr_accessor :auth
|
25
|
+
|
26
|
+
def build_curl
|
27
|
+
r = ::Curl::Easy.new(url)
|
28
|
+
auth.if_present do |a|
|
29
|
+
r.http_auth_types = :basic
|
30
|
+
r.username = a.username
|
31
|
+
r.password = a.password
|
32
|
+
end
|
33
|
+
r.headers.merge!(headers)
|
34
|
+
r
|
35
|
+
end
|
36
|
+
|
37
|
+
def headers
|
38
|
+
@headers ||= {}
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'active_support/core_ext/hash/conversions'
|
4
|
+
require 'eac_ruby_utils/core_ext'
|
5
|
+
require 'json'
|
6
|
+
|
7
|
+
module EacRest
|
8
|
+
class Response < ::StandardError
|
9
|
+
common_constructor :curl, :body_data_proc
|
10
|
+
|
11
|
+
def body_data
|
12
|
+
r = performed_curl.headers['Accept'].if_present(body_str) do |v|
|
13
|
+
method_name = "body_data_from_#{v.parameterize.underscore}"
|
14
|
+
respond_to?(method_name) ? send(method_name) : body_str
|
15
|
+
end
|
16
|
+
r = body_data_proc.call(r) if body_data_proc.present?
|
17
|
+
r
|
18
|
+
end
|
19
|
+
|
20
|
+
def body_data_or_raise
|
21
|
+
raise_unless_200
|
22
|
+
|
23
|
+
body_data
|
24
|
+
end
|
25
|
+
|
26
|
+
delegate :body_str, :headers, to: :performed_curl
|
27
|
+
|
28
|
+
def body_str_or_raise
|
29
|
+
raise_unless_200
|
30
|
+
|
31
|
+
body_str
|
32
|
+
end
|
33
|
+
|
34
|
+
def raise_unless_200
|
35
|
+
return nil if status == 200
|
36
|
+
|
37
|
+
raise self
|
38
|
+
end
|
39
|
+
|
40
|
+
def status
|
41
|
+
performed_curl.status.to_i
|
42
|
+
end
|
43
|
+
|
44
|
+
delegate :url, to: :curl
|
45
|
+
|
46
|
+
def to_s
|
47
|
+
"URL: #{url}\nStatus: #{status}\nBody:\n\n#{body_str}"
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
51
|
+
|
52
|
+
def body_data_from_application_json
|
53
|
+
::JSON.parse(body_str)
|
54
|
+
end
|
55
|
+
|
56
|
+
def body_data_from_application_xml
|
57
|
+
Hash.from_xml(body_str)
|
58
|
+
end
|
59
|
+
|
60
|
+
def perform
|
61
|
+
@perform ||= begin
|
62
|
+
curl.perform || raise("CURL perform failed for #{url}")
|
63
|
+
true
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def performed_curl
|
68
|
+
perform
|
69
|
+
curl
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
metadata
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: eac_rest
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Eduardo H. Bogoni
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-10-18 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: eac_ruby_utils
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.46'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0.46'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: eac_ruby_gem_support
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0.1'
|
34
|
+
- - ">="
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: 0.1.2
|
37
|
+
type: :development
|
38
|
+
prerelease: false
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - "~>"
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0.1'
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 0.1.2
|
47
|
+
description:
|
48
|
+
email:
|
49
|
+
executables: []
|
50
|
+
extensions: []
|
51
|
+
extra_rdoc_files: []
|
52
|
+
files:
|
53
|
+
- lib/eac_rest.rb
|
54
|
+
- lib/eac_rest/api.rb
|
55
|
+
- lib/eac_rest/entity.rb
|
56
|
+
- lib/eac_rest/request.rb
|
57
|
+
- lib/eac_rest/response.rb
|
58
|
+
- lib/eac_rest/version.rb
|
59
|
+
homepage:
|
60
|
+
licenses: []
|
61
|
+
metadata: {}
|
62
|
+
post_install_message:
|
63
|
+
rdoc_options: []
|
64
|
+
require_paths:
|
65
|
+
- lib
|
66
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '0'
|
71
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
requirements: []
|
77
|
+
rubygems_version: 3.0.8
|
78
|
+
signing_key:
|
79
|
+
specification_version: 4
|
80
|
+
summary: A REST helper for Ruby.
|
81
|
+
test_files: []
|