aws-sdk-resources 2.0.0.pre
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/lib/aws-sdk-resources.rb +36 -0
- data/lib/aws-sdk-resources/batch.rb +100 -0
- data/lib/aws-sdk-resources/builder.rb +86 -0
- data/lib/aws-sdk-resources/builder_sources.rb +136 -0
- data/lib/aws-sdk-resources/collection.rb +137 -0
- data/lib/aws-sdk-resources/definition.rb +363 -0
- data/lib/aws-sdk-resources/documenter.rb +18 -0
- data/lib/aws-sdk-resources/documenter/base_operation_documenter.rb +269 -0
- data/lib/aws-sdk-resources/documenter/data_operation_documenter.rb +47 -0
- data/lib/aws-sdk-resources/documenter/enumerate_data_operation_documenter.rb +50 -0
- data/lib/aws-sdk-resources/documenter/enumerate_resource_operation_documenter.rb +69 -0
- data/lib/aws-sdk-resources/documenter/operation_documenter.rb +43 -0
- data/lib/aws-sdk-resources/documenter/reference_operation_documenter.rb +102 -0
- data/lib/aws-sdk-resources/documenter/resource_operation_documenter.rb +65 -0
- data/lib/aws-sdk-resources/documenter/waiter_operation_documenter.rb +81 -0
- data/lib/aws-sdk-resources/errors.rb +15 -0
- data/lib/aws-sdk-resources/operation_methods.rb +53 -0
- data/lib/aws-sdk-resources/operations.rb +294 -0
- data/lib/aws-sdk-resources/options.rb +23 -0
- data/lib/aws-sdk-resources/request.rb +39 -0
- data/lib/aws-sdk-resources/request_params.rb +225 -0
- data/lib/aws-sdk-resources/resource.rb +137 -0
- data/lib/aws-sdk-resources/source.rb +39 -0
- data/lib/aws-sdk-resources/validator.rb +152 -0
- data/lib/aws-sdk-resources/validator/context.rb +60 -0
- data/lib/aws-sdk-resources/validator/identifier_validator.rb +107 -0
- data/lib/aws-sdk-resources/validator/operation_validator.rb +352 -0
- data/lib/aws-sdk-resources/validator/rule.rb +45 -0
- data/lib/aws-sdk-resources/validator/shape_validator.rb +47 -0
- metadata +87 -0
@@ -0,0 +1,47 @@
|
|
1
|
+
module Aws
|
2
|
+
module Resources
|
3
|
+
class Documenter
|
4
|
+
class DataOperationDocumenter < BaseOperationDocumenter
|
5
|
+
|
6
|
+
def docstring
|
7
|
+
if plural?
|
8
|
+
super + " Calls {#{called_operation}}, returning an array of {#{path_type}} objects."
|
9
|
+
else
|
10
|
+
super + " Calls {#{called_operation}}, returning a #{return_type.first}."
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def return_message
|
15
|
+
if plural? && structure?
|
16
|
+
"an array of {Structure structures} with the following memers:\n" + data_members
|
17
|
+
elsif structure?
|
18
|
+
"a {Structure} with the following members:\n" + data_members
|
19
|
+
else
|
20
|
+
''
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def data_members
|
25
|
+
"\n" + path_shape.member_names.map{ |n| "\n* `#{n}`" }.join("\n")
|
26
|
+
end
|
27
|
+
|
28
|
+
def return_type
|
29
|
+
if plural?
|
30
|
+
["Array<#{path_type}>"]
|
31
|
+
else
|
32
|
+
[path_type]
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def plural?
|
37
|
+
!!@operation.path.match(/\[/)
|
38
|
+
end
|
39
|
+
|
40
|
+
def structure?
|
41
|
+
Seahorse::Model::Shapes::Structure === path_shape
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module Aws
|
2
|
+
module Resources
|
3
|
+
class Documenter
|
4
|
+
class EnumerateDataOperationDocumenter < BaseOperationDocumenter
|
5
|
+
|
6
|
+
def docstring
|
7
|
+
super + ' ' + <<-DOCSTRING.lstrip
|
8
|
+
Returns an enumerator that yields #{operation_name.gsub('_', ' ')}.
|
9
|
+
No API requests are made until you call an enumerable method.
|
10
|
+
{#{called_operation}} will be called multiple times until all results
|
11
|
+
have been yielded.
|
12
|
+
DOCSTRING
|
13
|
+
end
|
14
|
+
|
15
|
+
def return_type
|
16
|
+
["Enumerator<#{path_type}>"]
|
17
|
+
end
|
18
|
+
|
19
|
+
def return_message
|
20
|
+
msg = "Returns an enumerator that yields #{operation_name.gsub('_', ' ')}."
|
21
|
+
msg << data_members
|
22
|
+
msg
|
23
|
+
end
|
24
|
+
|
25
|
+
def data_members
|
26
|
+
if path_shape.type == 'structure'
|
27
|
+
msg = "\nEnumerated values have the following properties:\n"
|
28
|
+
path_shape.member_names.each do |name|
|
29
|
+
msg << "\n* `#{name}`"
|
30
|
+
end
|
31
|
+
msg
|
32
|
+
else
|
33
|
+
''
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def example_tags
|
38
|
+
tag = <<-EXAMPLE.strip
|
39
|
+
@example Enumerate all #{operation_name}
|
40
|
+
#{variable_name}.#{operation_name}.each do |data|
|
41
|
+
# ...
|
42
|
+
end
|
43
|
+
EXAMPLE
|
44
|
+
YARD::DocstringParser.new.parse(tag).to_docstring.tags
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
module Aws
|
2
|
+
module Resources
|
3
|
+
class Documenter
|
4
|
+
class EnumerateResourceOperationDocumenter < BaseOperationDocumenter
|
5
|
+
|
6
|
+
def docstring
|
7
|
+
super + ' ' +<<-DOCSTRING.lstrip
|
8
|
+
Returns a {Resources::Collection Collection} of {#{target_resource_class_name}}
|
9
|
+
resources. No API requests are made until you call an enumerable method on the
|
10
|
+
collection. {#{called_operation}} will be called multiple times until every
|
11
|
+
{#{target_resource_class_name}} has been yielded.
|
12
|
+
DOCSTRING
|
13
|
+
end
|
14
|
+
|
15
|
+
def return_type
|
16
|
+
["Collection<#{target_resource_class_name}>"]
|
17
|
+
end
|
18
|
+
|
19
|
+
def return_message
|
20
|
+
"a {Aws::Resources::Collection Collection} of {#{target_resource_class_name}} resource objects."
|
21
|
+
end
|
22
|
+
|
23
|
+
def example_tags
|
24
|
+
tags = []
|
25
|
+
tags << enumerate_example
|
26
|
+
tags << enumerate_with_limit_example
|
27
|
+
tags << batch_examples if target_resource_batches?
|
28
|
+
YARD::DocstringParser.new.parse(tags.join("\n")).to_docstring.tags
|
29
|
+
end
|
30
|
+
|
31
|
+
def enumerate_example
|
32
|
+
return <<EXAMPLE
|
33
|
+
@example Enumerating {#{target_resource_class_name}} resources.
|
34
|
+
#{variable_name}.#{@operation_name}.each do |#{target_resource_class_name.downcase}|
|
35
|
+
# yields each #{target_resource_class_name.downcase}
|
36
|
+
end
|
37
|
+
EXAMPLE
|
38
|
+
end
|
39
|
+
|
40
|
+
def enumerate_with_limit_example
|
41
|
+
return <<EXAMPLE
|
42
|
+
@example Enumerating {#{target_resource_class_name}} resources with a limit.
|
43
|
+
#{variable_name}.#{@operation_name}.limit(10).each do |#{target_resource_class_name.downcase}|
|
44
|
+
# yields at most 10 #{@operation_name}
|
45
|
+
end
|
46
|
+
EXAMPLE
|
47
|
+
end
|
48
|
+
|
49
|
+
def batch_examples
|
50
|
+
example = "@example Batch operations callable on the returned collection"
|
51
|
+
target_resource_batch_operations.each do |name|
|
52
|
+
example << "\n #{variable_name}.#{@operation_name}.#{name}"
|
53
|
+
end
|
54
|
+
example
|
55
|
+
end
|
56
|
+
|
57
|
+
def target_resource_batches?
|
58
|
+
target_resource_class.const_defined?(:Batch) &&
|
59
|
+
target_resource_batch_operations.count > 0
|
60
|
+
end
|
61
|
+
|
62
|
+
def target_resource_batch_operations
|
63
|
+
target_resource_class::Batch.operation_names
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Aws
|
2
|
+
module Resources
|
3
|
+
class Documenter
|
4
|
+
class OperationDocumenter < BaseOperationDocumenter
|
5
|
+
|
6
|
+
def docstring
|
7
|
+
super + " #{return_base_message}"
|
8
|
+
end
|
9
|
+
|
10
|
+
def return_type
|
11
|
+
if returns_data_members
|
12
|
+
['Structure']
|
13
|
+
else
|
14
|
+
['void']
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def return_message
|
19
|
+
"#{return_base_message} #{returns_data_members}"
|
20
|
+
end
|
21
|
+
|
22
|
+
def return_base_message
|
23
|
+
if returns_data_members
|
24
|
+
"Calls {#{called_operation}}, returning its reponse."
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def returns_data_members
|
29
|
+
if response_shape && response_shape.member_names.count > 0
|
30
|
+
msg = "The response data has following properties:\n"
|
31
|
+
response_shape.member_names.each do |name|
|
32
|
+
msg << "\n* `#{name}`"
|
33
|
+
end
|
34
|
+
msg
|
35
|
+
else
|
36
|
+
nil
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
module Aws
|
2
|
+
module Resources
|
3
|
+
class Documenter
|
4
|
+
class ReferenceOperationDocumenter < BaseOperationDocumenter
|
5
|
+
|
6
|
+
def docstring
|
7
|
+
docs = []
|
8
|
+
docs << super
|
9
|
+
|
10
|
+
if can_return_nil?
|
11
|
+
docs << return_message
|
12
|
+
elsif argument?
|
13
|
+
msg = "Returns a {#{target_resource_class}} resource with "
|
14
|
+
msg << "the given `#{argument_name}`."
|
15
|
+
docs << msg
|
16
|
+
else
|
17
|
+
docs << "Returns a {#{target_resource_class}} resource."
|
18
|
+
end
|
19
|
+
|
20
|
+
if data_member && resource_class.load_operation
|
21
|
+
load_method = resource_class.load_operation.request.method_name
|
22
|
+
msg = "Calling this method will call {Client##{load_method}} "
|
23
|
+
msg << "unless the resource is already {#data_loaded? loaded}. "
|
24
|
+
msg << "No additional API requests are made."
|
25
|
+
docs << msg
|
26
|
+
else
|
27
|
+
msg = "Calling this method will **not** make an API request."
|
28
|
+
docs << msg
|
29
|
+
end
|
30
|
+
|
31
|
+
docs.join(' ')
|
32
|
+
end
|
33
|
+
|
34
|
+
def return_type
|
35
|
+
if plural?
|
36
|
+
type = ["Array<#{target_resource_class_name}>"]
|
37
|
+
else
|
38
|
+
type = [target_resource_class_name]
|
39
|
+
end
|
40
|
+
type << 'nil' if can_return_nil?
|
41
|
+
type
|
42
|
+
end
|
43
|
+
|
44
|
+
def return_message
|
45
|
+
if can_return_nil?
|
46
|
+
"Returns a {#{target_resource_class_name}} resource, or `nil` " +
|
47
|
+
"if `#data.#{data_member_source}` is `nil`."
|
48
|
+
else
|
49
|
+
"Returns a {#{target_resource_class_name}} resource."
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def parameters
|
54
|
+
if argument?
|
55
|
+
[[argument_name, nil]]
|
56
|
+
else
|
57
|
+
[]
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def tags
|
62
|
+
tags = super
|
63
|
+
if argument?
|
64
|
+
tag = "@param [String] #{argument_name} "
|
65
|
+
tag << "The {#{target_resource_class_name}##{argument_name}} "
|
66
|
+
tag << "identifier."
|
67
|
+
tags += YARD::DocstringParser.new.parse(tag).to_docstring.tags
|
68
|
+
end
|
69
|
+
tags
|
70
|
+
end
|
71
|
+
|
72
|
+
def plural?
|
73
|
+
@operation.builder.plural?
|
74
|
+
end
|
75
|
+
|
76
|
+
def argument?
|
77
|
+
@operation.arity > 0
|
78
|
+
end
|
79
|
+
|
80
|
+
def can_return_nil?
|
81
|
+
data_member
|
82
|
+
end
|
83
|
+
|
84
|
+
def data_member
|
85
|
+
builder.sources.find { |s| BuilderSources::DataMember === s }
|
86
|
+
end
|
87
|
+
|
88
|
+
def data_member_source
|
89
|
+
data_member.source
|
90
|
+
end
|
91
|
+
|
92
|
+
def argument_name
|
93
|
+
argument = builder.sources.find do |source|
|
94
|
+
BuilderSources::Argument === source
|
95
|
+
end
|
96
|
+
argument.target.to_s
|
97
|
+
end
|
98
|
+
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
module Aws
|
2
|
+
module Resources
|
3
|
+
class Documenter
|
4
|
+
class ResourceOperationDocumenter < BaseOperationDocumenter
|
5
|
+
|
6
|
+
def initialize(*args)
|
7
|
+
super
|
8
|
+
@plural = @operation.builder.plural?
|
9
|
+
end
|
10
|
+
|
11
|
+
# @return [Boolean] Returns `true` if this operation returns an
|
12
|
+
# array of resource objects. Returns `false` if this method returns
|
13
|
+
# a single resource object.
|
14
|
+
attr_reader :plural
|
15
|
+
|
16
|
+
alias plural? plural
|
17
|
+
|
18
|
+
def docstring
|
19
|
+
super + ' ' "#{return_message} Calls {#{called_operation}}."
|
20
|
+
end
|
21
|
+
|
22
|
+
def return_type
|
23
|
+
if plural?
|
24
|
+
["Array<#{target_resource_class_name}>"]
|
25
|
+
else
|
26
|
+
[target_resource_class_name]
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def return_message
|
31
|
+
if plural?
|
32
|
+
"Returns an array of {#{target_resource_class_name}} resources."
|
33
|
+
else
|
34
|
+
"Returns a {#{target_resource_class_name}} resource."
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def example_tags
|
39
|
+
id = target_resource_class.identifiers.last.to_s
|
40
|
+
idv = target_resource_class_name.downcase + '-' + id.gsub('_', '-')
|
41
|
+
tag = []
|
42
|
+
tag << "@example Basic usage"
|
43
|
+
tag << " #{resp_variable} = #{variable_name}.#{operation_name}(params)"
|
44
|
+
if plural?
|
45
|
+
tag << " #{resp_variable}.map(&:#{id})"
|
46
|
+
tag << " #=> [#{idv.inspect}, ...]"
|
47
|
+
else
|
48
|
+
tag << " #{resp_variable}.#{id}"
|
49
|
+
tag << " #=> #{idv.inspect}"
|
50
|
+
end
|
51
|
+
YARD::DocstringParser.new.parse(tag).to_docstring.tags
|
52
|
+
end
|
53
|
+
|
54
|
+
def resp_variable
|
55
|
+
if plural?
|
56
|
+
target_resource_class_name.downcase + 's'
|
57
|
+
else
|
58
|
+
target_resource_class_name.downcase
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
module Aws
|
2
|
+
module Resources
|
3
|
+
class Documenter
|
4
|
+
class WaiterOperationDocumenter < BaseOperationDocumenter
|
5
|
+
|
6
|
+
def docstring
|
7
|
+
super + ' ' + <<-DOCSTRING.lstrip
|
8
|
+
Waits until this #{resource_class_name} is #{state}. This method
|
9
|
+
waits by polling {Client##{api_request_name}} until successful. An error is
|
10
|
+
raised after a configurable number of failed checks.
|
11
|
+
|
12
|
+
This waiter uses the following defaults:
|
13
|
+
|
14
|
+
| Configuration | Default |
|
15
|
+
|-----------------|------------------------|
|
16
|
+
| `#interval` | #{waiter.interval} |
|
17
|
+
| `#max_attempts` | #{waiter.max_attempts} |
|
18
|
+
|
19
|
+
You can modify defaults and register callbacks by passing a block argument.
|
20
|
+
@yieldparam [Waiters::Waiter] waiter
|
21
|
+
@raise [Waiters::Errors::WaiterFailed]
|
22
|
+
@see Client#wait_until
|
23
|
+
DOCSTRING
|
24
|
+
end
|
25
|
+
|
26
|
+
def return_type
|
27
|
+
[resource_class_name]
|
28
|
+
end
|
29
|
+
|
30
|
+
def return_message
|
31
|
+
if @operation.path
|
32
|
+
"Returns a copy of this #{resource_class_name} with loaded data."
|
33
|
+
else
|
34
|
+
"Returns a copy of this #{resource_class_name} that is not loaded."
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def state
|
39
|
+
operation_name.to_s.sub('wait_until_', '')
|
40
|
+
end
|
41
|
+
|
42
|
+
def waiter
|
43
|
+
@resource_class.client_class.waiters.waiter(@operation.waiter_name)
|
44
|
+
end
|
45
|
+
|
46
|
+
def api_request
|
47
|
+
@resource_class.client_class.api.operation(api_request_name)
|
48
|
+
end
|
49
|
+
|
50
|
+
def api_request_params
|
51
|
+
@operation.params
|
52
|
+
end
|
53
|
+
|
54
|
+
def api_request_name
|
55
|
+
waiter.send(:operation_name)
|
56
|
+
end
|
57
|
+
|
58
|
+
def option_tags
|
59
|
+
[]
|
60
|
+
end
|
61
|
+
|
62
|
+
def example_tags
|
63
|
+
tag = <<-EXAMPLE.strip
|
64
|
+
@example Basic usage
|
65
|
+
#{variable_name}.#{operation_name}
|
66
|
+
|
67
|
+
@example Modify default configuration
|
68
|
+
#{variable_name}.#{operation_name} do |w|
|
69
|
+
w.interval = 10
|
70
|
+
w.max_attempts = 100
|
71
|
+
w.before_attempt { |count| ... }
|
72
|
+
w.before_wait do { |count, prev_resp| ... }
|
73
|
+
end
|
74
|
+
EXAMPLE
|
75
|
+
YARD::DocstringParser.new.parse(tag).to_docstring.tags
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|