class Aws::ParamConverter

@api private

Attributes

opened_files[R]

@api private

Public Class Methods

new(rules) click to toggle source
# File lib/aws-sdk-core/param_converter.rb, line 16
def initialize(rules)
  @rules = rules
  @opened_files = []
end

Private Class Methods

add(shape_class, value_class, converter = nil, &block) click to toggle source

Registers a new value converter. Converters run in the context of a shape and value class.

# add a converter that stringifies integers
shape_class = Seahorse::Model::Shapes::StringShape
ParamConverter.add(shape_class, Integer) { |i| i.to_s }

@param [Class<Model::Shapes::Shape>] shape_class @param [Class] value_class @param [#call] converter (nil) An object that responds to `#call`

accepting a single argument.  This function should perform
the value conversion if possible, returning the result.
If the conversion is not possible, the original value should
be returned.

@return [void]

# File lib/aws-sdk-core/param_converter.rb, line 109
def add(shape_class, value_class, converter = nil, &block)
  @converters[shape_class][value_class] = converter || block
end
c(shape, value, instance = nil) click to toggle source

@api private

# File lib/aws-sdk-core/param_converter.rb, line 124
def c(shape, value, instance = nil)
  if converter = converter_for(shape, value)
    converter.call(value, instance)
  else
    value
  end
end
convert(shape, params) click to toggle source
# File lib/aws-sdk-core/param_converter.rb, line 90
def convert(shape, params)
  new(shape).convert(params)
end
converter_for(shape_class, value) click to toggle source
# File lib/aws-sdk-core/param_converter.rb, line 134
def converter_for(shape_class, value)
  unless @converters[shape_class].key?(value.class)
    @mutex.synchronize {
      unless @converters[shape_class].key?(value.class)
        @converters[shape_class][value.class] = find(shape_class, value)
      end
    }
  end
  @converters[shape_class][value.class]
end
each_base_class(shape_class) { |ancestor| ... } click to toggle source
# File lib/aws-sdk-core/param_converter.rb, line 159
def each_base_class(shape_class, &block)
  shape_class.ancestors.each do |ancestor|
    yield(ancestor) if @converters.key?(ancestor)
  end
end
ensure_open(file, converter) click to toggle source
# File lib/aws-sdk-core/param_converter.rb, line 113
def ensure_open(file, converter)
  if file.closed?
    new_file = File.open(file.path, 'rb')
    converter.opened_files << new_file
    new_file
  else
    file
  end
end
find(shape_class, value) click to toggle source
# File lib/aws-sdk-core/param_converter.rb, line 145
def find(shape_class, value)
  converter = nil
  each_base_class(shape_class) do |klass|
    @converters[klass].each do |value_class, block|
      if value_class === value
        converter = block
        break
      end
    end
    break if converter
  end
  converter
end

Public Instance Methods

close_opened_files() click to toggle source
# File lib/aws-sdk-core/param_converter.rb, line 34
def close_opened_files
  @opened_files.each(&:close)
  @opened_files = []
end
convert(params) click to toggle source

@param [Hash] params @return [Hash]

# File lib/aws-sdk-core/param_converter.rb, line 26
def convert(params)
  if @rules
    structure(@rules, params)
  else
    params
  end
end

Private Instance Methods

c(ref, value) click to toggle source
# File lib/aws-sdk-core/param_converter.rb, line 84
def c(ref, value)
  self.class.c(ref.shape.class, value, self)
end
list(ref, values) click to toggle source
# File lib/aws-sdk-core/param_converter.rb, line 55
def list(ref, values)
  values = c(ref, values)
  if values.is_a?(Array)
    values.map { |v| member(ref.shape.member, v) }
  else
    values
  end
end
map(ref, values) click to toggle source
# File lib/aws-sdk-core/param_converter.rb, line 64
def map(ref, values)
  values = c(ref, values)
  if values.is_a?(Hash)
    values.each.with_object({}) do |(key, value), hash|
      hash[member(ref.shape.key, key)] = member(ref.shape.value, value)
    end
  else
    values
  end
end
member(ref, value) click to toggle source
# File lib/aws-sdk-core/param_converter.rb, line 75
def member(ref, value)
  case ref.shape
  when StructureShape then structure(ref, value)
  when ListShape then list(ref, value)
  when MapShape then map(ref, value)
  else c(ref, value)
  end
end
structure(ref, values) click to toggle source
# File lib/aws-sdk-core/param_converter.rb, line 41
def structure(ref, values)
  values = c(ref, values)
  if Struct === values || Hash === values
    values.each_pair do |k, v|
      unless v.nil?
        if ref.shape.member?(k)
          values[k] = member(ref.shape.member(k), v)
        end
      end
    end
  end
  values
end