require_all 1.1.0 → 1.2.0

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/require_all.gemspec CHANGED
@@ -1,26 +1,22 @@
1
- require 'rubygems'
2
-
3
- GEMSPEC = Gem::Specification.new do |s|
4
- s.name = "require_all"
5
- s.version = "1.1.0"
6
- s.authors = "Tony Arcieri"
7
- s.email = "tony@medioh.com"
8
- s.date = "2009-07-18"
9
- s.summary = "A wonderfully simple way to load your code"
10
- s.platform = Gem::Platform::RUBY
11
-
12
- # Gem contents
13
- s.files = Dir.glob("{lib,spec}/**/*") + ['Rakefile', 'require_all.gemspec']
14
-
15
- # RubyForge info
16
- s.homepage = "http://github.com/tarcieri/require_all"
17
- s.rubyforge_project = "codeforpeople"
18
-
19
- # RDoc settings
20
- s.has_rdoc = true
21
- s.rdoc_options = %w(--title require_all --main README.textile --line-numbers)
22
- s.extra_rdoc_files = ["LICENSE", "README.textile", "CHANGES"]
23
-
24
- # Extensions
25
- s.extensions = FileList["ext/**/extconf.rb"].to_a
26
- end
1
+ require 'rubygems'
2
+
3
+ GEMSPEC = Gem::Specification.new do |s|
4
+ s.name = "require_all"
5
+ s.version = "1.2.0"
6
+ s.authors = ["Jarmo Pertman", "Tony Arcieri"]
7
+ s.email = "jarmo.p@gmail.com"
8
+ s.date = "2010-09-14"
9
+ s.summary = "A wonderfully simple way to load your code"
10
+ s.platform = Gem::Platform::RUBY
11
+
12
+ # Gem contents
13
+ s.files = Dir.glob("{lib,spec}/**/*") + ['Rakefile', 'require_all.gemspec']
14
+
15
+ # RubyForge info
16
+ s.homepage = "http://github.com/jarmo/require_all"
17
+
18
+ # RDoc settings
19
+ s.has_rdoc = true
20
+ s.rdoc_options = %w(--title require_all --main README.textile --line-numbers)
21
+ s.extra_rdoc_files = ["LICENSE", "README.textile", "CHANGES"]
22
+ end
@@ -0,0 +1,78 @@
1
+ # difference between "#require_all syntactic sugar" is the
2
+ # need to specify :base_dir if performing autoloading below the top-level
3
+ # module directory
4
+
5
+ shared_examples_for "#autoload_all syntactic sugar" do
6
+ before :each do
7
+ @file_list = [
8
+ "#{@base_dir}/module1/a.rb",
9
+ "#{@base_dir}/module2/longer_name.rb",
10
+ "#{@base_dir}/module2/module3/b.rb"
11
+ ]
12
+ end
13
+
14
+ it "accepts files with and without extensions" do
15
+ should_not be_loaded("Autoloaded::Module2::LongerName")
16
+ send(@method, @base_dir + '/module2/longer_name', :base_dir => @autoload_base_dir).should be_true
17
+ should be_loaded("Autoloaded::Module2::LongerName")
18
+
19
+ should_not be_loaded("Autoloaded::Module1::A")
20
+ send(@method, @base_dir + '/module1/a.rb', :base_dir => @autoload_base_dir).should be_true
21
+ should be_loaded("Autoloaded::Module1::A")
22
+ end
23
+
24
+ it "accepts lists of files" do
25
+ should_not be_loaded("Autoloaded::Module1::A", "Autoloaded::Module2::LongerName",
26
+ "Autoloaded::Module2::Module3::B")
27
+ send(@method, @file_list, :base_dir => @autoload_base_dir).should be_true
28
+ should be_loaded("Autoloaded::Module1::A", "Autoloaded::Module2::LongerName",
29
+ "Autoloaded::Module2::Module3::B")
30
+ end
31
+
32
+ it "is totally cool with a splatted list of arguments" do
33
+ should_not be_loaded("Autoloaded::Module1::A", "Autoloaded::Module2::LongerName",
34
+ "Autoloaded::Module2::Module3::B")
35
+ send(@method, *(@file_list << {:base_dir => @autoload_base_dir})).should be_true
36
+ should be_loaded("Autoloaded::Module1::A", "Autoloaded::Module2::LongerName",
37
+ "Autoloaded::Module2::Module3::B")
38
+ end
39
+
40
+ it "will load all .rb files under a directory without a trailing slash" do
41
+ should_not be_loaded("Autoloaded::Module1::A", "Autoloaded::Module2::LongerName",
42
+ "Autoloaded::Module2::Module3::B")
43
+ send(@method, @base_dir, :base_dir => @autoload_base_dir).should be_true
44
+ should be_loaded("Autoloaded::Module1::A", "Autoloaded::Module2::LongerName",
45
+ "Autoloaded::Module2::Module3::B")
46
+ end
47
+
48
+ it "will load all .rb files under a directory with a trailing slash" do
49
+ should_not be_loaded("Autoloaded::Module1::A", "Autoloaded::Module2::LongerName",
50
+ "Autoloaded::Module2::Module3::B")
51
+ send(@method, "#{@base_dir}/", :base_dir => @autoload_base_dir).should be_true
52
+ should be_loaded("Autoloaded::Module1::A", "Autoloaded::Module2::LongerName",
53
+ "Autoloaded::Module2::Module3::B")
54
+ end
55
+
56
+ it "will load all files specified by a glob" do
57
+ should_not be_loaded("Autoloaded::Module1::A", "Autoloaded::Module2::LongerName",
58
+ "Autoloaded::Module2::Module3::B")
59
+ send(@method, "#{@base_dir}/**/*.rb", :base_dir => @autoload_base_dir).should be_true
60
+ should be_loaded("Autoloaded::Module1::A", "Autoloaded::Module2::LongerName",
61
+ "Autoloaded::Module2::Module3::B")
62
+ end
63
+
64
+ it "returns false if an empty input was given" do
65
+ send(@method, [])
66
+ send(@method, []).should be_false
67
+ send(@method).should be_false
68
+ end
69
+
70
+ it "raises LoadError if no file or directory found" do
71
+ lambda {send(@method, "not_found")}.should raise_error(LoadError)
72
+ end
73
+
74
+ it "raises LoadError if :base_dir doesn't exist" do
75
+ lambda {send(@method, @base_dir, :base_dir => @base_dir + "/non_existing_dir")}.
76
+ should raise_exception(LoadError)
77
+ end
78
+ end
@@ -0,0 +1,59 @@
1
+ require File.dirname(__FILE__) + '/spec_helper.rb'
2
+ require File.dirname(__FILE__) + '/autoload_shared.rb'
3
+
4
+ describe "autoload_all" do
5
+ it "provides require_all functionality by using 'autoload' instead of 'require'" do
6
+ should_not be_loaded("Autoloaded::Module1::A", "Autoloaded::Module2::LongerName", "Autoloaded::Module2::Module3::B")
7
+ autoload_all File.dirname(__FILE__) + "/fixtures/autoloaded"
8
+ should be_loaded("Autoloaded::Module1::A", "Autoloaded::Module2::LongerName", "Autoloaded::Module2::Module3::B")
9
+ end
10
+
11
+ it "doesn't autoload files with wrong module names" do
12
+ autoload_all File.dirname(__FILE__) + "/fixtures/autoloaded"
13
+ should_not be_loaded("Autoloaded::WrongModule::WithWrongModule", "WrongModule::WithWrongModule")
14
+ end
15
+
16
+ it "needs to specify base_dir for autoloading if loading something from under top-level module directory" do
17
+ should_not be_loaded("Autoloaded::Module1::A", "Autoloaded::Module2::LongerName", "Autoloaded::Module2::Module3::B")
18
+ autoload_all File.dirname(__FILE__) + "/fixtures/autoloaded/module1"
19
+ should_not be_loaded("Autoloaded::Module1::A", "Autoloaded::Module2::LongerName", "Autoloaded::Module2::Module3::B")
20
+
21
+ autoload_all File.dirname(__FILE__) + "/fixtures/autoloaded/module1",
22
+ :base_dir => File.dirname(__FILE__) + "/fixtures/autoloaded"
23
+ should be_loaded("Autoloaded::Module1::A")
24
+ should_not be_loaded("Autoloaded::Module2::LongerName", "Autoloaded::Module2::Module3::B")
25
+ end
26
+
27
+ before(:all) do
28
+ @base_dir = File.dirname(__FILE__) + '/fixtures/autoloaded'
29
+ @method = :autoload_all
30
+ @autoload_base_dir = @base_dir
31
+ end
32
+ it_should_behave_like "#autoload_all syntactic sugar"
33
+ end
34
+
35
+ describe "autoload_rel" do
36
+ it "provides autoload_all functionality relative to the current file" do
37
+ should_not be_loaded("Modules::Module1::First", "Modules::Module2::Second", "Modules::Zero")
38
+ require File.dirname(__FILE__) + '/fixtures/autoloaded_rel/modules/zero'
39
+ should be_loaded("Modules::Module1::First", "Modules::Module2::Second", "Modules::Zero")
40
+ end
41
+
42
+ it "needs to specify base_dir for autoloading if loading something from under top-level module directory" do
43
+ should_not be_loaded("Autoloaded::Module1::A", "Autoloaded::Module2::LongerName", "Autoloaded::Module2::Module3::B")
44
+ autoload_rel "./fixtures/autoloaded/module1"
45
+ should_not be_loaded("Autoloaded::Module1::A", "Autoloaded::Module2::LongerName", "Autoloaded::Module2::Module3::B")
46
+
47
+ autoload_rel "./fixtures/autoloaded/module1",
48
+ :base_dir => File.dirname(__FILE__) + "/fixtures/autoloaded"
49
+ should be_loaded("Autoloaded::Module1::A")
50
+ should_not be_loaded("Autoloaded::Module2::LongerName", "Autoloaded::Module2::Module3::B")
51
+ end
52
+
53
+ before(:all) do
54
+ @base_dir = './fixtures/autoloaded'
55
+ @method = :autoload_rel
56
+ @autoload_base_dir = File.dirname(__FILE__) + "/fixtures/autoloaded"
57
+ end
58
+ it_should_behave_like "#autoload_all syntactic sugar"
59
+ end
@@ -0,0 +1,6 @@
1
+ module Autoloaded
2
+ module Module1
3
+ class A
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ module Autoloaded
2
+ module Module2
3
+ class LongerName
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,8 @@
1
+ module Autoloaded
2
+ module Module2
3
+ module Module3
4
+ class B
5
+ end
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,4 @@
1
+ module WrongModule
2
+ class WithWrongModule
3
+ end
4
+ end
@@ -0,0 +1,6 @@
1
+ module Modules
2
+ module Module1
3
+ class First
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ module Modules
2
+ module Module2
3
+ class Second
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ autoload_rel "../modules"
2
+
3
+ module Modules
4
+ class Zero
5
+ end
6
+ end
@@ -1,2 +1,2 @@
1
- class RelativeA
1
+ class RelativeA
2
2
  end
