module Metasploit::Concern
Automates the inclusion of concerns into classes and models from other ‘Rail::Engine`s by use of an app/concerns directory in the `Rails::Engine` that declares the concerns.
The ‘Class` or `Module` must support the use of concerns by calling {run}.
@example engine_that_supports_concerns/app/models/model_that_supports_concerns.rb
class EngineThatSupportsConcerns::ModelThatSupportsConcerns # declared as last statement in body so that concerns can redefine everything in class Metasploit::Concern.run(self) end
To include concerns from a Rails::Application add ‘app/concerns’ to paths and then declare concerns under app/concerns.
@example config/application.rb
config.paths.add 'app/concerns', autoload: true
@example Concern
declared in application
# app/concerns/engine_that_supports_concerns/model_that_supports_concerns/concern_from_application.rb module EngineThatSupportsConcerns::ModelThatSupportsConcerns::ConcernFromApplication extend ActiveSupport::Concern included do # run with self equal to EngineThatSupportsConcerns::ModelThatSupportsConcerns, but at the end of the class # definition, instead of at the beginning as would be the case with # class EngineThatSupportsConcerns::ModelThatSupportsConcerns # include EngineThatSupportsConcerns::ModelThatSupportsConcerns::ModelThatSupportsConcerns # # # body # end end end
To include concerns from a Rails::Engine add ‘app/concerns’ to the paths and then declare concerns under app/concerns.
@example Rails::Engine configuration for app/concerns
# engine_defining_concerns/lib/engine_defining_concerns/engine.rb module EngineDefiningConcerns class Engine < Rails::Engine config.paths.add 'app/concerns', autoload: true end end
@example Concern
declared in Rails::Engine
# engine_defining_concerns/app/concerns module EngineThatSupportsConcerns::ModelThatSupportsConcerns::ConcernFromEngine extend ActiveSupport::Concern included do # run with self equal to EngineThatSupportsConcerns::ModelThatSupportsConcerns, but at the end of the class # definition, instead of at the beginning as would be the case with # class EngineThatSupportsConcerns::ModelThatSupportsConcerns # include EngineThatSupportsConcerns::ModelThatSupportsConcerns::ModelThatSupportsConcerns # # # body # end end end
Constants
- VERSION
VERSION
is managed by GemRelease
Public Class Methods
@note If ‘Rails` is loaded and {Metasploit::Concern::Engine} is defined, just use
`Metasploit::Concern::Engine.root`.
The root of the ‘metasploit-concern` gem’s file tree.
@return [Pathname]
# File lib/metasploit/concern.rb, line 98 def self.root @root ||= Pathname.new(__FILE__).parent.parent.parent end
@note As ‘ActiveSupport.run_load_hooks` is used, it is safe to call {run} prior to {Metasploit::Concern}’s initializer {Metasploit::Concern::Loader#register registering} all the load hooks as any late load hooks will run as they are registered.
@note ‘klass` must have a `Module#name` so that the load hook symbol can be derived.
Runs the load hooks setup to include app/concerns concerns this ‘klass`.
@param klass [Class] A class that should support loading concerns from app/concerns. @return [void]
# File lib/metasploit/concern.rb, line 112 def self.run(klass) load_hook_name = klass.name.underscore.gsub('/', '_').to_sym ActiveSupport.run_load_hooks(load_hook_name, klass) end
@return [String]
returns the VERSION
# File lib/metasploit/concern/version.rb, line 11 def self.version VERSION end