class ActiveScaffold::Config::Core
to fix the ckeditor bridge problem
Attributes
action links are used by actions to tie together. they appear as links for each record, or general links for the ActiveScaffold
.
provides read/write access to the local Actions
DataStructure
provides read/write access to the local Columns DataStructure
lets you override the global ActiveScaffold
frontend for a specific controller
a generally-applicable name for this ActiveScaffold
… will be used for generating page/section headers
STI children models, use an array of model names
lets you specify whether add a create link for each sti child for a specific controller
lets you override the global ActiveScaffold
theme for a specific controller
Public Class Methods
# File lib/active_scaffold/config/core.rb, line 11 def self.actions=(val) @@actions = ActiveScaffold::DataStructures::Actions.new(*val) end
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
# 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
lets you disable the DHTML history
# File lib/active_scaffold/config/core.rb, line 29 def self.dhtml_history=(val) @@dhtml_history = val end
# File lib/active_scaffold/config/core.rb, line 32 def self.dhtml_history? @@dhtml_history ? true : false end
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
# File lib/active_scaffold/config/core.rb, line 53 def self.ignore_columns=(val) @@ignore_columns = ActiveScaffold::DataStructures::Set.new(*val) end
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
ActiveScaffold::Configurable#method_missing
# 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
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
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
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
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
# File lib/active_scaffold/config/core.rb, line 67 def actions=(args) @actions = ActiveScaffold::DataStructures::Actions.new(*args) end
# File lib/active_scaffold/config/core.rb, line 87 def add_sti_create_links? self.sti_create_links and not self.sti_children.nil? end
# 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
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
# 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
configuration routing. we want to route calls named like an activated action to that action’s global or local Config
class.
ActiveScaffold::Configurable#method_missing
# 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
# File lib/active_scaffold/config/core.rb, line 190 def model @model ||= @model_id.to_s.camelize.constantize end
some utility methods
# File lib/active_scaffold/config/core.rb, line 186 def model_id @model_id end