Originally I just had a "build" method, it could either receive a map or a value and you used it like that:

MyClass.build a:1, b:myOtherObject, c:"Hi!"

or when you had a class with a single feature you could pass just the value to be assigned to the only feature:

MyOtherClass.build "ciao"

that would be a shortcut for:

MyOtherClass.build name_of_my_only_feature:"ciao"

Then Martin told me that there was already a way to build objects passing them a map (using the class method "new"), so I left only the "shortcut" code: the code that expected exactly one element and tried to assign it to the only feature. I realize it is a lot less useful in this way.

Honestly it seems to me more convenient to have the method in the object, something like this:

MyModule::MyClass.build(value)

instead of:

Factory.build(MyModule::MyClass, value)

I would prefer the second option if I was programming in Java.

According to this site (http://rubyquicktips.com/post/17196977143/initialize-objects-with-a-hash) it is something they have also in Rails (the hash variant, not the single value variant).

So said, I am not expert enough in Ruby to tell what is more "idiomatic" and I realize that this feature is not that tremendously useful. For me it was convenient (especially with the mixed hash/single value variant) in tests. Maybe the best thing it is just drop it.