Skip to content

Commit 4c8b3b7

Browse files
authored
Adding a findAll(KClass) function to DestinationPlugins. This matches the API already present in Analytics. (#199)
1 parent 3a65ff2 commit 4c8b3b7

File tree

2 files changed

+58
-0
lines changed

2 files changed

+58
-0
lines changed

core/src/main/java/com/segment/analytics/kotlin/core/platform/Plugin.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import com.segment.analytics.kotlin.core.ScreenEvent
99
import com.segment.analytics.kotlin.core.Settings
1010
import com.segment.analytics.kotlin.core.TrackEvent
1111
import com.segment.analytics.kotlin.core.utilities.getBoolean
12+
import kotlin.reflect.KClass
1213

1314
// Most simple interface for an plugin
1415
interface Plugin {
@@ -105,6 +106,13 @@ abstract class DestinationPlugin : EventPlugin {
105106
timeline.remove(plugin)
106107
}
107108

109+
/**
110+
* Find all Plugins matching the given class that have been added to this Destination Plugin.
111+
*/
112+
fun <T: Plugin> findAll(pluginClass: KClass<T>): List<T> {
113+
return timeline.findAll(pluginClass)
114+
}
115+
108116
/**
109117
* Update `enabled` state of destination and apply settings update to destination timeline
110118
* We recommend calling `super.update(..., ...) in case this function is overridden

core/src/test/kotlin/com/segment/analytics/kotlin/core/platform/plugins/DestinationPluginTests.kt

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,4 +180,54 @@ class DestinationPluginTests {
180180
val result = destinationPlugin.process(trackEvent)
181181
assertEquals(null, result)
182182
}
183+
184+
@Test
185+
fun `findAll will find single added plugin`() {
186+
val destinationPlugin = object: DestinationPlugin() {
187+
override val key: String = "TestDestination"
188+
}
189+
190+
timeline.add(destinationPlugin)
191+
var simplePlugins = destinationPlugin.findAll(SimplePlugin::class)
192+
assertTrue(simplePlugins.isEmpty())
193+
194+
val testPlugin = SimplePlugin("Test1")
195+
destinationPlugin.add(testPlugin)
196+
simplePlugins = destinationPlugin.findAll(SimplePlugin::class)
197+
198+
assertTrue(simplePlugins.isNotEmpty())
199+
assertEquals(1, simplePlugins.size)
200+
assertEquals(testPlugin, simplePlugins.get(0))
201+
}
202+
203+
@Test
204+
fun `findAll will find multiple added plugin`() {
205+
val destinationPlugin = object: DestinationPlugin() {
206+
override val key: String = "TestDestination"
207+
}
208+
209+
timeline.add(destinationPlugin)
210+
var simplePlugins = destinationPlugin.findAll(SimplePlugin::class)
211+
assertTrue(simplePlugins.isEmpty())
212+
213+
val testPlugin1 = SimplePlugin("Test1")
214+
val testPlugin2 = SimplePlugin("Test2")
215+
val testPlugin3 = SimplePlugin("Test3")
216+
217+
destinationPlugin.add(testPlugin1)
218+
destinationPlugin.add(testPlugin2)
219+
destinationPlugin.add(testPlugin3)
220+
simplePlugins = destinationPlugin.findAll(SimplePlugin::class)
221+
222+
assertTrue(simplePlugins.isNotEmpty())
223+
assertEquals(3, simplePlugins.size)
224+
assertEquals(testPlugin1, simplePlugins.get(0))
225+
assertEquals(testPlugin2, simplePlugins.get(1))
226+
assertEquals(testPlugin3, simplePlugins.get(2))
227+
}
228+
229+
class SimplePlugin(var name: String) : Plugin {
230+
override val type: Plugin.Type = Plugin.Type.Enrichment
231+
override lateinit var analytics: Analytics
232+
}
183233
}

0 commit comments

Comments
 (0)