commit | af3d9a4114c0134d27521f11ebb5f9c9c183b4f7 | [log] [tgz] |
---|---|---|
author | Lann Martin <lannm@nestlabs.com> | Sat Aug 08 15:10:23 2015 |
committer | Lann Martin <lannm@nestlabs.com> | Sat Aug 08 15:10:23 2015 |
tree | c18d06cbbcc2c62cf62ef8952b4d9700fa9ff02b | |
parent | c603884a2c1fcf331c71940f3227a8111d29f3ba [diff] |
Switch to stable fork of ps package
Builder was originally written for Squirrel, a fluent SQL generator. It is probably the best example of Builder in action.
Builder helps you write fluent DSLs for your libraries with method chaining:
resp := ReqBuilder.
Url("http://golang.org").
Header("User-Agent", "Builder").
Get()
Builder uses immutable persistent data structures (these, specifically) so that each step in your method chain can be reused:
build := WordBuilder.AddLetters("Build")
builder := build.AddLetters("er")
building := build.AddLetters("ing")
Builder makes it easy to build structs using the builder pattern (surprise!):
import "github.com/lann/builder"
type Muppet struct {
Name string
Friends []string
}
type muppetBuilder builder.Builder
func (b muppetBuilder) Name(name string) muppetBuilder {
return builder.Set(b, "Name", name).(muppetBuilder)
}
func (b muppetBuilder) AddFriend(friend string) muppetBuilder {
return builder.Append(b, "Friends", friend).(muppetBuilder)
}
func (b muppetBuilder) Build() Muppet {
return builder.GetStruct(b).(Muppet)
}
var MuppetBuilder = builder.Register(muppetBuilder{}, Muppet{}).(muppetBuilder)
MuppetBuilder.
Name("Beaker").
AddFriend("Dr. Honeydew").
Build()
=> Muppet{Name:"Beaker", Friends:[]string{"Dr. Honeydew"}}
Builder is released under the MIT License.