module Sprout::Executable ## # A factory to create concrete Sprout::Executable::Param # entities from a set of known types. # # If an unrecognized Class reference is provided # we will instantiate it and ensure that it # responds to the public members of the # Executable::Param interface. # # This Factory gives you the ability to create new, # custom parameter types by simply ensuring they are # available to Ruby before your executable is # interpreted. # # Following is an example of a custom Parameter: # # class CustomParam < Sprout::Executable::Param # # def to_shell # "--foo-bar=#{value}" # end # end # # Following is an example Executable that can consume # the above parameter: # # require 'custom_param' # # class Foo # include Sprout::Executable # # add_param :name, CustomParam # # end # # That's it, there is no need to register your custom types # with the Factory, just get it into your load path and # require it. # class ParameterFactory class << self ## # This factory allows us to use classes by # reference in the Executable interface. # Since there are already Ruby primitives for # String and File and we don't want to clobber # them, we use this factory to convert those # to the appropriate types. def create type # Didn't want to clobber the stdlib references # to these two important data types... # But wanted to keep the add_param interface # clean and simple. return StringParam.new if type == String return FileParam.new if type == File type.new end end end end