A module that adds class and instance level options
Defines which options are valid for a given attribute class
@example
class MyAttribute < Virtus::Attribute::Object accept_options :foo, :bar end
@return [self]
@api public
# File lib/virtus/support/options.rb, line 47 def accept_options(*new_options) add_accepted_options(new_options) new_options.each { |option| define_option_method(option) } descendants.each { |descendant| descendant.add_accepted_options(new_options) } self end
Returns an array of valid options
@example
Virtus::Attribute::String.accepted_options # => [:primitive, :accessor, :reader, :writer]
@return [Array]
the array of valid option names
@api public
# File lib/virtus/support/options.rb, line 33 def accepted_options @accepted_options ||= [] end
Returns default options hash for a given attribute class
@example
Virtus::Attribute::String.options # => {:primitive => String}
@return [Hash]
a hash of default option values
@api public
# File lib/virtus/support/options.rb, line 16 def options accepted_options.each_with_object({}) do |option_name, options| option_value = send(option_name) options[option_name] = option_value unless option_value.nil? end end
Adds new options that an attribute class can accept
@param [to_ary] new_options
new options to be added
@return [self]
@api private
# File lib/virtus/support/options.rb, line 93 def add_accepted_options(new_options) accepted_options.concat(new_options) self end
Adds a reader/writer method for the give option name
@return [undefined]
@api private
# File lib/virtus/support/options.rb, line 61 def define_option_method(option) class_eval def self.#{option}(value = Undefined) # def self.primitive(value = Undefined) @#{option} = nil unless defined?(@#{option}) # @primitive = nil unless defined?(@primitive) return @#{option} if value.equal?(Undefined) # return @primitive if value.equal?(Undefined) @#{option} = value # @primitive = value self # self end # end, __FILE__, __LINE__ + 1 end
Generated with the Darkfish Rdoc Generator 2.