eac_rest 0.1.0 → 0.3.2

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: 0fd1d42c30c2b2eb6a4ba354738b91b1571e2d6d5a3d49e2b735e3908f0c37e3
4
- data.tar.gz: 35d67e9b184559ff489a80309fd7e8cd9c8de38d01b58924244a50c18d8acff8
3
+ metadata.gz: 67ceadfe92a9a6ec7b1916876411ac574b3638d8aa093bc58e55a90653e2a747
4
+ data.tar.gz: 7d418c2dca5f0504224baef19fcbe63eef741c44fd9e95ff7b1d6dce5be21ec5
5
5
  SHA512:
6
- metadata.gz: c49a47e1b7aacb386e5d16184fffd6dc2b8218e1778f5b258ed8bfd1fe109be9ea3f9eb37fec09f9063e60964dfb1ce8c0e36a4e219026540038946352fd99b1
7
- data.tar.gz: 680621128f7ea7b6323088bf2a917c30f16ac39f1387e8fd15fc9e5f7da37998184bb1f02156a2da6ba9c6b97a6b1f4e4fb9c6340b51e411da586ea4cb91321f
6
+ metadata.gz: 4ff384bfe7467ba2fd449058ea40775d283b43bb2a507de97b2dba01fb7db84e87d3ee4c27e6a904e95650c9f6f69160cbe4f2797c6499dfcc4651834f54c742
7
+ data.tar.gz: cbb27118906ba9d5ba1fe0a7c27c9c7354731d0eea45d0f6ea9d45729a80a653d579ad8bb61df598230e7fa7b26865c36b6307d7fdf111ff9fbc58f62081403e
data/lib/eac_rest/api.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'curb'
3
+ require 'eac_rest/request'
4
4
  require 'eac_ruby_utils/core_ext'
5
5
 
6
6
  module EacRest
@@ -13,20 +13,25 @@ module EacRest
13
13
  def request(service_url_suffix, headers = {}, &body_data_proc)
14
14
  r = ::EacRest::Request.new(build_service_url(service_url_suffix),
15
15
  body_data_proc)
16
- headers.each { |name, value| r.header(name, value) }
17
- r.autenticate(username, password) if username.present?
16
+ headers.each { |name, value| r = r.header(name, value) }
17
+ r = r.autenticate(username, password) if username.present?
18
18
  r
19
19
  end
20
20
 
21
21
  def request_json(service_url_suffix, headers = {}, &body_data_proc)
22
- request(service_url_suffix, headers.merge('Accept' => 'application/json'), &body_data_proc)
22
+ request(service_url_suffix, headers.merge('Accept' => 'application/json')) do |body_data|
23
+ r = ::JSON.parse(body_data)
24
+ r = body_data_proc.call(r) if body_data_proc
25
+ r
26
+ end
23
27
  end
24
28
 
25
29
  def build_service_url(suffix)
26
30
  s = ::Addressable::URI.parse(suffix)
27
31
  r = ::Addressable::URI.parse(root_url)
28
32
  r.path += s.path
29
- r.query_values = r.query_values.if_present({}).merge(s.query_values.if_present({}))
33
+ r.query_values = r.query_values(::Array).if_present([]) +
34
+ s.query_values(::Array).if_present([])
30
35
  r.to_s
31
36
  end
32
37
  end
@@ -5,6 +5,12 @@ require 'eac_ruby_utils/core_ext'
5
5
  module EacRest
6
6
  class Entity
7
7
  enable_simple_cache
8
- common_constructor :instance, :data
8
+ common_constructor :api, :data
9
+
10
+ class << self
11
+ def from_array_data(api, array_data, *args)
12
+ array_data.map { |item_data| new(api, item_data, *args) }
13
+ end
14
+ end
9
15
  end
10
16
  end
@@ -1,18 +1,31 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'curb'
4
+ require 'eac_rest/response'
3
5
  require 'eac_ruby_utils/core_ext'
4
6
  require 'ostruct'
5
7
 
6
8
  module EacRest
7
9
  class Request
10
+ COMMON_MODIFIERS = %w[auth body_data verb].freeze
11
+ HASH_MODIFIERS = %w[header].freeze
12
+ MODIFIERS = COMMON_MODIFIERS + HASH_MODIFIERS.map(&:pluralize)
13
+
14
+ enable_immutable
15
+ immutable_accessor(*COMMON_MODIFIERS, type: :common)
16
+ immutable_accessor(*HASH_MODIFIERS, type: :hash)
17
+
18
+ enable_listable
19
+ lists.add_symbol :verb, :get, :delete, :options, :post, :put
20
+
8
21
  common_constructor :url, :body_data_proc, default: [nil]
9
22
 
10
23
  def autenticate(username, password)
11
- self.auth = ::OpenStruct.new(username: username, password: password)
24
+ auth(::OpenStruct.new(username: username, password: password))
12
25
  end
13
26
 
14
- def header(name, value)
15
- headers[name.to_s] = value
27
+ def immutable_constructor_args
28
+ [url, body_data_proc]
16
29
  end
17
30
 
18
31
  def response
@@ -21,21 +34,41 @@ module EacRest
21
34
 
22
35
  private
23
36
 
24
- attr_accessor :auth
25
-
26
37
  def build_curl
27
38
  r = ::Curl::Easy.new(url)
39
+ MODIFIERS.each { |suffix| send("build_curl_#{suffix}", r) }
40
+ r
41
+ end
42
+
43
+ def build_curl_auth(curl)
28
44
  auth.if_present do |a|
29
- r.http_auth_types = :basic
30
- r.username = a.username
31
- r.password = a.password
45
+ curl.http_auth_types = :basic
46
+ curl.username = a.username
47
+ curl.password = a.password
32
48
  end
33
- r.headers.merge!(headers)
34
- r
35
49
  end
36
50
 
37
- def headers
38
- @headers ||= {}
51
+ def build_curl_body_data(curl)
52
+ www_form_body_data_encoded.if_present { |v| curl.post_body = v }
53
+ end
54
+
55
+ def build_curl_headers(curl)
56
+ curl.headers.merge!(headers)
57
+ end
58
+
59
+ def build_curl_verb(curl)
60
+ curl.set(
61
+ :customrequest,
62
+ verb.if_present(VERB_GET) { |v| self.class.lists.verb.value_validate!(v) }.to_s.upcase
63
+ )
64
+ end
65
+
66
+ def www_form_body_data_encoded
67
+ body_data.if_present do |v|
68
+ v = v.map { |k, vv| [k, vv] } if v.is_a?(::Hash)
69
+ v = URI.encode_www_form(v) if v.is_a?(::Array)
70
+ v.to_s
71
+ end
39
72
  end
40
73
  end
41
74
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EacRest
4
- VERSION = '0.1.0'
4
+ VERSION = '0.3.2'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eac_rest
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eduardo H. Bogoni
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-10-18 00:00:00.000000000 Z
11
+ date: 2021-06-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: eac_ruby_utils
@@ -74,7 +74,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
76
  requirements: []
77
- rubygems_version: 3.0.8
77
+ rubygems_version: 3.0.9
78
78
  signing_key:
79
79
  specification_version: 4
80
80
  summary: A REST helper for Ruby.