Class: Anchormodel

Inherits:
Object
  • Object
show all
Defined in:
lib/anchormodel.rb,
lib/anchormodel/version.rb,
lib/anchormodel/simple_form_inputs/helpers/anchormodel_inputs_common.rb

Overview

Inherit from this class and place your Anchormodel under app/anchormodels/your_anchor_model.rb. Use it like YourAnchorModel. Refer to the README for usage.

Defined Under Namespace

Modules: ModelMixin, SimpleFormInputs, Util, Version Classes: ActiveModelTypeValueMulti, ActiveModelTypeValueSingle, Attribute

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(key, **attributes) ⇒ Anchormodel

Call this initializer directly in your Anchormodel class. To set @foo=:bar for anchor :ter, use new(:ter, foo: :bar)

Parameters:

  • key (String, Symbol)

    The key under which the entry should be stored.

  • attributes

    All named arguments to Anchormodel are made available as instance attributes.



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/anchormodel.rb', line 43

def initialize(key, **attributes)
  self.class.setup! unless self.class.setup_completed

  @key = key.to_sym
  @index = entries_list.count

  # Save attributes as instance variables
  attributes.each do |k, v|
    instance_variable_set(:"@#{k}", v)
  end

  # Register self
  entries_list << self
  entries_hash[key] = self

  # Register valid keys
  valid_keys << key

  # Define boolean reader
  self.class.define_method(:"#{key}?") do
    @key == key
  end
end

Instance Attribute Details

#indexObject (readonly)



6
7
8
# File 'lib/anchormodel.rb', line 6

def index
  @index
end

#keyObject (readonly)



5
6
7
# File 'lib/anchormodel.rb', line 5

def key
  @key
end

Class Method Details

.allObject

Returns all possible values this Anchormodel can take.



24
25
26
# File 'lib/anchormodel.rb', line 24

def self.all
  entries_list
end

.find(key) ⇒ Object

Retrieves a particular value given the key. Fails if not found.

Parameters:

  • key (String, Symbol)

    The key of the value that should be retrieved.



35
36
37
38
# File 'lib/anchormodel.rb', line 35

def self.find(key)
  return nil if key.nil?
  return entries_hash[key.to_sym] || fail("Retreived undefined anchor model key #{key.inspect} for #{inspect}.")
end

.form_collectionObject

Returns an array of tuples [label, key] suitable for passing as a collection to some form input helpers



29
30
31
# File 'lib/anchormodel.rb', line 29

def self.form_collection
  entries_list.map { |el| [el.label, el.key.to_s] }
end

.setup!Object

When a descendant of Anchormodel is first used, it must overwrite the class_attributes to prevent cross-class pollution.



15
16
17
18
19
20
21
# File 'lib/anchormodel.rb', line 15

def self.setup!
  fail("`setup!` was called twice for Anchormodel subclass #{self}.") if setup_completed
  self.entries_list = entries_list.dup
  self.entries_hash = entries_hash.dup
  self.valid_keys = valid_keys.dup
  self.setup_completed = true
end

Instance Method Details

#==(other) ⇒ Object



67
68
69
# File 'lib/anchormodel.rb', line 67

def ==(other)
  self.class == other.class && key == other.key
end

#inspectObject



76
77
78
# File 'lib/anchormodel.rb', line 76

def inspect
  "#<#{self.class.name}<#{key}>:#{hash}>"
end

#labelObject

Returns a Rails label that is compatible with the Rails FastGettext gem.



72
73
74
# File 'lib/anchormodel.rb', line 72

def label
  I18n.t("#{self.class.name.demodulize}|#{key.to_s.humanize}")
end

#to_sObject



80
81
82
# File 'lib/anchormodel.rb', line 80

def to_s
  inspect
end