class ActiveScaffold::DataStructures::ActionColumns
A set of columns. These structures can be nested for organization.
Attributes
this lets us refer back to the action responsible for this link, if it exists. the immediate need here is to get the crud_type so we can dynamically filter columns from the set.
Whether this column set is collapsed by default in contexts where collapsing is supported
labels are useful for the Create/Update forms, when we display columns in a grouped fashion and want to name them separately
a common column in the association columns included in the group, used to group the records from the association columns and split them in tabs
Public Instance Methods
Source
# File lib/active_scaffold/data_structures/action_columns.rb, line 108 def action_name @action.user_settings_key end
Source
# File lib/active_scaffold/data_structures/action_columns.rb, line 43 def add_subgroup(label, &) columns = ActiveScaffold::DataStructures::ActionColumns.new columns.label = label columns.action = action columns.configure(&) exclude columns.collect_columns add columns end
nests a subgroup in the column set
Source
# File lib/active_scaffold/data_structures/action_columns.rb, line 112 def columns_key "#{@action.core.model_id.to_s.underscore}-#{action_name}" end
Source
# File lib/active_scaffold/data_structures/action_columns.rb, line 120 def constraint_columns ActiveScaffold::Registry.constraint_columns[columns_key] end
Source
# File lib/active_scaffold/data_structures/action_columns.rb, line 116 def constraint_columns=(columns) ActiveScaffold::Registry.constraint_columns[columns_key] = columns end
Source
# File lib/active_scaffold/data_structures/action_columns.rb, line 25 def css_class @label.to_s.underscore.gsub(/[^-_0-9a-zA-Z]/, '-') end
Source
# File lib/active_scaffold/data_structures/action_columns.rb, line 76 def each_column(options = {}, &proc) columns = options[:core_columns] || (action.core.user || action.core).columns self.unauthorized_columns = [] options[:for] ||= columns.active_record_class each do |item| if item.is_a? ActiveScaffold::DataStructures::ActionColumns if options[:flatten] item.each_column(options, &proc) elsif !options[:skip_groups] yield item end else next if skip_column?(item, options) yield columns[item] || ActiveScaffold::DataStructures::Column.new(item.to_sym, columns.active_record_class) end end end
Source
# File lib/active_scaffold/data_structures/action_columns.rb, line 52 def include?(item) @set.each do |c| return true if !c.is_a?(Symbol) && c.include?(item) return true if c == item.to_sym end false end
Source
# File lib/active_scaffold/data_structures/action_columns.rb, line 17 def label as_(@label) if @label end
Source
# File lib/active_scaffold/data_structures/action_columns.rb, line 132 def length ((@set - constraint_columns) - unauthorized_columns).length end
Source
# File lib/active_scaffold/data_structures/action_columns.rb, line 21 def name @label.to_s.underscore end
Source
# File lib/active_scaffold/data_structures/action_columns.rb, line 64 def skip_column?(column_name, options) # skip if this matches a constrained column return true if constraint_columns.include?(column_name.to_sym) # skip this field if it's not authorized unless options[:for].authorized_for?(action: options[:action], crud_type: options[:crud_type] || action&.crud_type || :read, column: column_name) unauthorized_columns << column_name.to_sym return true end false end
Source
# File lib/active_scaffold/data_structures/action_columns.rb, line 60 def to_a Array(@set) end
Source
# File lib/active_scaffold/data_structures/action_columns.rb, line 96 def visible_columns(options = {}) columns = [] each_column(options) do |column| columns << column end columns end
Source
# File lib/active_scaffold/data_structures/action_columns.rb, line 104 def visible_columns_names(options = {}) visible_columns(options.reverse_merge(flatten: true)).map(&:name) end
Protected Instance Methods
Source
# File lib/active_scaffold/data_structures/action_columns.rb, line 138 def collect_columns @set.collect { |col| col.is_a?(ActiveScaffold::DataStructures::ActionColumns) ? col.collect_columns : col } end
Source
# File lib/active_scaffold/data_structures/action_columns.rb, line 143 def initialize_copy(from) @set = from.instance_variable_get(:@set).clone end
called during clone or dup. makes the clone/dup deeper.