hearth 1.0.0.pre1
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/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: []
|