reverse-require 0.1.1 → 0.1.2
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/History.txt +6 -0
- data/lib/reverse_require/gems.rb +76 -5
- data/lib/reverse_require/reverse_require.rb +13 -2
- data/lib/reverse_require/version.rb +1 -1
- metadata +4 -4
data/History.txt
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
=== 0.1.2 / 2008-10-22
|
2
|
+
|
3
|
+
* Fixed a bug where ReverseRequire.require_for would try to activate
|
4
|
+
multiple versions of the same Gem.
|
5
|
+
* Refactored ReverseRequire::Gems to store paths and gem specs in reverse.
|
6
|
+
|
1
7
|
=== 0.1.1 / 2008-10-05
|
2
8
|
|
3
9
|
* Renamed the gem file to reverse-require.
|
data/lib/reverse_require/gems.rb
CHANGED
@@ -1,12 +1,27 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
|
3
3
|
module ReverseRequire
|
4
|
-
class Gems
|
4
|
+
class Gems
|
5
|
+
|
6
|
+
# Paths of the gems
|
7
|
+
attr_reader :paths
|
8
|
+
|
9
|
+
# Gem specifications
|
10
|
+
attr_reader :gem_specs
|
11
|
+
|
12
|
+
#
|
13
|
+
# Creates a new empty Gems object.
|
14
|
+
#
|
15
|
+
def initialize
|
16
|
+
@paths = []
|
17
|
+
@gem_specs = []
|
18
|
+
end
|
19
|
+
|
5
20
|
#
|
6
21
|
# Creates a new Gems object containing the gems which depend upon
|
7
22
|
# the RubyGem of the specified _name_.
|
8
23
|
#
|
9
|
-
def
|
24
|
+
def Gems.depending_on(name)
|
10
25
|
name = name.to_s
|
11
26
|
spec_dir = File.join(Gem.dir,'specifications')
|
12
27
|
gems = Gems.new
|
@@ -16,19 +31,75 @@ module ReverseRequire
|
|
16
31
|
|
17
32
|
if deps.include?(name)
|
18
33
|
gem_path = File.expand_path(File.join(Gem.dir,'gems',path))
|
19
|
-
|
34
|
+
|
35
|
+
gems.enqueue(gem_path,gem_spec)
|
20
36
|
end
|
21
37
|
end
|
22
38
|
|
23
39
|
return gems
|
24
40
|
end
|
25
41
|
|
42
|
+
#
|
43
|
+
# Returns the number of paths and gem specs.
|
44
|
+
#
|
45
|
+
def length
|
46
|
+
return 0 if (@paths.empty? || @gem_specs.empty?)
|
47
|
+
return [@paths.length, @gem_specs.length].min
|
48
|
+
end
|
49
|
+
|
50
|
+
#
|
51
|
+
# Returns the gem spec with the specified gem _path_.
|
52
|
+
#
|
53
|
+
def [](path)
|
54
|
+
@gem_specs[@paths.index(path)]
|
55
|
+
end
|
56
|
+
|
57
|
+
#
|
58
|
+
# Adds the specified _gem_spec_ with the specified gem _path_.
|
59
|
+
#
|
60
|
+
def []=(path,gem_spec)
|
61
|
+
if @paths.include?(path)
|
62
|
+
@gem_specs[@paths.index(path)] = gem_spec
|
63
|
+
else
|
64
|
+
@paths << path
|
65
|
+
@gem_specs << gem_spec
|
66
|
+
end
|
67
|
+
|
68
|
+
return gem_spec
|
69
|
+
end
|
70
|
+
|
71
|
+
#
|
72
|
+
# Enqueues the specified _gem_spec_ with the specified gem _path_.
|
73
|
+
#
|
74
|
+
def enqueue(path,gem_spec)
|
75
|
+
if @paths.include?(path)
|
76
|
+
@gem_specs[@paths.index(path)] = gem_spec
|
77
|
+
else
|
78
|
+
@paths.unshift(path)
|
79
|
+
@gem_specs.unshift(gem_spec)
|
80
|
+
end
|
81
|
+
|
82
|
+
return self
|
83
|
+
end
|
84
|
+
|
85
|
+
#
|
86
|
+
# Iterates over each path and gem spec, passing each to the given
|
87
|
+
# _block_.
|
88
|
+
#
|
89
|
+
def each(&block)
|
90
|
+
length.times do |i|
|
91
|
+
block.call(@paths[i], @gem_specs[i])
|
92
|
+
end
|
93
|
+
|
94
|
+
return self
|
95
|
+
end
|
96
|
+
|
26
97
|
#
|
27
98
|
# Returns a new Gems object containing the names and paths from the
|
28
99
|
# gems which match the specified _block_.
|
29
100
|
#
|
30
101
|
def select(&block)
|
31
|
-
gems =
|
102
|
+
gems = self.class.new
|
32
103
|
|
33
104
|
each do |path,gem_spec|
|
34
105
|
if block.call(path,gem_spec)
|
@@ -67,7 +138,7 @@ module ReverseRequire
|
|
67
138
|
sub_path += '.rb'
|
68
139
|
end
|
69
140
|
|
70
|
-
select do |path,gem_spec|
|
141
|
+
return select do |path,gem_spec|
|
71
142
|
File.exists?(File.expand_path(File.join(path,sub_path)))
|
72
143
|
end
|
73
144
|
end
|
@@ -18,8 +18,19 @@ module ReverseRequire
|
|
18
18
|
lib_path = File.join('lib',sub_path)
|
19
19
|
|
20
20
|
was_loaded = gems.with_path(lib_path).map do |path,gem_spec|
|
21
|
-
|
22
|
-
|
21
|
+
activated = Gem.loaded_specs.any? do |active_path,activated_spec|
|
22
|
+
activated_spec.name == gem_spec.name &&
|
23
|
+
activated_spec.version != gem_spec.version
|
24
|
+
end
|
25
|
+
|
26
|
+
unless activated
|
27
|
+
begin
|
28
|
+
gem(gem_spec.name,gem_spec.version)
|
29
|
+
require File.expand_path(File.join(path,lib_path))
|
30
|
+
rescue Gem::Exception
|
31
|
+
next
|
32
|
+
end
|
33
|
+
end
|
23
34
|
end
|
24
35
|
|
25
36
|
return was_loaded.include?(true)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: reverse-require
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Postmodern Modulus III
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-10-
|
12
|
+
date: 2008-10-22 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -20,7 +20,7 @@ dependencies:
|
|
20
20
|
requirements:
|
21
21
|
- - ">="
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: 1.
|
23
|
+
version: 1.8.0
|
24
24
|
version:
|
25
25
|
description: "reverse_require requires specific files from the gems which depend on a certain RubyGem and contain the specified path. Using reverse_require one can allow others to easily extend the functionality of a RubyGem. Simply add reverse_require into the code of your RubyGem: reverse_require 'my_gem', 'some/path' Then other gems which depend upon +my_gem+ merely have to provide <tt>some/path</tt> within their <tt>lib/</tt> directory, and reverse_require will load them all at run-time. This ability makes designing plug-in systems for a RubyGem trivial."
|
26
26
|
email:
|
@@ -67,7 +67,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
67
67
|
requirements: []
|
68
68
|
|
69
69
|
rubyforge_project: reverserequire
|
70
|
-
rubygems_version: 1.
|
70
|
+
rubygems_version: 1.3.0
|
71
71
|
signing_key:
|
72
72
|
specification_version: 2
|
73
73
|
summary: reverse_require requires specific files from the gems which depend on a certain RubyGem and contain the specified path
|