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

instance_variable_name[R]

Return #instance_variable_name used by this accessor

@api private

name[R]

Return name of this accessor attribute

@return [Symbol]

@api public

Public Class Methods

extended(descendant) click to toggle source

@api private

Calls superclass method
# 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

defined?(instance) click to toggle source

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
get(instance) click to toggle source

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
public_reader?() click to toggle source

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
public_writer?() click to toggle source

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(instance, value) click to toggle source

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(instance) click to toggle source

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