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.
@@ -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
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module EacRest
6
+ require_sub __FILE__
7
+ end
@@ -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,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module EacRest
6
+ class Entity
7
+ enable_simple_cache
8
+ common_constructor :instance, :data
9
+ end
10
+ 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
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EacRest
4
+ VERSION = '0.1.0'
5
+ 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: []