Skip to content

Commit db72a98

Browse files
authored
Add name field to shapes (#314)
1 parent aa0101b commit db72a98

6 files changed

Lines changed: 58 additions & 51 deletions

File tree

gems/smithy-schema/lib/smithy-schema/shapes.rb

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,17 @@ module Shapes
88
class Shape
99
def initialize(options = {})
1010
@id = options[:id]
11+
@name = options[:name]
1112
@traits = options[:traits] || {}
1213
@metadata = {}
1314
end
1415

15-
# @return [String, nil] Absolute shape ID from model
16+
# @return [String] Absolute shape ID from model
1617
attr_accessor :id
1718

19+
# @return [String] Shape name
20+
attr_accessor :name
21+
1822
# @return [Hash<String, Object>]
1923
attr_accessor :traits
2024

@@ -40,13 +44,13 @@ def initialize(options = {})
4044
end
4145

4246
# @return [Shape]
43-
attr_reader :shape
47+
attr_accessor :shape
4448

4549
# @return [String, nil]
46-
attr_reader :member_name
50+
attr_accessor :member_name
4751

4852
# @return [Hash<String, Object>]
49-
attr_reader :traits
53+
attr_accessor :traits
5054

5155
# @return [Object]
5256
def [](key)
@@ -268,10 +272,10 @@ def initialize(options = {})
268272
attr_accessor :members
269273

270274
# @return [Hash<Symbol, Class>]
271-
attr_reader :member_types
275+
attr_accessor :member_types
272276

273277
# @return [Hash<Class, [String, ShapeRef]>]
274-
attr_reader :members_by_type
278+
attr_accessor :members_by_type
275279

276280
# @return [Class]
277281
attr_accessor :type

gems/smithy-schema/sig/smithy-schema/shapes.rbs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ module Smithy
44
class Shape
55
def initialize: (?Hash[Symbol, untyped]) ?{ (self) -> void } -> void
66

7-
attr_accessor id: String?
7+
attr_accessor id: String
8+
attr_accessor name: String
89
attr_accessor traits: Hash[String, untyped]
910
def []: (Symbol) -> Object
1011
def []=: (Symbol, Object) -> void
@@ -13,9 +14,9 @@ module Smithy
1314
class ShapeRef
1415
def initialize: (?Hash[Symbol, untyped]) -> void
1516

16-
attr_reader shape: Shape
17-
attr_reader member_name: String?
18-
attr_reader traits: Hash[String, untyped]
17+
attr_accessor shape: Shape
18+
attr_accessor member_name: String?
19+
attr_accessor traits: Hash[String, untyped]
1920
def []: (Symbol) -> Object
2021
def []=: (Symbol, Object) -> void
2122
end

gems/smithy-schema/spec/smithy-schema/shapes_spec.rb

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,13 @@ module Shapes
1414
end
1515

1616
it 'can set id' do
17-
subject = Shape.new(id: 'foo')
18-
expect(subject.id).to eq('foo')
17+
subject = Shape.new(id: 'my.namespace#ShapeId')
18+
expect(subject.id).to eq('my.namespace#ShapeId')
19+
end
20+
21+
it 'can set name' do
22+
subject = Shape.new(name: 'ShapeName')
23+
expect(subject.name).to eq('ShapeName')
1924
end
2025

2126
it 'defaults traits to empty hash' do

gems/smithy/lib/smithy/views/client/schema.rb

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -156,17 +156,14 @@ def initialize(service, id, shape)
156156
@shape = shape
157157
@type = shape['type']
158158
@traits = shape.fetch('traits', {}).except(*OMITTED_TRAITS)
159+
@name = (@service.dig('rename', @id) || Model::Shape.name(@id)).camelize
159160
end
160161

161-
attr_reader :type, :id
162-
163-
def name
164-
(@service.dig('rename', @id) || Model::Shape.name(@id)).camelize
165-
end
162+
attr_reader :type, :id, :name
166163

167164
def initializer
168165
traits_str = ", traits: #{@traits}" unless @traits.empty?
169-
"Smithy::Schema::Shapes::#{SHAPE_CLASS_MAP[@type]}.new(id: '#{@id}'#{traits_str})"
166+
"Smithy::Schema::Shapes::#{SHAPE_CLASS_MAP[@type]}.new(id: '#{@id}', name: '#{@name}'#{traits_str})"
170167
end
171168
end
172169

projections/shapes/lib/shapes/schema.rb

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -6,27 +6,27 @@ module ShapeService
66
# This module contains a schema composed of shapes used by the client.
77
module Schema
88

9-
BigDecimal = Smithy::Schema::Shapes::BigDecimalShape.new(id: 'smithy.ruby.tests#BigDecimal', traits: {"smithy.ruby.tests#shape" => {}})
10-
BigInteger = Smithy::Schema::Shapes::IntegerShape.new(id: 'smithy.ruby.tests#BigInteger', traits: {"smithy.ruby.tests#shape" => {}})
11-
Blob = Smithy::Schema::Shapes::BlobShape.new(id: 'smithy.ruby.tests#Blob', traits: {"smithy.ruby.tests#shape" => {}})
12-
Boolean = Smithy::Schema::Shapes::BooleanShape.new(id: 'smithy.ruby.tests#Boolean', traits: {"smithy.ruby.tests#shape" => {}})
13-
Byte = Smithy::Schema::Shapes::IntegerShape.new(id: 'smithy.ruby.tests#Byte', traits: {"smithy.ruby.tests#shape" => {}})
14-
Document = Smithy::Schema::Shapes::DocumentShape.new(id: 'smithy.ruby.tests#Document', traits: {"smithy.ruby.tests#shape" => {}})
15-
Double = Smithy::Schema::Shapes::FloatShape.new(id: 'smithy.ruby.tests#Double', traits: {"smithy.ruby.tests#shape" => {}})
16-
Enum = Smithy::Schema::Shapes::EnumShape.new(id: 'smithy.ruby.tests#Enum', traits: {"smithy.ruby.tests#shape" => {}})
17-
Float = Smithy::Schema::Shapes::FloatShape.new(id: 'smithy.ruby.tests#Float', traits: {"smithy.ruby.tests#shape" => {}})
18-
IntEnum = Smithy::Schema::Shapes::IntEnumShape.new(id: 'smithy.ruby.tests#IntEnum', traits: {"smithy.ruby.tests#shape" => {}})
19-
Integer = Smithy::Schema::Shapes::IntegerShape.new(id: 'smithy.ruby.tests#Integer', traits: {"smithy.ruby.tests#shape" => {}})
20-
List = Smithy::Schema::Shapes::ListShape.new(id: 'smithy.ruby.tests#List', traits: {"smithy.ruby.tests#shape" => {}})
21-
Long = Smithy::Schema::Shapes::IntegerShape.new(id: 'smithy.ruby.tests#Long', traits: {"smithy.ruby.tests#shape" => {}})
22-
Map = Smithy::Schema::Shapes::MapShape.new(id: 'smithy.ruby.tests#Map', traits: {"smithy.ruby.tests#shape" => {}})
23-
OperationInput = Smithy::Schema::Shapes::StructureShape.new(id: 'smithy.ruby.tests#OperationInput')
24-
OperationOutput = Smithy::Schema::Shapes::StructureShape.new(id: 'smithy.ruby.tests#OperationOutput')
25-
Short = Smithy::Schema::Shapes::IntegerShape.new(id: 'smithy.ruby.tests#Short', traits: {"smithy.ruby.tests#shape" => {}})
26-
String = Smithy::Schema::Shapes::StringShape.new(id: 'smithy.ruby.tests#String', traits: {"smithy.ruby.tests#shape" => {}})
27-
Structure = Smithy::Schema::Shapes::StructureShape.new(id: 'smithy.ruby.tests#Structure', traits: {"smithy.ruby.tests#shape" => {}})
28-
Timestamp = Smithy::Schema::Shapes::TimestampShape.new(id: 'smithy.ruby.tests#Timestamp', traits: {"smithy.ruby.tests#shape" => {}})
29-
Union = Smithy::Schema::Shapes::UnionShape.new(id: 'smithy.ruby.tests#Union', traits: {"smithy.ruby.tests#shape" => {}})
9+
BigDecimal = Smithy::Schema::Shapes::BigDecimalShape.new(id: 'smithy.ruby.tests#BigDecimal', name: 'BigDecimal', traits: {"smithy.ruby.tests#shape" => {}})
10+
BigInteger = Smithy::Schema::Shapes::IntegerShape.new(id: 'smithy.ruby.tests#BigInteger', name: 'BigInteger', traits: {"smithy.ruby.tests#shape" => {}})
11+
Blob = Smithy::Schema::Shapes::BlobShape.new(id: 'smithy.ruby.tests#Blob', name: 'Blob', traits: {"smithy.ruby.tests#shape" => {}})
12+
Boolean = Smithy::Schema::Shapes::BooleanShape.new(id: 'smithy.ruby.tests#Boolean', name: 'Boolean', traits: {"smithy.ruby.tests#shape" => {}})
13+
Byte = Smithy::Schema::Shapes::IntegerShape.new(id: 'smithy.ruby.tests#Byte', name: 'Byte', traits: {"smithy.ruby.tests#shape" => {}})
14+
Document = Smithy::Schema::Shapes::DocumentShape.new(id: 'smithy.ruby.tests#Document', name: 'Document', traits: {"smithy.ruby.tests#shape" => {}})
15+
Double = Smithy::Schema::Shapes::FloatShape.new(id: 'smithy.ruby.tests#Double', name: 'Double', traits: {"smithy.ruby.tests#shape" => {}})
16+
Enum = Smithy::Schema::Shapes::EnumShape.new(id: 'smithy.ruby.tests#Enum', name: 'Enum', traits: {"smithy.ruby.tests#shape" => {}})
17+
Float = Smithy::Schema::Shapes::FloatShape.new(id: 'smithy.ruby.tests#Float', name: 'Float', traits: {"smithy.ruby.tests#shape" => {}})
18+
IntEnum = Smithy::Schema::Shapes::IntEnumShape.new(id: 'smithy.ruby.tests#IntEnum', name: 'IntEnum', traits: {"smithy.ruby.tests#shape" => {}})
19+
Integer = Smithy::Schema::Shapes::IntegerShape.new(id: 'smithy.ruby.tests#Integer', name: 'Integer', traits: {"smithy.ruby.tests#shape" => {}})
20+
List = Smithy::Schema::Shapes::ListShape.new(id: 'smithy.ruby.tests#List', name: 'List', traits: {"smithy.ruby.tests#shape" => {}})
21+
Long = Smithy::Schema::Shapes::IntegerShape.new(id: 'smithy.ruby.tests#Long', name: 'Long', traits: {"smithy.ruby.tests#shape" => {}})
22+
Map = Smithy::Schema::Shapes::MapShape.new(id: 'smithy.ruby.tests#Map', name: 'Map', traits: {"smithy.ruby.tests#shape" => {}})
23+
OperationInput = Smithy::Schema::Shapes::StructureShape.new(id: 'smithy.ruby.tests#OperationInput', name: 'OperationInput')
24+
OperationOutput = Smithy::Schema::Shapes::StructureShape.new(id: 'smithy.ruby.tests#OperationOutput', name: 'OperationOutput')
25+
Short = Smithy::Schema::Shapes::IntegerShape.new(id: 'smithy.ruby.tests#Short', name: 'Short', traits: {"smithy.ruby.tests#shape" => {}})
26+
String = Smithy::Schema::Shapes::StringShape.new(id: 'smithy.ruby.tests#String', name: 'String', traits: {"smithy.ruby.tests#shape" => {}})
27+
Structure = Smithy::Schema::Shapes::StructureShape.new(id: 'smithy.ruby.tests#Structure', name: 'Structure', traits: {"smithy.ruby.tests#shape" => {}})
28+
Timestamp = Smithy::Schema::Shapes::TimestampShape.new(id: 'smithy.ruby.tests#Timestamp', name: 'Timestamp', traits: {"smithy.ruby.tests#shape" => {}})
29+
Union = Smithy::Schema::Shapes::UnionShape.new(id: 'smithy.ruby.tests#Union', name: 'Union', traits: {"smithy.ruby.tests#shape" => {}})
3030

3131
Enum.add_member(:foo, Smithy::Schema::Shapes::ShapeRef.new(shape: Smithy::Schema::Shapes::Prelude::Unit, member_name: 'FOO', traits: {"smithy.api#enumValue" => "bar"}))
3232
IntEnum.add_member(:baz, Smithy::Schema::Shapes::ShapeRef.new(shape: Smithy::Schema::Shapes::Prelude::Unit, member_name: 'BAZ', traits: {"smithy.api#enumValue" => 1}))

projections/weather/lib/weather/schema.rb

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,18 @@ module Weather
66
# This module contains a schema composed of shapes used by the client.
77
module Schema
88

9-
CityCoordinates = Smithy::Schema::Shapes::StructureShape.new(id: 'example.weather#CityCoordinates')
10-
CityId = Smithy::Schema::Shapes::StringShape.new(id: 'example.weather#CityId', traits: {"smithy.api#pattern" => "^[A-Za-z0-9 ]+$"})
11-
CitySummaries = Smithy::Schema::Shapes::ListShape.new(id: 'example.weather#CitySummaries')
12-
CitySummary = Smithy::Schema::Shapes::StructureShape.new(id: 'example.weather#CitySummary', traits: {"smithy.api#references" => [{"resource" => "example.weather#City"}]})
13-
GetCityInput = Smithy::Schema::Shapes::StructureShape.new(id: 'example.weather#GetCityInput')
14-
GetCityOutput = Smithy::Schema::Shapes::StructureShape.new(id: 'example.weather#GetCityOutput')
15-
GetCurrentTimeOutput = Smithy::Schema::Shapes::StructureShape.new(id: 'example.weather#GetCurrentTimeOutput')
16-
GetForecastInput = Smithy::Schema::Shapes::StructureShape.new(id: 'example.weather#GetForecastInput')
17-
GetForecastOutput = Smithy::Schema::Shapes::StructureShape.new(id: 'example.weather#GetForecastOutput')
18-
ListCitiesInput = Smithy::Schema::Shapes::StructureShape.new(id: 'example.weather#ListCitiesInput')
19-
ListCitiesOutput = Smithy::Schema::Shapes::StructureShape.new(id: 'example.weather#ListCitiesOutput')
20-
NoSuchResource = Smithy::Schema::Shapes::StructureShape.new(id: 'example.weather#NoSuchResource', traits: {"smithy.api#error" => "client"})
9+
CityCoordinates = Smithy::Schema::Shapes::StructureShape.new(id: 'example.weather#CityCoordinates', name: 'CityCoordinates')
10+
CityId = Smithy::Schema::Shapes::StringShape.new(id: 'example.weather#CityId', name: 'CityId', traits: {"smithy.api#pattern" => "^[A-Za-z0-9 ]+$"})
11+
CitySummaries = Smithy::Schema::Shapes::ListShape.new(id: 'example.weather#CitySummaries', name: 'CitySummaries')
12+
CitySummary = Smithy::Schema::Shapes::StructureShape.new(id: 'example.weather#CitySummary', name: 'CitySummary', traits: {"smithy.api#references" => [{"resource" => "example.weather#City"}]})
13+
GetCityInput = Smithy::Schema::Shapes::StructureShape.new(id: 'example.weather#GetCityInput', name: 'GetCityInput')
14+
GetCityOutput = Smithy::Schema::Shapes::StructureShape.new(id: 'example.weather#GetCityOutput', name: 'GetCityOutput')
15+
GetCurrentTimeOutput = Smithy::Schema::Shapes::StructureShape.new(id: 'example.weather#GetCurrentTimeOutput', name: 'GetCurrentTimeOutput')
16+
GetForecastInput = Smithy::Schema::Shapes::StructureShape.new(id: 'example.weather#GetForecastInput', name: 'GetForecastInput')
17+
GetForecastOutput = Smithy::Schema::Shapes::StructureShape.new(id: 'example.weather#GetForecastOutput', name: 'GetForecastOutput')
18+
ListCitiesInput = Smithy::Schema::Shapes::StructureShape.new(id: 'example.weather#ListCitiesInput', name: 'ListCitiesInput')
19+
ListCitiesOutput = Smithy::Schema::Shapes::StructureShape.new(id: 'example.weather#ListCitiesOutput', name: 'ListCitiesOutput')
20+
NoSuchResource = Smithy::Schema::Shapes::StructureShape.new(id: 'example.weather#NoSuchResource', name: 'NoSuchResource', traits: {"smithy.api#error" => "client"})
2121

2222
CityCoordinates.add_member(:latitude, Smithy::Schema::Shapes::ShapeRef.new(shape: Smithy::Schema::Shapes::Prelude::Float, member_name: 'latitude', traits: {"smithy.api#required" => {}}))
2323
CityCoordinates.add_member(:longitude, Smithy::Schema::Shapes::ShapeRef.new(shape: Smithy::Schema::Shapes::Prelude::Float, member_name: 'longitude', traits: {"smithy.api#required" => {}}))

0 commit comments

Comments
 (0)