class ActiveScaffold::Config::Core

to fix the ckeditor bridge problem inherit from full class name

Attributes

actions[R]

provides read/write access to the local Actions DataStructure

cache_association_options[RW]

enable caching of association options

columns[R]

provides read/write access to the local Columns DataStructure

conditional_get_support[RW]

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

frontend[RW]

lets you override the global ActiveScaffold frontend for a specific controller

highlight_messages[RW]

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

label[W]

a generally-applicable name for this ActiveScaffold … will be used for generating page/section headers

model_id[R]

some utility methods


sti_children[RW]

STI children models, use an array of model names

store_user_settings[RW]

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

theme[RW]

lets you override the global ActiveScaffold theme for a specific controller

timestamped_messages[RW]

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

Public Class Methods

actions=(val) click to toggle source
# File lib/active_scaffold/config/core.rb, line 10
def self.actions=(val)
  @@actions = ActiveScaffold::DataStructures::Actions.new(*val)
end
asset_path(filename, frontend = self.frontend) click to toggle source

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.

# File lib/active_scaffold/config/core.rb, line 309
def self.asset_path(filename, frontend = self.frontend)
  "active_scaffold/#{frontend}/#{filename}"
end
available_frontends() click to toggle source
# File lib/active_scaffold/config/core.rb, line 320
def self.available_frontends
  frontends_dir = Rails.root.join('vendor', 'plugins', ActiveScaffold::Config::Core.plugin_directory, 'frontends')
  Dir.entries(frontends_dir).reject { |e| e.match(/^\./) } # Get rid of files that start with .
end
column() click to toggle source

access to default column configuration.

# File lib/active_scaffold/config/core.rb, line 64
def self.column
  ActiveScaffold::DataStructures::Column
end
config_class(name) click to toggle source
# File lib/active_scaffold/config/core.rb, line 266
def self.config_class(name)
  "ActiveScaffold::Config::#{name.to_s.camelcase}".constantize if config_class?(name)
end
config_class?(name) click to toggle source
# File lib/active_scaffold/config/core.rb, line 270
def self.config_class?(name)
  ActiveScaffold::Config.const_defined? name.to_s.camelcase
end
dhtml_history?() click to toggle source
# File lib/active_scaffold/config/core.rb, line 46
def self.dhtml_history?
  @@dhtml_history ? true : false
end
freeze() click to toggle source
Calls superclass method
# File lib/active_scaffold/config/core.rb, line 95
def self.freeze
  super
  security.freeze
  column.freeze
end
ignore_columns() click to toggle source

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.

# File lib/active_scaffold/config/core.rb, line 70
def self.ignore_columns
  @@ignore_columns
end
ignore_columns=(val) click to toggle source
# File lib/active_scaffold/config/core.rb, line 74
def self.ignore_columns=(val)
  @@ignore_columns = ActiveScaffold::DataStructures::Set.new(*val)
end
javascripts(frontend = self.frontend) click to toggle source

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.

# File lib/active_scaffold/config/core.rb, line 315
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$/) || (!dhtml_history? && e.match('dhtml_history')) }
end
method_missing(name, *args) click to toggle source
# File lib/active_scaffold/config/core.rb, line 262
def self.method_missing(name, *args)
  config_class(name) || super
end
new(model_id) click to toggle source

internal usage only below this point


