metasploit-concern 0.3.1 → 0.4.0.pre.app.pre.concerns.pre.eager.pre.load

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0c8239f87c878597352fa3992c32f89a3f92240f
4
- data.tar.gz: 37aee8ebbdd86eae3e72c1a605be8ce5842ad415
3
+ metadata.gz: d39b6b285869860965908a82e66258700a373784
4
+ data.tar.gz: cb60d58aad9d081456a98d239684155b0e3a08e8
5
5
  SHA512:
6
- metadata.gz: db146a20ddcc0a7089d4e627db465575492c76f4ec75d1b47cd2c22f4a5e19350c371658e15731d886129d8feba3520f621031ebbf504af3ee73cdccf1ae3ec5
7
- data.tar.gz: 37137092522ee806668f157501686a1287ab4498097da46243f632b606d3ad08935a45a3fe870f0115e217711a044bd1ec0dbc2395d971999dfb7d8a101ad96b
6
+ metadata.gz: 417e9ed3422d57aab511209eec4abbcb61b2987b8a1fc73ee1f129b56807e56a3fd5d11a947ceb5d3f61f619bb321ca3bffb0918778b34968dd38eff3b147b61
7
+ data.tar.gz: b2f650eaed33a42f1790e881b980908915fcf09001d4ca82bb9ff757f4675a0376ffe99a04765fbf4fbcefd3004769b387cd67ac3aad1b400db7cf00a69e9910
@@ -4,6 +4,8 @@
4
4
 
5
5
  # `String#underscore``
6
6
  require 'active_support/core_ext/string/inflections'
7
+ # `ActiveSupport::Autoload`
8
+ require 'active_support/dependencies/autoload'
7
9
  # `ActiveSupport.run_load_hooks`
8
10
  require 'active_support/lazy_load_hooks'
9
11
 
@@ -77,6 +79,11 @@ module Metasploit
77
79
  # end
78
80
  # end
79
81
  module Concern
82
+ extend ActiveSupport::Autoload
83
+
84
+ autoload :Error
85
+ autoload :EagerLoadError
86
+
80
87
  # @note If `Rails` is loaded and {Metasploit::Concern::Engine} is defined, just use
81
88
  # `Metasploit::Concern::Engine.root`.
82
89
  #
@@ -30,17 +30,21 @@ module Metasploit
30
30
  concerns_path = engine.paths['app/concerns']
31
31
 
32
32
  if concerns_path
33
+ if concerns_path.eager_load?
34
+ raise Metasploit::Concern::Error::EagerLoad, engine
35
+ end
36
+
37
+ unless concerns_path.autoload?
38
+ raise Metasploit::Concern::Error::SkipAutoload, engine
39
+ end
40
+
33
41
  concerns_directories = concerns_path.existent_directories
34
- else
35
- # app/concerns is not set, so just derive it from root. Cannot
36
- # derive from app because it will glob app/models too
37
- concerns_directories = [engine.root.join('app', 'concerns').to_path]
38
- end
39
42
 
40
- concerns_directories.each do |concerns_directory|
41
- concerns_pathname = Pathname.new(concerns_directory)
42
- loader = Metasploit::Concern::Loader.new(root: concerns_pathname)
43
- loader.register
43
+ concerns_directories.each do |concerns_directory|
44
+ concerns_pathname = Pathname.new(concerns_directory)
45
+ loader = Metasploit::Concern::Loader.new(root: concerns_pathname)
46
+ loader.register
47
+ end
44
48
  end
45
49
  end
46
50
  end
