rbx-require-relative 0.0.6-universal-ruby-1.9.3

Sign up to get free protection for your applications and to get access to all the features.
data/ChangeLog ADDED
@@ -0,0 +1,113 @@
1
+ 2011-06-11 rocky <rockyb@rubyforge.org>
2
+
3
+ * .gemspec, Rakefile: Package name needs the kind of Ruby in it.
4
+ Sigh
5
+
6
+ 2011-06-11 rocky <rockyb@rubyforge.org>
7
+
8
+ * .gemspec, ChangeLog, NEWS, lib/require_relative.rb: Tolerance for
9
+ unpatched 1.9.2
10
+
11
+ 2011-05-26 rocky <rockyb@rubyforge.org>
12
+
13
+ * .gemspec, Rakefile, lib/version.rb: Package versioning for MRI
14
+ 1.8.7 was wrong.
15
+
16
+ 2011-05-26 rocky <rockyb@rubyforge.org>
17
+
18
+ * .gemspec, README.textile, Rakefile, lib/require_relative.rb,
19
+ lib/version.rb, test/test-rr.rb: Handle MRI 1.8
20
+
21
+ 2011-04-22 rocky <rockyb@rubyforge.org>
22
+
23
+ * NEWS, lib/version.rb: Update for release.
24
+
25
+ 2011-04-22 rocky <rockyb@rubyforge.org>
26
+
27
+ * lib/require_relative.rb: Don't use
28
+ Rubinius::StaticScope#data_path, but mirror the logic for that until
29
+ an API is created that works like RequireRelative#abs_file. Also use
30
+ Rubinius::StaticScope.of_sender rather than backtrace. Thanks to
31
+ Evan Phoenix for advice on all of this.
32
+
33
+ 2011-02-14 rocky <rockyb@rubyforge.org>
34
+
35
+ * .gemspec, ChangeLog, NEWS, Rakefile, lib/require_relative.rb,
36
+ lib/version.rb: Allow this to be build on 1.9.2-nframe as mostly a
37
+ no-op.
38
+
39
+ 2010-09-23 rocky <rockyb@rubyforge.org>
40
+
41
+ * .gemspec: Need symbol in defined?
42
+
43
+ 2010-09-23 rocky <rockyb@rubyforge.org>
44
+
45
+ * .gemspec, Rakefile, lib/version.rb: Rakefile: check to see if
46
+ require_relative is already installed. .gemspec: cut-n-paste error
47
+ version.rb: bump version #
48
+
49
+ 2010-09-22 rocky <rockyb@rubyforge.org>
50
+
51
+ * .gemspec: Bang on gemspec Ruby version. For rubinius 1.0.1 .. 1.1
52
+ Gem.ruby_version is 1.8.7. I'm imagining 1.9 features will report
53
+ 1.9 or some such thing.
54
+
55
+ 2010-09-22 rocky <rockyb@rubyforge.org>
56
+
57
+ * .gemspec, NEWS, lib/version.rb: Update gemspec homepage link
58
+
59
+ 2010-09-22 rocky <rockyb@rubyforge.org>
60
+
61
+ * README.textile: More README tweaking
62
+
63
+ 2010-09-22 rocky <rockyb@rubyforge.org>
64
+
65
+ * README.textile: More README tweaking
66
+
67
+ 2010-09-22 rocky <rockyb@rubyforge.org>
68
+
69
+ * README.textile: textile hacking.
70
+
71
+ 2010-09-22 rocky <rockyb@rubyforge.org>
72
+
73
+ * .gemspec, README.textile: Get version ranges in correctly.
74
+
75
+ 2010-09-22 rocky <rockyb@rubyforge.org>
76
+
77
+ * .gemspec, ChangeLog, Makefile, NEWS, README.textile, Rakefile,
78
+ lib/Makefile, test/test-rr.rb: Get ready for release.
79
+
80
+ 2010-09-20 rocky <rockyb@rubyforge.org>
81
+
82
+ * lib/version.rb: Set version number back to what it was
83
+
84
+ 2010-09-20 rocky <rockyb@rubyforge.org>
85
+
86
+ * Rakefile, lib/require_relative.rb, test/test-rr.rb:
87
+ require_relative: Add RequireRelative::abs_file which is like
88
+ __FILE__ but gives the absolute location. Rakefile: Had broken
89
+ tests because rake's default mechanism appears to be broken here and
90
+ I don't know why. test-rr.rb: Reinstate more stringent testing -
91
+ chdir before require_relative
92
+
93
+ 2010-09-20 rocky <rockyb@rubyforge.org>
94
+
95
+ * .gemspec, Makefile, Rakefile, lib/.gitignore, lib/Makefile,
96
+ lib/version.rb: Administrivia: Add packaging, a .gemspec, make
97
+ comptaibility and so on.
98
+
99
+ 2010-09-19 rocky <rockyb@rubyforge.org>
100
+
101
+ * ChangeLog, Rakefile, lib/require_relative.rb,
102
+ require_relative.rb, test/test-rr.rb: Gem packaging - this time, for
103
+ sure!
104
+
105
+ 2010-09-18 rocky <rockyb@rubyforge.org>
106
+
107
+ * .gitignore, ChangeLog, README.textile, Rakefile: Bang on Rakefile
108
+ for testing packaging and installing.
109
+
110
+ 2010-09-18 rvm <rocky-rvm@static-71-183-236-17.nycmny.fios.verizon.net>
111
+
112
+ * Initial require_relative code.
113
+
data/LICENSE ADDED
@@ -0,0 +1,23 @@
1
+ Copyright (C) 2010 Rocky Bernstein <rockyb@rubyforge.org>
2
+ All rights reserved.
3
+ *
4
+ Redistribution and use in source and binary forms, with or without
5
+ modification, are permitted provided that the following conditions
6
+ are met:
7
+ 1. Redistributions of source code must retain the above copyright
8
+ notice, this list of conditions and the following disclaimer.
9
+ 2. Redistributions in binary form must reproduce the above copyright
10
+ notice, this list of conditions and the following disclaimer in the
11
+ documentation and/or other materials provided with the distribution.
12
+ *
13
+ THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
14
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16
+ ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
17
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23
+ SUCH DAMAGE.
data/NEWS ADDED
@@ -0,0 +1,27 @@
1
+ 0.0.6 (02-22-12)
2
+
3
+ Allow Ruby 1.9.3
4
+
5
+ 0.0.5 (06-12-11) Fleetwood release
6
+
7
+ Allow this to work on Ruby MRI 1.8 and 1.9. On 1.9 we don't do
8
+ anything for require_relative, but in 1.9.2+thread_frame we add a
9
+ relible abs_path. This package is provided on 1.9 is there for
10
+ compatibility and for abs_path for a threadframe-enabled 1.9.2.
11
+
12
+ On MRI abs_path may be unreliable in the face of Dir.chdir.
13
+
14
+
15
+ 0.0.4 (04-22-11)
16
+
17
+ - Using an undocumented API has changed in Rubinius 1.2.4dev. Down
18
+ the line, we need to get an API for RequireRelative#abs_file in
19
+ Rubinius. Until then, we'll have to change code.
20
+
21
+ 0.0.3 (09-27-10)
22
+
23
+ - Small .gemspec packaging issues
24
+
25
+ 0.0.2 (09-22-10)
26
+
27
+ - First public release.
data/README.textile ADDED
@@ -0,0 +1,13 @@
1
+ h2. Ruby 1.9's relative_relative for Rubinus and MRI 1.8
2
+
3
+ Here we add in Module RequireRelative method: *require_relative*, and *abs_file*. Example:
4
+
5
+ bc. require 'rubygems'; require 'require_relative'
6
+ require_relative './lib/foo'
7
+ absolute_path = RequireRelative.abs_file
8
+
9
+ But why *abs_file*? Well, recall that ==__FILE__== does not give an absolute path. So if you have chdir'd before using ==__FILE__==, you might not be able to retrieve the full path.
10
+
11
+ The latest version is at "http://github.com/rocky/rbx-require-relative/"://github.com/rocky/rbx-require-relative/
12
+
13
+
data/Rakefile ADDED
@@ -0,0 +1,122 @@
1
+ #!/usr/bin/env rake
2
+ # -*- Ruby -*-
3
+ # Are we rubinius or MRI 1.8?
4
+ raise RuntimeError, 'This package is for rubinius or 1.9.2-nframe only!' unless
5
+ (Object.constants.include?('Rubinius') &&
6
+ Rubinius.constants.include?('VM') &&
7
+ Rubinius::VM.respond_to?(:backtrace)) ||
8
+ (defined? RUBY_DESCRIPTION &&
9
+ RUBY_DESCRIPTION.start_with?('ruby 1.9.2frame')) ||
10
+ (RUBY_VERSION.start_with?('1.8') &&
11
+ RUBY_COPYRIGHT.end_with?('Yukihiro Matsumoto'))
12
+
13
+ # begin
14
+ # require_relative 'lib/version'
15
+ # puts 'Looks like you already have require_relative!'
16
+ # exit 5
17
+ # rescue NameError
18
+ # end
19
+
20
+ require 'rubygems'
21
+ require 'rubygems/package_task'
22
+ require 'rdoc/task'
23
+ require 'rake/testtask'
24
+ require 'fileutils'
25
+
26
+ ROOT_DIR = File.dirname(__FILE__)
27
+ require File.join(ROOT_DIR, '/lib/version')
28
+
29
+ def gemspec
30
+ @gemspec ||= eval(File.read('.gemspec'), binding, '.gemspec')
31
+ end
32
+
33
+ def gem_file
34
+ "#{gemspec.name}-#{gemspec.version}-#{gemspec.platform.to_s}.gem"
35
+ end
36
+
37
+
38
+ desc "Build the gem"
39
+ task :package=>:gem
40
+ task :gem=>:gemspec do
41
+ sh "gem build .gemspec"
42
+ FileUtils.mkdir_p 'pkg'
43
+ FileUtils.mv gem_file, 'pkg'
44
+ end
45
+
46
+ task :default => [:test]
47
+
48
+ desc 'Install locally'
49
+ task :install => :package do
50
+ Dir.chdir(ROOT_DIR) do
51
+ sh %{gem install --local pkg/#{gem_file}}
52
+ end
53
+ end
54
+
55
+ desc 'Test everything.'
56
+ Rake::TestTask.new(:test) do |t|
57
+ t.libs << './lib'
58
+ t.pattern = 'test/test-*.rb'
59
+ t.options = '--verbose' if $VERBOSE
60
+ end
61
+ task :test => [:lib]
62
+
63
+ require 'rbconfig'
64
+ RUBY_PATH = File.join(RbConfig::CONFIG['bindir'],
65
+ RbConfig::CONFIG['RUBY_INSTALL_NAME'])
66
+
67
+ def run_standalone_ruby_file(directory)
68
+ # puts ('*' * 10) + ' ' + directory + ' ' + ('*' * 10)
69
+ Dir.chdir(directory) do
70
+ Dir.glob('test-rr.rb').each do |ruby_file|
71
+ # puts( ('-' * 20) + ' ' + ruby_file + ' ' + ('-' * 20))
72
+ system(RUBY_PATH, ruby_file)
73
+ end
74
+ end
75
+ end
76
+
77
+
78
+ desc "Run each library Ruby file in standalone mode."
79
+ rake_dir = File.dirname(__FILE__)
80
+ task :check do
81
+ run_standalone_ruby_file(File.join(%W(#{rake_dir} test)))
82
+ end
83
+ task :default => [:test]
84
+
85
+ # Remove the above when I figure out what's up with the commented-out code.
86
+
87
+ desc 'Create a GNU-style ChangeLog via git2cl'
88
+ task :ChangeLog do
89
+ system('git log --pretty --numstat --summary | git2cl > ChangeLog')
90
+ end
91
+
92
+ desc "Generate the gemspec"
93
+ task :generate do
94
+ puts gemspec.to_ruby
95
+ end
96
+
97
+ desc "Validate the gemspec"
98
+ task :gemspec do
99
+ gemspec.validate
100
+ end
101
+
102
+ desc 'Remove residue from running patch'
103
+ task :rm_patch_residue do
104
+ FileUtils.rm_rf FileList['**/*.{rej,orig}'].to_a, :verbose => true
105
+ end
106
+
107
+ desc 'Remove ~ backup files'
108
+ task :rm_tilde_backups do
109
+ FileUtils.rm_rf Dir.glob('**/*~'), :verbose => true
110
+ FileUtils.rm_rf Dir.glob('**/*.rbc'), :verbose => true
111
+ end
112
+
113
+ desc "Remove built files"
114
+ task :clean => [:clobber_package, :clobber_rdoc, :rm_patch_residue, :rm_tilde_backups]
115
+
116
+ task :clobber_package do
117
+ FileUtils.rm_rf File.join(ROOT_DIR, 'pkg')
118
+ end
119
+
120
+ task :clobber_rdoc do
121
+ FileUtils.rm_rf File.join(ROOT_DIR, 'doc')
122
+ end
@@ -0,0 +1,84 @@
1
+ # Ruby 1.9's require_relative.
2
+
3
+ if defined?(RubyVM) && RUBY_DESCRIPTION.start_with?('ruby 1.9.2frame')
4
+ require 'thread_frame'
5
+ end
6
+
7
+ module RequireRelative
8
+ def abs_file
9
+ if defined?(RubyVM::ThreadFrame)
10
+ RubyVM::ThreadFrame.current.prev.source_container[1]
11
+ elsif defined?(Rubinius) && "1.8.7" == RUBY_VERSION
12
+ scope = Rubinius::StaticScope.of_sender
13
+ script = scope.current_script
14
+ if script
15
+ script.data_path
16
+ else
17
+ nil
18
+ end
19
+ else
20
+ file = caller.first.split(/:\d/,2).first
21
+ if /\A\((.*)\)/ =~ file # eval, etc.
22
+ nil
23
+ end
24
+ File.expand_path(file)
25
+ end
26
+ end
27
+ module_function :abs_file
28
+ end
29
+
30
+ if RUBY_VERSION.start_with?('1.9')
31
+ # On 1.9.2 platforms we don't do anything.
32
+ elsif defined?(Rubinius) && '1.8.7' == RUBY_VERSION
33
+ module Kernel
34
+ def require_relative(suffix)
35
+ # Rubinius::Location#file stores relative file names while
36
+ # Rubinius::Location#scope.current_script.data_path stores the
37
+ # absolute file name. It is possible (hopeful even) that in the
38
+ # future that Rubinius will change the API to be more
39
+ # intuitive. When that occurs, I'll change the below to that
40
+ # simpler thing.
41
+ scope = Rubinius::StaticScope.of_sender
42
+ script = scope.current_script
43
+ if script
44
+ require File.join(File.dirname(script.data_path), suffix)
45
+ else
46
+ raise LoadError "Something is wrong in trying to get relative path"
47
+ end
48
+ end
49
+ end
50
+ elsif (RUBY_VERSION.start_with?('1.8') &&
51
+ (RUBY_COPYRIGHT.end_with?('Yukihiro Matsumoto')) ||
52
+ RUBY_ENGINE == 'jruby')
53
+ def require_relative(suffix)
54
+ file = caller.first.split(/:\d/,2).first
55
+ if /\A\((.*)\)/ =~ file # eval, etc.
56
+ raise LoadError, "require_relative is called in #{$1}"
57
+ end
58
+ require File.join(File.dirname(file), suffix)
59
+ end
60
+ end
61
+
62
+ # demo
63
+ if __FILE__ == $0
64
+ file = RequireRelative.abs_file
65
+ puts file
66
+ require 'tmpdir'
67
+ dir =
68
+ if RUBY_VERSION.start_with?('1.8') &&
69
+ RUBY_COPYRIGHT.end_with?('Yukihiro Matsumoto')
70
+ puts "Note: require_relative doesn't work with Dir.chdir as it does on Rubinius or 1.9"
71
+ '.'
72
+ else
73
+ Dir.tmpdir
74
+ end
75
+ Dir.chdir(dir) do
76
+ rel_file = File.basename(file)
77
+ cur_dir = File.basename(File.dirname(file))
78
+ ['./', "../#{cur_dir}/"].each do |prefix|
79
+ test = "#{prefix}#{rel_file}"
80
+ puts "#{test}: #{require_relative test}"
81
+ puts "#{test}: #{require_relative test} -- should be false"
82
+ end
83
+ end
84
+ end
data/lib/version.rb ADDED
@@ -0,0 +1,3 @@
1
+ module RequireRelative
2
+ VERSION = '0.0.6'
3
+ end
data/test/bar.rb ADDED
@@ -0,0 +1,3 @@
1
+ # Just something else to try require_relative on.
2
+ class Bar
3
+ end
data/test/foo.rb ADDED
@@ -0,0 +1,3 @@
1
+ # Just something to try require_relative on.
2
+ class Foo
3
+ end
data/test/test-rr.rb ADDED
@@ -0,0 +1,37 @@
1
+ require 'test/unit'
2
+
3
+ # require_relative the old-fashioned way...
4
+ # Note that it's important there be no chdir before this require.
5
+ file = File.expand_path(File.join(File.dirname(__FILE__),
6
+ '../lib/require_relative'))
7
+ require file
8
+
9
+ class TestRR < Test::Unit::TestCase
10
+ require 'tmpdir'
11
+ def test_basic
12
+ dir =
13
+ if RUBY_VERSION.start_with?('1.8') &&
14
+ (RUBY_COPYRIGHT.end_with?('Yukihiro Matsumoto') ||
15
+ RUBY_ENGINE == 'jruby')
16
+ puts "Note: require_relative doesn't work with Dir.chdir as it does on Rubinius or 1.9"
17
+ '.'
18
+ else
19
+ Dir.tmpdir
20
+ end
21
+ abs_file = RequireRelative.abs_file
22
+ # The chdir is to make things harder for those platforms that
23
+ # truly support require_relative.
24
+ Dir.chdir(dir) do
25
+ cur_dir = File.basename(File.expand_path(File.dirname(abs_file)))
26
+ ['./foo', "../#{cur_dir}/bar"].each_with_index do |suffix, i|
27
+ assert_equal(true, require_relative(suffix),
28
+ "check require_relative(#{suffix})")
29
+ # Check that the require_relative worked by checking to see of the
30
+ # class from each file was imported.
31
+ assert_equal(Class, (0 == i ? Foo : Bar).class)
32
+ assert_equal(false, require_relative(suffix),
33
+ "require_relative(#{suffix}) second time should be false")
34
+ end
35
+ end
36
+ end
37
+ end
metadata ADDED
@@ -0,0 +1,66 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rbx-require-relative
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.6
5
+ prerelease:
6
+ platform: universal-ruby-1.9.3
7
+ authors:
8
+ - R. Bernstein
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-02-22 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: ! "Ruby 1.9's require_relative for Rubinius and MRI 1.8. \n\nWe also
15
+ add abs_path which is like __FILE__ but __FILE__ can be fooled\nby a sneaky \"chdir\"
16
+ while abs_path can't. \n\nIf you are running on Ruby 1.9 or greater, require_relative
17
+ is the\npre-defined version. The benefit we provide in this situation by this\npackage
18
+ is the ability to write the same require_relative sequence in\nRubinius 1.8 and
19
+ Ruby 1.9.\n"
20
+ email: rockyb@rubyforge.net
21
+ executables: []
22
+ extensions: []
23
+ extra_rdoc_files: []
24
+ files:
25
+ - LICENSE
26
+ - ChangeLog
27
+ - NEWS
28
+ - README.textile
29
+ - Rakefile
30
+ - lib/version.rb
31
+ - lib/require_relative.rb
32
+ - test/test-rr.rb
33
+ - test/foo.rb
34
+ - test/bar.rb
35
+ homepage: http://github.com/rocky/rbx-require-relative
36
+ licenses:
37
+ - MIT
38
+ post_install_message:
39
+ rdoc_options:
40
+ - --title
41
+ - require_relative 0.0.6 Documentation
42
+ require_paths:
43
+ - lib
44
+ required_ruby_version: !ruby/object:Gem::Requirement
45
+ none: false
46
+ requirements:
47
+ - - ~>
48
+ - !ruby/object:Gem::Version
49
+ version: 1.9.3
50
+ required_rubygems_version: !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ! '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ requirements: []
57
+ rubyforge_project:
58
+ rubygems_version: 1.8.15
59
+ signing_key:
60
+ specification_version: 3
61
+ summary: Ruby 1.9's require_relative for Rubinius and MRI 1.8. We also add abs_path
62
+ which is like __FILE__ but __FILE__ can be fooled by a sneaky "chdir" while abs_path
63
+ can't. If you are running on Ruby 1.9 or greater, require_relative is the pre-defined
64
+ version. The benefit we provide in this situation by this package is the ability
65
+ to write the same require_relative sequence in Rubinius 1.8 and Ruby 1.9.
66
+ test_files: []