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



69
70
71
72
73
74
75
76
77
# File 'lib/active_scaffold/data_structures/columns.rb', line 69

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
# File 'lib/active_scaffold/data_structures/columns.rb', line 32

def add(*args)
  args = args.flatten.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, @active_record_class) unless find_by_name(a)}
end

#eachObject



65
66
67
# File 'lib/active_scaffold/data_structures/columns.rb', line 65

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

#exclude(*args) ⇒ Object



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

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.



58
59
60
61
62
# File 'lib/active_scaffold/data_structures/columns.rb', line 58

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



53
54
55
# File 'lib/active_scaffold/data_structures/columns.rb', line 53

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

#prepend(*args) ⇒ Object



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

def prepend(*args)
  columns = args.flatten.collect {|a| a.to_sym}
  @_inheritable.unshift(*(columns.reverse))
  columns.each {|a| @set.unshift(ActiveScaffold::DataStructures::Column.new(a, @active_record_class)) unless find_by_name(a)}
end