Class: ActiveScaffold::DataStructures::Columns

Inherits:
Object
  • Object
show all
Includes:
Configurable, Enumerable
Defined in:
lib/active_scaffold/data_structures/columns.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Configurable

#configure, #method_missing

Constructor Details

#initialize(active_record_class, *args) ⇒ Columns

Returns a new instance of Columns.



22
23
24
25
26
27
28
# File 'lib/active_scaffold/data_structures/columns.rb', line 22

def initialize(active_record_class, *args)
  @active_record_class = active_record_class
  @_inheritable = []
  @set = []

  self.add *args
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class ActiveScaffold::Configurable

Instance Attribute Details

#active_record_classObject (readonly)

This accessor is used by ActionColumns to create new Column objects without adding them to this set



20
21
22
# File 'lib/active_scaffold/data_structures/columns.rb', line 20

def active_record_class
  @active_record_class
end

Instance Method Details

#_inheritableObject



65
66
67
68
69
70
71
72
73
# File 'lib/active_scaffold/data_structures/columns.rb', line 65

def _inheritable
  if @sorted
    @_inheritable
  else
    @_inheritable.sort do |a, b|
      self[a] <=> self[b]
    end
  end
end

#_inheritable=(value) ⇒ Object

The motivation for this collection is that this Columns data structure fills two roles: it provides the master list of all known columns, and it provides an inheritable list for all other actions (e.g. Create and Update and List). Well we actually want to know about as many columns as possible, so we don’t want people actually removing columns from @set. But at the same time, we want to be able to manage which columns get inherited. Tada!

This collection is referenced by other parts of ActiveScaffold and by methods within this DataStructure. IT IS NOT MEANT FOR PUBLIC USE (but if you know what you’re doing, go ahead)



14
15
16
17
# File 'lib/active_scaffold/data_structures/columns.rb', line 14

def _inheritable=(value)
  @sorted = true
  @_inheritable = value
end

#add(*args) ⇒ Object Also known as: <<

the way to add columns to the set. this is primarily useful for virtual columns. note that this also makes columns inheritable



32
33
34
35
36
37
38
39
40
# File 'lib/active_scaffold/data_structures/columns.rb', line 32

def add(*args)
  args.flatten! # allow [] as a param
  args = args.collect{ |a| a.to_sym }

  # make the columns inheritable
  @_inheritable.concat(args)
  # then add columns to @set (unless they already exist)
  args.each { |a| @set << ActiveScaffold::DataStructures::Column.new(a.to_sym, @active_record_class) unless find_by_name(a) }
end

#eachObject



61
62
63
# File 'lib/active_scaffold/data_structures/columns.rb', line 61

def each
  @set.each {|i| yield i }
end

#exclude(*args) ⇒ Object



43
44
45
46
# File 'lib/active_scaffold/data_structures/columns.rb', line 43

def exclude(*args)
  # only remove columns from _inheritable. we never want to completely forget about a column.
  args.each { |a| @_inheritable.delete a }
end

#find_by_name(name) ⇒ Object Also known as: []

returns the column of the given name.



54
55
56
57
58
# File 'lib/active_scaffold/data_structures/columns.rb', line 54

def find_by_name(name)
  # this works because of `def column.=='
  column = @set.find { |c| c == name }
  column
end

#find_by_names(*names) ⇒ Object

returns an array of columns with the provided names



49
50
51
# File 'lib/active_scaffold/data_structures/columns.rb', line 49

def find_by_names(*names)
  @set.find_all { |column| names.include? column.name }
end