Last active
March 8, 2018 18:10
-
-
Save ceeK/d1cffc55b229a2a42b56ce4282385577 to your computer and use it in GitHub Desktop.
AutoBuildable stencil
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{# | |
AutoBuildable let's you create builders for your types. By conforming to AutoBuildable and running sourcery, you get the ability to build your object: | |
let car = CarBuilder() | |
.set(wheels: 4) | |
.set(doors: 5) | |
.make() | |
#}// swiftlint:disable file_length, redundant_optional_initialization | |
{% for type in types.implementing.AutoBuildable|!enum %} | |
public final class {{type.name}}Builder { | |
{% for init in type.initializers where not init.isConvenienceInitializer %} | |
{% for param in init.parameters %} | |
private(set) var {{ param.name }}: {{ param.typeName }}{% if param.defaultValue %} = {{ param.defaultValue }}{% endif %} | |
{% endfor %} | |
{% endfor %} | |
{% for init in type.initializers where not init.isConvenienceInitializer %} | |
{% for variable in init.parameters %} | |
func set({{ variable.name }}: {{ variable.typeName }}) -> {{ type.name }}Builder { | |
self.{{ variable.name }} = {{ variable.name }} | |
return self | |
} | |
{% endfor %} | |
{% endfor %} | |
init( | |
{% for init in type.initializers where not init.isConvenienceInitializer %} | |
{% for variable in init.parameters where not variable.defaultValue %} | |
{{ variable.name }}: {{ variable.typeName }}{% if not forloop.last %},{% endif %} | |
{% endfor %} | |
{% endfor %} | |
) { | |
{% for init in type.initializers where not init.isConvenienceInitializer %} | |
{% for variable in init.parameters where not variable.defaultValue %} | |
self.{{ variable.name }} = {{ variable.name }} | |
{% endfor %} | |
{% endfor %} | |
} | |
func make() -> {{ type.name }} { | |
return {{ type.name }}( | |
{% for init in type.initializers where not init.isConvenienceInitializer %} | |
{% for variable in init.parameters %} | |
{{ variable.name }}: self.{{ variable.name}}{% if not forloop.last %},{% endif %} | |
{% endfor %} | |
{% endfor %} | |
) | |
} | |
} | |
{% endfor %} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment