reverse-require 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt CHANGED
@@ -1,3 +1,12 @@
1
+ === 0.3.0 / 2009-01-08
2
+
3
+ * Added Kernel#require_for.
4
+ * Changed how Kernel#reverse_require behaves.
5
+ * Changed how Kernel#require_all behaves.
6
+ * Added extensions to the Gem module:
7
+ * Gem.find_resources
8
+ * Gem.find_resources_for
9
+
1
10
  === 0.2.0 / 2008-11-23
2
11
 
3
12
  * Use the new Gem.find_files method provided by RubyGems >= 1.3.0. Using
data/Manifest.txt CHANGED
@@ -5,7 +5,7 @@ TODO.txt
5
5
  Rakefile
6
6
  lib/reverse_require.rb
7
7
  lib/reverse_require/version.rb
8
- lib/reverse_require/exceptions.rb
9
- lib/reverse_require/exceptions/rubygems_version_exception.rb
10
8
  lib/reverse_require/extensions.rb
9
+ lib/reverse_require/extensions/rubygems.rb
11
10
  lib/reverse_require/extensions/kernel.rb
11
+ lib/reverse_require/reverse_require.rb
data/README.txt CHANGED
@@ -1,30 +1,41 @@
1
1
  = ReverseRequire
2
2
 
3
3
  * http://reverserequire.rubyforge.org/
4
+ * http://github.com/postmodern/reverse-require
4
5
  * Postmodern (postmodern.mod3 at gmail.com)
5
6
 
6
7
  == DESCRIPTION:
7
8
 
8
- reverse_require will require all files ending with a specified path from
9
- within previously installed RubyGems. By using reverse_require in your
10
- code-base, it allows developers to extend the functionality of your
11
- code-base, by merely adding specially named files to their own RubyGems.
12
- Simply use reverse_require in the code-base that you'd like to be extendable:
9
+ reverse-require allows one to require files that ends with a specified path
10
+ from other RubyGems.
13
11
 
14
- reverse_require 'some/path'
12
+ For instance, if one wanted to require the file 'mylibrary/extensions.rb'
13
+ from all RubyGems:
15
14
 
16
- The <tt>some/path.rb</tt> files within the <tt>lib/</tt> directories of
17
- other RubyGems will then be loaded. This functionality makes designing
18
- plug-in systems ontop of RubyGems trivial.
15
+ require 'reverse_require'
16
+
17
+ require_all 'mylibrary/extensions'
18
+ # => true
19
+
20
+ One can also require 'mylibrary/extensions.rb' only from RubyGems that
21
+ depend on the currently loaded version of the mylibrary Gem:
22
+
23
+ require_for 'mylibrary', 'mylibrary/extensions'
24
+ # => true
19
25
 
20
26
  == FEATURES/PROBLEMS:
21
27
 
22
- * Require files ending with a specified path from previously installed
23
- RubyGems.
28
+ * Require files ending with a specified path from all RubyGems.
29
+ * Require files ending with a specified path from RubyGems that depends on
30
+ another specified RubyGem.
31
+ * Provides extensions to RubyGems for finding static resources in other
32
+ RubyGems:
33
+ * Gem.find_resources
34
+ * Gem.find_resources_for
24
35
 
25
36
  == REQUIREMENTS:
26
37
 
27
- * RubyGems >= 1.3.0
38
+ * rubygems >= 1.3.0
28
39
 
29
40
  == INSTALL:
30
41
 
@@ -34,7 +45,7 @@ plug-in systems ontop of RubyGems trivial.
34
45
 
35
46
  The MIT License
36
47
 
37
- Copyright (c) 2008 Hal Brodigan
48
+ Copyright (c) 2008-2009 Hal Brodigan
38
49
 
39
50
  Permission is hereby granted, free of charge, to any person obtaining
