Module: Cistern::Attributes::ClassMethods

Included in:
Collection, Model, Singular
Defined in:
lib/cistern/attributes.rb

Instance Method Summary collapse

Instance Method Details

#_load(marshalled) ⇒ Object



47
48
49
# File 'lib/cistern/attributes.rb', line 47

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

#aliasesObject



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

def aliases
  @aliases ||= {}
end

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



59
60
61
62
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
# File 'lib/cistern/attributes.rb', line 59

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 and 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

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

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

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

  if self.attributes[name]
    raise(ArgumentError, "#{self.name} attribute[#{_name}] specified more than once")
  else
    self.attributes[name] = options
  end

  Array(options[:aliases]).each do |new_alias|
    aliases[new_alias] ||= []
    aliases[new_alias] << name
  end
end

#attributesObject



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

def attributes
  @attributes ||= {}
end

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



97
98
99
100
# File 'lib/cistern/attributes.rb', line 97

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

#ignore_attributes(*args) ⇒ Object



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

def ignore_attributes(*args)
  @ignored_attributes = args
end

#ignored_attributesObject



106
107
108
# File 'lib/cistern/attributes.rb', line 106

def ignored_attributes
  @ignored_attributes ||= []
end