@@ -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 )
0 commit comments