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, #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.



10
11
12
# File 'lib/active_scaffold/data_structures/action_columns.rb', line 10

def action
  @action
end

#collapsedObject

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



42
43
44
# File 'lib/active_scaffold/data_structures/action_columns.rb', line 42

def collapsed
  @collapsed
end

#labelObject



19
20
21
# File 'lib/active_scaffold/data_structures/action_columns.rb', line 19

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



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

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



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

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

#action_nameObject



110
111
112
# File 'lib/active_scaffold/data_structures/action_columns.rb', line 110

def action_name
  @action.
end

#add_subgroup(label) ⇒ Object

nests a subgroup in the column set



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

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

#columns_keyObject



114
115
116
# File 'lib/active_scaffold/data_structures/action_columns.rb', line 114

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

#constraint_columnsObject



122
123
124
# File 'lib/active_scaffold/data_structures/action_columns.rb', line 122

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

#constraint_columns=(columns) ⇒ Object



118
119
120
# File 'lib/active_scaffold/data_structures/action_columns.rb', line 118

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

#css_classObject



27
28
29
# File 'lib/active_scaffold/data_structures/action_columns.rb', line 27

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

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



78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/active_scaffold/data_structures/action_columns.rb', line 78

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 !options[:skip_authorization] && 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)


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

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



134
135
136
# File 'lib/active_scaffold/data_structures/action_columns.rb', line 134

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

#nameObject



23
24
25
# File 'lib/active_scaffold/data_structures/action_columns.rb', line 23

def name
  @label.to_s.underscore
end

#skip_column?(column_name, options) ⇒ Boolean

Returns:

  • (Boolean)


66
67
68
69
70
71
72
73
74
75
76
# File 'lib/active_scaffold/data_structures/action_columns.rb', line 66

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



62
63
64
# File 'lib/active_scaffold/data_structures/action_columns.rb', line 62

def to_a
  Array(@set)
end

#unauthorized_columnsObject



130
131
132
# File 'lib/active_scaffold/data_structures/action_columns.rb', line 130

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

#unauthorized_columns=(columns) ⇒ Object



126
127
128
# File 'lib/active_scaffold/data_structures/action_columns.rb', line 126

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

#visible_columns(options = {}) ⇒ Object



98
99
100
101
102
103
104
# File 'lib/active_scaffold/data_structures/action_columns.rb', line 98

def visible_columns(options = {})
  columns = []
  each_column(options) do |column|
    columns << column
  end
  columns
end

#visible_columns_names(options = {}) ⇒ Object



106
107
108
# File 'lib/active_scaffold/data_structures/action_columns.rb', line 106

def visible_columns_names(options = {})
  visible_columns(options.reverse_merge(flatten: true)).map(&:name)
end