The "super" thing doesn't work. I have spent a while tracing what was occuring with the custom mappings.
If in a subclass I do: neoJsonMapping: aMapper super neoJsonMapping: aMapper. aMapper for: self do: [ :mapping | mapping mapProperty: 'startDate' getter: [ :filter | filter startDate ] setter: [ :filter :value | filter startDate: value ]; mapProperty: 'endDate' getter: [ :filter | filter endDate ] setter: [ :filter :value | filter endDate: value ]. ] and in the superclass: neoJsonMapping: aMapper aMapper for: self do: [ :mapping | mapping mapInstVar: #id to: 'id'. ] (do not pay attention to mapInstVar or mapProperty, I was figuring out how things worked). Thing is that the mapping goes fine up to one point. super neoJsonMapping: aMapper indeed puts the right 'id' mapping but then aMapper for:: self do: [ ... does for: smalltalkClass do: block "Create and add a new standard object mapping for smalltalkClass. The code in block should further customize the mapping." | mapping | mapping := self newObjectMappingFor: smalltalkClass. block value: mapping. ^ mapping which in turn: newObjectMappingFor: smalltalkClass | mapping | mapping := NeoJSONObjectMapping new. mapping subjectClass: smalltalkClass. self mappings at: smalltalkClass put: mapping. ^ mapping Argh: self mappings at: smalltalkClass put: mapping. Overwrites the existing contents. So, only the entries of the subclass are left. I guess that's a bug. I'd do: newObjectMappingFor: smalltalkClass | mapping | mapping := self mappings at: smalltalkClass. mapping ifNil: [ mapping := NeoJSONObjectMapping new. mapping subjectClass: smalltalkClass. self mappings at: smalltalkClass put: mapping. ]. ^ mapping instead. Does this look right? mapping := self newObjectMappingFor: smalltalkClass. isn't then really intention revealing. Shouldn't we rename that to objectMappingFor: smalltalkClass Phil On Fri, Sep 27, 2013 at 7:07 PM, Sven Van Caekenberghe <[email protected]> wrote: > Norbert, > > On 26 Sep 2013, at 11:32, Norbert Hartl <[email protected]> wrote: > > > How is inheritance supposed to work in NeoJSON? I only figured it out by > doing that manually: > > > > neoJsonMapping: aMapper > > super neoJsonMapping: aMapper. > > (aMapper mappingFor: self) > > mapInstVar: #longitude; > > mapInstVar: #latitude. > > > > Is there a better way to do? > > > > Norbert > > What you figured out yourself is the only inheritance that is available. > > The thing is, schema names (which can be plain Symbols or Class objects) > are meant to be used for things like #ArrayOfPoints, > #DictionaryWithUserValues which tell something about subtypes. I hurts to > think of an inheritance for that ;-) > > Sven > >
