class ActiveScaffold::Config::Core

to fix the ckeditor bridge problem

Attributes

actions[R]

provides read/write access to the local Actions DataStructure

columns[R]

provides read/write access to the local Columns DataStructure

frontend[RW]

lets you override the global ActiveScaffold frontend for a specific controller

label[W]

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

sti_children[RW]

STI children models, use an array of model names

theme[RW]

lets you override the global ActiveScaffold theme for a specific controller

Public Class Methods

actions=(val) click to toggle source
# File lib/active_scaffold/config/core.rb, line 11
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 201
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 212
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
dhtml_history=(val) click to toggle source

lets you disable the DHTML history

# File lib/active_scaffold/config/core.rb, line 29
def self.dhtml_history=(val)
  @@dhtml_history = val
end
dhtml_history?() click to toggle source
# File lib/active_scaffold/config/core.rb, line 32
def self.dhtml_history?
  @@dhtml_history ? true : false
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 50
def self.ignore_columns
  @@ignore_columns
end
ignore_columns=(val) click to toggle source
# File lib/active_scaffold/config/core.rb, line 53
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 207
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
method_missing(name, *args) click to toggle source
# File lib/active_scaffold/config/core.rb, line 176
def self.method_missing(name, *args)
  klass = "ActiveScaffold::Config::#{name.to_s.titleize}".constantize rescue nil
  if @@actions.include? name.to_s.underscore and klass
    return eval("ActiveScaffold::Config::#{name.to_s.titleize}")
  end
  super
end
new(model_id) click to toggle source

internal usage only below this point


# File lib/active_scaffold/config/core.rb, line 107
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.sort_by {|c| c.to_s}
  association_column_names = self.model.associations.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_key] or c.name.to_s =~ /(_id|_count)$/) }.collect {|c| c.name})

  # inherit the global frontend
  @frontend = self.class.frontend
  @theme = self.class.theme
  @sti_create_links = self.class.sti_create_links

  # inherit from the global set of action links
  @action_links = self.class.action_links.clone
end
security() click to toggle source

access to the permissions configuration. configuration options include:

* default_permission - what the default permission is. default: true
# File lib/active_scaffold/config/core.rb, line 44
def self.security
  ModelPermissions
end

Public Instance Methods

_configure_sti() click to toggle source

To be called after your finished configuration

# File lib/active_scaffold/config/core.rb, line 145
def _configure_sti
  column = self.model.respond_to?(:sti_key) ? self.model.sti_key : :type
  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
_load_action_columns() click to toggle source

To be called after your finished configuration

# File lib/active_scaffold/config/core.rb, line 133
def _load_action_columns
  ActiveScaffold::DataStructures::ActionColumns.class_eval {include ActiveScaffold::DataStructures::ActionColumns::AfterConfiguration}

  # then, register the column objects
  self.actions.each do |action_name|
    action = self.send(action_name)
    next unless action.respond_to? :columns
    action.columns.set_columns(self.columns)
  end
end
actions=(args) click to toggle source
# File lib/active_scaffold/config/core.rb, line 67
def actions=(args)
  @actions = ActiveScaffold::DataStructures::Actions.new(*args)
end
columns=(val) click to toggle source
# File lib/active_scaffold/config/core.rb, line 73
def columns=(val)
  @columns._inheritable = val.collect {|c| c.to_sym}
  # Add virtual columns
  @columns << val.collect {|c| c.to_sym unless @columns[c.to_sym]}.compact
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 195
def inherited_view_paths
  @inherited_view_paths||=[]
end
label(options={}) click to toggle source
# File lib/active_scaffold/config/core.rb, line 96
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 161
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
model() click to toggle source
# File lib/active_scaffold/config/core.rb, line 190
def model
  @model ||= @model_id.to_s.camelize.constantize
end
model_id() click to toggle source

some utility methods


# File lib/active_scaffold/config/core.rb, line 186
def model_id
  @model_id
end