class Aws::ParamConverter
@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 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 96 def add(shape_class, value_class, converter = nil, &block) @converters[shape_class][value_class] = converter || block end
c(shape, value)
click to toggle source
@api private
# File lib/aws-sdk-core/param_converter.rb, line 101 def c(shape, value) if converter = converter_for(shape, value) converter.call(value) else value end end
convert(shape, params)
click to toggle source
# File lib/aws-sdk-core/param_converter.rb, line 77 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 111 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 136 def each_base_class(shape_class, &block) shape_class.ancestors.each do |ancestor| yield(ancestor) if @converters.key?(ancestor) end end
find(shape_class, value)
click to toggle source
# File lib/aws-sdk-core/param_converter.rb, line 122 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
convert(params)
click to toggle source
@param [Hash] params @return [Hash]
# File lib/aws-sdk-core/param_converter.rb, line 22 def convert(params) structure(@rules, params) end
Private Instance Methods
c(ref, value)
click to toggle source
# File lib/aws-sdk-core/param_converter.rb, line 71 def c(ref, value) self.class.c(ref.shape.class, value) end
list(ref, values)
click to toggle source
# File lib/aws-sdk-core/param_converter.rb, line 42 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 51 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 62 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 28 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