class Aws::Api::OperationDocumenter

Public Class Methods

new(options) click to toggle source
# File lib/aws-sdk-core/api/operation_documenter.rb, line 5
def initialize(options)
  @operation = options[:operation]
  @example = OperationExample.new(options)
end

Public Instance Methods

api_ref(shape) click to toggle source
# File lib/aws-sdk-core/api/operation_documenter.rb, line 47
def api_ref(shape)
  docs = shape.nil? ? '' : shape.documentation
  if docs && !docs.empty?
    "<div class=\"api-ref\">#{clean(docs)}</div>"
  end
end
clean(docs) click to toggle source
# File lib/aws-sdk-core/api/operation_documenter.rb, line 38
def clean(docs)
  docs = docs.gsub(/<!--.*?-->/, '')
  docs = docs.gsub(/<examples?>.+?<\/examples?>/, '')
  docs = docs.gsub(/<\/?note>/, '')
  docs = docs.gsub(/\{(\S+)\}/, '`{\1}`')
  docs = docs.gsub(/\s+/, ' ').strip
  docs
end
example() click to toggle source
# File lib/aws-sdk-core/api/operation_documenter.rb, line 34
def example
  @example
end
input() click to toggle source
# File lib/aws-sdk-core/api/operation_documenter.rb, line 10
def input
  params(nil) do
    if @operation.input
      lines = []
      if @operation.output
        lines << '<div class="param"><div class="entry"><span class="key">:response_target</span> => String, Pathname, File</div>Optional path to a file or file object where the HTTP response body should be written.</div>'
      end
      lines + structure(@operation.input, [])
    else
      []
    end
  end.join
end
output() click to toggle source
# File lib/aws-sdk-core/api/operation_documenter.rb, line 24
def output
  params(nil) do
    if @operation.output
      structure(@operation.output, [])
    else
      []
    end
  end.join
end

Private Instance Methods

entry(shape, key_name, value_type, required, visited) click to toggle source
# File lib/aws-sdk-core/api/operation_documenter.rb, line 117
def entry(shape, key_name, value_type, required, visited)
  classes = ['key']
  classes << 'required' if required
  line = '<div class="entry">'
  line << "<span class=\"#{classes.join(' ')}\">#{key_name.inspect}</span>"
  line << " => #{value_type}"
  line << '</div>'
  line
end
key_name(shape) click to toggle source
# File lib/aws-sdk-core/api/operation_documenter.rb, line 154
def key_name(shape)
  shape.key.metadata('shape')
end
key_type(shape) click to toggle source
# File lib/aws-sdk-core/api/operation_documenter.rb, line 142
def key_type(shape)
  shape_type(shape.key)
end
leaf?(shape) click to toggle source
# File lib/aws-sdk-core/api/operation_documenter.rb, line 162
def leaf?(shape)
  case shape
  when Seahorse::Model::Shapes::Structure then false
  when Seahorse::Model::Shapes::Map then false
  when Seahorse::Model::Shapes::List then leaf?(shape.member)
  else true
  end
end
list(shape, visited) click to toggle source
# File lib/aws-sdk-core/api/operation_documenter.rb, line 108
def list(shape, visited)
  case shape.member
  when Seahorse::Model::Shapes::Structure then structure(shape.member, visited)
  when Seahorse::Model::Shapes::Map then map(shape.member, visited)
  when Seahorse::Model::Shapes::List then raise NotImplementedError
  else [api_ref(shape)]
  end
end
map(shape, visited) click to toggle source
# File lib/aws-sdk-core/api/operation_documenter.rb, line 104
def map(shape, visited)
  param(shape.value, key_name(shape), value_type(shape), false, visited)
end
nested(shape, visited) click to toggle source
# File lib/aws-sdk-core/api/operation_documenter.rb, line 89
def nested(shape, visited)
  case shape
  when Seahorse::Model::Shapes::Structure then structure(shape, visited)
  when Seahorse::Model::Shapes::Map then map(shape, visited)
  when Seahorse::Model::Shapes::List then list(shape, visited)
  else [api_ref(shape)]
  end
end
nested_params(shape, visited) click to toggle source
# File lib/aws-sdk-core/api/operation_documenter.rb, line 81
def nested_params(shape, visited)
  if leaf?(shape)
    nested(shape, visited)
  else
    params(shape) { nested(shape, visited) }
  end
end
param(shape, key_name, value_type, required, visited) { |lines| ... } click to toggle source
# File lib/aws-sdk-core/api/operation_documenter.rb, line 64
def param(shape, key_name, value_type, required, visited, &block)
  lines = []
  lines << '<div class="param">'
  lines << entry(shape, key_name, value_type, required, visited)

  if visited.include?(shape)
    lines << "AttributeValue, recursive"
  else
    visited = visited + [shape]
    yield(lines) if block_given?
    lines += nested_params(shape, visited)
  end

  lines << '</div>'
  lines
end
params(shape) { |+ ['
']| ... } click to toggle source
# File lib/aws-sdk-core/api/operation_documenter.rb, line 56
def params(shape, &block)
  if shape && shape.name == 'AttributeValue'
    ['<p>An attribute value may be one of:<ul><li>`Hash`</li><li>`Array`</li><li>`String`</li><li>`Numeric`</li><li>`true` | `false`</li><li>`nil`</li><li>`IO`</li><li>`Set<String,Numeric,IO>`</li></ul></p>']
  else
    ['<div class="params">', api_ref(shape)] + yield + ['</div>']
  end
end
shape_type(shape) click to toggle source
# File lib/aws-sdk-core/api/operation_documenter.rb, line 127
def shape_type(shape)
  case shape
  when Seahorse::Model::Shapes::Structure then 'Hash'
  when Seahorse::Model::Shapes::Map then 'Hash'
  when Seahorse::Model::Shapes::List then "Array&lt;#{value_type(shape)}&gt;"
  when Seahorse::Model::Shapes::String then 'String'
  when Seahorse::Model::Shapes::Timestamp then 'Time'
  when Seahorse::Model::Shapes::Integer then 'Integer'
  when Seahorse::Model::Shapes::Float then 'Number'
  when Seahorse::Model::Shapes::Boolean then 'Boolean'
  when Seahorse::Model::Shapes::Blob then 'String,IO'
  else raise "unhandled type #{shape.type}"
  end
end
structure(shape, visited) click to toggle source
# File lib/aws-sdk-core/api/operation_documenter.rb, line 98
def structure(shape, visited)
  shape.members.inject([]) do |lines, (member_name, member_shape)|
    lines += param(member_shape, member_name, shape_type(member_shape), shape.required.include?(member_name), visited)
  end
end
value_name(shape) click to toggle source
# File lib/aws-sdk-core/api/operation_documenter.rb, line 158
def value_name(shape)
  shape.members.metadata('shape')
end
value_type(shape) click to toggle source
# File lib/aws-sdk-core/api/operation_documenter.rb, line 146
def value_type(shape)
  case shape
  when Seahorse::Model::Shapes::List then shape_type(shape.member)
  when Seahorse::Model::Shapes::Map then shape_type(shape.value)
  else raise 'stop'
  end
end