oso-cloud 1.8.0 → 1.9.1.pre.vendored.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.
Files changed (113) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +0 -1
  3. data/Gemfile +5 -0
  4. data/Gemfile.lock +31 -12
  5. data/README.md +1 -1
  6. data/lib/oso/api.rb +18 -2
  7. data/lib/oso/oso.rb +10 -7
  8. data/lib/oso/version.rb +1 -1
  9. data/vendor/gems/faraday-2.5.2/CHANGELOG.md +574 -0
  10. data/vendor/gems/faraday-2.5.2/LICENSE.md +20 -0
  11. data/vendor/gems/faraday-2.5.2/README.md +55 -0
  12. data/vendor/gems/faraday-2.5.2/Rakefile +7 -0
  13. data/vendor/gems/faraday-2.5.2/examples/client_spec.rb +119 -0
  14. data/vendor/gems/faraday-2.5.2/examples/client_test.rb +144 -0
  15. data/vendor/gems/faraday-2.5.2/lib/faraday/adapter/test.rb +298 -0
  16. data/vendor/gems/faraday-2.5.2/lib/faraday/adapter.rb +102 -0
  17. data/vendor/gems/faraday-2.5.2/lib/faraday/adapter_registry.rb +30 -0
  18. data/vendor/gems/faraday-2.5.2/lib/faraday/connection.rb +561 -0
  19. data/vendor/gems/faraday-2.5.2/lib/faraday/encoders/flat_params_encoder.rb +105 -0
  20. data/vendor/gems/faraday-2.5.2/lib/faraday/encoders/nested_params_encoder.rb +183 -0
  21. data/vendor/gems/faraday-2.5.2/lib/faraday/error.rb +147 -0
  22. data/vendor/gems/faraday-2.5.2/lib/faraday/logging/formatter.rb +106 -0
  23. data/vendor/gems/faraday-2.5.2/lib/faraday/methods.rb +6 -0
  24. data/vendor/gems/faraday-2.5.2/lib/faraday/middleware.rb +30 -0
  25. data/vendor/gems/faraday-2.5.2/lib/faraday/middleware_registry.rb +83 -0
  26. data/vendor/gems/faraday-2.5.2/lib/faraday/options/connection_options.rb +22 -0
  27. data/vendor/gems/faraday-2.5.2/lib/faraday/options/env.rb +199 -0
  28. data/vendor/gems/faraday-2.5.2/lib/faraday/options/proxy_options.rb +32 -0
  29. data/vendor/gems/faraday-2.5.2/lib/faraday/options/request_options.rb +22 -0
  30. data/vendor/gems/faraday-2.5.2/lib/faraday/options/ssl_options.rb +69 -0
  31. data/vendor/gems/faraday-2.5.2/lib/faraday/options.rb +218 -0
  32. data/vendor/gems/faraday-2.5.2/lib/faraday/parameters.rb +5 -0
  33. data/vendor/gems/faraday-2.5.2/lib/faraday/rack_builder.rb +252 -0
  34. data/vendor/gems/faraday-2.5.2/lib/faraday/request/authorization.rb +49 -0
  35. data/vendor/gems/faraday-2.5.2/lib/faraday/request/instrumentation.rb +56 -0
  36. data/vendor/gems/faraday-2.5.2/lib/faraday/request/json.rb +55 -0
  37. data/vendor/gems/faraday-2.5.2/lib/faraday/request/url_encoded.rb +60 -0
  38. data/vendor/gems/faraday-2.5.2/lib/faraday/request.rb +136 -0
  39. data/vendor/gems/faraday-2.5.2/lib/faraday/response/json.rb +54 -0
  40. data/vendor/gems/faraday-2.5.2/lib/faraday/response/logger.rb +33 -0
  41. data/vendor/gems/faraday-2.5.2/lib/faraday/response/raise_error.rb +64 -0
  42. data/vendor/gems/faraday-2.5.2/lib/faraday/response.rb +90 -0
  43. data/vendor/gems/faraday-2.5.2/lib/faraday/utils/headers.rb +139 -0
  44. data/vendor/gems/faraday-2.5.2/lib/faraday/utils/params_hash.rb +61 -0
  45. data/vendor/gems/faraday-2.5.2/lib/faraday/utils.rb +122 -0
  46. data/vendor/gems/faraday-2.5.2/lib/faraday/version.rb +5 -0
  47. data/vendor/gems/faraday-2.5.2/lib/faraday.rb +157 -0
  48. data/vendor/gems/faraday-2.5.2/spec/external_adapters/faraday_specs_setup.rb +14 -0
  49. data/vendor/gems/faraday-2.5.2/spec/faraday/adapter/test_spec.rb +413 -0
  50. data/vendor/gems/faraday-2.5.2/spec/faraday/adapter_registry_spec.rb +28 -0
  51. data/vendor/gems/faraday-2.5.2/spec/faraday/adapter_spec.rb +55 -0
  52. data/vendor/gems/faraday-2.5.2/spec/faraday/connection_spec.rb +793 -0
  53. data/vendor/gems/faraday-2.5.2/spec/faraday/error_spec.rb +60 -0
  54. data/vendor/gems/faraday-2.5.2/spec/faraday/middleware_registry_spec.rb +31 -0
  55. data/vendor/gems/faraday-2.5.2/spec/faraday/middleware_spec.rb +52 -0
  56. data/vendor/gems/faraday-2.5.2/spec/faraday/options/env_spec.rb +76 -0
  57. data/vendor/gems/faraday-2.5.2/spec/faraday/options/options_spec.rb +297 -0
  58. data/vendor/gems/faraday-2.5.2/spec/faraday/options/proxy_options_spec.rb +44 -0
  59. data/vendor/gems/faraday-2.5.2/spec/faraday/options/request_options_spec.rb +19 -0
  60. data/vendor/gems/faraday-2.5.2/spec/faraday/params_encoders/flat_spec.rb +42 -0
  61. data/vendor/gems/faraday-2.5.2/spec/faraday/params_encoders/nested_spec.rb +150 -0
  62. data/vendor/gems/faraday-2.5.2/spec/faraday/rack_builder_spec.rb +317 -0
  63. data/vendor/gems/faraday-2.5.2/spec/faraday/request/authorization_spec.rb +83 -0
  64. data/vendor/gems/faraday-2.5.2/spec/faraday/request/instrumentation_spec.rb +74 -0
  65. data/vendor/gems/faraday-2.5.2/spec/faraday/request/json_spec.rb +111 -0
  66. data/vendor/gems/faraday-2.5.2/spec/faraday/request/url_encoded_spec.rb +93 -0
  67. data/vendor/gems/faraday-2.5.2/spec/faraday/request_spec.rb +110 -0
  68. data/vendor/gems/faraday-2.5.2/spec/faraday/response/json_spec.rb +117 -0
  69. data/vendor/gems/faraday-2.5.2/spec/faraday/response/logger_spec.rb +220 -0
  70. data/vendor/gems/faraday-2.5.2/spec/faraday/response/raise_error_spec.rb +172 -0
  71. data/vendor/gems/faraday-2.5.2/spec/faraday/response_spec.rb +75 -0
  72. data/vendor/gems/faraday-2.5.2/spec/faraday/utils/headers_spec.rb +82 -0
  73. data/vendor/gems/faraday-2.5.2/spec/faraday/utils_spec.rb +118 -0
  74. data/vendor/gems/faraday-2.5.2/spec/faraday_spec.rb +37 -0
  75. data/vendor/gems/faraday-2.5.2/spec/spec_helper.rb +132 -0
  76. data/vendor/gems/faraday-2.5.2/spec/support/disabling_stub.rb +14 -0
  77. data/vendor/gems/faraday-2.5.2/spec/support/fake_safe_buffer.rb +15 -0
  78. data/vendor/gems/faraday-2.5.2/spec/support/helper_methods.rb +96 -0
  79. data/vendor/gems/faraday-2.5.2/spec/support/shared_examples/adapter.rb +105 -0
  80. data/vendor/gems/faraday-2.5.2/spec/support/shared_examples/params_encoder.rb +18 -0
  81. data/vendor/gems/faraday-2.5.2/spec/support/shared_examples/request_method.rb +263 -0
  82. data/vendor/gems/faraday-2.5.2/spec/support/streaming_response_checker.rb +35 -0
  83. data/vendor/gems/faraday-net_http-3.0.2/LICENSE.md +21 -0
  84. data/vendor/gems/faraday-net_http-3.0.2/README.md +57 -0
  85. data/vendor/gems/faraday-net_http-3.0.2/lib/faraday/adapter/net_http.rb +208 -0
  86. data/vendor/gems/faraday-net_http-3.0.2/lib/faraday/net_http/version.rb +7 -0
  87. data/vendor/gems/faraday-net_http-3.0.2/lib/faraday/net_http.rb +10 -0
  88. data/vendor/gems/faraday-net_http_persistent-2.3.0/LICENSE.md +21 -0
  89. data/vendor/gems/faraday-net_http_persistent-2.3.0/README.md +66 -0
  90. data/vendor/gems/faraday-net_http_persistent-2.3.0/lib/faraday/adapter/net_http_persistent.rb +234 -0
  91. data/vendor/gems/faraday-net_http_persistent-2.3.0/lib/faraday/net_http_persistent/version.rb +7 -0
  92. data/vendor/gems/faraday-net_http_persistent-2.3.0/lib/faraday/net_http_persistent.rb +18 -0
  93. data/vendor/gems/faraday-retry-2.0.0/CHANGELOG.md +24 -0
  94. data/vendor/gems/faraday-retry-2.0.0/LICENSE.md +21 -0
  95. data/vendor/gems/faraday-retry-2.0.0/README.md +169 -0
  96. data/vendor/gems/faraday-retry-2.0.0/lib/faraday/retriable_response.rb +8 -0
  97. data/vendor/gems/faraday-retry-2.0.0/lib/faraday/retry/middleware.rb +254 -0
  98. data/vendor/gems/faraday-retry-2.0.0/lib/faraday/retry/version.rb +7 -0
  99. data/vendor/gems/faraday-retry-2.0.0/lib/faraday/retry.rb +13 -0
  100. data/vendor/gems/net-http-persistent-4.0.5/.autotest +9 -0
  101. data/vendor/gems/net-http-persistent-4.0.5/.gemtest +0 -0
  102. data/vendor/gems/net-http-persistent-4.0.5/Gemfile +14 -0
  103. data/vendor/gems/net-http-persistent-4.0.5/History.txt +460 -0
  104. data/vendor/gems/net-http-persistent-4.0.5/Manifest.txt +13 -0
  105. data/vendor/gems/net-http-persistent-4.0.5/README.rdoc +82 -0
  106. data/vendor/gems/net-http-persistent-4.0.5/Rakefile +25 -0
  107. data/vendor/gems/net-http-persistent-4.0.5/lib/net/http/persistent/connection.rb +41 -0
  108. data/vendor/gems/net-http-persistent-4.0.5/lib/net/http/persistent/pool.rb +65 -0
  109. data/vendor/gems/net-http-persistent-4.0.5/lib/net/http/persistent/timed_stack_multi.rb +79 -0
  110. data/vendor/gems/net-http-persistent-4.0.5/lib/net/http/persistent.rb +1158 -0
  111. data/vendor/gems/net-http-persistent-4.0.5/test/test_net_http_persistent.rb +1512 -0
  112. data/vendor/gems/net-http-persistent-4.0.5/test/test_net_http_persistent_timed_stack_multi.rb +151 -0
  113. metadata +112 -8
