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

Sign up to get free protection for your applications and to get access to all the features.
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