@@ -1,5 +1,5 @@
1
- require_rel '../a'
2
- require_rel '../c'
3
-
4
- class RelativeB
1
+ require_rel '../a'
2
+ require_rel '../c'
3
+
4
+ class RelativeB
5
5
  end
@@ -1,2 +1,2 @@
1
- class RelativeC
1
+ class RelativeC
2
2
  end
@@ -0,0 +1,8 @@
1
+ load_rel '../a'
2
+ load_rel '../c'
3
+
4
+ class RelativeD
5
+ def ok?
6
+ true
7
+ end
8
+ end
@@ -1 +1,5 @@
1
- class C; end
1
+ class C
2
+ def cool?
3
+ true
4
+ end
5
+ end
data/spec/load_spec.rb ADDED
@@ -0,0 +1,50 @@
1
+ require File.dirname(__FILE__) + '/spec_helper.rb'
2
+ require File.dirname(__FILE__) + '/require_shared.rb'
3
+
4
+ describe "load_all" do
5
+ it "provides require_all functionality but using 'load' instead of 'require'" do
6
+ require_all File.dirname(__FILE__) + '/fixtures/resolvable'
7
+ C.new.should be_cool
8
+
9
+ class C
10
+ def cool?
11
+ false
12
+ end
13
+ end
14
+ C.new.should_not be_cool
15
+
16
+ load_all File.dirname(__FILE__) + '/fixtures/resolvable'
17
+ C.new.should be_cool
18
+ end
19
+
20
+ before(:all) do
21
+ @base_dir = File.dirname(__FILE__) + '/fixtures/autoloaded'
22
+ @method = :load_all
23
+ end
24
+ it_should_behave_like "#require_all syntactic sugar"
25
+ end
26
+
27
+ describe "load_rel" do
28
+ it "provides load_all functionality relative to the current file" do
29
+ require File.dirname(__FILE__) + '/fixtures/relative/d/d'
30
+
31
+ should be_loaded("RelativeA", "RelativeC", "RelativeD")
32
+ RelativeD.new.should be_ok
33
+
34
+ class RelativeD
35
+ def ok?
36
+ false
37
+ end
38
+ end
39
+ RelativeD.new.should_not be_ok
40
+
41
+ load File.dirname(__FILE__) + '/fixtures/relative/d/d.rb'
42
+ RelativeD.new.should be_ok
43
+ end
44
+
45
+ before(:all) do
46
+ @base_dir = './fixtures/autoloaded'
47
+ @method = :load_rel
48
+ end
49
+ it_should_behave_like "#require_all syntactic sugar"
50
+ end
@@ -0,0 +1,68 @@
1
+ shared_examples_for "#require_all syntactic sugar" do
2
+ before :each do
3
+ @file_list = [
4
+ "#{@base_dir}/module1/a.rb",
5
+ "#{@base_dir}/module2/longer_name.rb",
6
+ "#{@base_dir}/module2/module3/b.rb"
7
+ ]
8
+ end
9
+
10
+ it "accepts files with and without extensions" do
11
+ should_not be_loaded("Autoloaded::Module2::LongerName")
12
+ send(@method, @base_dir + '/module2/longer_name').should be_true
13
+ should be_loaded("Autoloaded::Module2::LongerName")
14
+
15
+ should_not be_loaded("Autoloaded::Module1::A")
16
+ send(@method, @base_dir + '/module1/a.rb').should be_true
17
+ should be_loaded("Autoloaded::Module1::A")
18
+ end
19
+
20
+ it "accepts lists of files" do
21
+ should_not be_loaded("Autoloaded::Module1::A", "Autoloaded::Module2::LongerName",
22
+ "Autoloaded::Module2::Module3::B")
23
+ send(@method, @file_list).should be_true
24
+ should be_loaded("Autoloaded::Module1::A", "Autoloaded::Module2::LongerName",
25
+ "Autoloaded::Module2::Module3::B")
26
+ end
27
+
28
+ it "is totally cool with a splatted list of arguments" do
29
+ should_not be_loaded("Autoloaded::Module1::A", "Autoloaded::Module2::LongerName",
30
+ "Autoloaded::Module2::Module3::B")
31
+ send(@method, *@file_list).should be_true
32
+ should be_loaded("Autoloaded::Module1::A", "Autoloaded::Module2::LongerName",
33
+ "Autoloaded::Module2::Module3::B")
34
+ end
35
+
36
+ it "will load all .rb files under a directory without a trailing slash" do
37
+ should_not be_loaded("Autoloaded::Module1::A", "Autoloaded::Module2::LongerName",
38
+ "Autoloaded::Module2::Module3::B", "WrongModule::WithWrongModule")
39
+ send(@method, @base_dir).should be_true
40
+ should be_loaded("Autoloaded::Module1::A", "Autoloaded::Module2::LongerName",
41
+ "Autoloaded::Module2::Module3::B", "WrongModule::WithWrongModule")
42
+ end
43
+
44
+ it "will load all .rb files under a directory with a trailing slash" do
45
+ should_not be_loaded("Autoloaded::Module1::A", "Autoloaded::Module2::LongerName",
46
+ "Autoloaded::Module2::Module3::B", "WrongModule::WithWrongModule")
47
+ send(@method, "#{@base_dir}/").should be_true
48
+ should be_loaded("Autoloaded::Module1::A", "Autoloaded::Module2::LongerName",
49
+ "Autoloaded::Module2::Module3::B", "WrongModule::WithWrongModule")
50
+ end
51
+
52
+ it "will load all files specified by a glob" do
53
+ should_not be_loaded("Autoloaded::Module1::A", "Autoloaded::Module2::LongerName",
54
+ "Autoloaded::Module2::Module3::B", "WrongModule::WithWrongModule")
55
+ send(@method, "#{@base_dir}/**/*.rb").should be_true
56
+ should be_loaded("Autoloaded::Module1::A", "Autoloaded::Module2::LongerName",
57
+ "Autoloaded::Module2::Module3::B", "WrongModule::WithWrongModule")
58
+ end
59
+
60
+ it "returns false if an empty input was given" do
61
+ send(@method, []).should be_false
62
+ send(@method).should be_false
63
+ end
64
+
65
+ it "throws LoadError if no file or directory found" do
66
+ lambda {send(@method, "not_found")}.should raise_error(LoadError)
67
+ end
68
+ end
@@ -0,0 +1,39 @@
1
+ require File.dirname(__FILE__) + '/spec_helper.rb'
2
+ require File.dirname(__FILE__) + '/require_shared.rb'
3
+
4
+ describe "require_all" do
5
+ describe "dependency resolution" do
6
+ it "handles load ordering when dependencies are resolvable" do
7
+ require_all File.dirname(__FILE__) + '/fixtures/resolvable/*.rb'
8
+
9
+ should be_loaded("A", "B", "C", "D")
10
+ end
11
+
12
+ it "raises NameError if dependencies can't be resolved" do
13
+ proc do
14
+ require_all File.dirname(__FILE__) + '/fixtures/unresolvable/*.rb'
15
+ end.should raise_error(NameError)
16
+ end
17
+ end
18
+
19
+ before(:all) do
20
+ @base_dir = File.dirname(__FILE__) + '/fixtures/autoloaded'
21
+ @method = :require_all
22
+ end
23
+ it_should_behave_like "#require_all syntactic sugar"
24
+ end
25
+
26
+ describe "require_rel" do
27
+ it "provides require_all functionality relative to the current file" do
28
+ require File.dirname(__FILE__) + '/fixtures/relative/b/b'
29
+
30
+ should be_loaded("RelativeA", "RelativeB", "RelativeC")
31
+ should_not be_loaded("RelativeD")
32
+ end
33
+
34
+ before(:all) do
35
+ @base_dir = './fixtures/autoloaded'
36
+ @method = :require_rel
37
+ end
38
+ it_should_behave_like "#require_all syntactic sugar"
39
+ end