Module: Cistern::Attributes::ClassMethods

Defined in:
lib/cistern/attributes.rb

Instance Method Summary collapse

Instance Method Details

#_load(marshalled) ⇒ Object



51
52
53
# File 'lib/cistern/attributes.rb', line 51

def _load(marshalled)
  new(Marshal.load(marshalled))
end

#aliasesObject



55
56
57
# File 'lib/cistern/attributes.rb', line 55

def aliases
  @aliases ||= Hash.new { |h, k| h[k] = [] }
end

#attribute(_name, options = {}) ⇒ Object



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# File 'lib/cistern/attributes.rb', line 63

def attribute(_name, options = {})
  if defined? Cistern::Coverage
    attribute_call = Cistern::Coverage.find_caller_before('cistern/attributes.rb')

    # Only use DSL attribute calls from within a model
    if attribute_call && attribute_call.label.start_with?('<class:')
      options[:coverage_file] = attribute_call.absolute_path
      options[:coverage_line] = attribute_call.lineno
      options[:coverage_hits] = 0
    end
  end

  name = _name.to_s.to_sym

  send(:define_method, name) do
    read_attribute(name)
  end unless instance_methods.include?(name)

  send(:alias_method, "#{name}?", name) if options[:type] == :boolean

  send(:define_method, "#{name}=") do |value|
    write_attribute(name, value)
  end unless instance_methods.include?("#{name}=".to_sym)

  if attributes[name]
    fail(ArgumentError, "#{self.name} attribute[#{_name}] specified more than once")
  else
    if options[:squash]
      options[:squash] = Array(options[:squash]).map(&:to_s)
    end
    attributes[name] = options
  end

  options[:aliases] = Array(options[:aliases] || options[:alias]).map { |a| a.to_s.to_sym }

  options[:aliases].each do |new_alias|
    aliases[new_alias] << name.to_s.to_sym
  end
end

#attributesObject



59
60
61
# File 'lib/cistern/attributes.rb', line 59

def attributes
  @attributes ||= {}
end

#identity(name, options = {}) ⇒ Object



103
104
105
106
# File 'lib/cistern/attributes.rb', line 103

def identity(name, options = {})
  @identity = name
  attribute(name, options)
end

#ignore_attributes(*args) ⇒ Object



108
109
110
# File 'lib/cistern/attributes.rb', line 108

def ignore_attributes(*args)
  @ignored_attributes = args
end

#ignored_attributesObject



112
113
114
# File 'lib/cistern/attributes.rb', line 112

def ignored_attributes
  @ignored_attributes ||= []
end