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
Constant Summary
- @@plugin_directory =
File.(__FILE__).match(%{(^.*)/lib/active_scaffold/config/core.rb})[1]
- @@frontend =
:default- @@theme =
:default- @@dhtml_history =
true- @@action_links =
ActiveScaffold::DataStructures::ActionLinks.new
- @@ignore_columns =
ActiveScaffold::DataStructures::Set.new
- @@sti_create_links =
true
Instance Attribute Summary (collapse)
-
- (Object) action_links
readonly
action links are used by actions to tie together.
-
- (Object) actions
provides read/write access to the local Actions DataStructure.
-
- (Object) columns
provides read/write access to the local Columns DataStructure.
-
- (Object) file_column_fields
Returns the value of attribute file_column_fields.
-
- (Object) frontend
lets you override the global ActiveScaffold frontend for a specific controller.
- - (Object) label(options = {})
-
- (Object) sti_children
STI children models, use an array of model names.
-
- (Object) sti_create_links
lets you specify whether add a create link for each sti child for a specific controller.
-
- (Object) theme
lets you override the global ActiveScaffold theme for a specific controller.
Attributes inherited from Base
Class Method Summary (collapse)
- + (Object) actions=(val)
-
+ (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.
- + (Object) available_frontends
-
+ (Object) dhtml_history=(val)
lets you disable the DHTML history.
- + (Boolean) dhtml_history?
-
+ (Object) ignore_columns
columns that should be ignored for every model.
- + (Object) ignore_columns=(val)
-
+ (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.
- + (Object) method_missing(name, *args)
-
+ (Object) security
access to the permissions configuration.
Instance Method Summary (collapse)
-
- (Object) _configure_sti
To be called after your finished configuration.
-
- (Object) _load_action_columns
To be called after your finished configuration.
- - (Boolean) add_sti_create_links?
- - (Object) configure_file_column_field(field)
-
- (Object) inherited_view_paths
warning - this won't work as a per-request dynamic attribute in rails 2.0.
-
- (Core) initialize(model_id)
constructor
internal usage only below this point ------------------------------------.
- - (Object) initialize_with_calendar_date_select(model_id)
- - (Object) initialize_with_file_column(model_id)
-
- (Object) method_missing(name, *args)
configuration routing.
- - (Object) model
-
- (Object) model_id
some utility methods --------------------.
Methods inherited from Base
#crud_type, #formats, #formats=, inherited
Methods included from ActiveScaffold::Configurable
Constructor Details
- (Core) initialize(model_id)
internal usage only below this point
108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
# File 'lib/active_scaffold/config/core.rb', line 108 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.[:polymorphic]}.compact) # 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 |
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.
163 164 165 166 167 168 169 170 171 172 173 174 175 176 |
# File 'lib/active_scaffold/config/core.rb', line 163 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
- (Object) action_links (readonly)
action links are used by actions to tie together. they appear as links for each record, or general links for the ActiveScaffold.
93 94 95 |
# File 'lib/active_scaffold/config/core.rb', line 93 def action_links @action_links end |
- (Object) actions
provides read/write access to the local Actions DataStructure
67 68 69 |
# File 'lib/active_scaffold/config/core.rb', line 67 def actions @actions end |
- (Object) columns
provides read/write access to the local Columns DataStructure
73 74 75 |
# File 'lib/active_scaffold/config/core.rb', line 73 def columns @columns 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
81 82 83 |
# File 'lib/active_scaffold/config/core.rb', line 81 def frontend @frontend end |
- (Object) label(options = {})
97 98 99 |
# File 'lib/active_scaffold/config/core.rb', line 97 def label(={}) as_(@label, ) || model.model_name.human(.merge([:count].to_i == 1 ? {} : {:default => model.name.pluralize})) end |
- (Object) sti_children
STI children models, use an array of model names
102 103 104 |
# File 'lib/active_scaffold/config/core.rb', line 102 def sti_children @sti_children end |
- (Object) sti_create_links
lets you specify whether add a create link for each sti child for a specific controller
87 88 89 |
# File 'lib/active_scaffold/config/core.rb', line 87 def sti_create_links @sti_create_links end |
- (Object) theme
lets you override the global ActiveScaffold theme for a specific controller
84 85 86 |
# File 'lib/active_scaffold/config/core.rb', line 84 def theme @theme end |
Class Method Details
+ (Object) actions=(val)
11 12 13 |
# File 'lib/active_scaffold/config/core.rb', line 11 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.
203 204 205 |
# File 'lib/active_scaffold/config/core.rb', line 203 def self.asset_path(filename, frontend = self.frontend) "active_scaffold/#{frontend}/#{filename}" end |
+ (Object) available_frontends
214 215 216 217 |
# File 'lib/active_scaffold/config/core.rb', line 214 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
29 30 31 |
# File 'lib/active_scaffold/config/core.rb', line 29 def self.dhtml_history=(val) @@dhtml_history = val end |
+ (Boolean) dhtml_history?
32 33 34 |
# File 'lib/active_scaffold/config/core.rb', line 32 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.
51 52 53 |
# File 'lib/active_scaffold/config/core.rb', line 51 def self.ignore_columns @@ignore_columns end |
+ (Object) ignore_columns=(val)
54 55 56 |
# File 'lib/active_scaffold/config/core.rb', line 54 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.
209 210 211 212 |
# File 'lib/active_scaffold/config/core.rb', line 209 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)
178 179 180 181 182 183 184 |
# File 'lib/active_scaffold/config/core.rb', line 178 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 |
+ (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
45 46 47 |
# File 'lib/active_scaffold/config/core.rb', line 45 def self.security ActiveRecordPermissions end |
Instance Method Details
- (Object) _configure_sti
To be called after your finished configuration
147 148 149 150 151 152 153 154 155 156 157 158 |
# File 'lib/active_scaffold/config/core.rb', line 147 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]. ||= {} self.columns[column].[: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
135 136 137 138 139 140 141 142 143 144 |
# File 'lib/active_scaffold/config/core.rb', line 135 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 |
- (Boolean) add_sti_create_links?
88 89 90 |
# File 'lib/active_scaffold/config/core.rb', line 88 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
197 198 199 |
# File 'lib/active_scaffold/config/core.rb', line 197 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
192 193 194 |
# File 'lib/active_scaffold/config/core.rb', line 192 def model @model ||= @model_id.to_s.camelize.constantize end |
- (Object) model_id
some utility methods
188 189 190 |
# File 'lib/active_scaffold/config/core.rb', line 188 def model_id @model_id end |