module ConsciousConcern

Decorates ActiveSupport::Concern

Public Class Methods

extended(base) click to toggle source
# File lib/conscious_concern.rb, line 23
def self.extended(base)
  extenders << base
  ActiveSupport::Concern.extended(base)
end
extenders() click to toggle source
# File lib/conscious_concern.rb, line 19
def self.extenders
  @_extenders ||= Set.new
end
load_classes(*custom_dirs, engine: nil, rails: true) click to toggle source
# File lib/conscious_concern.rb, line 10
def self.load_classes(*custom_dirs, engine: nil, rails: true)
  std_dirs = %w(controllers models)
  EagerLoader.load_classes_in_engine_dirs(engine, *std_dirs) if engine
  EagerLoader.load_classes_in_rails_dirs(*std_dirs) if rails
  custom_dirs.each { |dir| EagerLoader.load_classes_in_dir(dir) }

  extenders.each { |concern| concern._classes_loaded_callbacks.each(&:call) }
end

Public Instance Methods

_classes()
Alias for: classes
_classes_loaded_callbacks()
_controllers()
Alias for: controllers
_models()
Alias for: models
_route_keys()
Alias for: route_keys
_tables()
Alias for: tables
classes() click to toggle source

underscore aliases protect core functionality against overrides in extenders

# File lib/conscious_concern.rb, line 40
def classes
  @_classes ||= Set.new
end
Also aliased as: _classes
classes_loaded_callbacks() click to toggle source
# File lib/conscious_concern.rb, line 83
def classes_loaded_callbacks
  @_classes_loaded_callbacks ||= []
end
Also aliased as: _classes_loaded_callbacks
controllers() click to toggle source
# File lib/conscious_concern.rb, line 45
def controllers
  return _classes unless _model_concern?
  _classes.map { |m| _try_constant("#{m.to_s.pluralize}Controller") }.compact
end
Also aliased as: _controllers
included(base = nil, &block) click to toggle source
Calls superclass method
# File lib/conscious_concern.rb, line 28
def included(base = nil, &block)
  _classes << base if base && base.is_a?(Class)
  super unless base.nil? && instance_variable_defined?(:@_included_block)
end
let_controllers(method_args_hash) click to toggle source
# File lib/conscious_concern.rb, line 75
def let_controllers(method_args_hash)
  _classes_loaded_callbacks << proc do
    method_args_hash.each do |method, args|
      _controllers.each { |ctr| ctr.send(method, *args) }
    end
  end
end
models() click to toggle source
# File lib/conscious_concern.rb, line 51
def models
  return _classes if _model_concern?
  _classes.map { |ctr| _try_constant(ctr.controller_name) }.compact
end
Also aliased as: _models
prepended(base = nil) click to toggle source
Calls superclass method
# File lib/conscious_concern.rb, line 33
def prepended(base = nil)
  _classes << base if base && base.is_a?(Class)
  super
end
resources(options = { only: [] }, &resource_routing_block) click to toggle source
# File lib/conscious_concern.rb, line 57
def resources(options = { only: [] }, &resource_routing_block)
  resource_args = _route_keys
  app_routes_block = resource_routing_block.binding.eval('self')
  app_routes_block.instance_eval do
    resources(*resource_args, options, &resource_routing_block)
  end
end
route_keys() click to toggle source
# File lib/conscious_concern.rb, line 65
def route_keys
  _models.map { |model| model.try(:model_name).try(:route_key) }.compact
end
Also aliased as: _route_keys
tables() click to toggle source
# File lib/conscious_concern.rb, line 70
def tables
  _models.map { |model| model.try(:table_name) }.compact
end
Also aliased as: _tables

Private Instance Methods

_model_concern?() click to toggle source
# File lib/conscious_concern.rb, line 90
def _model_concern?
  _classes.any? && !_classes.first.to_s.end_with?('Controller')
end
_try_constant(name) click to toggle source
# File lib/conscious_concern.rb, line 94
def _try_constant(name)
  Object.const_defined?(name.classify) ? name.classify.constantize : nil
end