first draft
full tests
split generate method
doc
Merge branch 'feat-factory-method'