class Attrio::Attribute
Attributes
name[R]
object[R]
options[R]
type[R]
Public Class Methods
new(name, type, options)
click to toggle source
# File lib/attrio/attribute.rb, line 7 def initialize(name, type, options) @name = name; @type = type; @options = Helpers.symbolize_hash_keys(options) end
Public Instance Methods
default?()
click to toggle source
# File lib/attrio/attribute.rb, line 45 def default? raise ArgumentError if self.object.nil? value = self.default_value.is_a?(Attrio::DefaultValue::Base) ? self.default_value.call(self.object) : self.default_value self.object.send(self.reader_method_name) == value end
default_value()
click to toggle source
# File lib/attrio/attribute.rb, line 31 def default_value if !defined?(@default_value) @default_value = Attrio::DefaultValue.new(self.name, self.options[:default]) end @default_value end
define_reader(klass)
click to toggle source
# File lib/attrio/attribute.rb, line 63 def define_reader(klass) Attrio::Builders::ReaderBuilder.define(klass, self.type, self.options.merge({ :method_name => self.reader_method_name, :method_visibility => self.reader_visibility, :instance_variable_name => self.instance_variable_name }) ) self end
define_writer(klass)
click to toggle source
# File lib/attrio/attribute.rb, line 52 def define_writer(klass) Attrio::Builders::WriterBuilder.define(klass, self.type, self.options.merge({ :method_name => self.writer_method_name, :method_visibility => self.writer_visibility, :instance_variable_name => self.instance_variable_name }) ) self end
instance_variable_name()
click to toggle source
# File lib/attrio/attribute.rb, line 27 def instance_variable_name @instance_variable_name ||= self.options[:instance_variable_name] || "@#{self.name}" end
reader_method_name()
click to toggle source
# File lib/attrio/attribute.rb, line 11 def reader_method_name @reader_method_name ||= self.accessor_name_from_options(:reader) || self.name end
reader_visibility()
click to toggle source
# File lib/attrio/attribute.rb, line 19 def reader_visibility @reader_visibility ||= self.accessor_visibility_from_options(:reader) || :public end
reset!()
click to toggle source
# File lib/attrio/attribute.rb, line 38 def reset! raise ArgumentError if self.object.nil? value = self.default_value.is_a?(Attrio::DefaultValue::Base) ? self.default_value.call(self.object) : self.default_value self.object.send(self.writer_method_name, value) end
writer_method_name()
click to toggle source
# File lib/attrio/attribute.rb, line 15 def writer_method_name @writer_method_name ||= self.accessor_name_from_options(:writer) || "#{self.name}=" end
writer_visibility()
click to toggle source
# File lib/attrio/attribute.rb, line 23 def writer_visibility @writer_visibility ||= self.accessor_visibility_from_options(:writer) || :public end
Protected Instance Methods
accessor_name_from_options(accessor)
click to toggle source
# File lib/attrio/attribute.rb, line 76 def accessor_name_from_options(accessor) (self.options[accessor.to_sym].is_a?(Hash) && self.options[accessor.to_sym][:name]) || self.options["#{accessor.to_s}_name".to_sym] end
accessor_visibility_from_options(accessor)
click to toggle source
# File lib/attrio/attribute.rb, line 80 def accessor_visibility_from_options(accessor) return self.options[accessor] if self.options[accessor].present? && [:public, :protected, :private].include?(self.options[accessor]) (self.options[accessor].is_a?(Hash) && self.options[accessor][:visibility]) || self.options["#{accessor.to_s}_visibility".to_sym] end