Super!
On Sat, Mar 22, 2014 at 11:15 AM, Sven Van Caekenberghe <[email protected]>wrote: > Phil, > > I finally found time to look in to this in detail and added a test with > inheritance. > > In #bleedingEdge: > > === > Name: Neo-JSON-Core-SvenVanCaekenberghe.25 > Author: SvenVanCaekenberghe > Time: 22 March 2014, 11:03:31.510538 am > UUID: 3051cd7d-a857-4aee-b5ba-d56a4085517b > Ancestors: Neo-JSON-Core-SvenVanCaekenberghe.24 > > Added basic support for mapping using inheritance when using > #neoJonMapping : (see #testObject3) > Renamed #new[Custom|Object]MappingFor: to [custom|object]MappingFor: to > better reflect the new behavior > Thanks Philippe Back for making these suggestions! > === > Name: Neo-JSON-Tests-SvenVanCaekenberghe.23 > Author: SvenVanCaekenberghe > Time: 22 March 2014, 11:04:11.513921 am > UUID: 27fad240-c6b9-4d00-a4e6-6e49fd612dfb > Ancestors: Neo-JSON-Tests-SvenVanCaekenberghe.22 > > Added basic support for mapping using inheritance when using > #neoJonMapping : (see #testObject3) > Renamed #new[Custom|Object]MappingFor: to [custom|object]MappingFor: to > better reflect the new behavior > Thanks Philippe Back for making these suggestions! > === > > On 17 Mar 2014, at 18:01, [email protected] wrote: > > > NeoJSONMapper>>newObjectMappingFor: smalltalkClass > > | mapping | > > > > mapping := self mappings at: smalltalkClass ifAbsent: [ > > mapping := NeoJSONObjectMapping new. > > mapping subjectClass: smalltalkClass. > > self mappings at: smalltalkClass put: mapping. > > ]. > > > > ^ mapping > > > > > > works better ... > > #at:ifAbsentPut: is even better ;-) > > Regards, > > Sven > > > Phil > > > > On Mon, Mar 17, 2014 at 5:40 PM, [email protected] <[email protected]> > wrote: > > 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 > > > > > > > > > >
