zeroload 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 8ff5fae430018bfb1219524cfd85e641487ccdd4
4
+ data.tar.gz: cf6085c9d9b835345a5046aaf4a4e8822cd9015f
5
+ SHA512:
6
+ metadata.gz: 830b47b027951eafaf5b6175d1f4ab23c94a81b03a10468e9518618ad54ee8f133b0f2cdff2bda0c97334282943c9b543b1a49f4831598eda87e81952d70668a
7
+ data.tar.gz: f2799be3bdb1aae80d1082fbb061743bb1b9e36faa81b1773f6014d11c7deec7bb931dbac07f9bf4e411ccaa4e97395709224fae0272a59518c1732f2476a972
data/README.markdown ADDED
@@ -0,0 +1,75 @@
1
+ README
2
+ ======
3
+
4
+
5
+ Summary
6
+ -------
7
+
8
+ Automatically autoload all constants for a module.
9
+ Reduces your requires to one line per file, plus external dependencies.
10
+ Enables requiring always only the precise file holding the constant you
11
+ depend on (or top level if you depend on many).
12
+
13
+
14
+ Installation
15
+ ------------
16
+
17
+ `gem install zeroload`
18
+
19
+
20
+ Usage
21
+ -----
22
+
23
+ Map your constants to filenames by replacing :: with /. For example, the
24
+ constant Foo::BarBaz should be defined in file lib/Foo/BarBaz.rb. Note that
25
+ the case matters! Each file should require the nesting namespace. That is,
26
+ Foo/BarBaz.rb should require "Foo". All modules & classes always use
27
+ zeroload.
28
+
29
+ ### Example
30
+
31
+ Given the files
32
+
33
+ * lib/Foo.rb
34
+ * lib/Foo/Bar.rb
35
+
36
+ The contents of lib/Foo.rb is:
37
+
38
+ require "zeroload"
39
+
40
+ module Foo
41
+ zeroload!
42
+
43
+ # Code of Foo
44
+ end
45
+
46
+ And the contents of lib/Foo/bar.rb is:
47
+
48
+ require "Foo"
49
+
50
+ module Foo
51
+ class Bar
52
+ zeroload! # only necessary if there's stuff nested below
53
+
54
+ # Code of Foo::Bar
55
+ end
56
+
57
+
58
+
59
+ Description
60
+ -----------
61
+
62
+ Automatically autoload all constants for a module. This requires a change from
63
+ the current convention of putting class Foo::BarBaz into foo/barbaz.rb (or
64
+ foo/bar_baz.rb in rails) to using Foo/BarBaz.rb instead.
65
+
66
+
67
+ Caveats
68
+ -------
69
+
70
+ * **Q:** But didn't have Kernel#autoload problems with multi-threading?
71
+ * **A:** Yes, it did. They've since been resolved:
72
+ * [see bug 921](https://bugs.ruby-lang.org/issues/921)
73
+ * [see Revision 33078](https://bugs.ruby-lang.org/projects/ruby-trunk/repository/revisions/33078)
74
+ * **Q:** But isn't Kernel#autoload deprecated?
75
+ * **A:** Sadly, the state on this is not entirely clear. But it seems it is no longer deprecated.
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ $LOAD_PATH.unshift(File.expand_path('../rake/lib', __FILE__))
2
+ Dir.glob(File.expand_path('../rake/tasks/**/*.{rake,task,rb}', __FILE__)) do |task_file|
3
+ begin
4
+ import task_file
5
+ rescue LoadError => e
6
+ warn "Failed to load task file #{task_file}"
7
+ warn " #{e.class} #{e.message}"
8
+ warn " #{e.backtrace.first}"
9
+ end
10
+ end
@@ -0,0 +1,7 @@
1
+ module Kernel
2
+ def zeroload!(directory=nil, *args)
3
+ directory ||= caller_locations.first.absolute_path.sub(/\.[^.]*\z/, "")
4
+
5
+ Zeroload.module(self, directory, *args)
6
+ end
7
+ end
@@ -0,0 +1,5 @@
1
+ require 'rubygems/version' # newer rubygems use this
2
+
3
+ module Zeroload
4
+ Version = Gem::Version.new("0.0.1")
5
+ end
data/lib/zeroload.rb ADDED
@@ -0,0 +1,21 @@
1
+ require 'zeroload/version'
2
+ require 'zeroload/auto'
3
+
4
+ # Zeroload
5
+ # Automatically autoload all constants for a module. This requires a change from
6
+ # the current convention of putting class Foo::BarBaz into foo/barbaz.rb (or
7
+ # foo/bar_baz.rb in rails) to using Foo/BarBaz.rb instead.
8
+ module Zeroload
9
+ def self.module(mod, directory=nil)
10
+ directory ||= caller_locations.first.absolute_path.sub(/\.[^.]*\z/, "".freeze)
11
+
12
+ Dir.glob("#{directory}/*.{rb,so,bundle,dll}") do |path|
13
+ name = File.basename(path)
14
+ if /\A[A-Z]/ =~ name
15
+ name.sub!(/\.[^.]*\z/, "".freeze)
16
+ warn "#{mod} autoloads #{name} from #{path}" if $VERBOSE
17
+ mod.autoload :"#{name}", path
18
+ end
19
+ end
20
+ end
21
+ end
data/zeroload.gemspec ADDED
@@ -0,0 +1,33 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = "zeroload"
3
+ s.version = "0.0.1"
4
+ s.authors = "Stefan Rusterholz"
5
+ s.email = "stefan.rusterholz@gmail.com"
6
+ s.homepage = "https://github.com/apeiros/jacob"
7
+ s.license = "BSD 2-Clause"
8
+
9
+ s.description = <<-DESCRIPTION.gsub(/^ /, '').chomp
10
+ Automatically autoload all constants for a module. This requires a change from
11
+ the current convention of putting class Foo::BarBaz into foo/barbaz.rb (or
12
+ foo/bar_baz.rb in rails) to using Foo/BarBaz.rb instead.
13
+ DESCRIPTION
14
+ s.summary = <<-SUMMARY.gsub(/^ /, '').chomp
15
+ Automatically autoload all constants for a module.
16
+ SUMMARY
17
+
18
+ s.required_ruby_version = ">= 2.1.0" # TODO: figure out, when autoload became thread-safe
19
+ s.files =
20
+ Dir['bin/**/*'] +
21
+ Dir['lib/**/*'] +
22
+ Dir['rake/**/*'] +
23
+ Dir['test/**/*'] +
24
+ Dir["*.gemspec"] +
25
+ %w[
26
+ Rakefile
27
+ README.markdown
28
+ ]
29
+
30
+ if File.directory?('bin') then
31
+ s.executables = Dir.chdir('bin') { Dir.glob('**/*').select { |f| File.executable?(f) } }
32
+ end
33
+ end
metadata ADDED
@@ -0,0 +1,53 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: zeroload
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Stefan Rusterholz
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-11-29 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: |-
14
+ Automatically autoload all constants for a module. This requires a change from
15
+ the current convention of putting class Foo::BarBaz into foo/barbaz.rb (or
16
+ foo/bar_baz.rb in rails) to using Foo/BarBaz.rb instead.
17
+ email: stefan.rusterholz@gmail.com
18
+ executables: []
19
+ extensions: []
20
+ extra_rdoc_files: []
21
+ files:
22
+ - README.markdown
23
+ - Rakefile
24
+ - lib/zeroload.rb
25
+ - lib/zeroload/auto.rb
26
+ - lib/zeroload/version.rb
27
+ - zeroload.gemspec
28
+ homepage: https://github.com/apeiros/jacob
29
+ licenses:
30
+ - BSD 2-Clause
31
+ metadata: {}
32
+ post_install_message:
33
+ rdoc_options: []
34
+ require_paths:
35
+ - lib
36
+ required_ruby_version: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 2.1.0
41
+ required_rubygems_version: !ruby/object:Gem::Requirement
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ requirements: []
47
+ rubyforge_project:
48
+ rubygems_version: 2.4.5.1
49
+ signing_key:
50
+ specification_version: 4
51
+ summary: Automatically autoload all constants for a module.
52
+ test_files: []
53
+ has_rdoc: