faster_rubygems 0.0.4 → 0.1.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/Rakefile +17 -0
- data/VERSION +1 -1
- data/install.rb +1 -1
- data/lib/faster_rubygems.rb +21 -51
- data/lib/faster_rubygems_lib.rb +64 -0
- data/spec/spec.faster_rubygems.rb +55 -0
- metadata +8 -4
data/Rakefile
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'jeweler'
|
2
|
+
Jeweler::Tasks.new do |s|
|
3
|
+
s.name = %q{faster_rubygems}
|
4
|
+
|
5
|
+
|
6
|
+
s.summary = %q{faster gem loading}
|
7
|
+
s.extensions = ["ext/mkrf_conf.rb"]
|
8
|
+
|
9
|
+
s.post_install_message = "
|
10
|
+
|
11
|
+
installed! use -> require 'faster_rubygems'
|
12
|
+
|
13
|
+
"
|
14
|
+
|
15
|
+
s.add_development_dependency 'test-unit', '=1.2.3'
|
16
|
+
s.add_development_dependency 'test-unit', '=2.0.6'
|
17
|
+
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0
|
1
|
+
0.2.0
|
data/install.rb
CHANGED
data/lib/faster_rubygems.rb
CHANGED
@@ -1,58 +1,28 @@
|
|
1
1
|
if RUBY_VERSION < '1.9'
|
2
|
-
require '
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
all_gems = []
|
18
|
-
|
19
|
-
for gem_path in gem_paths.flatten do
|
20
|
-
|
21
|
-
all_gems << Dir.glob(gem_path + '/*')
|
22
|
-
|
2
|
+
require File.dirname(__FILE__) + '/faster_rubygems_lib.rb'
|
3
|
+
all = FasterRubyGems.gem_prelude_paths
|
4
|
+
all.each{|path|
|
5
|
+
$: << path
|
6
|
+
}
|
7
|
+
|
8
|
+
module Kernel
|
9
|
+
|
10
|
+
def gem *args
|
11
|
+
undef :gem
|
12
|
+
require 'rubygems' # punt!
|
13
|
+
gem *args
|
14
|
+
end
|
15
|
+
|
23
16
|
end
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
version = gem.split('-')[-1]
|
31
|
-
if version =~ /\d+\.\d+\.\d+/
|
32
|
-
name = gem.split('-')[0..-2]
|
33
|
-
else
|
34
|
-
gem =~ /(.*)(\d+\.\d+\.\d+).*$/ # like abc-1.2.3-mswin32-60 or what not
|
35
|
-
version = $2
|
36
|
-
name = $1
|
37
|
-
next unless version # a few oddities like rbfind-1.1
|
17
|
+
|
18
|
+
module ::Gem
|
19
|
+
def self.const_missing const
|
20
|
+
require 'rubygems' # punt!
|
21
|
+
return Gem.const_get(const)
|
38
22
|
end
|
39
|
-
|
40
|
-
if(!already_loaded_gems[name])
|
41
|
-
already_loaded_gems[name] = true
|
42
|
-
if File.directory? gem + '/lib'
|
43
|
-
$: << gem + '/lib'
|
44
|
-
else
|
45
|
-
# unfortunately a few gems load from, say gem/something_not_lib/gemname.rb
|
46
|
-
for dir in Dir.glob(gem + '/*') do
|
47
|
-
if File.directory? dir
|
48
|
-
$: << dir
|
49
|
-
# if anybody wants anything lower than that, let me know
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
23
|
end
|
24
|
+
|
25
|
+
|
56
26
|
else
|
57
27
|
# not needed in 1.9, which by default loads gem_prelude
|
58
28
|
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
class FasterRubyGems
|
2
|
+
def self.gem_prelude_paths
|
3
|
+
# note: the RUBY_VERSION[0..2] thing below fails for 1.9...
|
4
|
+
raise 'bad version' if RUBY_VERSION[0..2] > '1.8'
|
5
|
+
require 'rbconfig'
|
6
|
+
|
7
|
+
gem_paths = []
|
8
|
+
# add the default gem path
|
9
|
+
|
10
|
+
gem_paths << Config::CONFIG['libdir'] + '/ruby/gems/' + RUBY_VERSION[0..2] + '/gems'
|
11
|
+
|
12
|
+
# add ~/.gem
|
13
|
+
gem_paths << File.expand_path('~') + '/.gem/ruby/' + RUBY_VERSION[0..2] + '/gems'
|
14
|
+
|
15
|
+
# add ENV['GEM_PATH'] if it exists
|
16
|
+
if ENV['GEM_PATH']
|
17
|
+
gem_paths = ENV['GEM_PATH'].split(File::PATH_SEPARATOR).collect{|path| path + '/gems'}
|
18
|
+
end
|
19
|
+
|
20
|
+
all_gems = []
|
21
|
+
|
22
|
+
for gem_path in gem_paths.flatten do
|
23
|
+
all_gems << Dir.glob(gem_path + '/*')
|
24
|
+
end
|
25
|
+
all_gems.flatten!
|
26
|
+
all_gems = all_gems.sort_by{|gem| gem.split('-')[-1].split('.').map{|n| n.to_i}} # 0.10.0 > 0.9.0 so straight sort won't work for us
|
27
|
+
all_gems.reverse!
|
28
|
+
|
29
|
+
already_loaded_gems = {}
|
30
|
+
|
31
|
+
prelude_paths = []
|
32
|
+
|
33
|
+
for gem in all_gems do
|
34
|
+
|
35
|
+
version = gem.split('-')[-1]
|
36
|
+
if version =~ /\d+\.\d+\.\d+/
|
37
|
+
name = gem.split('-')[0..-2]
|
38
|
+
else
|
39
|
+
gem =~ /(.*)(\d+\.\d+\.\d+).*$/ # like abc-1.2.3-mswin32-60 or what not
|
40
|
+
version = $2
|
41
|
+
name = $1
|
42
|
+
next unless version # a few oddities like rbfind-1.1
|
43
|
+
end
|
44
|
+
|
45
|
+
if(!already_loaded_gems[name])
|
46
|
+
already_loaded_gems[name] = true
|
47
|
+
if File.directory? gem + '/lib'
|
48
|
+
prelude_paths << gem + '/lib'
|
49
|
+
else
|
50
|
+
# unfortunately a few gems load from, say gem/something_not_lib/gemname.rb
|
51
|
+
for dir in Dir.glob(gem + '/*') do
|
52
|
+
if File.directory? dir
|
53
|
+
$: << dir
|
54
|
+
# if anybody wants anything lower than that, let me know
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
prelude_paths
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'rubygems' if RUBY_VERSION[0..2] < '1.9'
|
2
|
+
require 'sane'
|
3
|
+
require_relative '../lib/faster_rubygems_lib'
|
4
|
+
require 'spec/autorun'
|
5
|
+
require 'fileutils'
|
6
|
+
|
7
|
+
describe FasterRubyGems do
|
8
|
+
|
9
|
+
before do
|
10
|
+
ENV['GEM_PATH'] = 'test_dir'
|
11
|
+
@gem_path = 'test_dir/gems/' # boo
|
12
|
+
FileUtils.rm_rf @gem_path
|
13
|
+
raise 'you dont need to test this on 1.9' if RUBY_VERSION > '1.9'
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should calculate something" do
|
17
|
+
paths = FasterRubyGems.gem_prelude_paths
|
18
|
+
assert paths.length == 0
|
19
|
+
FileUtils.mkdir_p @gem_path + '/abc-0.9.0/lib'
|
20
|
+
paths = FasterRubyGems.gem_prelude_paths
|
21
|
+
assert paths.length == 1
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should calculate 0.10.0 as greater than 0.9.0" do
|
25
|
+
|
26
|
+
FileUtils.mkdir_p @gem_path + '/abc-0.9.0/lib'
|
27
|
+
FileUtils.mkdir_p @gem_path + '/abc-0.10.0/lib'
|
28
|
+
paths = FasterRubyGems.gem_prelude_paths
|
29
|
+
assert( (paths.grep /abc-0.10.0/).length > 0)
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should find highest version of normal numbered gems" do
|
33
|
+
FileUtils.mkdir_p @gem_path + '/abc-0.8.0/lib'
|
34
|
+
FileUtils.mkdir_p @gem_path + '/abc-0.9.0/lib'
|
35
|
+
paths = FasterRubyGems.gem_prelude_paths
|
36
|
+
assert( (paths.grep /abc-0.9.0/).length > 0)
|
37
|
+
end
|
38
|
+
|
39
|
+
it "with multiple paths should find all files"
|
40
|
+
|
41
|
+
it "should respect file::separator"
|
42
|
+
|
43
|
+
|
44
|
+
def ruby lib
|
45
|
+
assert system(OS.ruby_bin + ' ' + lib)
|
46
|
+
assert system(OS.ruby_bin + ' ' + lib)
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should load full rubygems on gem xxx" do
|
50
|
+
ruby('files/test_gem.rb')
|
51
|
+
ruby('files/test_gem_const.rb')
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: faster_rubygems
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors: []
|
7
7
|
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-12-28 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -23,14 +23,17 @@ extra_rdoc_files:
|
|
23
23
|
- README
|
24
24
|
files:
|
25
25
|
- README
|
26
|
+
- Rakefile
|
26
27
|
- VERSION
|
27
28
|
- examples/require_fast_start.rb
|
28
29
|
- examples/require_rubygems_normal.rb
|
29
30
|
- ext/mkrf_conf.rb
|
30
31
|
- install.rb
|
32
|
+
- lib/faster_rubygems.rb
|
33
|
+
- lib/faster_rubygems_lib.rb
|
31
34
|
- lib/frubygems.rb
|
32
35
|
- lib/ubygemsf.rb
|
33
|
-
-
|
36
|
+
- spec/spec.faster_rubygems.rb
|
34
37
|
has_rdoc: true
|
35
38
|
homepage:
|
36
39
|
licenses: []
|
@@ -38,7 +41,7 @@ licenses: []
|
|
38
41
|
post_install_message: |+
|
39
42
|
|
40
43
|
|
41
|
-
installed! require '
|
44
|
+
installed! use by doing require 'faster_rubygems'
|
42
45
|
|
43
46
|
rdoc_options:
|
44
47
|
- --charset=UTF-8
|
@@ -64,5 +67,6 @@ signing_key:
|
|
64
67
|
specification_version: 3
|
65
68
|
summary: faster gem loading
|
66
69
|
test_files:
|
70
|
+
- spec/spec.faster_rubygems.rb
|
67
71
|
- examples/require_fast_start.rb
|
68
72
|
- examples/require_rubygems_normal.rb
|