From 9fa27bd927f97d00a27bf2c1be059a15ed99e888 Mon Sep 17 00:00:00 2001 From: Denis Knauf Date: Wed, 4 Jan 2012 19:34:42 +0100 Subject: [PATCH] pager -> irb-pager. Pager -> IRB::Pager --- README.md | 18 ++++++++++++++-- Rakefile | 6 +++--- lib/irb-pager.rb | 56 ++++++++++++++++++++++++++++++++++++++++++++++++ lib/pager.rb | 54 ---------------------------------------------- 4 files changed, 75 insertions(+), 59 deletions(-) create mode 100644 lib/irb-pager.rb delete mode 100644 lib/pager.rb diff --git a/README.md b/README.md index 672cb9b..183cac0 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,24 @@ +`IRB::Pager` vs. `Pager` +==================== + +Because naming conflicts, i renamed Pager to `IRB::Pager`. +There is no need for `IRB`; of course you can use `IRB::Pager` without `irb`. + +I renamed these things: + +* gem: `gem install pager` #=> `gem install irb-pager` +* lib: `require 'pager'` #=> `require 'irb-pager'` +* module: `Pager` #=> `IRB::Pager` + +`Pager.pager` will be `IRB::Pager.pager` now. + Usage ===== Very simple: - require 'pager' - include Pager + require 'irb-pager' + include IRB::Pager pager { puts "Hello World!" } pager { 1.upto(200) {|i|sleep 0.2; puts i} } diff --git a/Rakefile b/Rakefile index afa9614..318ba76 100644 --- a/Rakefile +++ b/Rakefile @@ -4,9 +4,9 @@ require 'rake' begin require 'jeweler' Jeweler::Tasks.new do |gem| - gem.name = "pager" + gem.name = "irb-pager" gem.summary = %Q{Redirect output (and errors) to less} - gem.description = %Q{You love something like "domany | less"? In irb you miss it? pager helps to redirect anything to less.} + gem.description = %Q{You love something like "domany | less"? In irb you miss it? irb-pager helps to redirect anything to less.} gem.email = %w[Denis.Knauf@gmail.com] gem.homepage = "http://github.com/DenisKnauf/irb-pager" gem.authors = ["Denis Knauf"] @@ -51,7 +51,7 @@ Rake::RDocTask.new do |rdoc| end rdoc.rdoc_dir = 'rdoc' - rdoc.title = "pager #{version}" + rdoc.title = "irb-pager #{version}" rdoc.rdoc_files.include 'README.md' rdoc.rdoc_files.include 'AUTHORS' rdoc.rdoc_files.include 'LICENSE' diff --git a/lib/irb-pager.rb b/lib/irb-pager.rb new file mode 100644 index 0000000..acc90a6 --- /dev/null +++ b/lib/irb-pager.rb @@ -0,0 +1,56 @@ +module IRB + module Pager + module PagerHelper + def self.options opts = nil + opts = opts.kind_of?( Hash) ? opts.dup : {} + stdout = opts[:stdout] || opts[:out] || $stdout + stderr = opts[:stderr] || opts[:err] || $stderr + stdin = opts[:stdin] || opts[:in] || $stdin + pager = opts[:pager] || opts[:less] || $PAGER || ENV['PAGER'] || 'less' + rescuing = opts[:rescuing].nil? ? opts[:exceptions].nil? ? $PAGER_RESCUE : opts[:exceptions] : opts[:rescuing] + [stdout, stderr, stdin, pager, rescuing] + end + + def self.exception_formatter exception + ["#{exception.class}: #{exception.message}", exception.backtrace.collect {|c| "\tfrom #{c}" }].join "\n" + end + end + + def self.pager obj = nil, opts = nil, &exe + if block_given? + stdout, stderr, stdin, pager, rescuing = PagerHelper.options( opts || obj) + pid, dupout, duperr, dupin = nil, stdout.dup, stderr.dup, stdin.dup + IO.pipe do |inrd, inwr| + begin + IO.pipe do |rd, wr| + pid = Process.fork do + stdin.reopen rd + wr.close + exec *pager + end + stdout.reopen wr + stderr.reopen wr + stdin.reopen inrd + if rescuing + begin + yield + rescue Object + stdout.puts PagerHelper.exception_formatter + end + else + yield + end + end + ensure + stdout.reopen dupout + stderr.reopen duperr + Process.wait pid + stdin.reopen dupin + end + end + else + pager( opts) { Kernel.p obj } + end + end + end +end diff --git a/lib/pager.rb b/lib/pager.rb deleted file mode 100644 index 68756fd..0000000 --- a/lib/pager.rb +++ /dev/null @@ -1,54 +0,0 @@ -module Pager - module PagerHelper - def self.options opts = nil - opts = opts.kind_of?( Hash) ? opts.dup : {} - stdout = opts[:stdout] || opts[:out] || $stdout - stderr = opts[:stderr] || opts[:err] || $stderr - stdin = opts[:stdin] || opts[:in] || $stdin - pager = opts[:pager] || opts[:less] || $PAGER || ENV['PAGER'] || 'less' - rescuing = opts[:rescuing] || opts[:exceptions] || $PAGER_RESCUE - [stdout, stderr, stdin, pager, rescuing] - end - - def self.exception_formatter exception - ["#{exception.class}: #{exception.message}", exception.backtrace.collect {|c| "\tfrom #{c}" }].join "\n" - end - end - - def self.pager obj = nil, opts = nil, &exe - if block_given? - stdout, stderr, stdin, pager, rescuing = PagerHelper.options( opts || obj) - pid, dupout, duperr, dupin = nil, stdout.dup, stderr.dup, stdin.dup - IO.pipe do |inrd, inwr| - begin - IO.pipe do |rd, wr| - pid = Process.fork do - stdin.reopen rd - wr.close - exec *pager - end - stdout.reopen wr - stderr.reopen wr - stdin.reopen inrd - if rescuing - begin - yield - rescue Object - stdout.puts PagerHelper.exception_formatter - end - else - yield - end - end - ensure - stdout.reopen dupout - stderr.reopen duperr - Process.wait pid - stdin.reopen dupin - end - end - else - pager( opts) { Kernel.p obj } - end - end -end