Class: ActiveScaffold::DataStructures::ActionColumns

Inherits:
Set
  • Object
show all
Includes:
Configurable
Defined in:
lib/active_scaffold/data_structures/action_columns.rb

Overview

A set of columns. These structures can be nested for organization.

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Configurable

#configure, #method_missing, #respond_to_missing?

Methods inherited from Set

#+, #add, #each, #empty?, #exclude, #find_by_name, #find_by_names, #initialize, #initialize_dup, #set_values

Constructor Details

This class inherits a constructor from ActiveScaffold::DataStructures::Set

Dynamic Method Handling

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

Instance Attribute Details

#actionObject

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.



8
9
10
# File 'lib/active_scaffold/data_structures/action_columns.rb', line 8

def action
  @action
end

#collapsedObject

Whether this column set is collapsed by default in contexts where collapsing is supported



40
41
42
# File 'lib/active_scaffold/data_structures/action_columns.rb', line 40

def collapsed
  @collapsed
end

#labelObject



17
18
19
# File 'lib/active_scaffold/data_structures/action_columns.rb', line 17

def label
  as_(@label) if @label
end

#tabbed_byObject

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



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

def tabbed_by
  @tabbed_by
end

Instance Method Details

#==(other) ⇒ Object

this is so that array.delete and array.include?, etc., will work by column name



30
31
32
33
34
35
36
37
# File 'lib/active_scaffold/data_structures/action_columns.rb', line 30

def ==(other) # :nodoc:
  # another ActionColumns
  if other.class == self.class
    label == other.label
  else
    @label.to_s == other.to_s
  end
end

#action_nameObject



108
109
110
# File 'lib/active_scaffold/data_structures/action_columns.rb', line 108

def action_name
  @action.
end

#add_subgroup(label, &proc) ⇒ Object

nests a subgroup in the column set



43
44
45
46
47
48
49
50
# File 'lib/active_scaffold/data_structures/action_columns.rb', line 43

def add_subgroup(label, &proc)
  columns = ActiveScaffold::DataStructures::ActionColumns.new
  columns.label = label
  columns.action = action
  columns.configure(&proc)
  exclude columns.collect_columns
  add columns
end

#columns_keyObject



112
113
114
# File 'lib/active_scaffold/data_structures/action_columns.rb', line 112

def columns_key
  "#{@action.core.model_id.to_s.underscore}-#{action_name}"
end

#constraint_columnsObject



120
121
122
# File 'lib/active_scaffold/data_structures/action_columns.rb', line 120

def constraint_columns
  ActiveScaffold::Registry.constraint_columns[columns_key]
end

#constraint_columns=(columns) ⇒ Object



116
117
118
# File 'lib/active_scaffold/data_structures/action_columns.rb', line 116

def constraint_columns=(columns)
  ActiveScaffold::Registry.constraint_columns[columns_key] = columns
end

#css_classObject



25
26
27
# File 'lib/active_scaffold/data_structures/action_columns.rb', line 25

def css_class
  @label.to_s.underscore.gsub(/[^-_0-9a-zA-Z]/, '-')
end

#each_column(options = {}, &proc) ⇒ Object



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# 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

#include?(item) ⇒ Boolean

Returns:

  • (Boolean)


52
53
54
55
56
57
58
# 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

#lengthObject



132
133
134
# File 'lib/active_scaffold/data_structures/action_columns.rb', line 132

def length
  ((@set - constraint_columns) - unauthorized_columns).length
end

#nameObject



21
22
23
# File 'lib/active_scaffold/data_structures/action_columns.rb', line 21

def name
  @label.to_s.underscore
end

#skip_column?(column_name, options) ⇒ Boolean

Returns:

  • (Boolean)


64
65
66
67
68
69
70
71
72
73
74
# 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

#to_aObject



60
61
62
# File 'lib/active_scaffold/data_structures/action_columns.rb', line 60

def to_a
  Array(@set)
end

#unauthorized_columnsObject



128
129
130
# File 'lib/active_scaffold/data_structures/action_columns.rb', line 128

def unauthorized_columns
  ActiveScaffold::Registry.unauthorized_columns[columns_key]
end

#unauthorized_columns=(columns) ⇒ Object



124
125
126
# File 'lib/active_scaffold/data_structures/action_columns.rb', line 124

def unauthorized_columns=(columns)
  ActiveScaffold::Registry.unauthorized_columns[columns_key] = columns
end

#visible_columns(options = {}) ⇒ Object



96
97
98
99
100
101
102
# 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

#visible_columns_names(options = {}) ⇒ Object



104
105
106
# 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