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.