class Aws::Api::Builder

Public Class Methods

build(definition, options = {}) click to toggle source
# File lib/aws-sdk-core/api/builder.rb, line 8
def build(definition, options = {})
  if Seahorse::Model::Api === definition
    definition
  else
    Builder.new.build(customize(load_definition(definition)), options)
  end
end

Private Class Methods

customize(definition) click to toggle source
# File lib/aws-sdk-core/api/builder.rb, line 27
def customize(definition)
  Customizations.apply_api_customizations(definition)
  definition
end
load_definition(definition) click to toggle source
# File lib/aws-sdk-core/api/builder.rb, line 18
def load_definition(definition)
  case definition
  when nil then {}
  when Hash then definition
  when String, Pathname then Json.load_file(definition)
  else raise ArgumentError, "invalid api definition #{definition}"
  end
end

Public Instance Methods

build(definition, options = {}) click to toggle source

@param [Hash] definition @return [Seahorse::Model::Api]

# File lib/aws-sdk-core/api/builder.rb, line 36
def build(definition, options = {})
  docs = build_docstring_provider(options)
  api = build_api(definition)
  shapes = build_shape_map(definition, api, docs)
  build_operations(definition, api, shapes, docs)
  build_struct_classes(shapes, options)
  api
end

Private Instance Methods

build_api(definition) click to toggle source
# File lib/aws-sdk-core/api/builder.rb, line 55
def build_api(definition)
  api = Seahorse::Model::Api.new
  api.metadata = definition['metadata'] || {}
  api.version = api.metadata['apiVersion']
  api
end
build_docstring_provider(options) click to toggle source
# File lib/aws-sdk-core/api/builder.rb, line 47
def build_docstring_provider(options)
  if options[:docs] && ENV['DOCSTRINGS']
    Docs::DocstringProvider.new(Json.load_file(options[:docs]))
  else
    Docs::NullDocstringProvider.new
  end
end
build_operation(name, definition, shapes, docs) click to toggle source
# File lib/aws-sdk-core/api/builder.rb, line 74
def build_operation(name, definition, shapes, docs)
  http = definition['http'] || {}
  op = Seahorse::Model::Operation.new
  op.name = name
  op.http_method = http['method']
  op.http_request_uri = http['requestUri'] || '/'
  op.documentation = docs.operation_docs(name)
  op.deprecated = !!definition['deprecated']
  op.input = shapes.shape_ref(definition['input'])
  op.output = shapes.shape_ref(definition['output'])
  (definition['errors'] || []).each do |error|
    op.errors << shapes.shape_ref(error)
  end
  op
end
build_operations(definitions, api, shapes, docs) click to toggle source
# File lib/aws-sdk-core/api/builder.rb, line 67
def build_operations(definitions, api, shapes, docs)
  (definitions['operations'] || {}).each do |name, definition|
    operation = build_operation(name, definition, shapes, docs)
    api.add_operation(underscore(name), operation)
  end
end
build_shape_map(definition, api, docs) click to toggle source
# File lib/aws-sdk-core/api/builder.rb, line 62
def build_shape_map(definition, api, docs)
  shapes = definition['shapes'] || {}
  api.metadata['shapes'] = ShapeMap.new(shapes, docs: docs)
end
build_struct_classes(shapes, options) click to toggle source
# File lib/aws-sdk-core/api/builder.rb, line 90
def build_struct_classes(shapes, options)
  type_builder = options[:type_builder] || TypeBuilder.new(Module.new)
  shapes.each_structure do |shape|
    shape[:struct_class] = type_builder.build_type(shape, shapes)
  end
end
underscore(str) click to toggle source
# File lib/aws-sdk-core/api/builder.rb, line 97
def underscore(str)
  Seahorse::Util.underscore(str).to_sym
end