hearth 1.0.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/CHANGELOG.md +12 -0
- data/VERSION +1 -0
- data/lib/hearth/api_error.rb +15 -0
- data/lib/hearth/block_io.rb +24 -0
- data/lib/hearth/context.rb +34 -0
- data/lib/hearth/http/api_error.rb +29 -0
- data/lib/hearth/http/client.rb +152 -0
- data/lib/hearth/http/error_parser.rb +105 -0
- data/lib/hearth/http/headers.rb +70 -0
- data/lib/hearth/http/middleware/content_length.rb +29 -0
- data/lib/hearth/http/networking_error.rb +20 -0
- data/lib/hearth/http/request.rb +132 -0
- data/lib/hearth/http/response.rb +29 -0
- data/lib/hearth/http.rb +36 -0
- data/lib/hearth/json/parse_error.rb +18 -0
- data/lib/hearth/json.rb +30 -0
- data/lib/hearth/middleware/around_handler.rb +24 -0
- data/lib/hearth/middleware/build.rb +26 -0
- data/lib/hearth/middleware/host_prefix.rb +48 -0
- data/lib/hearth/middleware/parse.rb +42 -0
- data/lib/hearth/middleware/request_handler.rb +24 -0
- data/lib/hearth/middleware/response_handler.rb +25 -0
- data/lib/hearth/middleware/retry.rb +43 -0
- data/lib/hearth/middleware/send.rb +62 -0
- data/lib/hearth/middleware/validate.rb +29 -0
- data/lib/hearth/middleware.rb +16 -0
- data/lib/hearth/middleware_builder.rb +246 -0
- data/lib/hearth/middleware_stack.rb +73 -0
- data/lib/hearth/number_helper.rb +33 -0
- data/lib/hearth/output.rb +20 -0
- data/lib/hearth/structure.rb +40 -0
- data/lib/hearth/stubbing/client_stubs.rb +115 -0
- data/lib/hearth/stubbing/stubs.rb +32 -0
- data/lib/hearth/time_helper.rb +35 -0
- data/lib/hearth/union.rb +10 -0
- data/lib/hearth/validator.rb +20 -0
- data/lib/hearth/waiters/errors.rb +15 -0
- data/lib/hearth/waiters/poller.rb +132 -0
- data/lib/hearth/waiters/waiter.rb +79 -0
- data/lib/hearth/xml/formatter.rb +68 -0
- data/lib/hearth/xml/node.rb +123 -0
- data/lib/hearth/xml/node_matcher.rb +24 -0
- data/lib/hearth/xml/parse_error.rb +18 -0
- data/lib/hearth/xml.rb +58 -0
- data/lib/hearth.rb +26 -0
- data/sig/lib/seahorse/api_error.rbs +10 -0
- data/sig/lib/seahorse/document.rbs +2 -0
- data/sig/lib/seahorse/http/api_error.rbs +21 -0
- data/sig/lib/seahorse/http/headers.rbs +47 -0
- data/sig/lib/seahorse/http/response.rbs +21 -0
- data/sig/lib/seahorse/simple_delegator.rbs +3 -0
- data/sig/lib/seahorse/structure.rbs +18 -0
- data/sig/lib/seahorse/stubbing/client_stubs.rbs +103 -0
- data/sig/lib/seahorse/stubbing/stubs.rbs +14 -0
- data/sig/lib/seahorse/union.rbs +6 -0
- metadata +111 -0
@@ -0,0 +1,123 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Hearth
|
4
|
+
module XML
|
5
|
+
# A class used to represent an XML node.
|
6
|
+
# @api private
|
7
|
+
class Node
|
8
|
+
# @api private
|
9
|
+
BOTH_TYPES = 'Nodes may not have both text and child nodes'
|
10
|
+
|
11
|
+
# @param [String] name
|
12
|
+
def initialize(name, *children)
|
13
|
+
@name = name
|
14
|
+
@attributes = {}
|
15
|
+
@child_nodes = []
|
16
|
+
@child_node_map = {}
|
17
|
+
@text = []
|
18
|
+
append(*children)
|
19
|
+
end
|
20
|
+
|
21
|
+
# @return [String]
|
22
|
+
attr_reader :name
|
23
|
+
|
24
|
+
# @return [Hash<String, String>]
|
25
|
+
attr_reader :attributes
|
26
|
+
|
27
|
+
def <<(*children)
|
28
|
+
children.flatten.each do |child|
|
29
|
+
case child
|
30
|
+
when Node
|
31
|
+
raise ArgumentError, BOTH_TYPES unless @text.empty?
|
32
|
+
|
33
|
+
@child_nodes << child
|
34
|
+
@child_node_map[child.name] ||= []
|
35
|
+
@child_node_map[child.name] << child
|
36
|
+
when String
|
37
|
+
raise ArgumentError, BOTH_TYPES unless @child_nodes.empty?
|
38
|
+
|
39
|
+
@text << child
|
40
|
+
else
|
41
|
+
raise ArgumentError, 'expected Hearth::XML::Node or String, ' \
|
42
|
+
"got #{child.class}"
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
alias append <<
|
47
|
+
|
48
|
+
# @return [String, nil]
|
49
|
+
def text
|
50
|
+
@text.empty? ? nil : @text.join
|
51
|
+
end
|
52
|
+
|
53
|
+
# @param [String] node_name
|
54
|
+
# @return [Array<Node>]
|
55
|
+
def [](node_name)
|
56
|
+
children(node_name)
|
57
|
+
end
|
58
|
+
|
59
|
+
# @overload children()
|
60
|
+
# @return [Array<Node>] Returns an array of all child nodes.
|
61
|
+
# @overload children(child_name)
|
62
|
+
# @param [String] child_name
|
63
|
+
# @return [Array<Node>] Returns an array of child nodes with the given
|
64
|
+
# name.
|
65
|
+
def children(*args)
|
66
|
+
nodes =
|
67
|
+
case args.count
|
68
|
+
when 0 then @child_nodes
|
69
|
+
when 1 then @child_node_map.fetch(args.first, [])
|
70
|
+
else raise ArgumentError, 'expected 0 or 1 arguments'
|
71
|
+
end
|
72
|
+
yield(nodes) if block_given? && !nodes.empty?
|
73
|
+
nodes
|
74
|
+
end
|
75
|
+
alias child_nodes children
|
76
|
+
|
77
|
+
# @return [Boolean]
|
78
|
+
def empty?
|
79
|
+
@child_nodes.empty? && @text.empty?
|
80
|
+
end
|
81
|
+
|
82
|
+
# @return [Array<String>]
|
83
|
+
def child_node_names
|
84
|
+
@child_node_map.keys
|
85
|
+
end
|
86
|
+
|
87
|
+
# @return [Boolean]
|
88
|
+
def child_node?(name)
|
89
|
+
@child_node_map.key?(name)
|
90
|
+
end
|
91
|
+
|
92
|
+
# @yield [child]
|
93
|
+
# @yieldparam child [Node]
|
94
|
+
# @return [Node, nil]
|
95
|
+
def child(child_name)
|
96
|
+
child = @child_node_map[child_name]&.first
|
97
|
+
yield(child) if block_given? && !child.nil?
|
98
|
+
child
|
99
|
+
end
|
100
|
+
alias at child
|
101
|
+
|
102
|
+
# @yield [text]
|
103
|
+
# @yieldparam text [String]
|
104
|
+
# @return [String, nil]
|
105
|
+
def text_at(child_name)
|
106
|
+
text = @child_node_map[child_name].first&.text
|
107
|
+
yield(text) if block_given? && !text.nil?
|
108
|
+
text
|
109
|
+
end
|
110
|
+
|
111
|
+
# @option options [String] :indent ('')
|
112
|
+
# When `indent` is non-empty whitespace, then the XML will
|
113
|
+
# be pretty-formatted with each level of nodes indented by
|
114
|
+
# `indent`.
|
115
|
+
# @return [String<XML>]
|
116
|
+
def to_xml(indent: '')
|
117
|
+
Formatter.new(indent: indent).format(self)
|
118
|
+
end
|
119
|
+
alias to_str to_xml
|
120
|
+
alias to_s to_xml
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rspec/expectations'
|
4
|
+
|
5
|
+
# Provides an rspec matcher for Hearth::XML::Node
|
6
|
+
# @api private
|
7
|
+
RSpec::Matchers.define :match_xml_node do |expected|
|
8
|
+
match do |actual|
|
9
|
+
return true if actual == expected
|
10
|
+
return false unless actual.instance_of?(expected.class)
|
11
|
+
|
12
|
+
expect(actual.name).to eq(expected.name)
|
13
|
+
expect(actual.text).to eq(expected.text)
|
14
|
+
expect(actual.attributes).to eq(expected.attributes)
|
15
|
+
|
16
|
+
expect(actual.children.length).to eq(expected.children.length)
|
17
|
+
|
18
|
+
expected.children.zip(actual.children).each do |a, e|
|
19
|
+
expect(a).to match_xml_node(e)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
diffable
|
24
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Hearth
|
4
|
+
module XML
|
5
|
+
# An error class encountered when parsing XML.
|
6
|
+
class ParseError < StandardError
|
7
|
+
MSG = 'Encountered an error while parsing the response: %<message>s'
|
8
|
+
|
9
|
+
def initialize(original_error)
|
10
|
+
@original_error = original_error
|
11
|
+
super(format(MSG, message: original_error.message))
|
12
|
+
end
|
13
|
+
|
14
|
+
# @return [StandardError]
|
15
|
+
attr_reader :original_error
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/lib/hearth/xml.rb
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'xml/formatter'
|
4
|
+
require_relative 'xml/node'
|
5
|
+
require_relative 'xml/parse_error'
|
6
|
+
|
7
|
+
require 'rexml'
|
8
|
+
|
9
|
+
module Hearth
|
10
|
+
# Hearth::XML is a purpose-built set of utilities for working with
|
11
|
+
# XML. It does not support many/most features of generic XML
|
12
|
+
# parsing and serialization.
|
13
|
+
# @api private
|
14
|
+
module XML
|
15
|
+
class << self
|
16
|
+
# @param [String] xml
|
17
|
+
# @return [Node]
|
18
|
+
def parse(xml)
|
19
|
+
doc = REXML::Document.new(xml.strip)
|
20
|
+
raise "no XML element found: #{xml.inspect}" unless doc.root
|
21
|
+
|
22
|
+
parse_node(doc.root)
|
23
|
+
rescue StandardError => e
|
24
|
+
raise ParseError, e
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def parse_node(rexml_node)
|
30
|
+
node = Node.new(rexml_node.name)
|
31
|
+
apply_attributes(node, rexml_node)
|
32
|
+
apply_child_nodes(node, rexml_node)
|
33
|
+
apply_text(node, rexml_node)
|
34
|
+
node
|
35
|
+
end
|
36
|
+
|
37
|
+
def apply_attributes(node, rexml_node)
|
38
|
+
rexml_node.attributes.each_attribute do |attr|
|
39
|
+
node.attributes[attr.name] = attr.value
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def apply_text(node, rexml_node)
|
44
|
+
text = rexml_node.text
|
45
|
+
return if text.nil?
|
46
|
+
return if text.strip.empty? && !node.empty?
|
47
|
+
|
48
|
+
node.append(text)
|
49
|
+
end
|
50
|
+
|
51
|
+
def apply_child_nodes(node, rexml_node)
|
52
|
+
rexml_node.each_element do |value|
|
53
|
+
node.append(parse_node(value))
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
data/lib/hearth.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'hearth/api_error'
|
4
|
+
require_relative 'hearth/block_io'
|
5
|
+
require_relative 'hearth/context'
|
6
|
+
require_relative 'hearth/http'
|
7
|
+
require_relative 'hearth/json'
|
8
|
+
require_relative 'hearth/middleware'
|
9
|
+
require_relative 'hearth/middleware_builder'
|
10
|
+
require_relative 'hearth/middleware_stack'
|
11
|
+
require_relative 'hearth/number_helper'
|
12
|
+
require_relative 'hearth/output'
|
13
|
+
require_relative 'hearth/structure'
|
14
|
+
require_relative 'hearth/stubbing/client_stubs'
|
15
|
+
require_relative 'hearth/stubbing/stubs'
|
16
|
+
require_relative 'hearth/time_helper'
|
17
|
+
require_relative 'hearth/union'
|
18
|
+
require_relative 'hearth/validator'
|
19
|
+
require_relative 'hearth/waiters/errors'
|
20
|
+
require_relative 'hearth/waiters/poller'
|
21
|
+
require_relative 'hearth/waiters/waiter'
|
22
|
+
require_relative 'hearth/xml'
|
23
|
+
|
24
|
+
module Hearth
|
25
|
+
VERSION = File.read(File.expand_path('../VERSION', __dir__)).strip
|
26
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
module Hearth
|
2
|
+
# Base class for errors returned from an API. This excludes networking
|
3
|
+
# errors and errors generated on the client-side.
|
4
|
+
class ApiError < StandardError
|
5
|
+
def initialize: (error_code: String, ?message: String) -> ApiError
|
6
|
+
|
7
|
+
# @return [String]
|
8
|
+
attr_reader error_code: String
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Hearth
|
2
|
+
module HTTP
|
3
|
+
# Base class for HTTP errors returned from an API. Inherits from
|
4
|
+
# {Hearth::ApiError}.
|
5
|
+
class ApiError < Hearth::ApiError
|
6
|
+
def initialize: (http_resp: Response, **untyped kwargs) -> ApiError
|
7
|
+
|
8
|
+
# @return [Integer]
|
9
|
+
attr_reader http_status: Integer
|
10
|
+
|
11
|
+
# @return [Hash<String, String>]
|
12
|
+
attr_reader http_headers: Hash[String, String]
|
13
|
+
|
14
|
+
# @return [String]
|
15
|
+
attr_reader http_body: String
|
16
|
+
|
17
|
+
# @return [String]
|
18
|
+
attr_reader request_id: String
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Hearth
|
2
|
+
module HTTP
|
3
|
+
# Provides Hash like access for Headers with key normalization
|
4
|
+
# @api private
|
5
|
+
class Headers
|
6
|
+
# @param [Hash<String,String>] headers
|
7
|
+
def initialize: (?headers: ::Hash[String, String] headers) -> Headers
|
8
|
+
|
9
|
+
# @param [String] key
|
10
|
+
def []: (String key) -> String
|
11
|
+
|
12
|
+
# @param [String] key
|
13
|
+
# @param [String] value
|
14
|
+
def []=: (String key, String value) -> String
|
15
|
+
|
16
|
+
# @param [String] key
|
17
|
+
# @return [Boolean] Returns `true` if there is a header with
|
18
|
+
# the given key.
|
19
|
+
def key?: (String key) -> bool
|
20
|
+
|
21
|
+
# @return [Array<String>]
|
22
|
+
def keys: () -> Array[String]
|
23
|
+
|
24
|
+
# @param [String] key
|
25
|
+
# @return [String, nil] Returns the value for the deleted key.
|
26
|
+
def delete: (String key) -> (String | nil)
|
27
|
+
|
28
|
+
# @return [Enumerable<String,String>]
|
29
|
+
def each_pair: () { () -> String } -> Enumerable[Array[String]]
|
30
|
+
|
31
|
+
alias each each_pair
|
32
|
+
|
33
|
+
# @return [Hash]
|
34
|
+
def to_hash: () -> Hash[String, String]
|
35
|
+
|
36
|
+
alias to_h to_hash
|
37
|
+
|
38
|
+
# @return [Integer] Returns the number of entries in the headers
|
39
|
+
# hash.
|
40
|
+
def size: () -> Integer
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def normalize: (String key) -> String
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Hearth
|
2
|
+
module HTTP
|
3
|
+
# Represents an HTTP Response.
|
4
|
+
# @api private
|
5
|
+
class Response
|
6
|
+
# @param [Integer] status
|
7
|
+
# @param [Headers] headers
|
8
|
+
# @param [IO] body
|
9
|
+
def initialize: (?status: ::Integer status, ?headers: Headers headers, ?body: IO body) -> Response
|
10
|
+
|
11
|
+
# @return [Integer]
|
12
|
+
attr_accessor status: Integer
|
13
|
+
|
14
|
+
# @return [Headers]
|
15
|
+
attr_accessor headers: Headers
|
16
|
+
|
17
|
+
# @return [IO]
|
18
|
+
attr_accessor body: IO
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Hearth
|
2
|
+
# A module mixed into Structs that provides utility methods.
|
3
|
+
module Structure
|
4
|
+
# Deeply converts the Struct into a hash. Structure members that
|
5
|
+
# are `nil` are omitted from the resultant hash.
|
6
|
+
#
|
7
|
+
# @return [Hash]
|
8
|
+
def to_h: (?untyped obj) -> Hash[Symbol,untyped]
|
9
|
+
|
10
|
+
alias to_hash to_h
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def _to_h_struct: (untyped obj) -> untyped
|
15
|
+
|
16
|
+
def _to_h_hash: (untyped obj) -> untyped
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
module Hearth
|
2
|
+
# This module provides the ability to specify the data and/or errors to
|
3
|
+
# return when a client is using stubbed responses.
|
4
|
+
# This module should be included in generated service clients.
|
5
|
+
#
|
6
|
+
# Pass `stub_responses: true` to a client constructor to enable this
|
7
|
+
# behavior.
|
8
|
+
module ClientStubs
|
9
|
+
# Configures what data / errors should be returned from the named operation
|
10
|
+
# when response stubbing is enabled.
|
11
|
+
#
|
12
|
+
# ## Basic usage
|
13
|
+
#
|
14
|
+
# When you enable response stubbing, the client will generate fake
|
15
|
+
# responses and will not make any HTTP requests.
|
16
|
+
#
|
17
|
+
# client = Service::Client.new(stub_responses: true)
|
18
|
+
# client.operation
|
19
|
+
# #=> #<struct Service:Types::Operation param1=[], param2=nil>
|
20
|
+
#
|
21
|
+
# You can specify the stub data using {#stub_responses}
|
22
|
+
#
|
23
|
+
# client = Service::Client.new(stub_responses: true)
|
24
|
+
# client.stub_responses(:operation, {
|
25
|
+
# param1: [{ name: 'value1' }]
|
26
|
+
# })
|
27
|
+
#
|
28
|
+
# client.operation.param1.map(&:name)
|
29
|
+
# #=> ['value1']
|
30
|
+
#
|
31
|
+
# ## Stubbing Errors
|
32
|
+
#
|
33
|
+
# When stubbing is enabled, the SDK will default to generate
|
34
|
+
# fake responses with placeholder values. You can override the data
|
35
|
+
# returned. You can also specify errors it should raise.
|
36
|
+
#
|
37
|
+
# # to simulate errors, give the error class, you must
|
38
|
+
# # be able to construct an instance with `.new`
|
39
|
+
# client.stub_responses(:operation, Timeout::Error)
|
40
|
+
# client.operation(param1: 'value')
|
41
|
+
# #=> raises new Timeout::Error
|
42
|
+
#
|
43
|
+
# # or you can give an instance of an error class
|
44
|
+
# client.stub_responses(:operation, RuntimeError.new('custom message'))
|
45
|
+
# client.operation(param1: 'value')
|
46
|
+
# #=> raises the given runtime error object
|
47
|
+
#
|
48
|
+
# ## Dynamic Stubbing
|
49
|
+
#
|
50
|
+
# In addition to creating static stubs, it's also possible to generate
|
51
|
+
# stubs dynamically based on the parameters with which operations were
|
52
|
+
# called, by passing a `Proc` object:
|
53
|
+
#
|
54
|
+
# client.stub_responses(:operation, -> (context) {
|
55
|
+
# if context.params[:param] == 'foo'
|
56
|
+
# # return a stub
|
57
|
+
# { param1: [{ name: 'value1'}]}
|
58
|
+
# else
|
59
|
+
# # return an error
|
60
|
+
# Services::Errors::NotFound
|
61
|
+
# end
|
62
|
+
# })
|
63
|
+
#
|
64
|
+
# ## Stubbing Raw Protocol Responses
|
65
|
+
#
|
66
|
+
# As an alternative to providing the response data, you can modify the
|
67
|
+
# response object provided by the `Proc` object and then
|
68
|
+
# return nil.
|
69
|
+
#
|
70
|
+
# client.stub_responses(:operation, -> (context) {
|
71
|
+
# context.response.status = 404 # simulate an error
|
72
|
+
# nil
|
73
|
+
# })
|
74
|
+
#
|
75
|
+
# ## Stubbing Multiple Responses
|
76
|
+
#
|
77
|
+
# Calling an operation multiple times will return similar responses.
|
78
|
+
# You can configure multiple stubs and they will be returned in sequence.
|
79
|
+
#
|
80
|
+
# client.stub_responses(:operation, [
|
81
|
+
# Errors::NotFound,
|
82
|
+
# { content_length: 150 },
|
83
|
+
# ])
|
84
|
+
#
|
85
|
+
# client.operation(param1: 'value1')
|
86
|
+
# #=> raises Errors::NotFound
|
87
|
+
#
|
88
|
+
# resp = client.operation(param1: 'value2')
|
89
|
+
# resp.content_length #=> 150
|
90
|
+
#
|
91
|
+
# @param [Symbol] operation_name
|
92
|
+
#
|
93
|
+
# @param [Mixed] stubs One or more responses to return from the named
|
94
|
+
# operation.
|
95
|
+
#
|
96
|
+
# @return [void]
|
97
|
+
#
|
98
|
+
# @raise [RuntimeError] Raises a runtime error when called
|
99
|
+
# on a client that has not enabled response stubbing via
|
100
|
+
# `:stub_responses => true`.
|
101
|
+
def stub_responses: (Symbol operation_name, *Hearth::Stubbing::Stubs stubs) -> void
|
102
|
+
end
|
103
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Hearth
|
2
|
+
# @api private
|
3
|
+
module Stubbing
|
4
|
+
# Provides a thread safe data structure for adding and getting stubs
|
5
|
+
# per operation.
|
6
|
+
class Stubs
|
7
|
+
def initialize: () -> Stubs
|
8
|
+
|
9
|
+
def add_stubs: (Symbol operation_name, Array[Hash[Symbol, untyped]] | Proc | StandardError stubs) -> void
|
10
|
+
|
11
|
+
def next: (Symbol operation_name) -> Hash[Symbol, untyped]
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
metadata
ADDED
@@ -0,0 +1,111 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: hearth
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0.pre1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Amazon Web Services
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2022-02-16 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: jmespath
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.4'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.4'
|
27
|
+
description:
|
28
|
+
email:
|
29
|
+
executables: []
|
30
|
+
extensions: []
|
31
|
+
extra_rdoc_files: []
|
32
|
+
files:
|
33
|
+
- CHANGELOG.md
|
34
|
+
- VERSION
|
35
|
+
- lib/hearth.rb
|
36
|
+
- lib/hearth/api_error.rb
|
37
|
+
- lib/hearth/block_io.rb
|
38
|
+
- lib/hearth/context.rb
|
39
|
+
- lib/hearth/http.rb
|
40
|
+
- lib/hearth/http/api_error.rb
|
41
|
+
- lib/hearth/http/client.rb
|
42
|
+
- lib/hearth/http/error_parser.rb
|
43
|
+
- lib/hearth/http/headers.rb
|
44
|
+
- lib/hearth/http/middleware/content_length.rb
|
45
|
+
- lib/hearth/http/networking_error.rb
|
46
|
+
- lib/hearth/http/request.rb
|
47
|
+
- lib/hearth/http/response.rb
|
48
|
+
- lib/hearth/json.rb
|
49
|
+
- lib/hearth/json/parse_error.rb
|
50
|
+
- lib/hearth/middleware.rb
|
51
|
+
- lib/hearth/middleware/around_handler.rb
|
52
|
+
- lib/hearth/middleware/build.rb
|
53
|
+
- lib/hearth/middleware/host_prefix.rb
|
54
|
+
- lib/hearth/middleware/parse.rb
|
55
|
+
- lib/hearth/middleware/request_handler.rb
|
56
|
+
- lib/hearth/middleware/response_handler.rb
|
57
|
+
- lib/hearth/middleware/retry.rb
|
58
|
+
- lib/hearth/middleware/send.rb
|
59
|
+
- lib/hearth/middleware/validate.rb
|
60
|
+
- lib/hearth/middleware_builder.rb
|
61
|
+
- lib/hearth/middleware_stack.rb
|
62
|
+
- lib/hearth/number_helper.rb
|
63
|
+
- lib/hearth/output.rb
|
64
|
+
- lib/hearth/structure.rb
|
65
|
+
- lib/hearth/stubbing/client_stubs.rb
|
66
|
+
- lib/hearth/stubbing/stubs.rb
|
67
|
+
- lib/hearth/time_helper.rb
|
68
|
+
- lib/hearth/union.rb
|
69
|
+
- lib/hearth/validator.rb
|
70
|
+
- lib/hearth/waiters/errors.rb
|
71
|
+
- lib/hearth/waiters/poller.rb
|
72
|
+
- lib/hearth/waiters/waiter.rb
|
73
|
+
- lib/hearth/xml.rb
|
74
|
+
- lib/hearth/xml/formatter.rb
|
75
|
+
- lib/hearth/xml/node.rb
|
76
|
+
- lib/hearth/xml/node_matcher.rb
|
77
|
+
- lib/hearth/xml/parse_error.rb
|
78
|
+
- sig/lib/seahorse/api_error.rbs
|
79
|
+
- sig/lib/seahorse/document.rbs
|
80
|
+
- sig/lib/seahorse/http/api_error.rbs
|
81
|
+
- sig/lib/seahorse/http/headers.rbs
|
82
|
+
- sig/lib/seahorse/http/response.rbs
|
83
|
+
- sig/lib/seahorse/simple_delegator.rbs
|
84
|
+
- sig/lib/seahorse/structure.rbs
|
85
|
+
- sig/lib/seahorse/stubbing/client_stubs.rbs
|
86
|
+
- sig/lib/seahorse/stubbing/stubs.rbs
|
87
|
+
- sig/lib/seahorse/union.rbs
|
88
|
+
homepage:
|
89
|
+
licenses:
|
90
|
+
- Apache-2.0
|
91
|
+
metadata: {}
|
92
|
+
post_install_message:
|
93
|
+
rdoc_options: []
|
94
|
+
require_paths:
|
95
|
+
- lib
|
96
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
97
|
+
requirements:
|
98
|
+
- - ">="
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: '2.5'
|
101
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
102
|
+
requirements:
|
103
|
+
- - ">"
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
version: 1.3.1
|
106
|
+
requirements: []
|
107
|
+
rubygems_version: 3.2.22
|
108
|
+
signing_key:
|
109
|
+
specification_version: 4
|
110
|
+
summary: A base library for Smithy generated SDKs
|
111
|
+
test_files: []
|