Generate boilerplate of factory Swift framework.
Requirements
- Swift 4+
- Xcode 9+
Platforms
FactoryProvider works on the following platforms:
- iOS 8+
- Mac OSX 10.9+
- watchOS 2+
- tvOS 9+
Supports
- Enum
- Struct
FactoryProvider
1. Installation
CocoaPods
FactoryProvider runtime is available through CocoaPods. To install it, simply add the following line to your test target in your Podfile:
And add the following Run script build phase to your test target's Build Phases:
"${PODS_ROOT}/FactoryProvider/generate" --config .factory.ymlAfter running once, locate Factories.generated.swift and drag it into your Xcode test target group.
.factory.yml
includes: # paths of file or directory to generate - Input/SubInput1 - Input/SubInput2/Source.swift excludes: # paths of file or directory not to generate - Input/SubInput1/SubSubInput - Input/SubInput2/Source.swift testables: # testable targets - target1 - target2 output: output/Factories.generated.swift # path of generated file
2. Usage
You can get a instance to call Factory<TypeName>.provide(). Each properties are set to default value.
struct Climber { let name: String let age: Int } let climber = Factory<Climber>.provide() // Climber(name: "", age: 0) let optClimber = Factory<Climber?>.provide() // Optional(Climber(name: "", age: 0)) let arrayClimber = Factory<[Climber]>.provide() // [Climber(name: "", age: 0)]
3. Lens
Factory<TypeName>.provide() provides fixed instance. You can modify each property by Lens.
Get
let name = Factory<Climber>.provide().name or Lens<Climber>.name().get(Factory<Climber>.provide()) // ""
Set
import FactoryProvider let climber = Factory<Climber>.provide() |> Lens<Climber>.name() *~ "Climber" // Climber(name: "Climber", age: 0)
Modify
import FactoryProvider let name = Factory<Climber>.provide() |> Lens<Climber>.name() *~ { "Climber" |> { $0 + $0 } }() // Climber(name: "ClimberClimber", age: 0)
Compose
import FactoryProvider struct Climber { let id: Id let name: String struct Id { let value: String } } let climber1 = Factory<Climber>.provide() // Climber(id: Id(value: ""), name: "") let climber2 = climber1 |> Lens<Climber>.id() * Lens<Climber.Id>.value() *~ "id" // Climber(id: Id(value: "id"), name: "")
Notice
Generics
If you want to contains type using generics, you should use 0.4.1.
pod "FactoryProvider", '~> 0.4.1'
Libraries
License
FactoryProvider is available under the MIT License.