module Virtus::Attribute::Accessor
Accessor extension provides methods to read and write attributes
@example
attribute = Virtus::Attribute.build(String, :name => :email) model = Class.new { attr_reader :email } object = model.new attribute.set(object, 'jane@doe.com') attribute.get(object) # => 'jane@doe.com'
Attributes
Return #instance_variable_name used by this accessor
@api private
Return name of this accessor attribute
@return [Symbol]
@api public
Public Class Methods
@api private
# File lib/virtus/attribute/accessor.rb, line 30 def self.extended(descendant) super name = descendant.options.fetch(:name).to_sym descendant.instance_variable_set('@name', name) descendant.instance_variable_set('@instance_variable_name', "@#{name}") end
Public Instance Methods
Return if attribute value is defined
@param [Object] instance
@return [Boolean]
@api public
# File lib/virtus/attribute/accessor.rb, line 44 def defined?(instance) instance.instance_variable_defined?(instance_variable_name) end
Return value of the attribute
@param [Object] instance
@return [Object]
@api public
# File lib/virtus/attribute/accessor.rb, line 55 def get(instance) instance.instance_variable_get(instance_variable_name) end
Returns a Boolean indicating whether the reader method is public
@return [Boolean]
@api private
# File lib/virtus/attribute/accessor.rb, line 87 def public_reader? options[:reader] == :public end
Returns a Boolean indicating whether the writer method is public
@return [Boolean]
@api private
# File lib/virtus/attribute/accessor.rb, line 96 def public_writer? options[:writer] == :public end
Set value of the attribute
@param [Object] instance @param [Object] value
@return [Object] value that was set
@api public
# File lib/virtus/attribute/accessor.rb, line 67 def set(instance, value) instance.instance_variable_set(instance_variable_name, value) end
Set default value
@param [Object] instance
@return [Object] value that was set
@api public
# File lib/virtus/attribute/accessor.rb, line 78 def set_default_value(instance) set(instance, default_value.call(instance, self)) end