@@ -0,0 +1,199 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faraday
4
+ # @!attribute method
5
+ # @return [Symbol] HTTP method (`:get`, `:post`)
6
+ #
7
+ # @!attribute body
8
+ # @return [String] The request body that will eventually be converted to a
9
+ # string.
10
+ #
11
+ # @!attribute url
12
+ # @return [URI] URI instance for the current request.
13
+ #
14
+ # @!attribute request
15
+ # @return [Hash] options for configuring the request.
16
+ # Options for configuring the request.
17
+ #
18
+ # - `:timeout` open/read timeout Integer in seconds
19
+ # - `:open_timeout` - read timeout Integer in seconds
20
+ # - `:on_data` - Proc for streaming
21
+ # - `:proxy` - Hash of proxy options
22
+ # - `:uri` - Proxy Server URI
23
+ # - `:user` - Proxy server username
24
+ # - `:password` - Proxy server password
25
+ #
26
+ # @!attribute request_headers
27
+ # @return [Hash] HTTP Headers to be sent to the server.
28
+ #
29
+ # @!attribute ssl
30
+ # @return [Hash] options for configuring SSL requests
31
+ #
32
+ # @!attribute parallel_manager
33
+ # @return [Object] sent if the connection is in parallel mode
34
+ #
35
+ # @!attribute params
36
+ # @return [Hash]
37
+ #
38
+ # @!attribute response
39
+ # @return [Response]
40
+ #
41
+ # @!attribute response_headers
42
+ # @return [Hash] HTTP headers from the server
43
+ #
44
+ # @!attribute status
45
+ # @return [Integer] HTTP response status code
46
+ #
47
+ # @!attribute reason_phrase
48
+ # @return [String]
49
+ class Env < Options.new(:method, :request_body, :url, :request,
50
+ :request_headers, :ssl, :parallel_manager, :params,
51
+ :response, :response_headers, :status,
52
+ :reason_phrase, :response_body)
53
+
54
+ # rubocop:disable Naming/ConstantName
55
+ ContentLength = 'Content-Length'
56
+ StatusesWithoutBody = Set.new [204, 304]
57
+ SuccessfulStatuses = (200..299).freeze
58
+ # rubocop:enable Naming/ConstantName
59
+
60
+ # A Set of HTTP verbs that typically send a body. If no body is set for
61
+ # these requests, the Content-Length header is set to 0.
62
+ MethodsWithBodies = Set.new(Faraday::METHODS_WITH_BODY.map(&:to_sym))
63
+
64
+ options request: RequestOptions,
65
+ request_headers: Utils::Headers, response_headers: Utils::Headers
66
+
67
+ extend Forwardable
68
+
69
+ def_delegators :request, :params_encoder
70
+
71
+ # Build a new Env from given value. Respects and updates `custom_members`.
72
+ #
73
+ # @param value [Object] a value fitting Option.from(v).
74
+ # @return [Env] from given value
75
+ def self.from(value)
76
+ env = super(value)
77
+ if value.respond_to?(:custom_members)
78
+ env.custom_members.update(value.custom_members)
79
+ end
80
+ env
81
+ end
82
+
83
+ # @param key [Object]
84
+ def [](key)
85
+ return self[current_body] if key == :body
86
+
87
+ if in_member_set?(key)
88
+ super(key)
89
+ else
90
+ custom_members[key]
91
+ end
92
+ end
93
+
94
+ # @param key [Object]
95
+ # @param value [Object]
96
+ def []=(key, value)
97
+ if key == :body
98
+ super(current_body, value)
99
+ return
100
+ end
101
+
102
+ if in_member_set?(key)
103
+ super(key, value)
104
+ else
105
+ custom_members[key] = value
106
+ end
107
+ end
108
+
109
+ def current_body
110
+ !!status ? :response_body : :request_body
111
+ end
112
+
113
+ def body
114
+ self[:body]
115
+ end
116
+
117
+ def body=(value)
118
+ self[:body] = value
119
+ end
120
+
121
+ # @return [Boolean] true if status is in the set of {SuccessfulStatuses}.
122
+ def success?
123
+ SuccessfulStatuses.include?(status)
124
+ end
125
+
126
+ # @return [Boolean] true if there's no body yet, and the method is in the
127
+ # set of {MethodsWithBodies}.
128
+ def needs_body?
129
+ !body && MethodsWithBodies.include?(method)
130
+ end
131
+
132
+ # Sets content length to zero and the body to the empty string.
133
+ def clear_body
134
+ request_headers[ContentLength] = '0'
135
+ self.body = +''
136
+ end
137
+
138
+ # @return [Boolean] true if the status isn't in the set of
139
+ # {StatusesWithoutBody}.
140
+ def parse_body?
141
+ !StatusesWithoutBody.include?(status)
142
+ end
143
+
144
+ # @return [Boolean] true if there is a parallel_manager
145
+ def parallel?
146
+ !!parallel_manager
147
+ end
148
+
149
+ def inspect
150
+ attrs = [nil]
151
+ members.each do |mem|
152
+ if (value = send(mem))
153
+ attrs << "@#{mem}=#{value.inspect}"
154
+ end
155
+ end
156
+ attrs << "@custom=#{custom_members.inspect}" unless custom_members.empty?
157
+ %(#<#{self.class}#{attrs.join(' ')}>)
158
+ end
159
+
160
+ def stream_response?
161
+ request.stream_response?
162
+ end
163
+
164
+ def stream_response(&block)
165
+ size = 0
166
+ yielded = false
167
+ block_result = block.call do |chunk| # rubocop:disable Performance/RedundantBlockCall
168
+ if chunk.bytesize.positive? || size.positive?
169
+ yielded = true
170
+ size += chunk.bytesize
171
+ request.on_data.call(chunk, size, self)
172
+ end
173
+ end
174
+ request.on_data.call(+'', 0, self) unless yielded
175
+ block_result
176
+ end
177
+
178
+ # @private
179
+ def custom_members
180
+ @custom_members ||= {}
181
+ end
182
+
183
+ # @private
184
+ if members.first.is_a?(Symbol)
185
+ def in_member_set?(key)
186
+ self.class.member_set.include?(key.to_sym)
187
+ end
188
+ else
189
+ def in_member_set?(key)
190
+ self.class.member_set.include?(key.to_s)
191
+ end
192
+ end
193
+
194
+ # @private
195
+ def self.member_set
196
+ @member_set ||= Set.new(members)
197
+ end
198
+ end
199
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faraday
4
+ # ProxyOptions contains the configurable properties for the proxy
5
+ # configuration used when making an HTTP request.
6
+ class ProxyOptions < Options.new(:uri, :user, :password)
7
+ extend Forwardable
8
+ def_delegators :uri, :scheme, :scheme=, :host, :host=, :port, :port=,
9
+ :path, :path=
10
+
11
+ def self.from(value)
12
+ case value
13
+ when String
14
+ # URIs without a scheme should default to http (like 'example:123').
15
+ # This fixes #1282 and prevents a silent failure in some adapters.
16
+ value = "http://#{value}" unless value.include?('://')
17
+ value = { uri: Utils.URI(value) }
18
+ when URI
19
+ value = { uri: value }
20
+ when Hash, Options
21
+ if (uri = value.delete(:uri))
22
+ value[:uri] = Utils.URI(uri)
23
+ end
24
+ end
25
+
26
+ super(value)
27
+ end
28
+
29
+ memoized(:user) { uri&.user && Utils.unescape(uri.user) }
30
+ memoized(:password) { uri&.password && Utils.unescape(uri.password) }
31
+ end
32
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faraday
4
+ # RequestOptions contains the configurable properties for a Faraday request.
5
+ class RequestOptions < Options.new(:params_encoder, :proxy, :bind,
6
+ :timeout, :open_timeout, :read_timeout,
7
+ :write_timeout, :boundary, :oauth,
8
+ :context, :on_data)
9
+
10
+ def []=(key, value)
11
+ if key && key.to_sym == :proxy
12
+ super(key, value ? ProxyOptions.from(value) : nil)
13
+ else
14
+ super(key, value)
15
+ end
16
+ end
17
+
18
+ def stream_response?
19
+ on_data.is_a?(Proc)
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,69 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faraday
4
+ # SSL-related options.
5
+ #
6
+ # @!attribute verify
7
+ # @return [Boolean] whether to verify SSL certificates or not
8
+ #
9
+ # @!attribute verify_hostname
10
+ # @return [Boolean] whether to enable hostname verification on server certificates
11
+ # during the handshake or not (see https://github.com/ruby/openssl/pull/60)
12
+ #
13
+ # @!attribute ca_file
14
+ # @return [String] CA file
15
+ #
16
+ # @!attribute ca_path
17
+ # @return [String] CA path
18
+ #
19
+ # @!attribute verify_mode
20
+ # @return [Integer] Any `OpenSSL::SSL::` constant (see https://ruby-doc.org/stdlib-2.5.1/libdoc/openssl/rdoc/OpenSSL/SSL.html)
21
+ #
22
+ # @!attribute cert_store
23
+ # @return [OpenSSL::X509::Store] certificate store
24
+ #
25
+ # @!attribute client_cert
26
+ # @return [String, OpenSSL::X509::Certificate] client certificate
27
+ #
28
+ # @!attribute client_key
29
+ # @return [String, OpenSSL::PKey::RSA, OpenSSL::PKey::DSA] client key
30
+ #
31
+ # @!attribute certificate
32
+ # @return [OpenSSL::X509::Certificate] certificate (Excon only)
33
+ #
34
+ # @!attribute private_key
35
+ # @return [OpenSSL::PKey::RSA, OpenSSL::PKey::DSA] private key (Excon only)
36
+ #
37
+ # @!attribute verify_depth
38
+ # @return [Integer] maximum depth for the certificate chain verification
39
+ #
40
+ # @!attribute version
41
+ # @return [String, Symbol] SSL version (see https://ruby-doc.org/stdlib-2.5.1/libdoc/openssl/rdoc/OpenSSL/SSL/SSLContext.html#method-i-ssl_version-3D)
42
+ #
43
+ # @!attribute min_version
44
+ # @return [String, Symbol] minimum SSL version (see https://ruby-doc.org/stdlib-2.5.1/libdoc/openssl/rdoc/OpenSSL/SSL/SSLContext.html#method-i-min_version-3D)
45
+ #
46
+ # @!attribute max_version
47
+ # @return [String, Symbol] maximum SSL version (see https://ruby-doc.org/stdlib-2.5.1/libdoc/openssl/rdoc/OpenSSL/SSL/SSLContext.html#method-i-max_version-3D)
48
+ class SSLOptions < Options.new(:verify, :verify_hostname,
49
+ :ca_file, :ca_path, :verify_mode,
50
+ :cert_store, :client_cert, :client_key,
51
+ :certificate, :private_key, :verify_depth,
52
+ :version, :min_version, :max_version)
53
+
54
+ # @return [Boolean] true if should verify
55
+ def verify?
56
+ verify != false
57
+ end
58
+
59
+ # @return [Boolean] true if should not verify
60
+ def disable?
61
+ !verify?
62
+ end
63
+
64
+ # @return [Boolean] true if should verify_hostname
65
+ def verify_hostname?
66
+ verify_hostname != false
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,218 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faraday
4
+ # Subclasses Struct with some special helpers for converting from a Hash to
5
+ # a Struct.
6
+ class Options < Struct
7
+ # Public
8
+ def self.from(value)
9
+ value ? new.update(value) : new
10
+ end
11
+
12
+ # Public
13
+ def each
14
+ return to_enum(:each) unless block_given?
15
+
16
+ members.each do |key|
17
+ yield(key.to_sym, send(key))
18
+ end
19
+ end
20
+
21
+ # Public
22
+ def update(obj)
23
+ obj.each do |key, value|
24
+ sub_options = self.class.options_for(key)
25
+ if sub_options
26
+ new_value = sub_options.from(value) if value
27
+ elsif value.is_a?(Hash)
28
+ new_value = value.dup
29
+ else
30
+ new_value = value
31
+ end
32
+
33
+ send("#{key}=", new_value) unless new_value.nil?
34
+ end
35
+ self
36
+ end
37
+
38
+ # Public
39
+ def delete(key)
40
+ value = send(key)
41
+ send("#{key}=", nil)
42
+ value
43
+ end
44
+
45
+ # Public
46
+ def clear
47
+ members.each { |member| delete(member) }
48
+ end
49
+
50
+ # Public
51
+ def merge!(other)
52
+ other.each do |key, other_value|
53
+ self_value = send(key)
54
+ sub_options = self.class.options_for(key)
55
+ new_value = if self_value && sub_options && other_value
56
+ self_value.merge(other_value)
57
+ else
58
+ other_value
59
+ end
60
+ send("#{key}=", new_value) unless new_value.nil?
61
+ end
62
+ self
63
+ end
64
+
65
+ # Public
66
+ def merge(other)
67
+ dup.merge!(other)
68
+ end
69
+
70
+ # Public
71
+ def deep_dup
72
+ self.class.from(self)
73
+ end
74
+
75
+ # Public
76
+ def fetch(key, *args)
77
+ unless symbolized_key_set.include?(key.to_sym)
78
+ key_setter = "#{key}="
79
+ if !args.empty?
80
+ send(key_setter, args.first)
81
+ elsif block_given?
82
+ send(key_setter, yield(key))
83
+ else
84
+ raise self.class.fetch_error_class, "key not found: #{key.inspect}"
85
+ end
86
+ end
87
+ send(key)
88
+ end
89
+
90
+ # Public
91
+ def values_at(*keys)
92
+ keys.map { |key| send(key) }
93
+ end
94
+
95
+ # Public
96
+ def keys
97
+ members.reject { |member| send(member).nil? }
98
+ end
99
+
100
+ # Public
101
+ def empty?
102
+ keys.empty?
103
+ end
104
+
105
+ # Public
106
+ def each_key(&block)
107
+ return to_enum(:each_key) unless block
108
+
109
+ keys.each(&block)
110
+ end
111
+
112
+ # Public
113
+ def key?(key)
114
+ keys.include?(key)
115
+ end
116
+
117
+ alias has_key? key?
118
+
119
+ # Public
120
+ def each_value(&block)
121
+ return to_enum(:each_value) unless block
122
+
123
+ values.each(&block)
124
+ end
125
+
126
+ # Public
127
+ def value?(value)
128
+ values.include?(value)
129
+ end
130
+
131
+ alias has_value? value?
132
+
133
+ # Public
134
+ def to_hash
135
+ hash = {}
136
+ members.each do |key|
137
+ value = send(key)
138
+ hash[key.to_sym] = value unless value.nil?
139
+ end
140
+ hash
141
+ end
142
+
143
+ # Internal
144
+ def inspect
145
+ values = []
146
+ members.each do |member|
147
+ value = send(member)
148
+ values << "#{member}=#{value.inspect}" if value
149
+ end
150
+ values = values.empty? ? '(empty)' : values.join(', ')
151
+
152
+ %(#<#{self.class} #{values}>)
153
+ end
154
+
155
+ # Internal
156
+ def self.options(mapping)
157
+ attribute_options.update(mapping)
158
+ end
159
+
160
+ # Internal
161
+ def self.options_for(key)
162
+ attribute_options[key]
163
+ end
164
+
165
+ # Internal
166
+ def self.attribute_options
167
+ @attribute_options ||= {}
168
+ end
169
+
170
+ def self.memoized(key, &block)
171
+ unless block
172
+ raise ArgumentError, '#memoized must be called with a block'
173
+ end
174
+
175
+ memoized_attributes[key.to_sym] = block
176
+ class_eval <<-RUBY, __FILE__, __LINE__ + 1
177
+ def #{key}() self[:#{key}]; end
178
+ RUBY
179
+ end
180
+
181
+ def self.memoized_attributes
182
+ @memoized_attributes ||= {}
183
+ end
184
+
185
+ def [](key)
186
+ key = key.to_sym
187
+ if (method = self.class.memoized_attributes[key])
188
+ super(key) || (self[key] = instance_eval(&method))
189
+ else
190
+ super
191
+ end
192
+ end
193
+
194
+ def symbolized_key_set
195
+ @symbolized_key_set ||= Set.new(keys.map(&:to_sym))
196
+ end
197
+
198
+ def self.inherited(subclass)
199
+ super
200
+ subclass.attribute_options.update(attribute_options)
201
+ subclass.memoized_attributes.update(memoized_attributes)
202
+ end
203
+
204
+ def self.fetch_error_class
205
+ @fetch_error_class ||= if Object.const_defined?(:KeyError)
206
+ ::KeyError
207
+ else
208
+ ::IndexError
209
+ end
210
+ end
211
+ end
212
+ end
213
+
214
+ require 'faraday/options/request_options'
215
+ require 'faraday/options/ssl_options'
216
+ require 'faraday/options/proxy_options'
217
+ require 'faraday/options/connection_options'
218
+ require 'faraday/options/env'
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'forwardable'
4
+ require 'faraday/encoders/nested_params_encoder'
5
+ require 'faraday/encoders/flat_params_encoder'