ruby_require_inline
Recursively goes through ruby 'require' statements & prints a tree of dependencies.
It does it by parsing .rb files, so it'll find only 'static' declarations. Unfortunately, this won't be picked up:
foo = 'bar'
require foo
Only
require 'bar'
require './bar'
require_relative '../bar'
& so on will work.
See https://github.com/gromnitsky/minirake as an example where it can be useful.
Installation
gem install ruby_require_inline
Usage
$ ruby_require_deps -h
Usage: ruby_require_deps [-p path] [-o output] input
-p DIR Add path for additional deps search
-o FILE Output file instead of stdout
--flat Print a simple list instead of a tree
-V, --version Version info & $:
Dump a tree:
$ ruby_require_deps ~/.rvm/src/ruby-2.0.0-p247/lib/irb.rb
/home/alex/.rvm/src/ruby-2.0.0-p247/lib/irb.rb
/home/alex/.rvm/src/ruby-2.0.0-p247/lib/e2mmap.rb
/home/alex/.rvm/src/ruby-2.0.0-p247/lib/irb/init.rb
irb/error.rb (not local)
/home/alex/.rvm/src/ruby-2.0.0-p247/lib/irb/help.rb
/home/alex/.rvm/src/ruby-2.0.0-p247/lib/irb/magic-file.rb
/home/alex/.rvm/src/ruby-2.0.0-p247/lib/irb/context.rb
/home/alex/.rvm/src/ruby-2.0.0-p247/lib/irb/workspace.rb
/home/alex/.rvm/src/ruby-2.0.0-p247/lib/tempfile.rb
/home/alex/.rvm/src/ruby-2.0.0-p247/lib/delegate.rb
/home/alex/.rvm/src/ruby-2.0.0-p247/lib/tmpdir.rb
/home/alex/.rvm/src/ruby-2.0.0-p247/lib/fileutils.rb
etc (not local)
etc.so (not local)
/home/alex/.rvm/src/ruby-2.0.0-p247/lib/thread.rb
/home/alex/.rvm/src/ruby-2.0.0-p247/lib/irb/inspector.rb
/home/alex/.rvm/src/ruby-2.0.0-p247/lib/pp.rb
/home/alex/.rvm/src/ruby-2.0.0-p247/lib/prettyprint.rb
/home/alex/.rvm/src/ruby-2.0.0-p247/lib/yaml.rb
psych (not local)
/home/alex/.rvm/src/ruby-2.0.0-p247/lib/irb/extend-command.rb
/home/alex/.rvm/src/ruby-2.0.0-p247/lib/irb/ruby-lex.rb
/home/alex/.rvm/src/ruby-2.0.0-p247/lib/irb/slex.rb
/home/alex/.rvm/src/ruby-2.0.0-p247/lib/irb/notifier.rb
/home/alex/.rvm/src/ruby-2.0.0-p247/lib/irb/output-method.rb
/home/alex/.rvm/src/ruby-2.0.0-p247/lib/irb/ruby-token.rb
/home/alex/.rvm/src/ruby-2.0.0-p247/lib/irb/input-method.rb
/home/alex/.rvm/src/ruby-2.0.0-p247/lib/irb/src_encoding.rb
readline (not local)
/home/alex/.rvm/src/ruby-2.0.0-p247/lib/irb/locale.rb
irb/encoding_aliases.rb (not local)
/home/alex/.rvm/src/ruby-2.0.0-p247/lib/irb/version.rb
Use -p
to add a relative path for additional deps search:
$ ruby_require_deps $GEM_HOME/gems/ruby_parser-3.6.2/bin/ruby_parse \
-p $GEM_HOME/gems/ruby_parser-3.6.2/lib
/home/alex/.rvm/gems/ruby-2.0.0-p247/gems/ruby_parser-3.6.2/bin/ruby_parse
rubygems (not local?)
/home/alex/.rvm/gems/ruby-2.0.0-p247/gems/ruby_parser-3.6.2/lib/ruby_parser.rb
/home/alex/.rvm/gems/ruby-2.0.0-p247/gems/ruby_parser-3.6.2/lib/ruby18_parser.rb
racc/parser.rb (not local?)
/home/alex/.rvm/gems/ruby-2.0.0-p247/gems/ruby_parser-3.6.2/lib/ruby_lexer.rb
/home/alex/.rvm/gems/ruby-2.0.0-p247/gems/ruby_parser-3.6.2/lib/ruby_lexer.rex.rb
strscan (not local?)
/home/alex/.rvm/gems/ruby-2.0.0-p247/gems/ruby_parser-3.6.2/lib/ruby_parser_extras.rb
stringio (not local?)
racc/parser (not local?)
sexp (not local?)
timeout (not local?)
/home/alex/.rvm/gems/ruby-2.0.0-p247/gems/ruby_parser-3.6.2/lib/ruby19_parser.rb
/home/alex/.rvm/gems/ruby-2.0.0-p247/gems/ruby_parser-3.6.2/lib/ruby20_parser.rb
/home/alex/.rvm/gems/ruby-2.0.0-p247/gems/ruby_parser-3.6.2/lib/ruby21_parser.rb
pp (not local?)
Generate 1 .rb file from all deps:
$ ruby_require_deps ~/.rvm/src/ruby-2.0.0-p247/lib/irb.rb | \
ruby_require_cat -o deps.rb
License
MIT.