diff --git a/source/HOP-Core-Tests/HOPSegmentTest.class.st b/source/HOP-Core-Tests/HOPSegmentTest.class.st index 39a6c7d..7b07aa4 100644 --- a/source/HOP-Core-Tests/HOPSegmentTest.class.st +++ b/source/HOP-Core-Tests/HOPSegmentTest.class.st @@ -5,3 +5,25 @@ Class { #package : 'HOP-Core-Tests', #tag : 'Tests' } + +{ #category : 'tests' } +HOPSegmentTest >> testResolveClassIsShortForOneClass [ + + | segment | + segment := HOPVariableSegment new resolveClass: HOPUriSpaceTestClass1. + self assert: segment resolveClasses equals: { HOPUriSpaceTestClass1 }. + self + assertCollection: segment instanceMapClasses + hasSameElements: HOPUriSpaceTestClass1 hopExposedClasses +] + +{ #category : 'tests' } +HOPSegmentTest >> testResolveClassesExposesEveryClass [ + + | segment | + segment := HOPVariableSegment new resolveClasses: { + HOPUriSpaceTestClass1. + HOPUriSpaceTestClass2 }. + self assert: (segment instanceMapClasses includes: HOPUriSpaceTestClass1). + self assert: (segment instanceMapClasses includes: HOPUriSpaceTestClass2) +] diff --git a/source/HOP-Core/HOPVariableSegment.class.st b/source/HOP-Core/HOPVariableSegment.class.st index 36504c6..8aa7fbf 100644 --- a/source/HOP-Core/HOPVariableSegment.class.st +++ b/source/HOP-Core/HOPVariableSegment.class.st @@ -4,7 +4,7 @@ Class { #instVars : [ 'canonical', 'resourceRouteSelector', - 'resourceClass', + 'resourceClasses', 'segmentNameSelector', 'containerSelector' ], @@ -83,8 +83,8 @@ HOPVariableSegment >> initializePresenter [ { #category : 'accessing' } HOPVariableSegment >> instanceMapClasses [ - resourceClass ifNil: [ ^ nil ]. - ^ resourceClass hopExposedClasses + resourceClasses ifNil: [ ^ nil ]. + ^ resourceClasses flatCollect: [ :each | each hopExposedClasses ] ] { #category : 'testing' } @@ -122,8 +122,9 @@ HOPVariableSegment >> nodeLabel [ { #category : 'accessing' } HOPVariableSegment >> presenterClasses [ + "the classes resolved here may share presenters, each is registered once" - ^ resourceClass presenterClasses + ^ (resourceClasses flatCollect: [ :each | each presenterClasses ]) asOrderedCollection removeDuplicates ] { #category : 'accessing' } @@ -132,15 +133,23 @@ HOPVariableSegment >> priority [ ] { #category : 'accessing' } -HOPVariableSegment >> resolveClass [ +HOPVariableSegment >> resolveClass: aClass [ + "short form for a segment that resolves to the instances of one class" - ^ resourceClass + self resolveClasses: { aClass } ] { #category : 'accessing' } -HOPVariableSegment >> resolveClass: anObject [ +HOPVariableSegment >> resolveClasses [ - resourceClass := anObject + ^ resourceClasses +] + +{ #category : 'accessing' } +HOPVariableSegment >> resolveClasses: aCollectionOfClasses [ + "the instances at this segment may be of classes without a common superclass" + + resourceClasses := aCollectionOfClasses ] { #category : 'as yet unclassified' }