Class: ActiveScaffold::Config::Core

Inherits:
Base show all
Defined in:
lib/active_scaffold/config/core.rb,
lib/active_scaffold/bridges/file_column/as_file_column_bridge.rb,
lib/active_scaffold/bridges/calendar_date_select/as_cds_bridge.rb

Overview

to fix the ckeditor bridge problem inherit from full class name

Constant Summary

@@plugin_directory =
File.expand_path(__FILE__).match(%{(^.*)/lib/active_scaffold/config/core.rb})[1]
@@frontend =
:default
@@theme =
:default
true
@@cache_association_options =
true
@@conditional_get_support =
false
@@store_user_settings =
true
@@dhtml_history =
true
ActiveScaffold::DataStructures::ActionLinks.new
@@ignore_columns =
ActiveScaffold::DataStructures::Set.new
true
@@timestamped_messages =
false
@@highlight_messages =
nil

Instance Attribute Summary (collapse)

Attributes inherited from Base

#action_group, #core, #user

Class Method Summary (collapse)

Instance Method Summary (collapse)

Methods inherited from Base

#crud_type, #formats, #formats=, inherited

Methods included from ActiveScaffold::Configurable

#configure

Constructor Details

- (Core) initialize(model_id)

internal usage only below this point




148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
# File 'lib/active_scaffold/config/core.rb', line 148

