Skip to content

Commit 96ceedd

Browse files
committed
Fix some misallignments with the ruby tucana implementation
Signed-off-by: Dario Pranjic <96529060+Knerio@users.noreply.github.com>
1 parent 904236f commit 96ceedd

File tree

2 files changed

+52
-24
lines changed

2 files changed

+52
-24
lines changed

build/ruby/lib/tucana/shared/shared.data_type.rb

Lines changed: 19 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -177,11 +177,13 @@ def self.from_hash(config)
177177

178178
DataTypeIdentifier.class_eval do
179179
def to_h
180-
{
181-
data_type_identifier: self.data_type_identifier,
182-
generic_type: self.generic_type ? self.generic_type.to_h : nil,
183-
generic_key: self.generic_key,
184-
}
180+
if !self.data_type_identifier.empty?
181+
return { data_type_identifier: self.data_type_identifier }
182+
elsif !self.generic_type.nil?
183+
return { generic_type: self.generic_type.to_h }
184+
elsif !self.generic_key.nil?
185+
return { generic_key: self.generic_key }
186+
end
185187
end
186188

187189
def from_hash(config)
@@ -210,18 +212,18 @@ def self.from_hash(config)
210212
GenericType.class_eval do
211213
def to_h
212214
{
213-
data_type_identifier: self.data_type_identifier.to_h,
214-
generic_mapper: self.generic_mapper ? self.generic_mapper.to_h : nil,
215+
data_type_identifier: self.data_type_identifier,
216+
generic_mappers: self.generic_mappers.map(&:to_h),
215217
}
216218
end
217219

218220
def from_hash(config)
219221
if config.key?(:data_type_identifier)
220-
self.data_type_identifier = DataTypeIdentifier.from_hash(config.fetch(:data_type_identifier))
222+
self.data_type_identifier = config.fetch(:data_type_identifier)
221223
end
222224

223-
if config.key?(:generic_mapper)
224-
self.generic_mapper = GenericMapper.from_hash(config.fetch(:generic_mapper))
225+
if config.key?(:generic_mappers)
226+
self.generic_mappers = config.fetch(:generic_mappers).map { |mapper_config| GenericMapper.from_hash(mapper_config) }
225227
end
226228

227229
self
@@ -235,24 +237,17 @@ def self.from_hash(config)
235237
GenericMapper.class_eval do
236238
def to_h
237239
{
238-
data_type_identifier: self.data_type_identifier.to_h,
239-
generic_key: self.generic_key,
240-
source: self.source,
240+
target: self.target,
241+
source: self.source.to_h,
242+
generic_combinations: self.generic_combinations.map(&:to_h),
241243
}
242244
end
243245

244246
def from_hash(config)
245-
if config.keys.intersection([:data_type_identifier, :generic_key]).count > 1
246-
raise UnexpectedType, "Cannot have more than one type"
247-
end
248-
249-
if config.key?(:data_type_identifier)
250-
self.data_type_identifier = DataTypeIdentifier.from_hash(config.fetch(:data_type_identifier))
251-
elsif config.key?(:generic_key)
252-
self.generic_key = config.fetch(:generic_key)
253-
end
254-
255-
self.source = config[:source]
247+
self.target = config[:target]
248+
self.source = DataTypeIdentifier.from_hash(config.fetch(:source))
249+
self.generic_combinations = config.fetch(:generic_combinations, [])
250+
self
256251
end
257252

258253
def self.from_hash(config)

build/ruby/spec/tucana/shared/shared.data_type_spec.rb

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,39 @@
44

55
RSpec.describe Tucana::Shared::DefinitionDataTypeRule do
66
describe "#create" do
7+
context 'DataTypeIdentifier#to_h' do
8+
context 'generic_key' do
9+
it do
10+
expect(Tucana::Shared::DataTypeIdentifier.new(generic_key: 'T').to_h)
11+
.to eq({ generic_key: 'T' })
12+
end
13+
end
14+
context 'identifier' do
15+
it do
16+
expect(Tucana::Shared::DataTypeIdentifier.new(data_type_identifier: 'MyType').to_h)
17+
.to eq({ data_type_identifier: 'MyType' })
18+
end
19+
end
20+
context 'generic_type' do
21+
it do
22+
generic_type = Tucana::Shared::GenericType.new(
23+
data_type_identifier: 'some_identifier',
24+
generic_mappers: []
25+
)
26+
27+
data_type_identifier = Tucana::Shared::DataTypeIdentifier.new(generic_type: generic_type)
28+
29+
expect(data_type_identifier.to_h)
30+
.to eq({
31+
generic_type: {
32+
data_type_identifier: 'some_identifier',
33+
generic_mappers: []
34+
}
35+
})
36+
end
37+
end
38+
end
39+
740
context "with :contains_key variant" do
841
it "sets the contains_key field" do
942
config = { key: "test_key", data_type_identifier: { data_type_identifier: "test_type" } }

0 commit comments

Comments
 (0)