awesome_loader 0.0.2 → 0.1.0

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: 3342aa4f09d39ec0e5c7c784e89efa7c13fcd648
4
- data.tar.gz: 1f5407ab67608b7c30a9b95c83a76af3538d06bc
3
+ metadata.gz: ff578e319ae7955c039a49a12e1a7dd41f4af2db
4
+ data.tar.gz: 1044693107960f3dbfd2b1f78f3247316ae01502
5
5
  SHA512:
6
- metadata.gz: c9e56691706e874b1f1485dfb5fec6d0f16b2019bee005db971c05f21fc7da7657ff574d758207a1d3b2280330aeef10af26d95512ad4832e98aa1ebcfe157cc
7
- data.tar.gz: 7f8aa1136e030f5915cb43541b59a320fbba36b784e099b901eabe80cbe97a394442c0950323fcbb0c99d90cc0b1de1d92567c67ef223eab8691010dc9135ab9
6
+ metadata.gz: 116775922f484ed6eca46c5d5655f72bae1c5234e6b039c1e4f69734c195f0faffa1ccd4759538dc9c3a476fb41a4d607c8862dc0874c8cd529c255b7670b425
7
+ data.tar.gz: 71ed372da0aaeba0719423c971d9399027adf980ffb5472dc63611c8cf16797fb05e1af2557601e04b1e1398b0caff2a1262a2963dcca4f8d955f43118c88771
@@ -1,29 +1,77 @@
1
1
  require 'set'
2
+ require 'pathname'
2
3
 
4
+ #
5
+ # A module that holds all the awesomeness.
6
+ #
3
7
  module AwesomeLoader
8
+ #
9
+ # Set up an AwesomeLoader::Autoloader instance.
10
+ #
11
+ # AwesomeLoader.autoload root_depth: 2 do
12
+ # paths %w(app models ** *.rb)
13
+ # paths %w(app helpers ** *.rb)
14
+ # paths %w(app routes ** *.rb), root_depth: 1
15
+ # end
16
+ #
17
+ # @param root_depth [String] Tells AwesomeLoader to start creating Modules for dirs *after* this level
18
+ # @param root [String] Path to root of the application (default Dir.cwd)
19
+ # @param eager_load [Boolean] Make sure all files get loaded by the time the block finishes (default false)
20
+ # @return [AwesomeLoader::Autoloader]
21
+ #
4
22
  def self.autoload(root_depth:, root: Dir.cwd, eager_load: false, &block)
5
23
  autoloader = Autoloader.new(root: root, root_depth: root_depth, eager_load: eager_load)
6
24
  if block
7
25
  autoloader.instance_eval(&block)
8
- autoloader.finialize
26
+ autoloader.finialize!
9
27
  end
10
28
  autoloader
11
29
  end
12
30
 
31
+ #
32
+ # The autoloader. Normally it's used indirectly through AwesomeLoader.autoload, but you can use it directly if you like:
33
+ #
34
+ # AwesomeLoader::Autoloader.new(root_depth: 2).
35
+ # paths(%w(app models ** *.rb)).
36
+ # paths(%w(app helpers *.rb)).
37
+ # paths(%w(app routes ** *.rb), root_depth: 1).
38
+ # finialize!
39
+ #
13
40
  class Autoloader
14
41
  RB_EXT = /\.rb$/
15
42
 
43
+ # @return [Pathname] the application root
16
44
  attr_reader :root
45
+ # @return [Integer] root depth used for all paths unless otherwise specified
17
46
  attr_reader :default_root_depth
47
+ # @return [Boolean] whether or not to automatically load all files once they're defined
18
48
  attr_reader :eager_load
49
+ # @return [Array<String>] all defined files, ready to be eager_loaded
19
50
  attr_reader :all_files
51
+ private :all_files
20
52
 
53
+ #
54
+ # Initialize a new AwesomeLoader::Autoloader.
55
+ #
56
+ # @param root_depth [String] Tells AwesomeLoader to start creating Modules for dirs *after* this level
57
+ # @param root [String] Path to root of the application (default Dir.cwd)
58
+ # @param eager_load [Boolean] Make sure all files get loaded by the time the block finishes (default false)
59
+ #
21
60
  def initialize(root_depth:, root: Dir.cwd, eager_load: false)
22
61
  @root = Pathname.new(root.to_s)
23
62
  @default_root_depth, @eager_load = root_depth, eager_load
24
63
  @all_files = []
25
64
  end
26
65
 
66
+ #
67
+ # Set a glob pattern of files to be autoloaded.
68
+ #
69
+ # autoloader.paths %w(app models ** *.rb)
70
+ #
71
+ # @param array [Array<String>] A glob pattern as an array.
72
+ # @paths root_depth [Integer] Depth at which to start creating modules for dirs. Defaults to whatever the AwesomeLoader::Autoloader instance was initialized with.
73
+ # @return [AwesomeLoader::Autoloader] returns self, so you can chain calls
74
+ #
27
75
  def paths(array, root_depth: default_root_depth)
28
76
  files = Dir.glob File.join *array
29
77
  root_regex = Regexp.new "^([^/]+/){%d}" % root_depth
@@ -51,13 +99,16 @@ module AwesomeLoader
51
99
  const_name = Utils.camelize File.basename(path).sub(RB_EXT, '')
52
100
  mod = modules.fetch File.dirname path.sub(root_regex, '')
53
101
  mod.autoload const_name, full_path
54
- self.all_files << full_path if eager_load
102
+ all_files << full_path if eager_load
55
103
  end
56
104
 
57
105
  self
58
106
  end
59
107
 
60
- def finialize
108
+ #
109
+ # Perform any final operations or cleanup. If eager_load is true, this is where they're loaded.
110
+ #
111
+ def finialize!
61
112
  all_files.each { |f| require f } if eager_load
62
113
  all_files.clear
63
114
  self
@@ -1,7 +1,17 @@
1
1
  module AwesomeLoader
2
+ #
3
+ # Misc utilities.
4
+ #
2
5
  module Utils
6
+ # Regex to match "snake name" paths
3
7
  SNAKE = /_([a-z])/
4
8
 
9
+ #
10
+ # Converts a snake_case_name to a CamelCaseName.
11
+ #
12
+ # @param name [String] the snake_case version
13
+ # @return [String] the CamelCase version
14
+ #
5
15
  def self.camelize(name)
6
16
  name.capitalize.gsub(SNAKE) { |match| match[1].capitalize }
7
17
  end
@@ -1,4 +1,4 @@
1
1
  module AwesomeLoader
2
2
  # Library version
3
- VERSION = '0.0.2'.freeze
3
+ VERSION = '0.1.0'.freeze
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: awesome_loader
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jordan Hollinger