@@ -0,0 +1,8 @@
1
+ # Namespace for errors raised by {Metasploit::Concern}.
2
+ module Metasploit::Concern::Error
3
+ extend ActiveSupport::Autoload
4
+
5
+ autoload :Base
6
+ autoload :EagerLoad
7
+ autoload :SkipAutoload
8
+ end
@@ -0,0 +1,4 @@
1
+ # Base of exception hierarchy raise by {Metasploit::Concern}
2
+ class Metasploit::Concern::Error::Base < StandardError
3
+
4
+ end
@@ -0,0 +1,17 @@
1
+ # Exception raised when a `Rails::Engine` has left its `'app/concerns'` path as `eager_load: true`
2
+ class Metasploit::Concern::Error::EagerLoad < Metasploit::Concern::Error::Base
3
+ # @param engine [Rails::Engine] `Rails::Engine` where `engine.paths['app/concerns'].eager_load?` is `true`.
4
+ def initialize(engine)
5
+ @engine = engine
6
+
7
+ super(
8
+ "#{engine}'s `app/concerns` is marked as `eager_load: true`. This will cause circular dependency " \
9
+ "errors when the concerns are loaded. Declare `app/concerns` to stop it from inheriting `eager_load: true` " \
10
+ "from `app`: \n" \
11
+ "\n" \
12
+ " class #{engine} < Rails::Engine\n" \
13
+ " config.paths.add 'app/concerns', autoload: true\n" \
14
+ " end\n"
15
+ )
16
+ end
17
+ end
@@ -0,0 +1,15 @@
1
+ # Exception raised when a `Rails::Engine` has left its `'app/concerns'` path as `autoload_load: false`
2
+ class Metasploit::Concern::Error::SkipAutoload < Metasploit::Concern::Error::Base
3
+ # @param engine [Rails::Engine] `Rails::Engine` where `engine.paths['app/concerns'].autoload?` is `false`.
4
+ def initialize(engine)
5
+ @engine = engine
6
+
7
+ super(
8
+ "#{engine}'s `app/concerns` is marked as `autoload: false`. Declare `app/concerns` as autoloading:\n" \
9
+ "\n" \
10
+ " class #{engine} < Rails::Engine\n" \
11
+ " config.paths.add 'app/concerns', autoload: true\n" \
12
+ " end\n"
13
+ )
14
+ end
15
+ end
@@ -5,9 +5,11 @@ module Metasploit
5
5
  # The major version number.
6
6
  MAJOR = 0
7
7
  # The minor version number, scoped to the {MAJOR} version number.
8
- MINOR = 3
8
+ MINOR = 4
9
9
  # The patch number, scoped to the {MAJOR} and {MINOR} version numbers.
10
- PATCH = 1
10
+ PATCH = 0
11
+ # The prerelease version, scoped to the {MAJOR}, {MINOR}, and {PATCH} version numbers.
12
+ PRERELEASE = 'app-concerns-eager-load'
11
13
 
12
14
  # The full version string, including the {MAJOR}, {MINOR}, {PATCH}, and optionally, the `PRERELEASE` in the
13
15
  # {http://semver.org/spec/v2.0.0.html semantic versioning v2.0.0} format.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metasploit-concern
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0.pre.app.pre.concerns.pre.eager.pre.load
5
5
  platform: ruby
6
6
  authors:
7
7
  - Luke Imhoff
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-13 00:00:00.000000000 Z
11
+ date: 2015-04-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -60,6 +60,10 @@ files:
60
60
  - app/models/metasploit/concern/loader.rb
61
61
  - lib/metasploit/concern.rb
62
62
  - lib/metasploit/concern/engine.rb
63
+ - lib/metasploit/concern/error.rb
64
+ - lib/metasploit/concern/error/base.rb
65
+ - lib/metasploit/concern/error/eager_load.rb
66
+ - lib/metasploit/concern/error/skip_autoload.rb
63
67
  - lib/metasploit/concern/version.rb
64
68
  - lib/tasks/yard.rake
65
69
  - spec/support/shared/examples/metasploit/concern/run.rb
@@ -78,9 +82,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
78
82
  version: '2.1'
79
83
  required_rubygems_version: !ruby/object:Gem::Requirement
80
84
  requirements:
81
- - - ">="
85
+ - - ">"
82
86
  - !ruby/object:Gem::Version
83
- version: '0'
87
+ version: 1.3.1
84
88
  requirements: []
85
89
  rubyforge_project:
86
90
  rubygems_version: 2.4.3