no_require 0.0.1
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.
- data/lib/no_require.rb +61 -0
- metadata +67 -0
data/lib/no_require.rb
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
class NoRequire
|
2
|
+
|
3
|
+
def initialize( root, autoload_dirs=nil )
|
4
|
+
@root = root
|
5
|
+
no_require_dir( autoload_dirs ) unless autoload_dirs.nil?
|
6
|
+
end
|
7
|
+
|
8
|
+
def no_require_dir( *autoload_dirs )
|
9
|
+
add_dirs_to_loadpath( *autoload_dirs )
|
10
|
+
autoloads = generate_autoloads( *autoload_dirs )
|
11
|
+
autoloads.each {|code| Object.module_eval( code )}
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def add_dirs_to_loadpath( autoload_dirs )
|
17
|
+
autoload_dirs.each do |dir|
|
18
|
+
f = File.join( @root, dir )
|
19
|
+
$LOAD_PATH << f if File.exists?( f ) && File.directory?( f )
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def to_class_name( path )
|
24
|
+
path.split('/').map {|s| camelize( s ) }.join( '::' )
|
25
|
+
end
|
26
|
+
|
27
|
+
def camelize( str )
|
28
|
+
str.split( /[^a-z0-9]/i ).map{|w| w.capitalize }.join
|
29
|
+
end
|
30
|
+
|
31
|
+
def generate_autoloads( autoload_dirs )
|
32
|
+
autoload_code = []
|
33
|
+
root_segs = @root.split( '/' )
|
34
|
+
autoload_dirs.each do |file_path|
|
35
|
+
Dir[ File.join( @root, file_path, '/**/*.rb') ].each do |file|
|
36
|
+
expanded = File.expand_path( file )
|
37
|
+
autoload_code << generate_autoload_for( root_segs, expanded )
|
38
|
+
end
|
39
|
+
end
|
40
|
+
autoload_code
|
41
|
+
end
|
42
|
+
|
43
|
+
def generate_autoload_for( root_segs, expanded_file )
|
44
|
+
code = []
|
45
|
+
relative_start_idx = root_segs.length == 0 ? 0 : root_segs.length + 1
|
46
|
+
rel_file_segs = expanded_file.split( '/' )[relative_start_idx..-1]
|
47
|
+
# wrap autoload of file module statements
|
48
|
+
rel_file_segs.each_with_index do |seg, i|
|
49
|
+
if i == (rel_file_segs.length-1)
|
50
|
+
code << "autoload :#{to_class_name( File.basename( expanded_file, '.rb' ) )}, '#{expanded_file}'"
|
51
|
+
else
|
52
|
+
code << "module #{to_class_name( seg )}; "
|
53
|
+
end
|
54
|
+
end
|
55
|
+
code << "; end" * (rel_file_segs.length-1)
|
56
|
+
code.join
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
|
metadata
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: no_require
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 29
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 1
|
10
|
+
version: 0.0.1
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Paul Grayson
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2012-03-26 00:00:00 +01:00
|
19
|
+
default_executable:
|
20
|
+
dependencies: []
|
21
|
+
|
22
|
+
description: For non-rails ruby apps, NoRequire generates appropriate autoload statements so you no longer need to manage dependencies in your code with require statements.
|
23
|
+
email: paul.grayson@gmail.com
|
24
|
+
executables: []
|
25
|
+
|
26
|
+
extensions: []
|
27
|
+
|
28
|
+
extra_rdoc_files: []
|
29
|
+
|
30
|
+
files:
|
31
|
+
- lib/no_require.rb
|
32
|
+
has_rdoc: true
|
33
|
+
homepage: http://github.com/paulgrayson/no_require
|
34
|
+
licenses: []
|
35
|
+
|
36
|
+
post_install_message:
|
37
|
+
rdoc_options: []
|
38
|
+
|
39
|
+
require_paths:
|
40
|
+
- lib
|
41
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
hash: 3
|
47
|
+
segments:
|
48
|
+
- 0
|
49
|
+
version: "0"
|
50
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
52
|
+
requirements:
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
hash: 3
|
56
|
+
segments:
|
57
|
+
- 0
|
58
|
+
version: "0"
|
59
|
+
requirements: []
|
60
|
+
|
61
|
+
rubyforge_project:
|
62
|
+
rubygems_version: 1.6.2
|
63
|
+
signing_key:
|
64
|
+
specification_version: 3
|
65
|
+
summary: NoRequire
|
66
|
+
test_files: []
|
67
|
+
|