40
51
  a copy of this software and associated documentation files (the
@@ -1,2 +1,6 @@
1
- require 'reverse_require/extensions'
1
+ require 'reverse_require/reverse_require'
2
2
  require 'reverse_require/version'
3
+
4
+ ReverseRequire.rubygems_version_check do
5
+ require 'reverse_require/extensions'
6
+ end
@@ -1 +1,2 @@
1
+ require 'reverse_require/extensions/rubygems'
1
2
  require 'reverse_require/extensions/kernel'
@@ -1,24 +1,14 @@
1
- require 'reverse_require/exceptions/rubygems_version_exception'
1
+ require 'reverse_require/extensions/rubygems'
2
2
 
3
3
  module Kernel
4
4
  #
5
- # Requires all files from previously installed RubyGems that
6
- # end with the specified _path_. If no RubyGems contain the
7
- # specified _path_, +false+ will be returned.
5
+ # Require the given _paths_ in reverse. Returns +false+ if all of the
6
+ # paths are already loaded, returns +true+ otherwise.
8
7
  #
9
- # reverse_require 'ronin/models'
10
- # # => true
11
- #
12
- def reverse_require(path)
13
- major, minor, rev = Gem::RubyGemsVersion.split('.').map { |i| i.to_i }
14
-
15
- if (major == 1 && minor == 2)
16
- raise(ReverseRequire::RubyGemsVersionException,"RubyGems >= 1.3.0 is required for reverse_require",caller)
17
- end
18
-
8
+ def reverse_require(*paths)
19
9
  was_loaded = false
20
10
 
21
- Gem.find_files(path).reverse_each do |path|
11
+ paths.reverse_each do |path|
22
12
  begin
23
13
  if File.file?(path)
24
14
  was_loaded ||= require path
@@ -31,5 +21,27 @@ module Kernel
31
21
  return was_loaded
32
22
  end
33
23
 
34
- alias require_all reverse_require
24
+ #
25
+ # Requires files from previously installed RubyGems that also end with
26
+ # the specified _path_. Returns +false+ if no RubyGem contains the
27
+ # specified _path_, returns +true+ otherwise.
28
+ #
29
+ # require_all 'ronin/models'
30
+ # # => true
31
+ #
32
+ def require_all(path)
33
+ reverse_require(*Gem.find_files(path))
34
+ end
35
+
36
+ #
37
+ # Requires files that end with the specified _path_, from previously
38
+ # installed RubyGems which depend on the specified _gem_. Returns +false+
39
+ # if no RubyGem contains the specified _path_, returns +true+ otherwise.
40
+ #
41
+ # require_for 'ronin', 'ronin/models'
42
+ # # => true
43
+ #
44
+ def require_for(gem,path)
45
+ reverse_require(*Gem.find_files_for(gem,path))
46
+ end
35
47
  end
@@ -0,0 +1,46 @@
1
+ require 'rubygems'
2
+
3
+ module Gem
4
+ #
5
+ # Find all files that end with the specified _path_, from within RubyGems
6
+ # that depend on the specified _gem_.
7
+ #
8
+ def self.find_files_for(gem,path)
9
+ if (spec = Gem.loaded_specs[gem])
10
+ version = spec.version
11
+ else
12
+ version = nil
13
+ end
14
+
15
+ dep = Gem.source_index.find_name(gem,version).first
16
+
17
+ dep.dependent_gems.map { |deps|
18
+ Gem.searcher.matching_files deps.first, path
19
+ }.flatten
20
+ end
21
+
22
+ #
23
+ # Find resources that end with the specified _path_ from all RubyGems.
24
+ #
25
+ # Gem.find_resources 'static/template.erb'
26
+ # # => [...]
27
+ #
28
+ def self.find_resources(path)
29
+ find_files(File.join('..',path)).map do |gem_path|
30
+ File.expand_path(gem_path)
31
+ end
32
+ end
33
+
34
+ #
35
+ # Find resources that end with the specified _path_, from within RubyGems
36
+ # that depend on the specified _gem_.
37
+ #
38
+ # Gem.find_resources_for 'statix', 'static/xsl/page.xsl'
39
+ # # => [...]
40
+ #
41
+ def self.find_resources_for(gem,path)
42
+ find_files_for(gem,File.join('..',path)).map do |gem_path|
43
+ File.expand_path(gem_path)
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,15 @@
1
+ module ReverseRequire
2
+ #
3
+ # Preforms a version check on rubygems before calling the given _block_.
4
+ # If rubygems >= 1.3.0 is not found, then an exception will be raised.
5
+ #
6
+ def self.rubygems_version_check(&block)
7
+ major, minor, rev = Gem::RubyGemsVersion.split('.').map { |i| i.to_i }
8
+
9
+ if (major <= 1 && minor <= 2)
10
+ raise("rubygems >= 1.3.0 is required, please run 'gem update --system'")
11
+ end
12
+
13
+ block.call if block
14
+ end
15
+ end
@@ -1,3 +1,3 @@
1
1
  module ReverseRequire
2
- VERSION = '0.2.0'
2
+ VERSION = '0.3.0'
3
3
  end
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.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Postmodern
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-11-23 00:00:00 -08:00
12
+ date: 2009-01-08 00:00:00 -08:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -22,7 +22,7 @@ dependencies:
22
22
  - !ruby/object:Gem::Version
23
23
  version: 1.8.2
24
24
  version:
25
- description: "reverse_require will require all files ending with a specified path from within previously installed RubyGems. By using reverse_require in your code-base, it allows developers to extend the functionality of your code-base, by merely adding specially named files to their own RubyGems. Simply use reverse_require in the code-base that you'd like to be extendable: reverse_require 'some/path' The <tt>some/path.rb</tt> files within the <tt>lib/</tt> directories of other RubyGems will then be loaded. This functionality makes designing plug-in systems ontop of RubyGems trivial."
25
+ description: "reverse-require allows one to require files that ends with a specified path from other RubyGems. For instance, if one wanted to require the file 'mylibrary/extensions.rb' from all RubyGems: require 'reverse_require' require_all 'mylibrary/extensions' # => true One can also require 'mylibrary/extensions.rb' only from RubyGems that depend on the currently loaded version of the mylibrary Gem: require_for 'mylibrary', 'mylibrary/extensions' # => true"
26
26
  email:
27
27
  - postmodern.mod3@gmail.com
28
28
  executables: []
@@ -42,10 +42,10 @@ files:
42
42
  - Rakefile
43
43
  - lib/reverse_require.rb
44
44
  - lib/reverse_require/version.rb
45
- - lib/reverse_require/exceptions.rb
46
- - lib/reverse_require/exceptions/rubygems_version_exception.rb
47
45
  - lib/reverse_require/extensions.rb
46
+ - lib/reverse_require/extensions/rubygems.rb
48
47
  - lib/reverse_require/extensions/kernel.rb
48
+ - lib/reverse_require/reverse_require.rb
49
49
  has_rdoc: true
50
50
  homepage: http://reverserequire.rubyforge.org/
51
51
  post_install_message:
@@ -72,6 +72,6 @@ rubyforge_project: reverserequire
72
72
  rubygems_version: 1.3.1
73
73
  signing_key:
74
74
  specification_version: 2
75
- summary: reverse_require will require all files ending with a specified path from within previously installed RubyGems
75
+ summary: reverse-require allows one to require files that ends with a specified path from other RubyGems
76
76
  test_files: []
77
77
 
@@ -1 +0,0 @@
1
- require 'reverse_require/exceptions/rubygems_version_exception'
@@ -1,4 +0,0 @@
1
- module ReverseRequire
2
- class RubyGemsVersionException < RuntimeError
3
- end
4
- end