Client code configuring the library service in several ways

The complete source of commonDesignPatterns_client.ek9, compiled by the EK9 compiler. Shown on commonDesignPatterns.html.

#!ek9
defines module site.commonDesignPatterns.client

  references
    site.commonDesignPatterns.library::applyConfigurations
    site.commonDesignPatterns.library::conditionallyApplyConfiguration
    site.commonDesignPatterns.library::ConfigurationDetails
    site.commonDesignPatterns.library::SomeConfigurableService

  defines function

    testAPlainConfiguration() as pure

      someServer <- SomeConfigurableService()
      someServer.underTakeServiceOperations()

      asConfigured <- someServer.configurationDetails()
      require asConfigured?

    withSpecificValues() as pure
      -> details as ConfigurationDetails
      details.name :=? "Specific Value"
      details.useMapping :=? false
      details.frequencyOfChecks :=? 21

    testABespokePureConfiguration1() as pure

      someServer <- SomeConfigurableService(conditionallyApplyConfiguration(withSpecificValues))
      someServer.underTakeServiceOperations()

      asConfigured <- someServer.configurationDetails()
      require asConfigured?

  defines function

    withSpecificName()
      -> details as ConfigurationDetails
      details.name: "specific"

    enableMapping()
      -> details as ConfigurationDetails
      details.useMapping: true

    testAFlexibleBespokeConfiguration()

      someServer <- SomeConfigurableService(
        applyConfigurations(
          [ withSpecificName, enableMapping ]
          )
        )

      someServer.underTakeServiceOperations()

      asConfigured <- someServer.configurationDetails()
      require asConfigured?

    testACopyAndInitialisePureConfiguration() as pure

      specifics <- () is Consumer of ConfigurationDetails as pure function
        t.name :=? "Retained Value"
        t.useMapping :=? false

      configuration <- ConfigurationDetails()
      configuration.name :=? "Ignored Value"
      configuration.frequencyOfChecks :=? 16

      someServer <- SomeConfigurableService(ConfigurationDetails(specifics, configuration))

      someServer.underTakeServiceOperations()

      asConfigured <- someServer.configurationDetails()

      //asConfigured would be 'name = "Retained Value", useMapping = false, frequencyOfChecks = 16'
      require asConfigured?

  defines program

    ConfigureTheService()
      testAPlainConfiguration()
      testABespokePureConfiguration1()
      testAFlexibleBespokeConfiguration()
      testACopyAndInitialisePureConfiguration()

Download commonDesignPatterns_client.ek9

Output

Processing Service operation for default
Processing Service frequency 6
Processing Service operation for Specific Value
Processing Service frequency 21
Processing Service operation for specific
Will use mapping
Processing Service frequency 6
Processing Service operation for Retained Value
Processing Service frequency 16