class ActiveScaffold::DataStructures::Columns
Attributes
This accessor is used by ActionColumns
to create new Column
objects without adding them to this set
Public Class Methods
# 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
Public Instance Methods
# 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
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)
# File lib/active_scaffold/data_structures/columns.rb, line 14 def _inheritable=(value) @sorted = true @_inheritable = value end
the way to add columns to the set. this is primarily useful for virtual columns. note that this also makes columns inheritable
# 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
# File lib/active_scaffold/data_structures/columns.rb, line 65 def each @set.each {|i| yield i } end
# 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
returns the column of the given name.
# 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
returns an array of columns with the provided names
# File lib/active_scaffold/data_structures/columns.rb, line 53 def find_by_names(*names) @set.find_all { |column| names.include? column.name } end
# 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