def initialize(model_id)
  # model_id is the only absolutely required configuration value. it is also not publicly accessible.
  @model_id = model_id

  # inherit the actions list directly from the global level
  @actions = self.class.actions.clone

  # create a new default columns datastructure, since it doesn't make sense before now
  attribute_names = self.model.columns.collect{ |c| c.name.to_sym }.sort_by { |c| c.to_s }
  association_column_names = self.model.reflect_on_all_associations.collect{ |a| a.name.to_sym }.sort_by { |c| c.to_s }
  @columns = ActiveScaffold::DataStructures::Columns.new(self.model, attribute_names + association_column_names)

  # and then, let's remove some columns from the inheritable set.
  @columns.exclude(*self.class.ignore_columns)
  @columns.exclude(*@columns.find_all { |c| c.column and (c.column.primary or c.column.name =~ /(_id|_count)$/) }.collect {|c| c.name})
  @columns.exclude(*self.model.reflect_on_all_associations.collect{|a| :#{a.name}_type" if a.options[:polymorphic]}.compact)

  # inherit the global frontend
  @frontend = self.class.frontend
  @theme = self.class.theme
  @cache_action_link_urls = self.class.cache_action_link_urls
  @cache_association_options = self.class.cache_association_options
  @conditional_get_support = self.class.conditional_get_support
  @store_user_settings = self.class.
  @sti_create_links = self.class.sti_create_links

  # inherit from the global set of action links
  @action_links = self.class.action_links.clone
  @timestamped_messages = self.class.timestamped_messages
  @highlight_messages = self.class.highlight_messages
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

- (Object) method_missing(name, *args)

configuration routing. we want to route calls named like an activated action to that action's global or local Config class.




206
207
208
209
210
211
212
213
214
215
216
217
218
219
# File 'lib/active_scaffold/config/core.rb', line 206

def method_missing(name, *args)
  @action_configs ||= {}
  titled_name = name.to_s.camelcase
  underscored_name = name.to_s.underscore.to_sym
  klass = "ActiveScaffold::Config::#{titled_name}".constantize rescue nil
  if klass
    if @actions.include? underscored_name
      return @action_configs[underscored_name] ||= klass.new(self)
    else
      raise "#{titled_name} is not enabled. Please enable it or remove any references in your configuration (e.g. config.#{underscored_name}.columns = [...])."
    end
  end
  super
end

Instance Attribute Details

action links are used by actions to tie together. they appear as links for each record, or general links for the ActiveScaffold.



127
128
129
# File 'lib/active_scaffold/config/core.rb', line 127

def action_links
  @action_links
end

- (Object) actions

provides read/write access to the local Actions DataStructure



89
90
91
# File 'lib/active_scaffold/config/core.rb', line 89

def actions
  @actions
end

enable caching of action link urls



109
110
111
# File 'lib/active_scaffold/config/core.rb', line 109

def cache_action_link_urls
  @cache_action_link_urls
end

- (Object) cache_association_options

enable caching of association options



112
113
114
# File 'lib/active_scaffold/config/core.rb', line 112

def cache_association_options
  @cache_association_options
end

- (Object) columns

provides read/write access to the local Columns DataStructure



95
96
97
# File 'lib/active_scaffold/config/core.rb', line 95

def columns
  @columns
end

- (Object) conditional_get_support

enable setting ETag and LastModified on responses and using fresh_when/stale? to respond with 304 and avoid rendering views



115
116
117
# File 'lib/active_scaffold/config/core.rb', line 115

def conditional_get_support
  @conditional_get_support
end

- (Object) file_column_fields

Returns the value of attribute file_column_fields



7
8
9
# File 'lib/active_scaffold/bridges/file_column/as_file_column_bridge.rb', line 7

def file_column_fields
  @file_column_fields
end

- (Object) frontend

lets you override the global ActiveScaffold frontend for a specific controller



103
104
105
# File 'lib/active_scaffold/config/core.rb', line 103

def frontend
  @frontend
end

- (Object) highlight_messages

a hash of string (or array of strings) and highlighter string to highlight words in messages. It will use highlight rails helper



142
143
144
# File 'lib/active_scaffold/config/core.rb', line 142

def highlight_messages
  @highlight_messages
end

- (Object) label(options = {})



131
132
133
# File 'lib/active_scaffold/config/core.rb', line 131

def label(options={})
  as_(@label, options) || model.model_name.human(options.merge(options[:count].to_i == 1 ? {} : {:default => model.name.pluralize}))
end

- (Object) sti_children

STI children models, use an array of model names



136
137
138
# File 'lib/active_scaffold/config/core.rb', line 136

def sti_children
  @sti_children
end

lets you specify whether add a create link for each sti child for a specific controller



121
122
123
# File 'lib/active_scaffold/config/core.rb', line 121

def sti_create_links
  @sti_create_links
end

- (Object) store_user_settings

enable saving user settings in session (per_page, limit, page, sort, search params)



118
119
120
# File 'lib/active_scaffold/config/core.rb', line 118

def 
  @store_user_settings
end

- (Object) theme

lets you override the global ActiveScaffold theme for a specific controller



106
107
108
# File 'lib/active_scaffold/config/core.rb', line 106

def theme
  @theme
end

- (Object) timestamped_messages

prefix messages with current timestamp, set the format to display (you can use I18n keys) or true and :short will be used



139
140
141
# File 'lib/active_scaffold/config/core.rb', line 139

def timestamped_messages
  @timestamped_messages
end

Class Method Details

+ (Object) actions=(val)



9
10
11
# File 'lib/active_scaffold/config/core.rb', line 9

def self.actions=(val)
  @@actions = ActiveScaffold::DataStructures::Actions.new(*val)
end

+ (Object) asset_path(filename, frontend = self.frontend)

must be a class method so the layout doesn't depend on a controller that uses active_scaffold note that this is unaffected by per-controller frontend configuration.



246
247
248
# File 'lib/active_scaffold/config/core.rb', line 246

def self.asset_path(filename, frontend = self.frontend)
  "active_scaffold/#{frontend}/#{filename}"
end

+ (Object) available_frontends



257
258
259
260
# File 'lib/active_scaffold/config/core.rb', line 257

def self.available_frontends
  frontends_dir = File.join(Rails.root, "vendor", "plugins", ActiveScaffold::Config::Core.plugin_directory, "frontends")
  Dir.entries(frontends_dir).reject { |e| e.match(/^\./) } # Get rid of files that start with .
end

+ (Object) dhtml_history=(val)

lets you disable the DHTML history



43
44
45
# File 'lib/active_scaffold/config/core.rb', line 43

def self.dhtml_history=(val)
  @@dhtml_history = val
end

+ (Boolean) dhtml_history?

Returns:

  • (Boolean)


46
47
48
# File 'lib/active_scaffold/config/core.rb', line 46

def self.dhtml_history?
  @@dhtml_history ? true : false
end

+ (Object) ignore_columns

columns that should be ignored for every model. these should be metadata columns like change dates, versions, etc. values in this array may be symbols or strings.



65
66
67
# File 'lib/active_scaffold/config/core.rb', line 65

def self.ignore_columns
  @@ignore_columns
end

+ (Object) ignore_columns=(val)



68
69
70
# File 'lib/active_scaffold/config/core.rb', line 68

def self.ignore_columns=(val)
  @@ignore_columns = ActiveScaffold::DataStructures::Set.new(*val)
end

+ (Object) javascripts(frontend = self.frontend)

must be a class method so the layout doesn't depend on a controller that uses active_scaffold note that this is unaffected by per-controller frontend configuration.



252
253
254
255
# File 'lib/active_scaffold/config/core.rb', line 252

def self.javascripts(frontend = self.frontend)
  javascript_dir = File.join(Rails.public_path, "javascripts", asset_path('', frontend))
  Dir.entries(javascript_dir).reject { |e| !e.match(/\.js$/) or (!self.dhtml_history? and e.match('dhtml_history')) }
end

+ (Object) method_missing(name, *args)



221
222
223
224
225
226
227
# File 'lib/active_scaffold/config/core.rb', line 221

def self.method_missing(name, *args)
  klass = "ActiveScaffold::Config::#{name.to_s.camelcase}".constantize rescue nil
  if @@actions.include? name.to_s.underscore and klass
    return eval("ActiveScaffold::Config::#{name.to_s.camelcase}")
  end
  super
end

+ (Object) security

access to the permissions configuration. configuration options include:

* current_user_method - what method on the controller returns the current user. default: :current_user
* default_permission - what the default permission is. default: true


59
60
61
# File 'lib/active_scaffold/config/core.rb', line 59

def self.security
  ActiveScaffold::ActiveRecordPermissions
end

Instance Method Details

- (Object) _configure_sti

To be called after your finished configuration



190
191
192
193
194
195
196
197
198
199
200
201
# File 'lib/active_scaffold/config/core.rb', line 190

def _configure_sti
  column = self.model.inheritance_column
  if sti_create_links
    self.columns[column].form_ui ||= :hidden
  else
    self.columns[column].form_ui ||= :select
    self.columns[column].options ||= {}
    self.columns[column].options[:options] = self.sti_children.collect do |model_name|
      [model_name.to_s.camelize.constantize.model_name.human, model_name.to_s.camelize]
    end
  end
end

- (Object) _load_action_columns

To be called after your finished configuration



181
182
183
184
185
186
187
# File 'lib/active_scaffold/config/core.rb', line 181

def _load_action_columns
  # then, register the column objects
  self.actions.each do |action_name|
    action = self.send(action_name)
    action.columns.set_columns(self.columns) if action.respond_to?(:columns)
  end
end

- (Boolean) add_sti_create_links?

Returns:

  • (Boolean)


122
123
124
# File 'lib/active_scaffold/config/core.rb', line 122

def add_sti_create_links?
  self.sti_create_links and not self.sti_children.nil?
end

- (Object) configure_file_column_field(field)



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/active_scaffold/bridges/file_column/as_file_column_bridge.rb', line 29

def configure_file_column_field(field)
  # set list_ui first because it gets its default value from form_ui
  self.columns[field].list_ui ||= self.model.field_has_image_version?(field, "thumb") ? :thumbnail : :download_link_with_filename
  self.columns[field].form_ui ||= :file_column
  
  # these 2 parameters are necessary helper attributes for the file column that must be allowed to be set to the model by active scaffold.
  self.columns[field].params.add "#{field}_temp", "delete_#{field}"
  
  # set null to false so active_scaffold wont set it to null
  # delete_file_column will take care of deleting a file or not.
  self.model.columns_hash[field.to_s].instance_variable_set("@null", false)
  
rescue
  false
end

- (Object) inherited_view_paths

warning - this won't work as a per-request dynamic attribute in rails 2.0. You'll need to interact with Controller#generic_view_paths



240
241
242
# File 'lib/active_scaffold/config/core.rb', line 240

def inherited_view_paths
  @inherited_view_paths||=[]
end

- (Object) initialize_with_calendar_date_select(model_id)



4
5
6
7
8
9
10
11
12
13
14
15
# File 'lib/active_scaffold/bridges/calendar_date_select/as_cds_bridge.rb', line 4

def initialize_with_calendar_date_select(model_id)
  initialize_without_calendar_date_select(model_id)
  
  calendar_date_select_fields = self.model.columns.collect{|c| c.name.to_sym if [:date, :datetime].include?(c.type) }.compact
  # check to see if file column was used on the model
  return if calendar_date_select_fields.empty?
  
  # automatically set the forum_ui to a file column
  calendar_date_select_fields.each{|field|
    self.columns[field].form_ui = :calendar_date_select
  }
end

- (Object) initialize_with_file_column(model_id)



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/active_scaffold/bridges/file_column/as_file_column_bridge.rb', line 8

def initialize_with_file_column(model_id)
  initialize_without_file_column(model_id)
  
  return unless ActiveScaffold::Bridges::FileColumn::FileColumnHelpers.klass_has_file_column_fields?(self.model)
  
  self.model.send :extend, ActiveScaffold::Bridges::FileColumn::FileColumnHelpers
  
  # include the "delete" helpers for use with active scaffold, unless they are already included
  self.model.generate_delete_helpers
  
  # switch on multipart
  self.update.multipart = true
  self.create.multipart = true
  
  self.model.file_column_fields.each{ |field|
    configure_file_column_field(field)
  }
end

- (Object) model



235
236
237
# File 'lib/active_scaffold/config/core.rb', line 235

def model
  @model ||= @model_id.to_s.camelize.constantize
end

- (Object) model_id

some utility methods




231
232
233
# File 'lib/active_scaffold/config/core.rb', line 231

def model_id
  @model_id
end