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()
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