class Aws::Resources::Definition
Given a resource definition document, a {Definition} can build a set of related resource classes.
Public Class Methods
new(definition = {}, options = {})
click to toggle source
@param [Hash] definition @option options [String] :source_path
# File lib/aws-sdk-resources/definition.rb, line 12 def initialize(definition = {}, options = {}) @source = definition @source_path = options[:source_path] end
Public Instance Methods
apply(namespace)
click to toggle source
@param [Module<Service>] namespace @return [void]
# File lib/aws-sdk-resources/definition.rb, line 19 def apply(namespace) build_resource_classes(namespace) each_resource_class(namespace) do |resource, definition| define_load(namespace, resource, definition['load']) define_actions(namespace, resource, definition['actions'] || {}) define_batch_actions(namespace, resource, definition['batchActions'] || {}) define_waiters(namespace, resource, definition['waiters'] || {}) define_has(namespace, resource, definition['has'] || {}) define_has_many(namespace, resource, definition['hasMany'] || {}) define_data_attributes(namespace, resource, definition) end end
Private Instance Methods
build_basic_action(namespace, resource, definition)
click to toggle source
# File lib/aws-sdk-resources/definition.rb, line 112 def build_basic_action(namespace, resource, definition) Operations::Operation.new( request: define_request(definition['request']), source: source(definition) ) end
build_operation(namespace, resource, definition)
click to toggle source
# File lib/aws-sdk-resources/definition.rb, line 104 def build_operation(namespace, resource, definition) if definition['resource'] build_resource_action(namespace, resource, definition) else build_basic_action(namespace, resource, definition) end end
build_resource_action(namespace, resource, definition)
click to toggle source
# File lib/aws-sdk-resources/definition.rb, line 119 def build_resource_action(namespace, resource, definition) builder = define_builder(namespace, definition['resource']) if path = definition['resource']['path'] builder.sources << BuilderSources::ResponsePath.new({ source: underscore(path), target: :data, }) end Operations::ResourceOperation.new( request: define_request(definition['request']), builder: builder, source: source(definition) ) end
build_resource_classes(namespace)
click to toggle source
# File lib/aws-sdk-resources/definition.rb, line 34 def build_resource_classes(namespace) each_definition do |name, definition| resource_class = Class.new(Resource) resource_class.client_class = namespace::Client resource_class.resource_name = name (definition['identifiers'] || []).each do |identifier| resource_class.add_identifier(underscore(identifier['name'])) end namespace.const_set(name, resource_class) end end
build_waiter_operation(namespace, resource, definition)
click to toggle source
# File lib/aws-sdk-resources/definition.rb, line 149 def build_waiter_operation(namespace, resource, definition) Operations::WaiterOperation.new( waiter_name: underscore(definition['waiterName']).to_sym, waiter_params: request_params(definition['params']), path: underscore(definition['path']) ) end
builder_sources(sources)
click to toggle source
# File lib/aws-sdk-resources/definition.rb, line 239 def builder_sources(sources) sources.map do |definition| send("#{definition['source']}_builder_source", definition) end end
data_attribute_is_an_identifier?(attr_name, resource, definition)
click to toggle source
# File lib/aws-sdk-resources/definition.rb, line 76 def data_attribute_is_an_identifier?(attr_name, resource, definition) resource.identifiers.include?(attr_name) || definition['identifiers'].any? { |i| underscore(i['dataMember']) == attr_name.to_s } end
data_builder_source(definition)
click to toggle source
# File lib/aws-sdk-resources/definition.rb, line 258 def data_builder_source(definition) BuilderSources::DataMember.new({ source: underscore(definition['path']), target: underscore(definition['target']), }) end
data_request_param(definition)
click to toggle source
# File lib/aws-sdk-resources/definition.rb, line 187 def data_request_param(definition) RequestParams::DataMember.new({ target: underscore(definition['target']), value: underscore(definition['path']), }) end
define_actions(namespace, resource, actions)
click to toggle source
# File lib/aws-sdk-resources/definition.rb, line 90 def define_actions(namespace, resource, actions) actions.each do |name, action| operation = build_operation(namespace, resource, action) resource.add_operation(underscore(name), operation) end end
define_batch_actions(namespace, resource, batch_actions)
click to toggle source
# File lib/aws-sdk-resources/definition.rb, line 52 def define_batch_actions(namespace, resource, batch_actions) batch_actions.each do |name, definition| method_name = underscore(name) operation = build_operation(namespace, resource, definition) resource.add_batch_operation(method_name, operation) end end
define_builder(namespace, definition)
click to toggle source
# File lib/aws-sdk-resources/definition.rb, line 232 def define_builder(namespace, definition) Builder.new( resource_class: namespace.const_get(definition['type']), sources: builder_sources(definition['identifiers'] || []) ) end
define_data_attributes(namespace, resource, definition)
click to toggle source
# File lib/aws-sdk-resources/definition.rb, line 60 def define_data_attributes(namespace, resource, definition) if shape_name = definition['shape'] shape = resource.client_class.api.metadata['shapes'][shape_name] shape.member_names.each do |member_name| if resource.instance_methods.include?(member_name) || data_attribute_is_an_identifier?(member_name, resource, definition) then next # some data attributes are duplicates to identifiers else resource.add_data_attribute(member_name) end end end end
define_has(namespace, resource, has)
click to toggle source
# File lib/aws-sdk-resources/definition.rb, line 212 def define_has(namespace, resource, has) has.each do |name, definition| has_operation(namespace, resource, name, definition) end end
define_has_many(namespace, resource, has_many)
click to toggle source
# File lib/aws-sdk-resources/definition.rb, line 205 def define_has_many(namespace, resource, has_many) has_many.each do |name, definition| operation = has_many(namespace, resource, definition) resource.add_operation(underscore(name), operation) end end
define_load(namespace, resource, definition)
click to toggle source
# File lib/aws-sdk-resources/definition.rb, line 81 def define_load(namespace, resource, definition) return unless definition resource.load_operation = Operations::LoadOperation.new( request: define_request(definition['request']), path: underscore(definition['path']), source: source(definition), ) end
define_request(definition)
click to toggle source
# File lib/aws-sdk-resources/definition.rb, line 167 def define_request(definition) Request.new( method_name: underscore(definition['operation']), params: request_params(definition['params'] || []) ) end
define_waiters(namespace, resource, waiters)
click to toggle source
# File lib/aws-sdk-resources/definition.rb, line 97 def define_waiters(namespace, resource, waiters) waiters.each do |name, definition| operation = build_waiter_operation(namespace, resource, definition) resource.add_operation("wait_until_#{underscore(name)}", operation) end end
each_definition() { |'Resource', svc_definition| ... }
click to toggle source
# File lib/aws-sdk-resources/definition.rb, line 287 def each_definition(&block) yield('Resource', svc_definition) resource_definitions.each(&block) end
each_resource_class(namespace) { |const, definition| ... }
click to toggle source
# File lib/aws-sdk-resources/definition.rb, line 46 def each_resource_class(namespace, &block) each_definition do |name, definition| yield(namespace.const_get(name), definition) end end
has_many(namespace, resource, definition)
click to toggle source
# File lib/aws-sdk-resources/definition.rb, line 134 def has_many(namespace, resource, definition) builder = define_builder(namespace, definition['resource']) if path = definition['resource']['path'] builder.sources << BuilderSources::ResponsePath.new({ source: underscore(path), target: :data, }) end Operations::HasManyOperation.new( request: define_request(definition['request']), builder: builder, source: source(definition), limit_key: limit_key(resource, definition)) end
has_operation(namespace, resource, name, definition)
click to toggle source
# File lib/aws-sdk-resources/definition.rb, line 218 def has_operation(namespace, resource, name, definition) builder = define_builder(namespace, definition['resource']) if path = definition['resource']['path'] builder.sources << BuilderSources::DataMember.new({ source: underscore(path), target: :data, }) end operation = Operations::HasOperation.new( builder: builder, source: source(definition)) resource.add_operation(underscore(name), operation) end
identifier_builder_source(definition)
click to toggle source
# File lib/aws-sdk-resources/definition.rb, line 251 def identifier_builder_source(definition) BuilderSources::Identifier.new({ source: underscore(definition['name']), target: underscore(definition['target']), }) end
identifier_request_param(definition)
click to toggle source
# File lib/aws-sdk-resources/definition.rb, line 180 def identifier_request_param(definition) RequestParams::Identifier.new({ target: underscore(definition['target']), name: underscore(definition['name']).to_sym, }) end
input_builder_source(definition)
click to toggle source
# File lib/aws-sdk-resources/definition.rb, line 245 def input_builder_source(definition) BuilderSources::Argument.new({ target: underscore(definition['target']), }) end
limit_key(resource, definition)
click to toggle source
# File lib/aws-sdk-resources/definition.rb, line 157 def limit_key(resource, definition) operation_name = definition['request']['operation'] operation = resource.client_class.api.operation(underscore(operation_name)) if operation[:pager] operation[:pager].limit_key else nil end end
requestParameter_builder_source(definition)
click to toggle source
# File lib/aws-sdk-resources/definition.rb, line 265 def requestParameter_builder_source(definition) BuilderSources::RequestParameter.new({ source: underscore(definition['path']), target: underscore(definition['target']), }) end
request_params(params)
click to toggle source
# File lib/aws-sdk-resources/definition.rb, line 174 def request_params(params) params.map do |definition| send("#{definition['source']}_request_param", definition) end end
resource_definitions()
click to toggle source
# File lib/aws-sdk-resources/definition.rb, line 283 def resource_definitions @source['resources'] || {} end
response_builder_source(definition)
click to toggle source
# File lib/aws-sdk-resources/definition.rb, line 272 def response_builder_source(definition) BuilderSources::ResponsePath.new({ source: underscore(definition['path']), target: underscore(definition['target']), }) end
source(definition)
click to toggle source
# File lib/aws-sdk-resources/definition.rb, line 298 def source(definition) if ENV['SOURCE'] Source.new(definition, @source_path) else nil end end
string_request_param(definition)
click to toggle source
# File lib/aws-sdk-resources/definition.rb, line 194 def string_request_param(definition) RequestParams::Literal.new({ target: underscore(definition['target']), value: definition['value'], }) end
Also aliased as: integer_request_param, float_request_param, boolean_request_param, null_request_param
svc_definition()
click to toggle source
# File lib/aws-sdk-resources/definition.rb, line 279 def svc_definition @source['service'] || {} end
underscore(str)
click to toggle source
# File lib/aws-sdk-resources/definition.rb, line 292 def underscore(str) if str str.gsub(/\w+/) { |part| Seahorse::Util.underscore(part) } end end