# File lib/active_scaffold/config/core.rb, line 164
def initialize(model_id)
  # model_id is the only absolutely required configuration value. it is also not publicly accessible.
  @model_id = model_id
  setup_user_setting_key

  # 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 = _columns.collect { |c| c.name.to_sym }.sort_by(&:to_s)
  association_column_names = _reflect_on_all_associations.collect { |a| a.name.to_sym }
  if defined?(ActiveMongoid) && model < ActiveMongoid::Associations
    association_column_names.concat model.am_relations.keys.map(&:to_sym)
  end
  @columns = ActiveScaffold::DataStructures::Columns.new(model, attribute_names + association_column_names.sort_by(&:to_s))

  # and then, let's remove some columns from the inheritable set.
  content_columns = Set.new(_content_columns.map(&:name))
  @columns.exclude(*self.class.ignore_columns)
  @columns.exclude(*@columns.find_all { |c| c.column && content_columns.exclude?(c.column.name) }.collect(&:name))
  @columns.exclude(*model.reflect_on_all_associations.collect { |a| a.foreign_type.to_sym 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.store_user_settings
  @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
respond_to_missing?(name, include_all = false) click to toggle source
# File lib/active_scaffold/config/core.rb, line 274
def self.respond_to_missing?(name, include_all = false)
  config_class?(name) && @@actions.include?(name.to_s.underscore) || super
end
security() click to toggle source

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
# File lib/active_scaffold/config/core.rb, line 59
def self.security
  ActiveScaffold::ActiveRecordPermissions
end

Public Instance Methods

[](action_name) click to toggle source
# File lib/active_scaffold/config/core.rb, line 244
def [](action_name)
  klass = self.class.config_class(action_name)
  return unless klass

  underscored_name = action_name.to_s.underscore.to_sym
  unless @actions.include? underscored_name
    raise "#{action_name.to_s.camelcase} is not enabled. Please enable it or remove any references in your configuration (e.g. config.#{underscored_name}.columns = [...])."
  end
  @action_configs ||= {}
  @action_configs[underscored_name] ||= klass.new(self)
end
_cache_lazy_values() click to toggle source

To be called before freezing

# File lib/active_scaffold/config/core.rb, line 202
def _cache_lazy_values
  action_links.each(&:name_to_cache) if cache_action_link_urls
  columns.select(&:sortable?).each(&:sort)
  columns.select(&:searchable?).each(&:search_sql)
  actions.each do |action_name|
    action = send(action_name)
    Array(action.class.columns_collections).each { |method| action.send(method) }
  end
end
_configure_sti() click to toggle source

To be called after your finished configuration

# File lib/active_scaffold/config/core.rb, line 213
def _configure_sti
  return if sti_children.nil?
  column = model.inheritance_column
  if sti_create_links
    columns[column].form_ui ||= :hidden
  else
    columns[column].form_ui ||= :select
    columns[column].options ||= {}
    columns[column].options[:options] = sti_children.collect do |model_name|
      [model_name.to_s.camelize.constantize.model_name.human, model_name.to_s.camelize]
    end
  end
end
_setup_action(action) click to toggle source
# File lib/active_scaffold/config/core.rb, line 227
def _setup_action(action)
  define_singleton_method action do
    self[action]
  end
end
actions=(args) click to toggle source
# File lib/active_scaffold/config/core.rb, line 106
def actions=(args)
  @actions = ActiveScaffold::DataStructures::Actions.new(*args)
end
active_record_class()
Alias for: model
build_action_columns(action, columns) click to toggle source
# File lib/active_scaffold/config/core.rb, line 296
def build_action_columns(action, columns)
  action_columns =
    if columns.is_a?(ActiveScaffold::DataStructures::ActionColumns)
      columns.dup
    else
      ActiveScaffold::DataStructures::ActionColumns.new(*columns)
    end
  action_columns.action = action.is_a?(Symbol) ? send(action) : action
  action_columns
end
columns=(val) click to toggle source
# File lib/active_scaffold/config/core.rb, line 112
def columns=(val)
  @columns._inheritable = val.collect(&:to_sym)
  # Add virtual columns
  @columns.add(*val)
end
inherited_view_paths() click to toggle source

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

# File lib/active_scaffold/config/core.rb, line 292
def inherited_view_paths
  @inherited_view_paths ||= []
end
label(options = {}) click to toggle source
# File lib/active_scaffold/config/core.rb, line 147
def label(options = {})
  as_(@label, options) || model.model_name.human(options.merge(options[:count].to_i == 1 ? {} : {:default => model.name.pluralize}))
end
method_missing(name, *args) click to toggle source

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


# File lib/active_scaffold/config/core.rb, line 236
def method_missing(name, *args)
  self[name] || super
end
model() click to toggle source
# File lib/active_scaffold/config/core.rb, line 282
def model
  @model ||= @model_id.to_s.camelize.constantize
end
Also aliased as: active_record_class
primary_key() click to toggle source
# File lib/active_scaffold/config/core.rb, line 287
def primary_key
  mongoid? ? '_id' : model.primary_key
end
respond_to_missing?(name, include_all = false) click to toggle source
# File lib/active_scaffold/config/core.rb, line 240
def respond_to_missing?(name, include_all = false)
  self.class.config_class?(name) && @actions.include?(name.to_sym) || super
end

Private Instance Methods

[]=(action_name, action_config) click to toggle source
# File lib/active_scaffold/config/core.rb, line 256
def []=(action_name, action_config)
  @action_configs ||= {}
  @action_configs[action_name] = action_config
end