Class: ActiveScaffold::DataStructures::Column
- Includes:
- Configurable
- Defined in:
- lib/active_scaffold/data_structures/column.rb
Constant Summary collapse
- @@associated_limit =
3
- @@associated_number =
true
- @@show_blank_record =
true
- @@actions_for_association_links =
[:new, :edit, :show]
- @@association_form_ui =
nil
Instance Attribute Summary collapse
-
#actions_for_association_links ⇒ Object
Returns the value of attribute actions_for_association_links.
-
#active_record_class ⇒ Object
readonly
Returns the value of attribute active_record_class.
-
#allow_add_existing ⇒ Object
Whether to enable add_existing for this column.
-
#associated_limit ⇒ Object
Returns the value of attribute associated_limit.
-
#associated_number ⇒ Object
writeonly
Sets the attribute associated_number.
-
#association ⇒ Object
readonly
the association from the ActiveRecord class.
-
#calculate ⇒ Object
define a calculation for the column.
-
#collapsed ⇒ Object
Whether this column set is collapsed by default in contexts where collapsing is supported.
-
#column ⇒ Object
readonly
the ConnectionAdapter::*Column object from the ActiveRecord class.
-
#css_class ⇒ Object
this will be /joined/ to the :name for the td’s class attribute.
- #description ⇒ Object
- #form_ui ⇒ Object
-
#includes ⇒ Object
a collection of associations to pre-load when finding the records on a page.
-
#inplace_edit ⇒ Object
Whether to enable inplace editing for this column.
- #label ⇒ Object
- #list_ui ⇒ Object
-
#name ⇒ Object
this is the name of the getter on the ActiveRecord model.
-
#options ⇒ Object
a place to store dev’s column specific options.
-
#required ⇒ Object
writeonly
whether the field is required or not.
- #search_sql ⇒ Object
- #search_ui ⇒ Object
-
#select_columns ⇒ Object
a collection of columns to load when eager loading is disabled, if it’s nil all columns will be loaded.
-
#show_blank_record ⇒ Object
writeonly
Sets the attribute show_blank_record.
-
#update_columns ⇒ Object
Returns the value of attribute update_columns.
-
#weight ⇒ Object
to modify the default order of columns.
Instance Method Summary collapse
- #<=>(other_column) ⇒ Object
-
#==(other) ⇒ Object
this is so that array.delete and array.include?, etc., will work by column name.
- #associated_number? ⇒ Boolean
-
#autolink? ⇒ Boolean
set an action_link to nested list or inline form in this column.
-
#calculation? ⇒ Boolean
get whether to run a calculation on this column.
-
#clear_link ⇒ Object
this should not only delete any existing link but also prevent column links from being automatically added by later routines.
-
#field_name ⇒ Object
just the field (not table.field).
-
#initialize(name, active_record_class) ⇒ Column
constructor
instantiation is handled internally through the DataStructures::Columns object.
- #link ⇒ Object
-
#params ⇒ Object
Any extra parameters this particular column uses.
- #plural_association? ⇒ Boolean
- #polymorphic_association? ⇒ Boolean
- #readonly_association? ⇒ Boolean
- #required? ⇒ Boolean
- #searchable? ⇒ Boolean
-
#set_link(action, options = {}) ⇒ Object
associate an action_link with this column.
- #show_blank_record?(associated) ⇒ Boolean
- #singular_association? ⇒ Boolean
- #sort ⇒ Object
-
#sort=(value) ⇒ Object
sorting on a column can be configured four ways: sort = true default, uses intelligent sorting sql default sort = false sometimes sorting doesn’t make sense sort = => “” define your own sql for sorting.
-
#sort_by(options) ⇒ Object
a configuration helper for the self.sort property.
- #sortable? ⇒ Boolean
- #through_association? ⇒ Boolean
-
#virtual? ⇒ Boolean
an interpreted property.
Methods included from Configurable
Constructor Details
#initialize(name, active_record_class) ⇒ Column
instantiation is handled internally through the DataStructures::Columns object
263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 |
# File 'lib/active_scaffold/data_structures/column.rb', line 263 def initialize(name, active_record_class) #:nodoc: self.name = name.to_sym @column = active_record_class.columns_hash[self.name.to_s] @association = active_record_class.reflect_on_association(self.name) @autolink = !@association.nil? @active_record_class = active_record_class @table = active_record_class.table_name @associated_limit = self.class.associated_limit @associated_number = self.class.associated_number @show_blank_record = self.class.show_blank_record @actions_for_association_links = self.class.actions_for_association_links.clone if @association @options = {:format => :i18n_number} if @column.try(:number?) @form_ui = :checkbox if @column and @column.type == :boolean @form_ui = :textarea if @column and @column.type == :text @allow_add_existing = true @form_ui = self.class.association_form_ui if @association && self.class.association_form_ui # default all the configurable variables self.css_class = '' self.required = active_record_class.validators_on(self.name).map(&:class).include? ActiveModel::Validations::PresenceValidator self.sort = true self.search_sql = true @weight = estimate_weight self.includes = (association and not polymorphic_association?) ? [association.name] : [] end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class ActiveScaffold::Configurable
Instance Attribute Details
#actions_for_association_links ⇒ Object
Returns the value of attribute actions_for_association_links.
207 208 209 |
# File 'lib/active_scaffold/data_structures/column.rb', line 207 def actions_for_association_links @actions_for_association_links end |
#active_record_class ⇒ Object (readonly)
Returns the value of attribute active_record_class.
5 6 7 |
# File 'lib/active_scaffold/data_structures/column.rb', line 5 def active_record_class @active_record_class end |
#allow_add_existing ⇒ Object
Whether to enable add_existing for this column
21 22 23 |
# File 'lib/active_scaffold/data_structures/column.rb', line 21 def allow_add_existing @allow_add_existing end |
#associated_limit ⇒ Object
Returns the value of attribute associated_limit.
183 184 185 |
# File 'lib/active_scaffold/data_structures/column.rb', line 183 def associated_limit @associated_limit end |
#associated_number=(value) ⇒ Object (writeonly)
Sets the attribute associated_number
188 189 190 |
# File 'lib/active_scaffold/data_structures/column.rb', line 188 def associated_number=(value) @associated_number = value end |
#association ⇒ Object (readonly)
the association from the ActiveRecord class
220 221 222 |
# File 'lib/active_scaffold/data_structures/column.rb', line 220 def association @association end |
#calculate ⇒ Object
define a calculation for the column. anything that ActiveRecord::Calculations::ClassMethods#calculate accepts will do.
146 147 148 |
# File 'lib/active_scaffold/data_structures/column.rb', line 146 def calculate @calculate end |
#collapsed ⇒ Object
Whether this column set is collapsed by default in contexts where collapsing is supported
18 19 20 |
# File 'lib/active_scaffold/data_structures/column.rb', line 18 def collapsed @collapsed end |
#column ⇒ Object (readonly)
the ConnectionAdapter::*Column object from the ActiveRecord class
217 218 219 |
# File 'lib/active_scaffold/data_structures/column.rb', line 217 def column @column end |
#css_class ⇒ Object
this will be /joined/ to the :name for the td’s class attribute. useful if you want to style columns on different ActiveScaffolds the same way, but the columns have different names.
47 48 49 |
# File 'lib/active_scaffold/data_structures/column.rb', line 47 def css_class @css_class end |
#description ⇒ Object
38 39 40 41 42 43 44 |
# File 'lib/active_scaffold/data_structures/column.rb', line 38 def description if @description @description else I18n.t name, :scope => [:activerecord, :description, active_record_class.to_s.underscore.to_sym], :default => '' end end |
#form_ui ⇒ Object
97 98 99 |
# File 'lib/active_scaffold/data_structures/column.rb', line 97 def form_ui @form_ui end |
#includes ⇒ Object
a collection of associations to pre-load when finding the records on a page
154 155 156 |
# File 'lib/active_scaffold/data_structures/column.rb', line 154 def includes @includes end |
#inplace_edit ⇒ Object
Whether to enable inplace editing for this column. Currently works for text columns, in the List.
11 12 13 |
# File 'lib/active_scaffold/data_structures/column.rb', line 11 def inplace_edit @inplace_edit end |
#label ⇒ Object
32 33 34 |
# File 'lib/active_scaffold/data_structures/column.rb', line 32 def label as_(@label) || active_record_class.human_attribute_name(name.to_s) end |
#list_ui ⇒ Object
102 103 104 |
# File 'lib/active_scaffold/data_structures/column.rb', line 102 def list_ui @list_ui || @form_ui end |
#name ⇒ Object
this is the name of the getter on the ActiveRecord model. it is the only absolutely required attribute … all others will be inferred from this name.
8 9 10 |
# File 'lib/active_scaffold/data_structures/column.rb', line 8 def name @name end |
#options ⇒ Object
a place to store dev’s column specific options
112 113 114 |
# File 'lib/active_scaffold/data_structures/column.rb', line 112 def @options end |
#required=(value) ⇒ Object (writeonly)
whether the field is required or not. used on the form for visually indicating the fact to the user. TODO: move into predicate
51 52 53 |
# File 'lib/active_scaffold/data_structures/column.rb', line 51 def required=(value) @required = value end |
#search_sql ⇒ Object
169 170 171 172 |
# File 'lib/active_scaffold/data_structures/column.rb', line 169 def search_sql self.initialize_search_sql if @search_sql === true @search_sql end |
#search_ui ⇒ Object
107 108 109 |
# File 'lib/active_scaffold/data_structures/column.rb', line 107 def search_ui @search_ui || @form_ui || (@association && !polymorphic_association? ? :select : nil) end |
#select_columns ⇒ Object
a collection of columns to load when eager loading is disabled, if it’s nil all columns will be loaded
163 164 165 |
# File 'lib/active_scaffold/data_structures/column.rb', line 163 def select_columns @select_columns end |
#show_blank_record=(value) ⇒ Object (writeonly)
Sets the attribute show_blank_record
196 197 198 |
# File 'lib/active_scaffold/data_structures/column.rb', line 196 def show_blank_record=(value) @show_blank_record = value end |
#update_columns ⇒ Object
Returns the value of attribute update_columns.
56 57 58 |
# File 'lib/active_scaffold/data_structures/column.rb', line 56 def update_columns @update_columns end |
#weight ⇒ Object
to modify the default order of columns
178 179 180 |
# File 'lib/active_scaffold/data_structures/column.rb', line 178 def weight @weight end |
Instance Method Details
#<=>(other_column) ⇒ Object
297 298 299 300 |
# File 'lib/active_scaffold/data_structures/column.rb', line 297 def <=>(other_column) order_weight = self.weight <=> other_column.weight order_weight != 0 ? order_weight : self.name.to_s <=> other_column.name.to_s end |
#==(other) ⇒ Object
this is so that array.delete and array.include?, etc., will work by column name
249 250 251 252 253 254 255 256 257 258 259 260 |
# File 'lib/active_scaffold/data_structures/column.rb', line 249 def ==(other) #:nodoc: # another column if other.respond_to? :name and other.class == self.class self.name == other.name.to_sym # a string or symbol elsif other.respond_to? :to_sym self.name == other.to_sym rescue false # catch "interning empty string" # unknown else self.eql? other end end |
#associated_number? ⇒ Boolean
189 190 191 |
# File 'lib/active_scaffold/data_structures/column.rb', line 189 def associated_number? @associated_number end |
#autolink? ⇒ Boolean
set an action_link to nested list or inline form in this column
135 136 137 |
# File 'lib/active_scaffold/data_structures/column.rb', line 135 def autolink? @autolink end |
#calculation? ⇒ Boolean
get whether to run a calculation on this column
149 150 151 |
# File 'lib/active_scaffold/data_structures/column.rb', line 149 def calculation? !(@calculate == false or @calculate.nil?) end |
#clear_link ⇒ Object
this should not only delete any existing link but also prevent column links from being automatically added by later routines
140 141 142 143 |
# File 'lib/active_scaffold/data_structures/column.rb', line 140 def clear_link @link = nil @autolink = false end |
#field_name ⇒ Object
just the field (not table.field)
292 293 294 295 |
# File 'lib/active_scaffold/data_structures/column.rb', line 292 def field_name return nil if virtual? column ? @active_record_class.connection.quote_column_name(column.name) : association.primary_key_name end |
#link ⇒ Object
117 118 119 120 |
# File 'lib/active_scaffold/data_structures/column.rb', line 117 def link @link = @link.call(self) if @link.is_a? Proc @link end |
#params ⇒ Object
Any extra parameters this particular column uses. This is for create/update purposes.
24 25 26 27 |
# File 'lib/active_scaffold/data_structures/column.rb', line 24 def params # lazy initialize @params ||= Set.new end |
#plural_association? ⇒ Boolean
224 225 226 |
# File 'lib/active_scaffold/data_structures/column.rb', line 224 def plural_association? self.association and [:has_many, :has_and_belongs_to_many].include? self.association.macro end |
#polymorphic_association? ⇒ Boolean
230 231 232 |
# File 'lib/active_scaffold/data_structures/column.rb', line 230 def polymorphic_association? self.association and self.association..has_key? :polymorphic and self.association.[:polymorphic] end |
#readonly_association? ⇒ Boolean
233 234 235 236 237 238 239 240 241 |
# File 'lib/active_scaffold/data_structures/column.rb', line 233 def readonly_association? if self.association if self.association..has_key? :readonly self.association.[:readonly] else self.through_association? end end end |
#required? ⇒ Boolean
52 53 54 |
# File 'lib/active_scaffold/data_structures/column.rb', line 52 def required? @required end |
#searchable? ⇒ Boolean
173 174 175 |
# File 'lib/active_scaffold/data_structures/column.rb', line 173 def searchable? search_sql != false && search_sql != nil end |
#set_link(action, options = {}) ⇒ Object
associate an action_link with this column
123 124 125 126 127 128 129 130 131 132 |
# File 'lib/active_scaffold/data_structures/column.rb', line 123 def set_link(action, = {}) if action.is_a?(ActiveScaffold::DataStructures::ActionLink) || (action.is_a? Proc) @link = action else [:label] ||= self.label [:position] ||= :after unless .has_key?(:position) [:type] ||= :member @link = ActiveScaffold::DataStructures::ActionLink.new(action, ) end end |
#show_blank_record?(associated) ⇒ Boolean
197 198 199 200 201 202 |
# File 'lib/active_scaffold/data_structures/column.rb', line 197 def show_blank_record?(associated) if @show_blank_record return false unless self.association.klass.(:crud_type => :create) self.plural_association? or (self.singular_association? and associated.empty?) end end |
#singular_association? ⇒ Boolean
221 222 223 |
# File 'lib/active_scaffold/data_structures/column.rb', line 221 def singular_association? self.association and [:has_one, :belongs_to].include? self.association.macro end |
#sort ⇒ Object
79 80 81 82 |
# File 'lib/active_scaffold/data_structures/column.rb', line 79 def sort self.initialize_sort if @sort === true @sort end |
#sort=(value) ⇒ Object
sorting on a column can be configured four ways:
sort = true default, uses intelligent sorting sql default
sort = false sometimes sorting doesn't make sense
sort = {:sql => ""} define your own sql for sorting. this should be result in a sortable value in SQL. ActiveScaffold will handle the ascending/descending.
sort = {:method => ""} define ruby-side code for sorting. this is SLOW with large recordsets!
70 71 72 73 74 75 76 77 |
# File 'lib/active_scaffold/data_structures/column.rb', line 70 def sort=(value) if value.is_a? Hash value.assert_valid_keys(:sql, :method) @sort = value else @sort = value ? true : false # force true or false end end |
#sort_by(options) ⇒ Object
a configuration helper for the self.sort property. simply provides a method syntax instead of setter syntax.
89 90 91 |
# File 'lib/active_scaffold/data_structures/column.rb', line 89 def sort_by() self.sort = end |
#sortable? ⇒ Boolean
84 85 86 |
# File 'lib/active_scaffold/data_structures/column.rb', line 84 def sortable? sort != false && !sort.nil? end |
#through_association? ⇒ Boolean
227 228 229 |
# File 'lib/active_scaffold/data_structures/column.rb', line 227 def through_association? self.association and self.association.[:through] end |
#virtual? ⇒ Boolean
an interpreted property. the column is virtual if it isn’t from the active record model or any associated models
244 245 246 |
# File 'lib/active_scaffold/data_structures/column.rb', line 244 def virtual? column.nil? && association.nil? end |