complex?(ref)
click to toggle source
def complex?(ref)
if StructureShape === ref.shape
!ddb_av?(ref)
else
ListShape === ref.shape || MapShape === ref.shape
end
end
complex_list(ref, i, visited)
click to toggle source
def complex_list(ref, i, visited)
"[\n#{i} #{ref_value(ref, i + ' ', visited)},\n#{i}]"
end
ddb_av?(ref)
click to toggle source
def ddb_av?(ref)
case ref.shape
when ListShape then ddb_av?(ref.shape.member)
when StructureShape then ref.shape.name == 'AttributeValue'
else false
end
end
enum_values(ref)
click to toggle source
def enum_values(ref)
case ref.shape
when ListShape then enum_values(ref.shape.member)
when StringShape then ref.shape.enum
else nil
end
end
list(ref, i, visited)
click to toggle source
def list(ref, i, visited)
if complex?(ref.shape.member)
complex_list(ref.shape.member, i, visited)
else
scalar_list(ref.shape.member, i, visited)
end
end
map(ref, i, visited)
click to toggle source
def map(ref, i, visited)
key = string(ref.shape.key)
value = ref_value(ref.shape.value, i + ' ', visited)
"{\n#{i} #{key} => #{value},#{comments(ref.shape.value)}\n#{i}}"
end
recursive?(ref)
click to toggle source
def recursive?(ref)
@recursive_shapes.include?(ref.shape)
end
ref_value(ref, i, visited)
click to toggle source
def ref_value(ref, i, visited)
if visited.include?(ref.shape)
return "{\n#{i} # recursive #{ref.shape.name}\n#{i}}"
else
visited = visited + [ref.shape]
end
case ref.shape
when StructureShape
if ref.shape.name == 'AttributeValue'
'"value"'
else
struct(ref, i, visited)
end
when BlobShape
if ref[:response_target]
'"/path/to/file"'
elsif ref[:streaming]
'source_file'
else
'"data"'
end
when ListShape then list(ref, i, visited)
when MapShape then map(ref, i, visited)
when BooleanShape then "true"
when IntegerShape then '1'
when FloatShape then '1.0'
when StringShape then string(ref)
when TimestampShape then 'Time.now'
else raise "unsupported shape #{ref.shape.class.name}"
end
end
scalar_list(ref, i, visited)
click to toggle source
def scalar_list(ref, i, visited)
"[#{ref_value(ref, i, visited)}]"
end
string(ref)
click to toggle source
def string(ref)
if ref.shape.enum
ref.shape.enum.first.inspect
elsif ref.shape.name
ref.shape.name.inspect
else
'"string"'
end
end
struct(ref, i, visited)
click to toggle source
def struct(ref, i, visited)
lines = ['{']
ref.shape.members.each do |member_name, member_ref|
lines << struct_member(member_name, member_ref, i, visited)
end
lines << "#{i}}"
lines.join("\n")
end
struct_member(member_name, member_ref, i, visited)
click to toggle source
def struct_member(member_name, member_ref, i, visited)
entry = "#{i} #{member_name}: #{ref_value(member_ref, i + ' ', visited)},"
apply_comments(member_ref, entry)
end