32

GitHub - Nonchalant/FactoryProvider: Generate boilerplate of factory Swift frame...

 5 years ago
source link: https://github.com/Nonchalant/FactoryProvider
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

README.md

? FactoryProvider ?

Build Status Version Platform GitHub license GitHub release Xcode Swift Swift Package Manager

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:

pod "FactoryProvider"

And add the following Run script build phase to your test target's Build Phases:

"${PODS_ROOT}/FactoryProvider/generate" --config .factory.yml

After 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 Climber._name.get(Factory<Climber>.provide())
// ""

Set

import FactoryProvider

let climber = Factory<Climber>.provide() |> Climber._name *~ "Climber"
// Climber(name: "Climber", age: 0)

Modify

import FactoryProvider

let name = Factory<Climber>.provide() |> 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 |> Climber._id * Climber.Id._value *~ "id"
// Climber(id: Id(value: "id"), name: "")

Libraries

License

FactoryProvider is available under the MIT License.


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK