module ActiveScaffold::Core::ClassMethods

Attributes

active_scaffold_config_block[R]

Public Instance Methods

active_scaffold(model_id = nil, &block) click to toggle source
# File lib/active_scaffold/core.rb, line 48
def active_scaffold(model_id = nil, &block)
  extend Prefixes
  # initialize bridges here
  ActiveScaffold::Bridges.run_all

  # converts Foo::BarController to 'bar' and FooBarsController to 'foo_bar' and AddressController to 'address'
  model_id ||= to_s.split('::').last.sub(/Controller$/, '').pluralize.singularize.underscore

  # run the configuration
  @active_scaffold_config = ActiveScaffold::Config::Core.new(model_id)
  @active_scaffold_config_block = block
  links_for_associations

  active_scaffold_superclasses_blocks.each { |superblock| active_scaffold_config.configure(&superblock) }
  active_scaffold_config.sti_children = nil # reset sti_children if set in parent block
  active_scaffold_config.configure(&block) if block_given?
  active_scaffold_config.class.after_config_callbacks.each do |callback|
    if callback.is_a?(Proc)
      callback.call
    elsif active_scaffold_config.respond_to?(callback)
      active_scaffold_config.send(callback)
    end
  end

  # defines the attribute read methods on the model, so record.send() doesn't find protected/private methods instead
  # define_attribute_methods is safe to call multiple times since rails 4.0.4
  active_scaffold_config.model.define_attribute_methods if active_scaffold_config.active_record?
  # include the rest of the code into the controller: the action core and the included actions
  module_eval do
    unless self < ActiveScaffold::Actions::Core
      include ActiveScaffold::Finder
      include ActiveScaffold::Constraints
      include ActiveScaffold::AttributeParams
      include ActiveScaffold::Actions::Core
    end
    active_scaffold_config.actions.each do |mod|
      include "ActiveScaffold::Actions::#{mod.to_s.camelize}".constantize
      mod_conf = active_scaffold_config.send(mod)
      active_scaffold_config._setup_action(mod) if ActiveScaffold.threadsafe
      next unless mod_conf.respond_to?(:link) && (link = mod_conf.link)

      # sneak the action links from the actions into the main set
      if link.is_a? Array
        link.each do |current_link|
          active_scaffold_config.action_links.add_to_group(current_link, active_scaffold_config.send(mod).action_group)
        end
      elsif link.is_a? ActiveScaffold::DataStructures::ActionLink
        active_scaffold_config.action_links.add_to_group(link, active_scaffold_config.send(mod).action_group)
      end
    end
  end
  _add_sti_create_links if active_scaffold_config.add_sti_create_links?
  return unless ActiveScaffold.threadsafe
  active_scaffold_config._cache_lazy_values
  active_scaffold_config.deep_freeze!
end
active_scaffold_config() click to toggle source
# File lib/active_scaffold/core.rb, line 194
def active_scaffold_config
  if @active_scaffold_config.nil?
    superclass.active_scaffold_config if superclass.respond_to? :active_scaffold_config
  else
    @active_scaffold_config
  end
end
active_scaffold_config_for(klass) click to toggle source
# File lib/active_scaffold/core.rb, line 214
def active_scaffold_config_for(klass)
  active_scaffold_controller_for(klass).active_scaffold_config
rescue ActiveScaffold::ControllerNotFound
  ActiveScaffold::Config::Core.new(klass)
end
active_scaffold_controller_for(klass) click to toggle source
# File lib/active_scaffold/core.rb, line 220
def active_scaffold_controller_for(klass)
  return self if uses_active_scaffold? && klass == active_scaffold_config.model
  # noinspection RubyArgCount
  ActiveScaffold::Core.active_scaffold_controller_for(klass, to_s.deconstantize + '::')
end
active_scaffold_controller_for_column(column, options = {}) click to toggle source
# File lib/active_scaffold/core.rb, line 144
def active_scaffold_controller_for_column(column, options = {})
  if column.association.polymorphic?
    :polymorph
  elsif options.include?(:controller)
    "#{options[:controller].to_s.camelize}Controller".constantize
  else
    active_scaffold_controller_for(column.association.klass)
  end
rescue ActiveScaffold::ControllerNotFound
  nil
end
active_scaffold_superclasses_blocks() click to toggle source
# File lib/active_scaffold/core.rb, line 204
def active_scaffold_superclasses_blocks
  blocks = []
  klass = superclass
  while klass.respond_to? :active_scaffold_superclasses_blocks
    blocks << klass.active_scaffold_config_block
    klass = klass.superclass
  end
  blocks.compact.reverse
end
add_active_scaffold_path(path) click to toggle source
# File lib/active_scaffold/core.rb, line 184
def add_active_scaffold_path(path)
  as_path = File.realpath File.join(ActiveScaffold::Config::Core.plugin_directory, 'app', 'views')
  index = view_paths.find_index { |p| p.to_s == as_path }
  if index
    self.view_paths = view_paths[0..index - 1] + Array(path) + view_paths[index..-1]
  else
    append_view_path path
  end
end
uses_active_scaffold?() click to toggle source
# File lib/active_scaffold/core.rb, line 226
def uses_active_scaffold?
  !active_scaffold_config.nil?
end