lib/parameters/parameters.rb in parameters-0.1.8 vs lib/parameters/parameters.rb in parameters-0.1.9

- old
+ new

@@ -1,169 +1,14 @@ require 'parameters/exceptions' +require 'parameters/class_methods' require 'parameters/class_param' require 'parameters/instance_param' require 'parameters/exceptions' require 'parameters/extensions/meta' module Parameters def self.included(base) - base.metaclass_eval do - # - # @return [Hash] - # Parameters for the class. - # - def params - @params ||= {} - end - - # - # Sets the values of the class parameters. - # - # @param [Hash] values - # The names and new values to set the class params to. - # - # @example - # Test.params = {:x => 5, :y => 2} - # # => {:x=>5, :y=>2} - # - def params=(values) - values.each do |name,value| - if has_param?(name) - if (value.kind_of?(Parameters::ClassParam) || value.kind_of?(Parameters::InstanceParam)) - value = value.value - end - - get_param(name).value = value - end - end - end - - # - # Adds a new parameters to the class. - # - # @param [Symbol, String] name - # The name of the new parameter. - # - # @param [Hash] options - # Additional options. - # - # @option options [String] :description - # The description for the new parameter. - # - # @option options [Object, Proc] :default - # The default value for the new parameter. - # - # @example - # parameter 'var' - # - # @example - # parameter 'var', :default => 3, :description => 'my variable' - # - def parameter(name,options={}) - name = name.to_sym - - # add the parameter to the class params list - params[name] = Parameters::ClassParam.new(name,options[:description],options[:default]) - - # define the reader class method for the parameter - meta_def(name) do - params[name].value - end - - # define the writer class method for the parameter - meta_def("#{name}=") do |value| - params[name].value = value - end - - # define the getter/setter instance methods for the parameter - attr_accessor(name) - end - - # - # Searches for the class parameter with the matching name. - # - # @param [Symbol, String] name - # The class parameter name to search for. - # - # @return [ClassParam] - # The class parameter with the matching _name_. - # - # @raise [ParamNotFound] - # No class parameter with the specified _name_ could be found. - # - def get_param(name) - name = name.to_sym - - ancestors.each do |ancestor| - if ancestor.include?(Parameters) - if ancestor.params.has_key?(name) - return ancestor.params[name] - end - end - end - - raise(Parameters::ParamNotFound,"parameter #{name.to_s.dump} was not found in class #{self.name.dump}",caller) - end - - # - # @return [Boolean] - # Specifies whether or not there is a class parameter with the - # specified _name_. - # - def has_param?(name) - name = name.to_sym - - ancestors.each do |ancestor| - if ancestor.include?(Parameters) - return true if ancestor.params.has_key?(name) - end - end - - return false - end - - # - # Iterates over the parameters of the class and it's ancestors. - # - # @yield [param] - # The block that will be passed each class parameter. - # - def each_param(&block) - ancestors.each do |ancestor| - if ancestor.include?(Parameters) - ancestor.params.each_value(&block) - end - end - - return self - end - - # - # Returns the description of the class parameters with a given name. - # - # @return [String] - # Description of the class parameter with the specified name. - # - # @raise [ParamNotFound] - # No class parameter with the specified name could be found. - # - def describe_param(name) - get_param(name).description - end - - # - # Returns the value of the class parameters with a given name. - # - # @return [Object] - # Value of the class parameter with the specified name. - # - # @raise [ParamNotFound] - # No class parameter with the specified name could be found. - # - def param_value(name) - get_param(name).value - end - end + base.extend ClassMethods end # # Initalizes the parameters of the object using the given # values, which can override the default values of parameters.