diff --git a/vendor/gems/highline-1.4.0/CHANGELOG b/vendor/gems/highline-1.4.0/CHANGELOG deleted file mode 100644 index 97bedded..00000000 --- a/vendor/gems/highline-1.4.0/CHANGELOG +++ /dev/null @@ -1,204 +0,0 @@ -= Change Log - -Below is a complete listing of changes for each revision of HighLine. - -== 1.4.0 - -* Made the code grabbing terminal size a little more cross-platform by - adding support for Solaris. (patch by Ronald Braswell and Coey Minear) - -== 1.2.9 - -* Additional work on the backspacing issue. (patch by Jeremy Hinegardner) -* Fixed Readline prompt bug. (patch by Jeremy Hinegardner) - -== 1.2.8 - -* Fixed backspacing past the prompt and interrupting a prompt bugs. - (patch by Jeremy Hinegardner) - -== 1.2.7 - -* Fixed the stty indent bug. -* Fixed the echo backspace bug. -* Added HighLine::track_eof=() setting to work are threaded eof?() calls. - -== 1.2.6 - -Patch by Jeremy Hinegardner: - -* Added ColorScheme support. -* Added HighLine::Question.overwrite mode. -* Various documentation fixes. - -== 1.2.5 - -* Really fixed the bug I tried to fix in 1.2.4. - -== 1.2.4 - -* Fixed a crash causing bug when using menus, reported by Patrick Hof. - -== 1.2.3 - -* Treat Cygwin like a Posix OS, instead of a native Windows environment. - -== 1.2.2 - -* Minor documentation corrections. -* Applied Thomas Werschleiln's patch to fix termio buffering on Solaris. -* Applied Justin Bailey's patch to allow canceling paged output. -* Fixed a documentation bug in the description of character case settings. -* Added a notice about termios in HighLine::Question#echo. -* Finally working around the infamous "fast typing" bug - -== 1.2.1 - -* Applied Justin Bailey's fix for the page_print() infinite loop bug. -* Made a SystemExtensions module to expose OS level functionality other - libraries may want to access. -* Publicly exposed the get_character() method, per user requests. -* Added terminal_size(), output_cols(), and output_rows() methods. -* Added :auto setting for warp_at=() and page_at=(). - -== 1.2.0 - -* Improved RubyForge and gem spec project descriptions. -* Added basic examples to README. -* Added a VERSION constant. -* Added support for hidden menu commands. -* Added Object.or_ask() when using highline/import. - -== 1.0.4 - -* Moved the HighLine project to Subversion. -* HighLine's color escapes can now be disabled. -* Fixed EOF bug introduced in the last release. -* Updated HighLine web page. -* Moved to a forked development/stable version numbering. - -== 1.0.2 - -* Removed old and broken help tests. -* Fixed test case typo found by David A. Black. -* Added ERb escapes processing to lists, for coloring list items. Color escapes - do not add to list element size. -* HighLine now throws EOFError when input is exhausted. - -== 1.0.1 - -* Minor bug fix: Moved help initialization to before response building, so help - would show up in the default responses. - -== 1.0.0 - -* Fixed documentation typo pointed out by Gavin Kistner. -* Added gather = ... option to question for fetching entire Arrays or - Hashes filled with answers. You can set +gather+ to a count of answers to - collect, a String or Regexp matching the end of input, or a Hash where each - key can be used in a new question. -* Added File support to HighLine.ask(). You can specify a _directory_ and a - _glob_ pattern that combine into a list of file choices the user can select - from. You can choose to receive the user's answer as an open filehandle or as - a Pathname object. -* Added Readline support for history and editing. -* Added tab completion for menu and file selection selection (requires - Readline). -* Added an optional character limit for input. -* Added a complete help system to HighLine's shell menu creation tools. - -== 0.6.1 - -* Removed termios dependancy in gem, to fix Windows' install. - -== 0.6.0 - -* Implemented HighLine.choose() for menu handling. - * Provided shortcut choose(item1, item2, ...) for simple menus. - * Allowed Ruby code to be attached to each menu item, to create a complete - menu solution. - * Provided for total customization of the menu layout. - * Allowed for menu selection by index, name or both. - * Added a _shell_ mode to allow menu selection with additional details - following the name. -* Added a list() utility method that can be invoked just like color(). It can - layout Arrays for you in any output in the modes :columns_across, - :columns_down, :inline and :rows -* Added support for echo = "*" style settings. User code can now - choose the echo character this way. -* Modified HighLine to user the "termios" library for character input, if - available. Will return to old behavior (using "stty"), if "termios" cannot be - loaded. -* Improved "stty" state restoring code. -* Fixed "stty" code to handle interrupt signals. -* Improved the default auto-complete error message and exposed this message - through the +responses+ interface as :no_completion. - -== 0.5.0 - -* Implemented echo = false for HighLine::Question objects, primarily to - make fetching passwords trivial. -* Fixed an auto-complete bug that could cause a crash when the user gave an - answer that didn't complete to any valid choice. -* Implemented +case+ for HighLine::Question objects to provide character case - conversions on given answers. Can be set to :up, :down, or - :capitalize. -* Exposed @answer to the response system, to allow response that are - aware of incorrect input. -* Implemented +confirm+ for HighLine::Question objects to allow for verification - for sensitive user choices. If set to +true+, user will have to answer an - "Are you sure? " question. Can also be set to the question to confirm with - the user. - -== 0.4.0 - -* Added @wrap_at and @page_at settings and accessors to - HighLine, to control text flow. -* Implemented line wrapping with adjustable limit. -* Implemented paged printing with adjustable limit. - -== 0.3.0 - -* Added support for installing with setup.rb. -* All output is now treated as an ERb sequence, allowing Ruby code to be - embedded in output strings. -* Added support for ANSI color sequences in say(). (And everything else - by extension.) -* Added whitespace handling for answers. Can be set to :strip, - :chomp, :collapse, :strip_and_collapse, - :chomp_and_collapse, :remove, or :none. -* Exposed question details to ERb completion through @question, to allow for - intelligent responses. -* Simplified HighLine internals using @question. -* Added support for fetching single character input either with getc() or - HighLine's own cross-platform terminal input routine. -* Improved type conversion to handle user defined classes. - -== 0.2.0 - -* Added Unit Tests to cover an already fixed output bug in the future. -* Added Rakefile and setup test action (default). -* Renamed HighLine::Answer to HighLine::Question to better illustrate its role. -* Renamed fetch_line() to get_response() to better define its goal. -* Simplified explain_error in terms of the Question object. -* Renamed accept?() to in_range?() to better define purpose. -* Reworked valid?() into valid_answer?() to better fit Question object. -* Reworked @member into @in, to make it easier to remember and - switched implementation to include?(). -* Added range checks for @above and @below. -* Fixed the bug causing ask() to swallow NoMethodErrors. -* Rolled ask_on_error() into responses. -* Redirected imports to Kernel from Object. -* Added support for validate = lambda { ... }. -* Added default answer support. -* Fixed bug that caused ask() to die with an empty question. -* Added complete documentation. -* Improve the implemetation of agree() to be the intended "yes" or "no" only - question. -* Added Rake tasks for documentation and packaging. -* Moved project to RubyForge. - -== 0.1.0 - -* Initial release as the solution to - {Ruby Quiz #29}[http://www.rubyquiz.com/quiz29.html]. diff --git a/vendor/gems/highline-1.4.0/INSTALL b/vendor/gems/highline-1.4.0/INSTALL deleted file mode 100644 index c22f0414..00000000 --- a/vendor/gems/highline-1.4.0/INSTALL +++ /dev/null @@ -1,35 +0,0 @@ -= Installing HighLine - -RubyGems is the preferred easy install method for HighLine. However, you can -install HighLine manually as described below. - -== Installing the Gem - -HighLine is intended to be installed via the -RubyGems[http://rubyforge.org/projects/rubygems/] system. To get the latest -version, simply enter the following into your command prompt: - - $ sudo gem install highline - -You must have RubyGems[http://rubyforge.org/projects/rubygems/] installed for -the above to work. - -== Installing Manually - -Download the latest version of HighLine from the -{RubyForge project page}[http://rubyforge.org/frs/?group_id=683]. Navigate to -the root project directory and enter: - - $ sudo ruby setup.rb - -== Using termios - -While not a requirement, HighLine will take advantage of the termios library if -installed (on Unix). This slightly improves HighLine's character reading -capabilities and thus is recommended for all Unix users. - -If using the HighLine gem, you should be able to add termios as easily as: - - $ sudo gem install termios - -For manual installs, consult the termios documentation. diff --git a/vendor/gems/highline-1.4.0/LICENSE b/vendor/gems/highline-1.4.0/LICENSE deleted file mode 100644 index ff6f232c..00000000 --- a/vendor/gems/highline-1.4.0/LICENSE +++ /dev/null @@ -1,7 +0,0 @@ -= License Terms - -Distributed under the user's choice of the {GPL Version 2}[http://www.gnu.org/licenses/old-licenses/gpl-2.0.html] (see COPYING for details) or the -{Ruby software license}[http://www.ruby-lang.org/en/LICENSE.txt] by -James Edward Gray II and Greg Brown. - -Please email James[mailto:james@grayproductions.net] with any questions. diff --git a/vendor/gems/highline-1.4.0/README b/vendor/gems/highline-1.4.0/README deleted file mode 100644 index f28478bb..00000000 --- a/vendor/gems/highline-1.4.0/README +++ /dev/null @@ -1,63 +0,0 @@ -= Read Me - -by James Edward Gray II - -== Description - -Welcome to HighLine. - -HighLine was designed to ease the tedious tasks of doing console input and -output with low-level methods like gets() and puts(). HighLine provides a -robust system for requesting data from a user, without needing to code all the -error checking and validation rules and without needing to convert the typed -Strings into what your program really needs. Just tell HighLine what you're -after, and let it do all the work. - -== Documentation - -See HighLine and HighLine::Question for documentation. - -== Examples - -Basic usage: - - ask("Company? ") { |q| q.default = "none" } - -Validation: - - ask("Age? ", Integer) { |q| q.in = 0..105 } - ask("Name? (last, first) ") { |q| q.validate = /\A\w+, ?\w+\Z/ } - -Type conversion for answers: - - ask("Birthday? ", Date) - ask("Interests? (comma sep list) ", lambda { |str| str.split(/,\s*/) }) - -Reading passwords: - - ask("Enter your password: ") { |q| q.echo = false } - ask("Enter your password: ") { |q| q.echo = "x" } - -ERb based output (with HighLine's ANSI color tools): - - say("This should be <%= color('bold', BOLD) %>!") - -Menus: - - choose do |menu| - menu.prompt = "Please choose your favorite programming language? " - - menu.choice(:ruby) { say("Good choice!") } - menu.choices(:python, :perl) { say("Not from around here, are you?") } - end - -For more examples see the examples/ directory of this project. - -== Installing - -See the INSTALL file for instructions. - -== Questions and/or Comments - -Feel free to email {James Edward Gray II}[mailto:james@grayproductions.net] or -{Gregory Brown}[mailto:gregory.t.brown@gmail.com] with any questions. diff --git a/vendor/gems/highline-1.4.0/Rakefile b/vendor/gems/highline-1.4.0/Rakefile deleted file mode 100644 index 26a68f00..00000000 --- a/vendor/gems/highline-1.4.0/Rakefile +++ /dev/null @@ -1,82 +0,0 @@ -require "rake/rdoctask" -require "rake/testtask" -require "rake/gempackagetask" - -require "rubygems" - -dir = File.dirname(__FILE__) -lib = File.join(dir, "lib", "highline.rb") -version = File.read(lib)[/^\s*VERSION\s*=\s*(['"])(\d\.\d\.\d)\1/, 2] - -task :default => [:test] - -Rake::TestTask.new do |test| - test.libs << "test" - test.test_files = [ "test/ts_all.rb" ] - test.verbose = true -end - -Rake::RDocTask.new do |rdoc| - rdoc.rdoc_files.include( "README", "INSTALL", - "TODO", "CHANGELOG", - "AUTHORS", "COPYING", - "LICENSE", "lib/" ) - rdoc.main = "README" - rdoc.rdoc_dir = "doc/html" - rdoc.title = "HighLine Documentation" -end - -desc "Upload current documentation to Rubyforge" -task :upload_docs => [:rdoc] do - sh "scp -r doc/html/* " + - "bbazzarrakk@rubyforge.org:/var/www/gforge-projects/highline/doc/" - sh "scp -r site/* " + - "bbazzarrakk@rubyforge.org:/var/www/gforge-projects/highline/" -end - -spec = Gem::Specification.new do |spec| - spec.name = "highline" - spec.version = version - spec.platform = Gem::Platform::RUBY - spec.summary = "HighLine is a high-level command-line IO library." - spec.files = Dir.glob("{examples,lib,test}/**/*.rb"). - delete_if { |item| item.include?("CVS") } + - ["Rakefile", "setup.rb"] - - spec.test_suite_file = "test/ts_all.rb" - spec.has_rdoc = true - spec.extra_rdoc_files = %w{README INSTALL TODO CHANGELOG LICENSE} - spec.rdoc_options << '--title' << 'HighLine Documentation' << - '--main' << 'README' - - spec.require_path = 'lib' - - spec.author = "James Edward Gray II" - spec.email = "james@grayproductions.net" - spec.rubyforge_project = "highline" - spec.homepage = "http://highline.rubyforge.org" - spec.description = <!") - if i == 0 - say( "This should be " + - "<%= color('white on #{c}', :white, :on_#{c}) %>!") - else - say( "This should be " + - "<%= color( '#{colors[i - 1]} on #{c}', - :#{colors[i - 1]}, :on_#{c} ) %>!") - end -end - -# Using color with constants. -say("This should be <%= color('bold', BOLD) %>!") -say("This should be <%= color('underlined', UNDERLINE) %>!") - -# Using constants only. -say("This might even <%= BLINK %>blink<%= CLEAR %>!") - -# It even works with list wrapping. -erb_digits = %w{Zero One Two Three Four} + - ["<%= color('Five', :blue) %%>"] + - %w{Six Seven Eight Nine} -say("<%= list(#{erb_digits.inspect}, :columns_down, 3) %>") diff --git a/vendor/gems/highline-1.4.0/examples/asking_for_arrays.rb b/vendor/gems/highline-1.4.0/examples/asking_for_arrays.rb deleted file mode 100644 index 6c62a0e4..00000000 --- a/vendor/gems/highline-1.4.0/examples/asking_for_arrays.rb +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/local/bin/ruby -w - -# asking_for_arrays.rb -# -# Created by James Edward Gray II on 2005-07-05. -# Copyright 2005 Gray Productions. All rights reserved. - -require "rubygems" -require "highline/import" -require "pp" - -grades = ask( "Enter test scores (or a blank line to quit):", - lambda { |ans| ans =~ /^-?\d+$/ ? Integer(ans) : ans} ) do |q| - q.gather = "" -end - -say("Grades:") -pp grades diff --git a/vendor/gems/highline-1.4.0/examples/basic_usage.rb b/vendor/gems/highline-1.4.0/examples/basic_usage.rb deleted file mode 100644 index 60ecdc18..00000000 --- a/vendor/gems/highline-1.4.0/examples/basic_usage.rb +++ /dev/null @@ -1,75 +0,0 @@ -#!/usr/local/bin/ruby -w - -# basic_usage.rb -# -# Created by James Edward Gray II on 2005-04-28. -# Copyright 2005 Gray Productions. All rights reserved. - -require "rubygems" -require "highline/import" -require "yaml" - -contacts = [ ] - -class NameClass - def self.parse( string ) - if string =~ /^\s*(\w+),\s*(\w+)\s*$/ - self.new($2, $1) - else - raise ArgumentError, "Invalid name format." - end - end - - def initialize(first, last) - @first, @last = first, last - end - - attr_reader :first, :last -end - -begin - entry = Hash.new - - # basic output - say("Enter a contact:") - - # basic input - entry[:name] = ask("Name? (last, first) ", NameClass) do |q| - q.validate = /\A\w+, ?\w+\Z/ - end - entry[:company] = ask("Company? ") { |q| q.default = "none" } - entry[:address] = ask("Address? ") - entry[:city] = ask("City? ") - entry[:state] = ask("State? ") do |q| - q.case = :up - q.validate = /\A[A-Z]{2}\Z/ - end - entry[:zip] = ask("Zip? ") do |q| - q.validate = /\A\d{5}(?:-?\d{4})?\Z/ - end - entry[:phone] = ask( "Phone? ", - lambda { |p| p.delete("^0-9"). - sub(/\A(\d{3})/, '(\1) '). - sub(/(\d{4})\Z/, '-\1') } ) do |q| - q.validate = lambda { |p| p.delete("^0-9").length == 10 } - q.responses[:not_valid] = "Enter a phone numer with area code." - end - entry[:age] = ask("Age? ", Integer) { |q| q.in = 0..105 } - entry[:birthday] = ask("Birthday? ", Date) - entry[:interests] = ask( "Interests? (comma separated list) ", - lambda { |str| str.split(/,\s*/) } ) - entry[:description] = ask("Enter a description for this contact.") do |q| - q.whitespace = :strip_and_collapse - end - - contacts << entry -# shortcut for yes and no questions -end while agree("Enter another contact? ", true) - -if agree("Save these contacts? ", true) - file_name = ask("Enter a file name: ") do |q| - q.validate = /\A\w+\Z/ - q.confirm = true - end - File.open("#{file_name}.yaml", "w") { |file| YAML.dump(contacts, file) } -end diff --git a/vendor/gems/highline-1.4.0/examples/color_scheme.rb b/vendor/gems/highline-1.4.0/examples/color_scheme.rb deleted file mode 100644 index 6d1e0a76..00000000 --- a/vendor/gems/highline-1.4.0/examples/color_scheme.rb +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env ruby -w - -# color_scheme.rb -# -# Created by Jeremy Hinegardner on 2007-01-24 -# Copyright 2007 Jeremy Hinegardner. All rights reserved - -require 'rubygems' -require 'highline/import' - -# Create a color scheme, naming color patterns with symbol names. -ft = HighLine::ColorScheme.new do |cs| - cs[:headline] = [ :bold, :yellow, :on_black ] - cs[:horizontal_line] = [ :bold, :white, :on_blue] - cs[:even_row] = [ :green ] - cs[:odd_row] = [ :magenta ] - end - -# Assign that color scheme to HighLine... -HighLine.color_scheme = ft - -# ...and use it. -say("<%= color('Headline', :headline) %>") -say("<%= color('-'*20, :horizontal_line) %>") - -# Setup a toggle for rows. -i = true -("A".."D").each do |row| - row_color = i ? :even_row : :odd_row - say("<%= color('#{row}', '#{row_color}') %>") - i = !i -end diff --git a/vendor/gems/highline-1.4.0/examples/menus.rb b/vendor/gems/highline-1.4.0/examples/menus.rb deleted file mode 100644 index e31c11df..00000000 --- a/vendor/gems/highline-1.4.0/examples/menus.rb +++ /dev/null @@ -1,65 +0,0 @@ -#!/usr/local/bin/ruby -w - -require "rubygems" -require "highline/import" - -# The old way, using ask() and say()... -choices = %w{ruby python perl} -say("This is the old way using ask() and say()...") -say("Please choose your favorite programming language:") -say(choices.map { |c| " #{c}\n" }.join) - -case ask("? ", choices) -when "ruby" - say("Good choice!") -else - say("Not from around here, are you?") -end - -# The new and improved choose()... -say("\nThis is the new mode (default)...") -choose do |menu| - menu.prompt = "Please choose your favorite programming language? " - - menu.choice :ruby do say("Good choice!") end - menu.choices(:python, :perl) do say("Not from around here, are you?") end -end - -say("\nThis is letter indexing...") -choose do |menu| - menu.index = :letter - menu.index_suffix = ") " - - menu.prompt = "Please choose your favorite programming language? " - - menu.choice :ruby do say("Good choice!") end - menu.choices(:python, :perl) do say("Not from around here, are you?") end -end - -say("\nThis is with a different layout...") -choose do |menu| - menu.layout = :one_line - - menu.header = "Languages" - menu.prompt = "Favorite? " - - menu.choice :ruby do say("Good choice!") end - menu.choices(:python, :perl) do say("Not from around here, are you?") end -end - -say("\nYou can even build shells...") -loop do - choose do |menu| - menu.layout = :menu_only - - menu.shell = true - - menu.choice(:load, "Load a file.") do |command, details| - say("Loading file with options: #{details}...") - end - menu.choice(:save, "Save a file.") do |command, details| - say("Saving file with options: #{details}...") - end - menu.choice(:quit, "Exit program.") { exit } - end -end diff --git a/vendor/gems/highline-1.4.0/examples/overwrite.rb b/vendor/gems/highline-1.4.0/examples/overwrite.rb deleted file mode 100644 index 1ca2db52..00000000 --- a/vendor/gems/highline-1.4.0/examples/overwrite.rb +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/local/bin/ruby -w - -# overwrite.rb -# -# Created by Jeremy Hinegardner on 2007-01-24 -# Copyright 2007 Jeremy Hinegardner. All rights reserved - -require 'rubygems' -require 'highline/import' - -prompt = "here is your password:" -ask( - "#{prompt} <%= color('mypassword', RED, BOLD) %> (Press Any Key to blank) " -) do |q| - q.overwrite = true - q.echo = false # overwrite works best when echo is false. - q.character = true # if this is set to :getc then overwrite does not work -end -say("<%= color('Look! blanked out!', GREEN) %>") diff --git a/vendor/gems/highline-1.4.0/examples/page_and_wrap.rb b/vendor/gems/highline-1.4.0/examples/page_and_wrap.rb deleted file mode 100644 index 3209a4ab..00000000 --- a/vendor/gems/highline-1.4.0/examples/page_and_wrap.rb +++ /dev/null @@ -1,322 +0,0 @@ -#!/usr/local/bin/ruby -w - -# page_and_wrap.rb -# -# Created by James Edward Gray II on 2005-05-07. -# Copyright 2005 Gray Productions. All rights reserved. - -require "rubygems" -require "highline/import" - -$terminal.wrap_at = 80 -$terminal.page_at = 22 - -say(<@question is set before ask() is called, parameters are - # ignored and that object (must be a HighLine::Question) is used to drive - # the process instead. - # - # Raises EOFError if input is exhausted. - # - def ask( question, answer_type = String, &details ) # :yields: question - @question ||= Question.new(question, answer_type, &details) - - return gather if @question.gather - - # readline() needs to handle it's own output, but readline only supports - # full line reading. Therefore if @question.echo is anything but true, - # the prompt will not be issued. And we have to account for that now. - say(@question) unless (@question.readline and @question.echo == true) - begin - @answer = @question.answer_or_default(get_response) - unless @question.valid_answer?(@answer) - explain_error(:not_valid) - raise QuestionError - end - - @answer = @question.convert(@answer) - - if @question.in_range?(@answer) - if @question.confirm - # need to add a layer of scope to ask a question inside a - # question, without destroying instance data - context_change = self.class.new(@input, @output, @wrap_at, @page_at) - if @question.confirm == true - confirm_question = "Are you sure? " - else - # evaluate ERb under initial scope, so it will have - # access to @question and @answer - template = ERB.new(@question.confirm, nil, "%") - confirm_question = template.result(binding) - end - unless context_change.agree(confirm_question) - explain_error(nil) - raise QuestionError - end - end - - @answer - else - explain_error(:not_in_range) - raise QuestionError - end - rescue QuestionError - retry - rescue ArgumentError - explain_error(:invalid_type) - retry - rescue Question::NoAutoCompleteMatch - explain_error(:no_completion) - retry - rescue NameError - raise if $!.is_a?(NoMethodError) - explain_error(:ambiguous_completion) - retry - ensure - @question = nil # Reset Question object. - end - end - - # - # This method is HighLine's menu handler. For simple usage, you can just - # pass all the menu items you wish to display. At that point, choose() will - # build and display a menu, walk the user through selection, and return - # their choice amoung the provided items. You might use this in a case - # statement for quick and dirty menus. - # - # However, choose() is capable of much more. If provided, a block will be - # passed a HighLine::Menu object to configure. Using this method, you can - # customize all the details of menu handling from index display, to building - # a complete shell-like menuing system. See HighLine::Menu for all the - # methods it responds to. - # - # Raises EOFError if input is exhausted. - # - def choose( *items, &details ) - @menu = @question = Menu.new(&details) - @menu.choices(*items) unless items.empty? - - # Set _answer_type_ so we can double as the Question for ask(). - @menu.answer_type = if @menu.shell - lambda do |command| # shell-style selection - first_word = command.to_s.split.first || "" - - options = @menu.options - options.extend(OptionParser::Completion) - answer = options.complete(first_word) - - if answer.nil? - raise Question::NoAutoCompleteMatch - end - - [answer.last, command.sub(/^\s*#{first_word}\s*/, "")] - end - else - @menu.options # normal menu selection, by index or name - end - - # Provide hooks for ERb layouts. - @header = @menu.header - @prompt = @menu.prompt - - if @menu.shell - selected = ask("Ignored", @menu.answer_type) - @menu.select(self, *selected) - else - selected = ask("Ignored", @menu.answer_type) - @menu.select(self, selected) - end - end - - # - # This method provides easy access to ANSI color sequences, without the user - # needing to remember to CLEAR at the end of each sequence. Just pass the - # _string_ to color, followed by a list of _colors_ you would like it to be - # affected by. The _colors_ can be HighLine class constants, or symbols - # (:blue for BLUE, for example). A CLEAR will automatically be embedded to - # the end of the returned String. - # - # This method returns the original _string_ unchanged if HighLine::use_color? - # is +false+. - # - def color( string, *colors ) - return string unless self.class.use_color? - - colors.map! do |c| - if self.class.using_color_scheme? and self.class.color_scheme.include? c - self.class.color_scheme[c] - elsif c.is_a? Symbol - self.class.const_get(c.to_s.upcase) - else - c - end - end - "#{colors.flatten.join}#{string}#{CLEAR}" - end - - # - # This method is a utility for quickly and easily laying out lists. It can - # be accessed within ERb replacements of any text that will be sent to the - # user. - # - # The only required parameter is _items_, which should be the Array of items - # to list. A specified _mode_ controls how that list is formed and _option_ - # has different effects, depending on the _mode_. Recognized modes are: - # - # :columns_across:: _items_ will be placed in columns, flowing - # from left to right. If given, _option_ is the - # number of columns to be used. When absent, - # columns will be determined based on _wrap_at_ - # or a default of 80 characters. - # :columns_down:: Identical to :columns_across, save - # flow goes down. - # :inline:: All _items_ are placed on a single line. The - # last two _items_ are separated by _option_ or - # a default of " or ". All other _items_ are - # separated by ", ". - # :rows:: The default mode. Each of the _items_ is - # placed on it's own line. The _option_ - # parameter is ignored in this mode. - # - # Each member of the _items_ Array is passed through ERb and thus can contain - # their own expansions. Color escape expansions do not contribute to the - # final field width. - # - def list( items, mode = :rows, option = nil ) - items = items.to_ary.map do |item| - ERB.new(item, nil, "%").result(binding) - end - - case mode - when :inline - option = " or " if option.nil? - - case items.size - when 0 - "" - when 1 - items.first - when 2 - "#{items.first}#{option}#{items.last}" - else - items[0..-2].join(", ") + "#{option}#{items.last}" - end - when :columns_across, :columns_down - max_length = actual_length( - items.max { |a, b| actual_length(a) <=> actual_length(b) } - ) - - if option.nil? - limit = @wrap_at || 80 - option = (limit + 2) / (max_length + 2) - end - - items = items.map do |item| - pad = max_length + (item.length - actual_length(item)) - "%-#{pad}s" % item - end - row_count = (items.size / option.to_f).ceil - - if mode == :columns_across - rows = Array.new(row_count) { Array.new } - items.each_with_index do |item, index| - rows[index / option] << item - end - - rows.map { |row| row.join(" ") + "\n" }.join - else - columns = Array.new(option) { Array.new } - items.each_with_index do |item, index| - columns[index / row_count] << item - end - - list = "" - columns.first.size.times do |index| - list << columns.map { |column| column[index] }. - compact.join(" ") + "\n" - end - list - end - else - items.map { |i| "#{i}\n" }.join - end - end - - # - # The basic output method for HighLine objects. If the provided _statement_ - # ends with a space or tab character, a newline will not be appended (output - # will be flush()ed). All other cases are passed straight to Kernel.puts(). - # - # The _statement_ parameter is processed as an ERb template, supporting - # embedded Ruby code. The template is evaluated with a binding inside - # the HighLine instance, providing easy access to the ANSI color constants - # and the HighLine.color() method. - # - def say( statement ) - statement = statement.to_str - return unless statement.length > 0 - - template = ERB.new(statement, nil, "%") - statement = template.result(binding) - - statement = wrap(statement) unless @wrap_at.nil? - statement = page_print(statement) unless @page_at.nil? - - if statement[-1, 1] == " " or statement[-1, 1] == "\t" - @output.print(statement) - @output.flush - else - @output.puts(statement) - end - end - - # - # Set to an integer value to cause HighLine to wrap output lines at the - # indicated character limit. When +nil+, the default, no wrapping occurs. If - # set to :auto, HighLine will attempt to determing the columns - # available for the @output or use a sensible default. - # - def wrap_at=( setting ) - @wrap_at = setting == :auto ? output_cols : setting - end - - # - # Set to an integer value to cause HighLine to page output lines over the - # indicated line limit. When +nil+, the default, no paging occurs. If - # set to :auto, HighLine will attempt to determing the rows available - # for the @output or use a sensible default. - # - def page_at=( setting ) - @page_at = setting == :auto ? output_rows : setting - end - - # - # Returns the number of columns for the console, or a default it they cannot - # be determined. - # - def output_cols - return 80 unless @output.tty? - terminal_size.first - rescue - return 80 - end - - # - # Returns the number of rows for the console, or a default if they cannot be - # determined. - # - def output_rows - return 24 unless @output.tty? - terminal_size.last - rescue - return 24 - end - - private - - # - # A helper method for sending the output stream and error and repeat - # of the question. - # - def explain_error( error ) - say(@question.responses[error]) unless error.nil? - if @question.responses[:ask_on_error] == :question - say(@question) - elsif @question.responses[:ask_on_error] - say(@question.responses[:ask_on_error]) - end - end - - # - # Collects an Array/Hash full of answers as described in - # HighLine::Question.gather(). - # - # Raises EOFError if input is exhausted. - # - def gather( ) - @gather = @question.gather - @answers = [ ] - original_question = @question - - @question.gather = false - - case @gather - when Integer - @answers << ask(@question) - @gather -= 1 - - original_question.question = "" - until @gather.zero? - @question = original_question - @answers << ask(@question) - @gather -= 1 - end - when String, Regexp - @answers << ask(@question) - - original_question.question = "" - until (@gather.is_a?(String) and @answers.last.to_s == @gather) or - (@gather.is_a?(Regexp) and @answers.last.to_s =~ @gather) - @question = original_question - @answers << ask(@question) - end - - @answers.pop - when Hash - @answers = { } - @gather.keys.sort.each do |key| - @question = original_question - @key = key - @answers[key] = ask(@question) - end - end - - @answers - end - - # - # Read a line of input from the input stream and process whitespace as - # requested by the Question object. - # - # If Question's _readline_ property is set, that library will be used to - # fetch input. *WARNING*: This ignores the currently set input stream. - # - # Raises EOFError if input is exhausted. - # - def get_line( ) - if @question.readline - require "readline" # load only if needed - - # capture say()'s work in a String to feed to readline() - old_output = @output - @output = StringIO.new - say(@question) - question = @output.string - @output = old_output - - # prep auto-completion - completions = @question.selection.abbrev - Readline.completion_proc = lambda { |string| completions[string] } - - # work-around ugly readline() warnings - old_verbose = $VERBOSE - $VERBOSE = nil - answer = @question.change_case( - @question.remove_whitespace( - Readline.readline(question, true) ) ) - $VERBOSE = old_verbose - - answer - else - raise EOFError, "The input stream is exhausted." if @@track_eof and - @input.eof? - - @question.change_case(@question.remove_whitespace(@input.gets)) - end - end - - # - # Return a line or character of input, as requested for this question. - # Character input will be returned as a single character String, - # not an Integer. - # - # This question's _first_answer_ will be returned instead of input, if set. - # - # Raises EOFError if input is exhausted. - # - def get_response( ) - return @question.first_answer if @question.first_answer? - - if @question.character.nil? - if @question.echo == true and @question.limit.nil? - get_line - else - raw_no_echo_mode if stty = CHARACTER_MODE == "stty" - - line = "" - backspace_limit = 0 - begin - - while character = (stty ? @input.getc : get_character(@input)) - # honor backspace and delete - if character == 127 or character == 8 - line.slice!(-1, 1) - backspace_limit -= 1 - else - line << character.chr - backspace_limit = line.size - end - # looking for carriage return (decimal 13) or - # newline (decimal 10) in raw input - break if character == 13 or character == 10 or - (@question.limit and line.size == @question.limit) - if @question.echo != false - if character == 127 or character == 8 - # only backspace if we have characters on the line to - # eliminate, otherwise we'll tromp over the prompt - if backspace_limit >= 0 then - @output.print("\b#{ERASE_CHAR}") - else - # do nothing - end - else - @output.print(@question.echo) - end - @output.flush - end - end - ensure - restore_mode if stty - end - if @question.overwrite - @output.print("\r#{ERASE_LINE}") - @output.flush - else - say("\n") - end - - @question.change_case(@question.remove_whitespace(line)) - end - elsif @question.character == :getc - @question.change_case(@input.getc.chr) - else - response = get_character(@input).chr - if @question.overwrite - @output.print("\r#{ERASE_LINE}") - @output.flush - else - echo = if @question.echo == true - response - elsif @question.echo != false - @question.echo - else - "" - end - say("#{echo}\n") - end - @question.change_case(response) - end - end - - # - # Page print a series of at most _page_at_ lines for _output_. After each - # page is printed, HighLine will pause until the user presses enter/return - # then display the next page of data. - # - # Note that the final page of _output_ is *not* printed, but returned - # instead. This is to support any special handling for the final sequence. - # - def page_print( output ) - lines = output.scan(/[^\n]*\n?/) - while lines.size > @page_at - @output.puts lines.slice!(0...@page_at).join - @output.puts - # Return last line if user wants to abort paging - return (["...\n"] + lines.slice(-2,1)).join unless continue_paging? - end - return lines.join - end - - # - # Ask user if they wish to continue paging output. Allows them to type "q" to - # cancel the paging process. - # - def continue_paging? - command = HighLine.new(@input, @output).ask( - "-- press enter/return to continue or q to stop -- " - ) { |q| q.character = true } - command !~ /\A[qQ]\Z/ # Only continue paging if Q was not hit. - end - - # - # Wrap a sequence of _lines_ at _wrap_at_ characters per line. Existing - # newlines will not be affected by this process, but additional newlines - # may be added. - # - def wrap( lines ) - wrapped = [ ] - lines.each do |line| - while line =~ /([^\n]{#{@wrap_at + 1},})/ - search = $1.dup - replace = $1.dup - if index = replace.rindex(" ", @wrap_at) - replace[index, 1] = "\n" - replace.sub!(/\n[ \t]+/, "\n") - line.sub!(search, replace) - else - line[@wrap_at, 0] = "\n" - end - end - wrapped << line - end - return wrapped.join - end - - # - # Returns the length of the passed +string_with_escapes+, minus and color - # sequence escapes. - # - def actual_length( string_with_escapes ) - string_with_escapes.gsub(/\e\[\d{1,2}m/, "").length - end -end diff --git a/vendor/gems/highline-1.4.0/lib/highline/color_scheme.rb b/vendor/gems/highline-1.4.0/lib/highline/color_scheme.rb deleted file mode 100644 index e7cbdf99..00000000 --- a/vendor/gems/highline-1.4.0/lib/highline/color_scheme.rb +++ /dev/null @@ -1,120 +0,0 @@ -#!/usr/local/bin/ruby -w - -# color_scheme.rb -# -# Created by Jeremy Hinegardner on 2007-01-24 -# Copyright 2007. All rights reserved -# -# This is Free Software. See LICENSE and COPYING for details - -require 'highline' - -class HighLine - # - # ColorScheme objects encapsulate a named set of colors to be used in the - # HighLine.colors() method call. For example, by applying a ColorScheme that - # has a :warning color then the following could be used: - # - # colors("This is a warning", :warning) - # - # A ColorScheme contains named sets of HighLine color constants. - # - # Example: Instantiating a color scheme, applying it to HighLine, - # and using it: - # - # ft = HighLine::ColorScheme.new do |cs| - # cs[:headline] = [ :bold, :yellow, :on_black ] - # cs[:horizontal_line] = [ :bold, :white ] - # cs[:even_row] = [ :green ] - # cs[:odd_row] = [ :magenta ] - # end - # - # HighLine.color_scheme = ft - # say("<%= color('Headline', :headline) %>") - # say("<%= color('-'*20, :horizontal_line) %>") - # i = true - # ("A".."D").each do |row| - # if i then - # say("<%= color('#{row}', :even_row ) %>") - # else - # say("<%= color('#{row}', :odd_row) %>") - # end - # i = !i - # end - # - # - class ColorScheme - # - # Create an instance of HighLine::ColorScheme. The customization can - # happen as a passed in Hash or via the yielded block. Key's are - # converted to :symbols and values are converted to HighLine - # constants. - # - def initialize( h = nil ) - @scheme = Hash.new - load_from_hash(h) unless h.nil? - yield self if block_given? - end - - # Load multiple colors from key/value pairs. - def load_from_hash( h ) - h.each_pair do |color_tag, constants| - self[color_tag] = constants - end - end - - # Does this color scheme include the given tag name? - def include?( color_tag ) - @scheme.keys.include?(to_symbol(color_tag)) - end - - # Allow the scheme to be accessed like a Hash. - def []( color_tag ) - @scheme[to_symbol(color_tag)] - end - - # Allow the scheme to be set like a Hash. - def []=( color_tag, constants ) - @scheme[to_symbol(color_tag)] = constants.map { |c| to_constant(c) } - end - - private - - # Return a normalized representation of a color name. - def to_symbol( t ) - t.to_s.downcase - end - - # Return a normalized representation of a color setting. - def to_constant( v ) - v = v.to_s if v.is_a?(Symbol) - if v.is_a?(String) then - HighLine.const_get(v.upcase) - else - v - end - end - end - - # A sample ColorScheme. - class SampleColorScheme < ColorScheme - # - # Builds the sample scheme with settings for :critical, - # :error, :warning, :notice, :info, - # :debug, :row_even, and :row_odd colors. - # - def initialize( h = nil ) - scheme = { - :critical => [ :yellow, :on_red ], - :error => [ :bold, :red ], - :warning => [ :bold, :yellow ], - :notice => [ :bold, :magenta ], - :info => [ :bold, :cyan ], - :debug => [ :bold, :green ], - :row_even => [ :cyan ], - :row_odd => [ :magenta ] - } - super(scheme) - end - end -end diff --git a/vendor/gems/highline-1.4.0/lib/highline/import.rb b/vendor/gems/highline-1.4.0/lib/highline/import.rb deleted file mode 100644 index 579a9734..00000000 --- a/vendor/gems/highline-1.4.0/lib/highline/import.rb +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/local/bin/ruby -w - -# import.rb -# -# Created by James Edward Gray II on 2005-04-26. -# Copyright 2005 Gray Productions. All rights reserved. -# -# This is Free Software. See LICENSE and COPYING for details. - -require "highline" -require "forwardable" - -$terminal = HighLine.new - -# -# require "highline/import" adds shortcut methods to Kernel, making -# agree(), ask(), choose() and say() globally available. This is handy for -# quick and dirty input and output. These methods use the HighLine object in -# the global variable $terminal, which is initialized to used -# $stdin and $stdout (you are free to change this). -# Otherwise, these methods are identical to their HighLine counterparts, see that -# class for detailed explanations. -# -module Kernel - extend Forwardable - def_delegators :$terminal, :agree, :ask, :choose, :say -end - -class Object - # - # Tries this object as a _first_answer_ for a HighLine::Question. See that - # attribute for details. - # - # *Warning*: This Object will be passed to String() before set. - # - def or_ask( *args, &details ) - ask(*args) do |question| - question.first_answer = String(self) unless nil? - - details.call(question) unless details.nil? - end - end -end diff --git a/vendor/gems/highline-1.4.0/lib/highline/menu.rb b/vendor/gems/highline-1.4.0/lib/highline/menu.rb deleted file mode 100644 index ad992ac0..00000000 --- a/vendor/gems/highline-1.4.0/lib/highline/menu.rb +++ /dev/null @@ -1,395 +0,0 @@ -#!/usr/local/bin/ruby -w - -# menu.rb -# -# Created by Gregory Thomas Brown on 2005-05-10. -# Copyright 2005. All rights reserved. -# -# This is Free Software. See LICENSE and COPYING for details. - -require "highline/question" - -class HighLine - # - # Menu objects encapsulate all the details of a call to HighLine.choose(). - # Using the accessors and Menu.choice() and Menu.choices(), the block passed - # to HighLine.choose() can detail all aspects of menu display and control. - # - class Menu < Question - # - # Create an instance of HighLine::Menu. All customization is done - # through the passed block, which should call accessors and choice() and - # choices() as needed to define the Menu. Note that Menus are also - # Questions, so all that functionality is available to the block as - # well. - # - def initialize( ) - # - # Initialize Question objects with ignored values, we'll - # adjust ours as needed. - # - super("Ignored", [ ], &nil) # avoiding passing the block along - - @items = [ ] - @hidden_items = [ ] - @help = Hash.new("There's no help for that topic.") - - @index = :number - @index_suffix = ". " - @select_by = :index_or_name - @flow = :rows - @list_option = nil - @header = nil - @prompt = "? " - @layout = :list - @shell = false - @nil_on_handled = false - - # Override Questions responses, we'll set our own. - @responses = { } - # Context for action code. - @highline = nil - - yield self if block_given? - - init_help if @shell and not @help.empty? - update_responses # rebuild responses based on our settings - end - - # - # An _index_ to append to each menu item in display. See - # Menu.index=() for details. - # - attr_reader :index - # - # The String placed between an _index_ and a menu item. Defaults to - # ". ". Switches to " ", when _index_ is set to a String (like "-"). - # - attr_accessor :index_suffix - # - # The _select_by_ attribute controls how the user is allowed to pick a - # menu item. The available choices are: - # - # :index:: The user is allowed to type the numerical - # or alphetical index for their selection. - # :index_or_name:: Allows both methods from the - # :index option and the - # :name option. - # :name:: Menu items are selected by typing a portion - # of the item name that will be - # auto-completed. - # - attr_accessor :select_by - # - # This attribute is passed directly on as the mode to HighLine.list() by - # all the preset layouts. See that method for appropriate settings. - # - attr_accessor :flow - # - # This setting is passed on as the third parameter to HighLine.list() - # by all the preset layouts. See that method for details of its - # effects. Defaults to +nil+. - # - attr_accessor :list_option - # - # Used by all the preset layouts to display title and/or introductory - # information, when set. Defaults to +nil+. - # - attr_accessor :header - # - # Used by all the preset layouts to ask the actual question to fetch a - # menu selection from the user. Defaults to "? ". - # - attr_accessor :prompt - # - # An ERb _layout_ to use when displaying this Menu object. See - # Menu.layout=() for details. - # - attr_reader :layout - # - # When set to +true+, responses are allowed to be an entire line of - # input, including details beyond the command itself. Only the first - # "word" of input will be matched against the menu choices, but both the - # command selected and the rest of the line will be passed to provided - # action blocks. Defaults to +false+. - # - attr_accessor :shell - # - # When +true+, any selected item handled by provided action code, will - # return +nil+, instead of the results to the action code. This may - # prove handy when dealing with mixed menus where only the names of - # items without any code (and +nil+, of course) will be returned. - # Defaults to +false+. - # - attr_accessor :nil_on_handled - - # - # Adds _name_ to the list of available menu items. Menu items will be - # displayed in the order they are added. - # - # An optional _action_ can be associated with this name and if provided, - # it will be called if the item is selected. The result of the method - # will be returned, unless _nil_on_handled_ is set (when you would get - # +nil+ instead). In _shell_ mode, a provided block will be passed the - # command chosen and any details that followed the command. Otherwise, - # just the command is passed. The @highline variable is set to - # the current HighLine context before the action code is called and can - # thus be used for adding output and the like. - # - def choice( name, help = nil, &action ) - @items << [name, action] - - @help[name.to_s.downcase] = help unless help.nil? - end - - # - # A shortcut for multiple calls to the sister method choice(). Be - # warned: An _action_ set here will apply to *all* provided - # _names_. This is considered to be a feature, so you can easily - # hand-off interface processing to a different chunk of code. - # - def choices( *names, &action ) - names.each { |n| choice(n, &action) } - end - - # Identical to choice(), but the item will not be listed for the user. - def hidden( name, help = nil, &action ) - @hidden_items << [name, action] - - @help[name.to_s.downcase] = help unless help.nil? - end - - # - # Sets the indexing style for this Menu object. Indexes are appended to - # menu items, when displayed in list form. The available settings are: - # - # :number:: Menu items will be indexed numerically, starting - # with 1. This is the default method of indexing. - # :letter:: Items will be indexed alphabetically, starting - # with a. - # :none:: No index will be appended to menu items. - # any String:: Will be used as the literal _index_. - # - # Setting the _index_ to :none a literal String, also adjusts - # _index_suffix_ to a single space and _select_by_ to :none. - # Because of this, you should make a habit of setting the _index_ first. - # - def index=( style ) - @index = style - - # Default settings. - if @index == :none or @index.is_a?(String) - @index_suffix = " " - @select_by = :name - end - end - - # - # Initializes the help system by adding a :help choice, some - # action code, and the default help listing. - # - def init_help( ) - return if @items.include?(:help) - - topics = @help.keys.sort - help_help = @help.include?("help") ? @help["help"] : - "This command will display helpful messages about " + - "functionality, like this one. To see the help for " + - "a specific topic enter:\n\thelp [TOPIC]\nTry asking " + - "for help on any of the following:\n\n" + - "<%= list(#{topics.inspect}, :columns_across) %>" - choice(:help, help_help) do |command, topic| - topic.strip! - topic.downcase! - if topic.empty? - @highline.say(@help["help"]) - else - @highline.say("= #{topic}\n\n#{@help[topic]}") - end - end - end - - # - # Used to set help for arbitrary topics. Use the topic "help" - # to override the default message. - # - def help( topic, help ) - @help[topic] = help - end - - # - # Setting a _layout_ with this method also adjusts some other attributes - # of the Menu object, to ideal defaults for the chosen _layout_. To - # account for that, you probably want to set a _layout_ first in your - # configuration block, if needed. - # - # Accepted settings for _layout_ are: - # - # :list:: The default _layout_. The _header_ if set - # will appear at the top on its own line with - # a trailing colon. Then the list of menu - # items will follow. Finally, the _prompt_ - # will be used as the ask()-like question. - # :one_line:: A shorter _layout_ that fits on one line. - # The _header_ comes first followed by a - # colon and spaces, then the _prompt_ with menu - # items between trailing parenthesis. - # :menu_only:: Just the menu items, followed up by a likely - # short _prompt_. - # any ERb String:: Will be taken as the literal _layout_. This - # String can access @header, - # @menu and @prompt, but is - # otherwise evaluated in the typical HighLine - # context, to provide access to utilities like - # HighLine.list() primarily. - # - # If set to either :one_line, or :menu_only, _index_ - # will default to :none and _flow_ will default to - # :inline. - # - def layout=( new_layout ) - @layout = new_layout - - # Default settings. - case @layout - when :one_line, :menu_only - self.index = :none - @flow = :inline - end - end - - # - # This method returns all possible options for auto-completion, based - # on the settings of _index_ and _select_by_. - # - def options( ) - # add in any hidden menu commands - @items.concat(@hidden_items) - - by_index = if @index == :letter - l_index = "`" - @items.map { "#{l_index.succ!}" } - else - (1 .. @items.size).collect { |s| String(s) } - end - by_name = @items.collect { |c| c.first } - - case @select_by - when :index then - by_index - when :name - by_name - else - by_index + by_name - end - ensure - # make sure the hidden items are removed, before we return - @items.slice!(@items.size - @hidden_items.size, @hidden_items.size) - end - - # - # This method processes the auto-completed user selection, based on the - # rules for this Menu object. If an action was provided for the - # selection, it will be executed as described in Menu.choice(). - # - def select( highline_context, selection, details = nil ) - # add in any hidden menu commands - @items.concat(@hidden_items) - - # Find the selected action. - name, action = if selection =~ /^\d+$/ - @items[selection.to_i - 1] - else - l_index = "`" - index = @items.map { "#{l_index.succ!}" }.index(selection) - @items.find { |c| c.first == selection } or @items[index] - end - - # Run or return it. - if not @nil_on_handled and not action.nil? - @highline = highline_context - if @shell - action.call(name, details) - else - action.call(name) - end - elsif action.nil? - name - else - nil - end - ensure - # make sure the hidden items are removed, before we return - @items.slice!(@items.size - @hidden_items.size, @hidden_items.size) - end - - # - # Allows Menu objects to pass as Arrays, for use with HighLine.list(). - # This method returns all menu items to be displayed, complete with - # indexes. - # - def to_ary( ) - case @index - when :number - @items.map { |c| "#{@items.index(c) + 1}#{@index_suffix}#{c.first}" } - when :letter - l_index = "`" - @items.map { |c| "#{l_index.succ!}#{@index_suffix}#{c.first}" } - when :none - @items.map { |c| "#{c.first}" } - else - @items.map { |c| "#{index}#{@index_suffix}#{c.first}" } - end - end - - # - # Allows Menu to behave as a String, just like Question. Returns the - # _layout_ to be rendered, which is used by HighLine.say(). - # - def to_str( ) - case @layout - when :list - '<%= if @header.nil? then '' else "#{@header}:\n" end %>' + - "<%= list( @menu, #{@flow.inspect}, - #{@list_option.inspect} ) %>" + - "<%= @prompt %>" - when :one_line - '<%= if @header.nil? then '' else "#{@header}: " end %>' + - "<%= @prompt %>" + - "(<%= list( @menu, #{@flow.inspect}, - #{@list_option.inspect} ) %>)" + - "<%= @prompt[/\s*$/] %>" - when :menu_only - "<%= list( @menu, #{@flow.inspect}, - #{@list_option.inspect} ) %><%= @prompt %>" - else - @layout - end - end - - # - # This method will update the intelligent responses to account for - # Menu specific differences. This overrides the work done by - # Question.build_responses(). - # - def update_responses( ) - append_default unless default.nil? - @responses = { :ambiguous_completion => - "Ambiguous choice. " + - "Please choose one of #{options.inspect}.", - :ask_on_error => - "? ", - :invalid_type => - "You must enter a valid #{options}.", - :no_completion => - "You must choose one of " + - "#{options.inspect}.", - :not_in_range => - "Your answer isn't within the expected range " + - "(#{expected_range}).", - :not_valid => - "Your answer isn't valid (must match " + - "#{@validate.inspect})." }.merge(@responses) - end - end -end diff --git a/vendor/gems/highline-1.4.0/lib/highline/question.rb b/vendor/gems/highline-1.4.0/lib/highline/question.rb deleted file mode 100644 index a3d89cc6..00000000 --- a/vendor/gems/highline-1.4.0/lib/highline/question.rb +++ /dev/null @@ -1,462 +0,0 @@ -#!/usr/local/bin/ruby -w - -# question.rb -# -# Created by James Edward Gray II on 2005-04-26. -# Copyright 2005 Gray Productions. All rights reserved. -# -# This is Free Software. See LICENSE and COPYING for details. - -require "optparse" -require "date" -require "pathname" - -class HighLine - # - # Question objects contain all the details of a single invocation of - # HighLine.ask(). The object is initialized by the parameters passed to - # HighLine.ask() and then queried to make sure each step of the input - # process is handled according to the users wishes. - # - class Question - # An internal HighLine error. User code does not need to trap this. - class NoAutoCompleteMatch < StandardError - # do nothing, just creating a unique error type - end - - # - # Create an instance of HighLine::Question. Expects a _question_ to ask - # (can be "") and an _answer_type_ to convert the answer to. - # The _answer_type_ parameter must be a type recongnized by - # Question.convert(). If given, a block is yeilded the new Question - # object to allow custom initializaion. - # - def initialize( question, answer_type ) - # initialize instance data - @question = question - @answer_type = answer_type - - @character = nil - @limit = nil - @echo = true - @readline = false - @whitespace = :strip - @case = nil - @default = nil - @validate = nil - @above = nil - @below = nil - @in = nil - @confirm = nil - @gather = false - @first_answer = nil - @directory = Pathname.new(File.expand_path(File.dirname($0))) - @glob = "*" - @responses = Hash.new - @overwrite = false - - # allow block to override settings - yield self if block_given? - - # finalize responses based on settings - build_responses - end - - # The ERb template of the question to be asked. - attr_accessor :question - # The type that will be used to convert this answer. - attr_accessor :answer_type - # - # Can be set to +true+ to use HighLine's cross-platform character reader - # instead of fetching an entire line of input. (Note: HighLine's - # character reader *ONLY* supports STDIN on Windows and Unix.) Can also - # be set to :getc to use that method on the input stream. - # - # *WARNING*: The _echo_ and _overwrite_ attributes for a question are - # ignored when using the :getc method. - # - attr_accessor :character - # - # Allows you to set a character limit for input. - # - # *WARNING*: This option forces a character by character read. - # - attr_accessor :limit - # - # Can be set to +true+ or +false+ to control whether or not input will - # be echoed back to the user. A setting of +true+ will cause echo to - # match input, but any other true value will be treated as to String to - # echo for each character typed. - # - # This requires HighLine's character reader. See the _character_ - # attribute for details. - # - # *Note*: When using HighLine to manage echo on Unix based systems, we - # recommend installing the termios gem. Without it, it's possible to type - # fast enough to have letters still show up (when reading character by - # character only). - # - attr_accessor :echo - # - # Use the Readline library to fetch input. This allows input editing as - # well as keeping a history. In addition, tab will auto-complete - # within an Array of choices or a file listing. - # - # *WARNING*: This option is incompatible with all of HighLine's - # character reading modes and it causes HighLine to ignore the - # specified _input_ stream. - # - attr_accessor :readline - # - # Used to control whitespace processing for the answer to this question. - # See HighLine::Question.remove_whitespace() for acceptable settings. - # - attr_accessor :whitespace - # - # Used to control character case processing for the answer to this question. - # See HighLine::Question.change_case() for acceptable settings. - # - attr_accessor :case - # Used to provide a default answer to this question. - attr_accessor :default - # - # If set to a Regexp, the answer must match (before type conversion). - # Can also be set to a Proc which will be called with the provided - # answer to validate with a +true+ or +false+ return. - # - attr_accessor :validate - # Used to control range checks for answer. - attr_accessor :above, :below - # If set, answer must pass an include?() check on this object. - attr_accessor :in - # - # Asks a yes or no confirmation question, to ensure a user knows what - # they have just agreed to. If set to +true+ the question will be, - # "Are you sure? " Any other true value for this attribute is assumed - # to be the question to ask. When +false+ or +nil+ (the default), - # answers are not confirmed. - # - attr_accessor :confirm - # - # When set, the user will be prompted for multiple answers which will - # be collected into an Array or Hash and returned as the final answer. - # - # You can set _gather_ to an Integer to have an Array of exactly that - # many answers collected, or a String/Regexp to match an end input which - # will not be returned in the Array. - # - # Optionally _gather_ can be set to a Hash. In this case, the question - # will be asked once for each key and the answers will be returned in a - # Hash, mapped by key. The @key variable is set before each - # question is evaluated, so you can use it in your question. - # - attr_accessor :gather - # - # When set to a non *nil* value, this will be tried as an answer to the - # question. If this answer passes validations, it will become the result - # without the user ever being prompted. Otherwise this value is discarded, - # and this Question is resolved as a normal call to HighLine.ask(). - # - attr_writer :first_answer - # - # The directory from which a user will be allowed to select files, when - # File or Pathname is specified as an _answer_type_. Initially set to - # Pathname.new(File.expand_path(File.dirname($0))). - # - attr_accessor :directory - # - # The glob pattern used to limit file selection when File or Pathname is - # specified as an _answer_type_. Initially set to "*". - # - attr_accessor :glob - # - # A Hash that stores the various responses used by HighLine to notify - # the user. The currently used responses and their purpose are as - # follows: - # - # :ambiguous_completion:: Used to notify the user of an - # ambiguous answer the auto-completion - # system cannot resolve. - # :ask_on_error:: This is the question that will be - # redisplayed to the user in the event - # of an error. Can be set to - # :question to repeat the - # original question. - # :invalid_type:: The error message shown when a type - # conversion fails. - # :no_completion:: Used to notify the user that their - # selection does not have a valid - # auto-completion match. - # :not_in_range:: Used to notify the user that a - # provided answer did not satisfy - # the range requirement tests. - # :not_valid:: The error message shown when - # validation checks fail. - # - attr_reader :responses - # - # When set to +true+ the question is asked, but output does not progress to - # the next line. The Cursor is moved back to the beginning of the question - # line and it is cleared so that all the contents of the line disappear from - # the screen. - # - attr_accessor :overwrite - - # - # Returns the provided _answer_string_ or the default answer for this - # Question if a default was set and the answer is empty. - # - def answer_or_default( answer_string ) - if answer_string.length == 0 and not @default.nil? - @default - else - answer_string - end - end - - # - # Called late in the initialization process to build intelligent - # responses based on the details of this Question object. - # - def build_responses( ) - ### WARNING: This code is quasi-duplicated in ### - ### Menu.update_responses(). Check there too when ### - ### making changes! ### - append_default unless default.nil? - @responses = { :ambiguous_completion => - "Ambiguous choice. " + - "Please choose one of #{@answer_type.inspect}.", - :ask_on_error => - "? ", - :invalid_type => - "You must enter a valid #{@answer_type}.", - :no_completion => - "You must choose one of " + - "#{@answer_type.inspect}.", - :not_in_range => - "Your answer isn't within the expected range " + - "(#{expected_range}).", - :not_valid => - "Your answer isn't valid (must match " + - "#{@validate.inspect})." }.merge(@responses) - ### WARNING: This code is quasi-duplicated in ### - ### Menu.update_responses(). Check there too when ### - ### making changes! ### - end - - # - # Returns the provided _answer_string_ after changing character case by - # the rules of this Question. Valid settings for whitespace are: - # - # +nil+:: Do not alter character case. - # (Default.) - # :up:: Calls upcase(). - # :upcase:: Calls upcase(). - # :down:: Calls downcase(). - # :downcase:: Calls downcase(). - # :capitalize:: Calls capitalize(). - # - # An unrecognized choice (like :none) is treated as +nil+. - # - def change_case( answer_string ) - if [:up, :upcase].include?(@case) - answer_string.upcase - elsif [:down, :downcase].include?(@case) - answer_string.downcase - elsif @case == :capitalize - answer_string.capitalize - else - answer_string - end - end - - # - # Transforms the given _answer_string_ into the expected type for this - # Question. Currently supported conversions are: - # - # [...]:: Answer must be a member of the passed Array. - # Auto-completion is used to expand partial - # answers. - # lambda {...}:: Answer is passed to lambda for conversion. - # Date:: Date.parse() is called with answer. - # DateTime:: DateTime.parse() is called with answer. - # File:: The entered file name is auto-completed in - # terms of _directory_ + _glob_, opened, and - # returned. - # Float:: Answer is converted with Kernel.Float(). - # Integer:: Answer is converted with Kernel.Integer(). - # +nil+:: Answer is left in String format. (Default.) - # Pathname:: Same as File, save that a Pathname object is - # returned. - # String:: Answer is converted with Kernel.String(). - # Regexp:: Answer is fed to Regexp.new(). - # Symbol:: The method to_sym() is called on answer and - # the result returned. - # any other Class:: The answer is passed on to - # Class.parse(). - # - # This method throws ArgumentError, if the conversion cannot be - # completed for any reason. - # - def convert( answer_string ) - if @answer_type.nil? - answer_string - elsif [Float, Integer, String].include?(@answer_type) - Kernel.send(@answer_type.to_s.to_sym, answer_string) - elsif @answer_type == Symbol - answer_string.to_sym - elsif @answer_type == Regexp - Regexp.new(answer_string) - elsif @answer_type.is_a?(Array) or [File, Pathname].include?(@answer_type) - # cheating, using OptionParser's Completion module - choices = selection - choices.extend(OptionParser::Completion) - answer = choices.complete(answer_string) - if answer.nil? - raise NoAutoCompleteMatch - end - if @answer_type.is_a?(Array) - answer.last - elsif @answer_type == File - File.open(File.join(@directory.to_s, answer.last)) - else - Pathname.new(File.join(@directory.to_s, answer.last)) - end - elsif [Date, DateTime].include?(@answer_type) or @answer_type.is_a?(Class) - @answer_type.parse(answer_string) - elsif @answer_type.is_a?(Proc) - @answer_type[answer_string] - end - end - - # Returns a english explination of the current range settings. - def expected_range( ) - expected = [ ] - - expected << "above #{@above}" unless @above.nil? - expected << "below #{@below}" unless @below.nil? - expected << "included in #{@in.inspect}" unless @in.nil? - - case expected.size - when 0 then "" - when 1 then expected.first - when 2 then expected.join(" and ") - else expected[0..-2].join(", ") + ", and #{expected.last}" - end - end - - # Returns _first_answer_, which will be unset following this call. - def first_answer( ) - @first_answer - ensure - @first_answer = nil - end - - # Returns true if _first_answer_ is set. - def first_answer?( ) - not @first_answer.nil? - end - - # - # Returns +true+ if the _answer_object_ is greater than the _above_ - # attribute, less than the _below_ attribute and included?()ed in the - # _in_ attribute. Otherwise, +false+ is returned. Any +nil+ attributes - # are not checked. - # - def in_range?( answer_object ) - (@above.nil? or answer_object > @above) and - (@below.nil? or answer_object < @below) and - (@in.nil? or @in.include?(answer_object)) - end - - # - # Returns the provided _answer_string_ after processing whitespace by - # the rules of this Question. Valid settings for whitespace are: - # - # +nil+:: Do not alter whitespace. - # :strip:: Calls strip(). (Default.) - # :chomp:: Calls chomp(). - # :collapse:: Collapses all whitspace runs to a - # single space. - # :strip_and_collapse:: Calls strip(), then collapses all - # whitspace runs to a single space. - # :chomp_and_collapse:: Calls chomp(), then collapses all - # whitspace runs to a single space. - # :remove:: Removes all whitespace. - # - # An unrecognized choice (like :none) is treated as +nil+. - # - # This process is skipped, for single character input. - # - def remove_whitespace( answer_string ) - if @whitespace.nil? - answer_string - elsif [:strip, :chomp].include?(@whitespace) - answer_string.send(@whitespace) - elsif @whitespace == :collapse - answer_string.gsub(/\s+/, " ") - elsif [:strip_and_collapse, :chomp_and_collapse].include?(@whitespace) - result = answer_string.send(@whitespace.to_s[/^[a-z]+/]) - result.gsub(/\s+/, " ") - elsif @whitespace == :remove - answer_string.gsub(/\s+/, "") - else - answer_string - end - end - - # - # Returns an Array of valid answers to this question. These answers are - # only known when _answer_type_ is set to an Array of choices, File, or - # Pathname. Any other time, this method will return an empty Array. - # - def selection( ) - if @answer_type.is_a?(Array) - @answer_type - elsif [File, Pathname].include?(@answer_type) - Dir[File.join(@directory.to_s, @glob)].map do |file| - File.basename(file) - end - else - [ ] - end - end - - # Stringifies the question to be asked. - def to_str( ) - @question - end - - # - # Returns +true+ if the provided _answer_string_ is accepted by the - # _validate_ attribute or +false+ if it's not. - # - # It's important to realize that an answer is validated after whitespace - # and case handling. - # - def valid_answer?( answer_string ) - @validate.nil? or - (@validate.is_a?(Regexp) and answer_string =~ @validate) or - (@validate.is_a?(Proc) and @validate[answer_string]) - end - - private - - # - # Adds the default choice to the end of question between |...|. - # Trailing whitespace is preserved so the function of HighLine.say() is - # not affected. - # - def append_default( ) - if @question =~ /([\t ]+)\Z/ - @question << "|#{@default}|#{$1}" - elsif @question == "" - @question << "|#{@default}| " - elsif @question[-1, 1] == "\n" - @question[-2, 0] = " |#{@default}|" - else - @question << " |#{@default}|" - end - end - end -end diff --git a/vendor/gems/highline-1.4.0/lib/highline/system_extensions.rb b/vendor/gems/highline-1.4.0/lib/highline/system_extensions.rb deleted file mode 100644 index e08b4772..00000000 --- a/vendor/gems/highline-1.4.0/lib/highline/system_extensions.rb +++ /dev/null @@ -1,130 +0,0 @@ -#!/usr/local/bin/ruby -w - -# system_extensions.rb -# -# Created by James Edward Gray II on 2006-06-14. -# Copyright 2006 Gray Productions. All rights reserved. -# -# This is Free Software. See LICENSE and COPYING for details. - -class HighLine - module SystemExtensions - module_function - - # - # This section builds character reading and terminal size functions - # to suit the proper platform we're running on. Be warned: Here be - # dragons! - # - begin - # Cygwin will look like Windows, but we want to treat it like a Posix OS: - raise LoadError, "Cygwin is a Posix OS." if RUBY_PLATFORM =~ /\bcygwin\b/i - - require "Win32API" # See if we're on Windows. - - CHARACTER_MODE = "Win32API" # For Debugging purposes only. - - # - # Windows savvy getc(). - # - # *WARNING*: This method ignores input and reads one - # character from +STDIN+! - # - def get_character( input = STDIN ) - Win32API.new("crtdll", "_getch", [ ], "L").Call - end - - # A Windows savvy method to fetch the console columns, and rows. - def terminal_size - m_GetStdHandle = Win32API.new( 'kernel32', - 'GetStdHandle', - ['L'], - 'L' ) - m_GetConsoleScreenBufferInfo = Win32API.new( - 'kernel32', 'GetConsoleScreenBufferInfo', ['L', 'P'], 'L' - ) - - format = 'SSSSSssssSS' - buf = ([0] * format.size).pack(format) - stdout_handle = m_GetStdHandle.call(0xFFFFFFF5) - - m_GetConsoleScreenBufferInfo.call(stdout_handle, buf) - bufx, bufy, curx, cury, wattr, - left, top, right, bottom, maxx, maxy = buf.unpack(format) - return right - left + 1, bottom - top + 1 - end - rescue LoadError # If we're not on Windows try... - begin - require "termios" # Unix, first choice. - - CHARACTER_MODE = "termios" # For Debugging purposes only. - - # - # Unix savvy getc(). (First choice.) - # - # *WARNING*: This method requires the "termios" library! - # - def get_character( input = STDIN ) - old_settings = Termios.getattr(input) - - new_settings = old_settings.dup - new_settings.c_lflag &= ~(Termios::ECHO | Termios::ICANON) - new_settings.c_cc[Termios::VMIN] = 1 - - begin - Termios.setattr(input, Termios::TCSANOW, new_settings) - input.getc - ensure - Termios.setattr(input, Termios::TCSANOW, old_settings) - end - end - rescue LoadError # If our first choice fails, default. - CHARACTER_MODE = "stty" # For Debugging purposes only. - - # - # Unix savvy getc(). (Second choice.) - # - # *WARNING*: This method requires the external "stty" program! - # - def get_character( input = STDIN ) - raw_no_echo_mode - - begin - input.getc - ensure - restore_mode - end - end - - # - # Switched the input mode to raw and disables echo. - # - # *WARNING*: This method requires the external "stty" program! - # - def raw_no_echo_mode - @state = `stty -g` - system "stty raw -echo cbreak isig" - end - - # - # Restores a previously saved input mode. - # - # *WARNING*: This method requires the external "stty" program! - # - def restore_mode - system "stty #{@state}" - end - end - - # A Unix savvy method to fetch the console columns, and rows. - def terminal_size - if /solaris/ =~ RUBY_PLATFORM and - `stty` =~ /\brows = (\d+).*\bcolumns = (\d+)/ - [$2, $1].map { |c| x.to_i } - else - `stty size`.split.map { |x| x.to_i }.reverse - end - end - end - end -end diff --git a/vendor/gems/highline-1.4.0/setup.rb b/vendor/gems/highline-1.4.0/setup.rb deleted file mode 100644 index 0807023d..00000000 --- a/vendor/gems/highline-1.4.0/setup.rb +++ /dev/null @@ -1,1360 +0,0 @@ -# -# setup.rb -# -# Copyright (c) 2000-2004 Minero Aoki -# -# This program is free software. -# You can distribute/modify this program under the terms of -# the GNU LGPL, Lesser General Public License version 2.1. -# - -unless Enumerable.method_defined?(:map) # Ruby 1.4.6 - module Enumerable - alias map collect - end -end - -unless File.respond_to?(:read) # Ruby 1.6 - def File.read(fname) - open(fname) {|f| - return f.read - } - end -end - -def File.binread(fname) - open(fname, 'rb') {|f| - return f.read - } -end - -# for corrupted windows stat(2) -def File.dir?(path) - File.directory?((path[-1,1] == '/') ? path : path + '/') -end - - -class SetupError < StandardError; end - -def setup_rb_error(msg) - raise SetupError, msg -end - -# -# Config -# - -if arg = ARGV.detect {|arg| /\A--rbconfig=/ =~ arg } - ARGV.delete(arg) - require arg.split(/=/, 2)[1] - $".push 'rbconfig.rb' -else - require 'rbconfig' -end - -def multipackage_install? - FileTest.directory?(File.dirname($0) + '/packages') -end - - -class ConfigItem - def initialize(name, template, default, desc) - @name = name.freeze - @template = template - @value = default - @default = default.dup.freeze - @description = desc - end - - attr_reader :name - attr_reader :description - - attr_accessor :default - alias help_default default - - def help_opt - "--#{@name}=#{@template}" - end - - def value - @value - end - - def eval(table) - @value.gsub(%r<\$([^/]+)>) { table[$1] } - end - - def set(val) - @value = check(val) - end - - private - - def check(val) - setup_rb_error "config: --#{name} requires argument" unless val - val - end -end - -class BoolItem < ConfigItem - def config_type - 'bool' - end - - def help_opt - "--#{@name}" - end - - private - - def check(val) - return 'yes' unless val - unless /\A(y(es)?|n(o)?|t(rue)?|f(alse))\z/i =~ val - setup_rb_error "config: --#{@name} accepts only yes/no for argument" - end - (/\Ay(es)?|\At(rue)/i =~ value) ? 'yes' : 'no' - end -end - -class PathItem < ConfigItem - def config_type - 'path' - end - - private - - def check(path) - setup_rb_error "config: --#{@name} requires argument" unless path - path[0,1] == '$' ? path : File.expand_path(path) - end -end - -class ProgramItem < ConfigItem - def config_type - 'program' - end -end - -class SelectItem < ConfigItem - def initialize(name, template, default, desc) - super - @ok = template.split('/') - end - - def config_type - 'select' - end - - private - - def check(val) - unless @ok.include?(val.strip) - setup_rb_error "config: use --#{@name}=#{@template} (#{val})" - end - val.strip - end -end - -class PackageSelectionItem < ConfigItem - def initialize(name, template, default, help_default, desc) - super name, template, default, desc - @help_default = help_default - end - - attr_reader :help_default - - def config_type - 'package' - end - - private - - def check(val) - unless File.dir?("packages/#{val}") - setup_rb_error "config: no such package: #{val}" - end - val - end -end - -class ConfigTable_class - - def initialize(items) - @items = items - @table = {} - items.each do |i| - @table[i.name] = i - end - ALIASES.each do |ali, name| - @table[ali] = @table[name] - end - end - - include Enumerable - - def each(&block) - @items.each(&block) - end - - def key?(name) - @table.key?(name) - end - - def lookup(name) - @table[name] or raise ArgumentError, "no such config item: #{name}" - end - - def add(item) - @items.push item - @table[item.name] = item - end - - def remove(name) - item = lookup(name) - @items.delete_if {|i| i.name == name } - @table.delete_if {|name, i| i.name == name } - item - end - - def new - dup() - end - - def savefile - '.config' - end - - def load - begin - t = dup() - File.foreach(savefile()) do |line| - k, v = *line.split(/=/, 2) - t[k] = v.strip - end - t - rescue Errno::ENOENT - setup_rb_error $!.message + "#{File.basename($0)} config first" - end - end - - def save - @items.each {|i| i.value } - File.open(savefile(), 'w') {|f| - @items.each do |i| - f.printf "%s=%s\n", i.name, i.value if i.value - end - } - end - - def [](key) - lookup(key).eval(self) - end - - def []=(key, val) - lookup(key).set val - end - -end - -c = ::Config::CONFIG - -rubypath = c['bindir'] + '/' + c['ruby_install_name'] - -major = c['MAJOR'].to_i -minor = c['MINOR'].to_i -teeny = c['TEENY'].to_i -version = "#{major}.#{minor}" - -# ruby ver. >= 1.4.4? -newpath_p = ((major >= 2) or - ((major == 1) and - ((minor >= 5) or - ((minor == 4) and (teeny >= 4))))) - -if c['rubylibdir'] - # V < 1.6.3 - _stdruby = c['rubylibdir'] - _siteruby = c['sitedir'] - _siterubyver = c['sitelibdir'] - _siterubyverarch = c['sitearchdir'] -elsif newpath_p - # 1.4.4 <= V <= 1.6.3 - _stdruby = "$prefix/lib/ruby/#{version}" - _siteruby = c['sitedir'] - _siterubyver = "$siteruby/#{version}" - _siterubyverarch = "$siterubyver/#{c['arch']}" -else - # V < 1.4.4 - _stdruby = "$prefix/lib/ruby/#{version}" - _siteruby = "$prefix/lib/ruby/#{version}/site_ruby" - _siterubyver = _siteruby - _siterubyverarch = "$siterubyver/#{c['arch']}" -end -libdir = '-* dummy libdir *-' -stdruby = '-* dummy rubylibdir *-' -siteruby = '-* dummy site_ruby *-' -siterubyver = '-* dummy site_ruby version *-' -parameterize = lambda {|path| - path.sub(/\A#{Regexp.quote(c['prefix'])}/, '$prefix')\ - .sub(/\A#{Regexp.quote(libdir)}/, '$libdir')\ - .sub(/\A#{Regexp.quote(stdruby)}/, '$stdruby')\ - .sub(/\A#{Regexp.quote(siteruby)}/, '$siteruby')\ - .sub(/\A#{Regexp.quote(siterubyver)}/, '$siterubyver') -} -libdir = parameterize.call(c['libdir']) -stdruby = parameterize.call(_stdruby) -siteruby = parameterize.call(_siteruby) -siterubyver = parameterize.call(_siterubyver) -siterubyverarch = parameterize.call(_siterubyverarch) - -if arg = c['configure_args'].split.detect {|arg| /--with-make-prog=/ =~ arg } - makeprog = arg.sub(/'/, '').split(/=/, 2)[1] -else - makeprog = 'make' -end - -common_conf = [ - PathItem.new('prefix', 'path', c['prefix'], - 'path prefix of target environment'), - PathItem.new('bindir', 'path', parameterize.call(c['bindir']), - 'the directory for commands'), - PathItem.new('libdir', 'path', libdir, - 'the directory for libraries'), - PathItem.new('datadir', 'path', parameterize.call(c['datadir']), - 'the directory for shared data'), - PathItem.new('mandir', 'path', parameterize.call(c['mandir']), - 'the directory for man pages'), - PathItem.new('sysconfdir', 'path', parameterize.call(c['sysconfdir']), - 'the directory for man pages'), - PathItem.new('stdruby', 'path', stdruby, - 'the directory for standard ruby libraries'), - PathItem.new('siteruby', 'path', siteruby, - 'the directory for version-independent aux ruby libraries'), - PathItem.new('siterubyver', 'path', siterubyver, - 'the directory for aux ruby libraries'), - PathItem.new('siterubyverarch', 'path', siterubyverarch, - 'the directory for aux ruby binaries'), - PathItem.new('rbdir', 'path', '$siterubyver', - 'the directory for ruby scripts'), - PathItem.new('sodir', 'path', '$siterubyverarch', - 'the directory for ruby extentions'), - PathItem.new('rubypath', 'path', rubypath, - 'the path to set to #! line'), - ProgramItem.new('rubyprog', 'name', rubypath, - 'the ruby program using for installation'), - ProgramItem.new('makeprog', 'name', makeprog, - 'the make program to compile ruby extentions'), - SelectItem.new('shebang', 'all/ruby/never', 'ruby', - 'shebang line (#!) editing mode'), - BoolItem.new('without-ext', 'yes/no', 'no', - 'does not compile/install ruby extentions') -] -class ConfigTable_class # open again - ALIASES = { - 'std-ruby' => 'stdruby', - 'site-ruby-common' => 'siteruby', # For backward compatibility - 'site-ruby' => 'siterubyver', # For backward compatibility - 'bin-dir' => 'bindir', - 'bin-dir' => 'bindir', - 'rb-dir' => 'rbdir', - 'so-dir' => 'sodir', - 'data-dir' => 'datadir', - 'ruby-path' => 'rubypath', - 'ruby-prog' => 'rubyprog', - 'ruby' => 'rubyprog', - 'make-prog' => 'makeprog', - 'make' => 'makeprog' - } -end -multipackage_conf = [ - PackageSelectionItem.new('with', 'name,name...', '', 'ALL', - 'package names that you want to install'), - PackageSelectionItem.new('without', 'name,name...', '', 'NONE', - 'package names that you do not want to install') -] -if multipackage_install? - ConfigTable = ConfigTable_class.new(common_conf + multipackage_conf) -else - ConfigTable = ConfigTable_class.new(common_conf) -end - - -module MetaConfigAPI - - def eval_file_ifexist(fname) - instance_eval File.read(fname), fname, 1 if File.file?(fname) - end - - def config_names - ConfigTable.map {|i| i.name } - end - - def config?(name) - ConfigTable.key?(name) - end - - def bool_config?(name) - ConfigTable.lookup(name).config_type == 'bool' - end - - def path_config?(name) - ConfigTable.lookup(name).config_type == 'path' - end - - def value_config?(name) - case ConfigTable.lookup(name).config_type - when 'bool', 'path' - true - else - false - end - end - - def add_config(item) - ConfigTable.add item - end - - def add_bool_config(name, default, desc) - ConfigTable.add BoolItem.new(name, 'yes/no', default ? 'yes' : 'no', desc) - end - - def add_path_config(name, default, desc) - ConfigTable.add PathItem.new(name, 'path', default, desc) - end - - def set_config_default(name, default) - ConfigTable.lookup(name).default = default - end - - def remove_config(name) - ConfigTable.remove(name) - end - -end - - -# -# File Operations -# - -module FileOperations - - def mkdir_p(dirname, prefix = nil) - dirname = prefix + File.expand_path(dirname) if prefix - $stderr.puts "mkdir -p #{dirname}" if verbose? - return if no_harm? - - # does not check '/'... it's too abnormal case - dirs = File.expand_path(dirname).split(%r<(?=/)>) - if /\A[a-z]:\z/i =~ dirs[0] - disk = dirs.shift - dirs[0] = disk + dirs[0] - end - dirs.each_index do |idx| - path = dirs[0..idx].join('') - Dir.mkdir path unless File.dir?(path) - end - end - - def rm_f(fname) - $stderr.puts "rm -f #{fname}" if verbose? - return if no_harm? - - if File.exist?(fname) or File.symlink?(fname) - File.chmod 0777, fname - File.unlink fname - end - end - - def rm_rf(dn) - $stderr.puts "rm -rf #{dn}" if verbose? - return if no_harm? - - Dir.chdir dn - Dir.foreach('.') do |fn| - next if fn == '.' - next if fn == '..' - if File.dir?(fn) - verbose_off { - rm_rf fn - } - else - verbose_off { - rm_f fn - } - end - end - Dir.chdir '..' - Dir.rmdir dn - end - - def move_file(src, dest) - File.unlink dest if File.exist?(dest) - begin - File.rename src, dest - rescue - File.open(dest, 'wb') {|f| f.write File.binread(src) } - File.chmod File.stat(src).mode, dest - File.unlink src - end - end - - def install(from, dest, mode, prefix = nil) - $stderr.puts "install #{from} #{dest}" if verbose? - return if no_harm? - - realdest = prefix ? prefix + File.expand_path(dest) : dest - realdest = File.join(realdest, File.basename(from)) if File.dir?(realdest) - str = File.binread(from) - if diff?(str, realdest) - verbose_off { - rm_f realdest if File.exist?(realdest) - } - File.open(realdest, 'wb') {|f| - f.write str - } - File.chmod mode, realdest - - File.open("#{objdir_root()}/InstalledFiles", 'a') {|f| - if prefix - f.puts realdest.sub(prefix, '') - else - f.puts realdest - end - } - end - end - - def diff?(new_content, path) - return true unless File.exist?(path) - new_content != File.binread(path) - end - - def command(str) - $stderr.puts str if verbose? - system str or raise RuntimeError, "'system #{str}' failed" - end - - def ruby(str) - command config('rubyprog') + ' ' + str - end - - def make(task = '') - command config('makeprog') + ' ' + task - end - - def extdir?(dir) - File.exist?(dir + '/MANIFEST') - end - - def all_files_in(dirname) - Dir.open(dirname) {|d| - return d.select {|ent| File.file?("#{dirname}/#{ent}") } - } - end - - REJECT_DIRS = %w( - CVS SCCS RCS CVS.adm .svn - ) - - def all_dirs_in(dirname) - Dir.open(dirname) {|d| - return d.select {|n| File.dir?("#{dirname}/#{n}") } - %w(. ..) - REJECT_DIRS - } - end - -end - - -# -# Main Installer -# - -module HookUtils - - def run_hook(name) - try_run_hook "#{curr_srcdir()}/#{name}" or - try_run_hook "#{curr_srcdir()}/#{name}.rb" - end - - def try_run_hook(fname) - return false unless File.file?(fname) - begin - instance_eval File.read(fname), fname, 1 - rescue - setup_rb_error "hook #{fname} failed:\n" + $!.message - end - true - end - -end - - -module HookScriptAPI - - def get_config(key) - @config[key] - end - - alias config get_config - - def set_config(key, val) - @config[key] = val - end - - # - # srcdir/objdir (works only in the package directory) - # - - #abstract srcdir_root - #abstract objdir_root - #abstract relpath - - def curr_srcdir - "#{srcdir_root()}/#{relpath()}" - end - - def curr_objdir - "#{objdir_root()}/#{relpath()}" - end - - def srcfile(path) - "#{curr_srcdir()}/#{path}" - end - - def srcexist?(path) - File.exist?(srcfile(path)) - end - - def srcdirectory?(path) - File.dir?(srcfile(path)) - end - - def srcfile?(path) - File.file? srcfile(path) - end - - def srcentries(path = '.') - Dir.open("#{curr_srcdir()}/#{path}") {|d| - return d.to_a - %w(. ..) - } - end - - def srcfiles(path = '.') - srcentries(path).select {|fname| - File.file?(File.join(curr_srcdir(), path, fname)) - } - end - - def srcdirectories(path = '.') - srcentries(path).select {|fname| - File.dir?(File.join(curr_srcdir(), path, fname)) - } - end - -end - - -class ToplevelInstaller - - Version = '3.3.1' - Copyright = 'Copyright (c) 2000-2004 Minero Aoki' - - TASKS = [ - [ 'all', 'do config, setup, then install' ], - [ 'config', 'saves your configurations' ], - [ 'show', 'shows current configuration' ], - [ 'setup', 'compiles ruby extentions and others' ], - [ 'install', 'installs files' ], - [ 'clean', "does `make clean' for each extention" ], - [ 'distclean',"does `make distclean' for each extention" ] - ] - - def ToplevelInstaller.invoke - instance().invoke - end - - @singleton = nil - - def ToplevelInstaller.instance - @singleton ||= new(File.dirname($0)) - @singleton - end - - include MetaConfigAPI - - def initialize(ardir_root) - @config = nil - @options = { 'verbose' => true } - @ardir = File.expand_path(ardir_root) - end - - def inspect - "#<#{self.class} #{__id__()}>" - end - - def invoke - run_metaconfigs - case task = parsearg_global() - when nil, 'all' - @config = load_config('config') - parsearg_config - init_installers - exec_config - exec_setup - exec_install - else - @config = load_config(task) - __send__ "parsearg_#{task}" - init_installers - __send__ "exec_#{task}" - end - end - - def run_metaconfigs - eval_file_ifexist "#{@ardir}/metaconfig" - end - - def load_config(task) - case task - when 'config' - ConfigTable.new - when 'clean', 'distclean' - if File.exist?(ConfigTable.savefile) - then ConfigTable.load - else ConfigTable.new - end - else - ConfigTable.load - end - end - - def init_installers - @installer = Installer.new(@config, @options, @ardir, File.expand_path('.')) - end - - # - # Hook Script API bases - # - - def srcdir_root - @ardir - end - - def objdir_root - '.' - end - - def relpath - '.' - end - - # - # Option Parsing - # - - def parsearg_global - valid_task = /\A(?:#{TASKS.map {|task,desc| task }.join '|'})\z/ - - while arg = ARGV.shift - case arg - when /\A\w+\z/ - setup_rb_error "invalid task: #{arg}" unless valid_task =~ arg - return arg - - when '-q', '--quiet' - @options['verbose'] = false - - when '--verbose' - @options['verbose'] = true - - when '-h', '--help' - print_usage $stdout - exit 0 - - when '-v', '--version' - puts "#{File.basename($0)} version #{Version}" - exit 0 - - when '--copyright' - puts Copyright - exit 0 - - else - setup_rb_error "unknown global option '#{arg}'" - end - end - - nil - end - - - def parsearg_no_options - unless ARGV.empty? - setup_rb_error "#{task}: unknown options: #{ARGV.join ' '}" - end - end - - alias parsearg_show parsearg_no_options - alias parsearg_setup parsearg_no_options - alias parsearg_clean parsearg_no_options - alias parsearg_distclean parsearg_no_options - - def parsearg_config - re = /\A--(#{ConfigTable.map {|i| i.name }.join('|')})(?:=(.*))?\z/ - @options['config-opt'] = [] - - while i = ARGV.shift - if /\A--?\z/ =~ i - @options['config-opt'] = ARGV.dup - break - end - m = re.match(i) or setup_rb_error "config: unknown option #{i}" - name, value = *m.to_a[1,2] - @config[name] = value - end - end - - def parsearg_install - @options['no-harm'] = false - @options['install-prefix'] = '' - while a = ARGV.shift - case a - when /\A--no-harm\z/ - @options['no-harm'] = true - when /\A--prefix=(.*)\z/ - path = $1 - path = File.expand_path(path) unless path[0,1] == '/' - @options['install-prefix'] = path - else - setup_rb_error "install: unknown option #{a}" - end - end - end - - def print_usage(out) - out.puts 'Typical Installation Procedure:' - out.puts " $ ruby #{File.basename $0} config" - out.puts " $ ruby #{File.basename $0} setup" - out.puts " # ruby #{File.basename $0} install (may require root privilege)" - out.puts - out.puts 'Detailed Usage:' - out.puts " ruby #{File.basename $0} " - out.puts " ruby #{File.basename $0} [] []" - - fmt = " %-24s %s\n" - out.puts - out.puts 'Global options:' - out.printf fmt, '-q,--quiet', 'suppress message outputs' - out.printf fmt, ' --verbose', 'output messages verbosely' - out.printf fmt, '-h,--help', 'print this message' - out.printf fmt, '-v,--version', 'print version and quit' - out.printf fmt, ' --copyright', 'print copyright and quit' - out.puts - out.puts 'Tasks:' - TASKS.each do |name, desc| - out.printf fmt, name, desc - end - - fmt = " %-24s %s [%s]\n" - out.puts - out.puts 'Options for CONFIG or ALL:' - ConfigTable.each do |item| - out.printf fmt, item.help_opt, item.description, item.help_default - end - out.printf fmt, '--rbconfig=path', 'rbconfig.rb to load',"running ruby's" - out.puts - out.puts 'Options for INSTALL:' - out.printf fmt, '--no-harm', 'only display what to do if given', 'off' - out.printf fmt, '--prefix=path', 'install path prefix', '$prefix' - out.puts - end - - # - # Task Handlers - # - - def exec_config - @installer.exec_config - @config.save # must be final - end - - def exec_setup - @installer.exec_setup - end - - def exec_install - @installer.exec_install - end - - def exec_show - ConfigTable.each do |i| - printf "%-20s %s\n", i.name, i.value - end - end - - def exec_clean - @installer.exec_clean - end - - def exec_distclean - @installer.exec_distclean - end - -end - - -class ToplevelInstallerMulti < ToplevelInstaller - - include HookUtils - include HookScriptAPI - include FileOperations - - def initialize(ardir) - super - @packages = all_dirs_in("#{@ardir}/packages") - raise 'no package exists' if @packages.empty? - end - - def run_metaconfigs - eval_file_ifexist "#{@ardir}/metaconfig" - @packages.each do |name| - eval_file_ifexist "#{@ardir}/packages/#{name}/metaconfig" - end - end - - def init_installers - @installers = {} - @packages.each do |pack| - @installers[pack] = Installer.new(@config, @options, - "#{@ardir}/packages/#{pack}", - "packages/#{pack}") - end - - with = extract_selection(config('with')) - without = extract_selection(config('without')) - @selected = @installers.keys.select {|name| - (with.empty? or with.include?(name)) \ - and not without.include?(name) - } - end - - def extract_selection(list) - a = list.split(/,/) - a.each do |name| - setup_rb_error "no such package: #{name}" unless @installers.key?(name) - end - a - end - - def print_usage(f) - super - f.puts 'Inluded packages:' - f.puts ' ' + @packages.sort.join(' ') - f.puts - end - - # - # multi-package metaconfig API - # - - attr_reader :packages - - def declare_packages(list) - raise 'package list is empty' if list.empty? - list.each do |name| - raise "directory packages/#{name} does not exist"\ - unless File.dir?("#{@ardir}/packages/#{name}") - end - @packages = list - end - - # - # Task Handlers - # - - def exec_config - run_hook 'pre-config' - each_selected_installers {|inst| inst.exec_config } - run_hook 'post-config' - @config.save # must be final - end - - def exec_setup - run_hook 'pre-setup' - each_selected_installers {|inst| inst.exec_setup } - run_hook 'post-setup' - end - - def exec_install - run_hook 'pre-install' - each_selected_installers {|inst| inst.exec_install } - run_hook 'post-install' - end - - def exec_clean - rm_f ConfigTable.savefile - run_hook 'pre-clean' - each_selected_installers {|inst| inst.exec_clean } - run_hook 'post-clean' - end - - def exec_distclean - rm_f ConfigTable.savefile - run_hook 'pre-distclean' - each_selected_installers {|inst| inst.exec_distclean } - run_hook 'post-distclean' - end - - # - # lib - # - - def each_selected_installers - Dir.mkdir 'packages' unless File.dir?('packages') - @selected.each do |pack| - $stderr.puts "Processing the package `#{pack}' ..." if @options['verbose'] - Dir.mkdir "packages/#{pack}" unless File.dir?("packages/#{pack}") - Dir.chdir "packages/#{pack}" - yield @installers[pack] - Dir.chdir '../..' - end - end - - def verbose? - @options['verbose'] - end - - def no_harm? - @options['no-harm'] - end - -end - - -class Installer - - FILETYPES = %w( bin lib ext data ) - - include HookScriptAPI - include HookUtils - include FileOperations - - def initialize(config, opt, srcroot, objroot) - @config = config - @options = opt - @srcdir = File.expand_path(srcroot) - @objdir = File.expand_path(objroot) - @currdir = '.' - end - - def inspect - "#<#{self.class} #{File.basename(@srcdir)}>" - end - - # - # Hook Script API base methods - # - - def srcdir_root - @srcdir - end - - def objdir_root - @objdir - end - - def relpath - @currdir - end - - # - # configs/options - # - - def no_harm? - @options['no-harm'] - end - - def verbose? - @options['verbose'] - end - - def verbose_off - begin - save, @options['verbose'] = @options['verbose'], false - yield - ensure - @options['verbose'] = save - end - end - - # - # TASK config - # - - def exec_config - exec_task_traverse 'config' - end - - def config_dir_bin(rel) - end - - def config_dir_lib(rel) - end - - def config_dir_ext(rel) - extconf if extdir?(curr_srcdir()) - end - - def extconf - opt = @options['config-opt'].join(' ') - command "#{config('rubyprog')} #{curr_srcdir()}/extconf.rb #{opt}" - end - - def config_dir_data(rel) - end - - # - # TASK setup - # - - def exec_setup - exec_task_traverse 'setup' - end - - def setup_dir_bin(rel) - all_files_in(curr_srcdir()).each do |fname| - adjust_shebang "#{curr_srcdir()}/#{fname}" - end - end - - def adjust_shebang(path) - return if no_harm? - tmpfile = File.basename(path) + '.tmp' - begin - File.open(path, 'rb') {|r| - first = r.gets - return unless File.basename(config('rubypath')) == 'ruby' - return unless File.basename(first.sub(/\A\#!/, '').split[0]) == 'ruby' - $stderr.puts "adjusting shebang: #{File.basename(path)}" if verbose? - File.open(tmpfile, 'wb') {|w| - w.print first.sub(/\A\#!\s*\S+/, '#! ' + config('rubypath')) - w.write r.read - } - move_file tmpfile, File.basename(path) - } - ensure - File.unlink tmpfile if File.exist?(tmpfile) - end - end - - def setup_dir_lib(rel) - end - - def setup_dir_ext(rel) - make if extdir?(curr_srcdir()) - end - - def setup_dir_data(rel) - end - - # - # TASK install - # - - def exec_install - rm_f 'InstalledFiles' - exec_task_traverse 'install' - end - - def install_dir_bin(rel) - install_files collect_filenames_auto(), "#{config('bindir')}/#{rel}", 0755 - end - - def install_dir_lib(rel) - install_files ruby_scripts(), "#{config('rbdir')}/#{rel}", 0644 - end - - def install_dir_ext(rel) - return unless extdir?(curr_srcdir()) - install_files ruby_extentions('.'), - "#{config('sodir')}/#{File.dirname(rel)}", - 0555 - end - - def install_dir_data(rel) - install_files collect_filenames_auto(), "#{config('datadir')}/#{rel}", 0644 - end - - def install_files(list, dest, mode) - mkdir_p dest, @options['install-prefix'] - list.each do |fname| - install fname, dest, mode, @options['install-prefix'] - end - end - - def ruby_scripts - collect_filenames_auto().select {|n| /\.rb\z/ =~ n } - end - - # picked up many entries from cvs-1.11.1/src/ignore.c - reject_patterns = %w( - core RCSLOG tags TAGS .make.state - .nse_depinfo #* .#* cvslog.* ,* .del-* *.olb - *~ *.old *.bak *.BAK *.orig *.rej _$* *$ - - *.org *.in .* - ) - mapping = { - '.' => '\.', - '$' => '\$', - '#' => '\#', - '*' => '.*' - } - REJECT_PATTERNS = Regexp.new('\A(?:' + - reject_patterns.map {|pat| - pat.gsub(/[\.\$\#\*]/) {|ch| mapping[ch] } - }.join('|') + - ')\z') - - def collect_filenames_auto - mapdir((existfiles() - hookfiles()).reject {|fname| - REJECT_PATTERNS =~ fname - }) - end - - def existfiles - all_files_in(curr_srcdir()) | all_files_in('.') - end - - def hookfiles - %w( pre-%s post-%s pre-%s.rb post-%s.rb ).map {|fmt| - %w( config setup install clean ).map {|t| sprintf(fmt, t) } - }.flatten - end - - def mapdir(filelist) - filelist.map {|fname| - if File.exist?(fname) # objdir - fname - else # srcdir - File.join(curr_srcdir(), fname) - end - } - end - - def ruby_extentions(dir) - Dir.open(dir) {|d| - ents = d.select {|fname| /\.#{::Config::CONFIG['DLEXT']}\z/ =~ fname } - if ents.empty? - setup_rb_error "no ruby extention exists: 'ruby #{$0} setup' first" - end - return ents - } - end - - # - # TASK clean - # - - def exec_clean - exec_task_traverse 'clean' - rm_f ConfigTable.savefile - rm_f 'InstalledFiles' - end - - def clean_dir_bin(rel) - end - - def clean_dir_lib(rel) - end - - def clean_dir_ext(rel) - return unless extdir?(curr_srcdir()) - make 'clean' if File.file?('Makefile') - end - - def clean_dir_data(rel) - end - - # - # TASK distclean - # - - def exec_distclean - exec_task_traverse 'distclean' - rm_f ConfigTable.savefile - rm_f 'InstalledFiles' - end - - def distclean_dir_bin(rel) - end - - def distclean_dir_lib(rel) - end - - def distclean_dir_ext(rel) - return unless extdir?(curr_srcdir()) - make 'distclean' if File.file?('Makefile') - end - - # - # lib - # - - def exec_task_traverse(task) - run_hook "pre-#{task}" - FILETYPES.each do |type| - if config('without-ext') == 'yes' and type == 'ext' - $stderr.puts 'skipping ext/* by user option' if verbose? - next - end - traverse task, type, "#{task}_dir_#{type}" - end - run_hook "post-#{task}" - end - - def traverse(task, rel, mid) - dive_into(rel) { - run_hook "pre-#{task}" - __send__ mid, rel.sub(%r[\A.*?(?:/|\z)], '') - all_dirs_in(curr_srcdir()).each do |d| - traverse task, "#{rel}/#{d}", mid - end - run_hook "post-#{task}" - } - end - - def dive_into(rel) - return unless File.dir?("#{@srcdir}/#{rel}") - - dir = File.basename(rel) - Dir.mkdir dir unless File.dir?(dir) - prevdir = Dir.pwd - Dir.chdir dir - $stderr.puts '---> ' + rel if verbose? - @currdir = rel - yield - Dir.chdir prevdir - $stderr.puts '<--- ' + rel if verbose? - @currdir = File.dirname(rel) - end - -end - - -if $0 == __FILE__ - begin - if multipackage_install? - ToplevelInstallerMulti.invoke - else - ToplevelInstaller.invoke - end - rescue SetupError - raise if $DEBUG - $stderr.puts $!.message - $stderr.puts "Try 'ruby #{$0} --help' for detailed usage." - exit 1 - end -end diff --git a/vendor/gems/highline-1.4.0/test/tc_color_scheme.rb b/vendor/gems/highline-1.4.0/test/tc_color_scheme.rb deleted file mode 100644 index cb5cbd0e..00000000 --- a/vendor/gems/highline-1.4.0/test/tc_color_scheme.rb +++ /dev/null @@ -1,56 +0,0 @@ -#!/usr/local/bin/ruby -w - -# tc_color_scheme.rb -# -# Created by Jeremy Hinegardner on 2007-01-24. -# Copyright 2007 Jeremy Hinegardner. All rights reserved. -# -# This is Free Software. See LICENSE and COPYING for details. - -require "test/unit" - -require "highline" -require "stringio" - -class TestColorScheme < Test::Unit::TestCase - def setup - @input = StringIO.new - @output = StringIO.new - @terminal = HighLine.new(@input, @output) - - @old_color_scheme = HighLine.color_scheme - end - - def teardown - HighLine.color_scheme = @old_color_scheme - end - - def test_using_color_scheme - assert_equal(false,HighLine.using_color_scheme?) - - HighLine.color_scheme = HighLine::ColorScheme.new - assert_equal(true,HighLine.using_color_scheme?) - end - - def test_scheme - HighLine.color_scheme = HighLine::SampleColorScheme.new - - @terminal.say("This should be <%= color('warning yellow', :warning) %>.") - assert_equal("This should be \e[1m\e[33mwarning yellow\e[0m.\n",@output.string) - @output.rewind - - @terminal.say("This should be <%= color('warning yellow', 'warning') %>.") - assert_equal("This should be \e[1m\e[33mwarning yellow\e[0m.\n",@output.string) - @output.rewind - - @terminal.say("This should be <%= color('warning yellow', 'WarNing') %>.") - assert_equal("This should be \e[1m\e[33mwarning yellow\e[0m.\n",@output.string) - @output.rewind - - # turn it back off, should raise an exception - HighLine.color_scheme = @old_color_scheme - assert_raises(NameError) { - @terminal.say("This should be <%= color('nothing at all', :error) %>.") - } - end -end diff --git a/vendor/gems/highline-1.4.0/test/tc_highline.rb b/vendor/gems/highline-1.4.0/test/tc_highline.rb deleted file mode 100644 index 0ab35f6a..00000000 --- a/vendor/gems/highline-1.4.0/test/tc_highline.rb +++ /dev/null @@ -1,815 +0,0 @@ -#!/usr/local/bin/ruby -w - -# tc_highline.rb -# -# Created by James Edward Gray II on 2005-04-26. -# Copyright 2005 Gray Productions. All rights reserved. -# -# This is Free Software. See LICENSE and COPYING for details. - -require "test/unit" - -require "highline" -require "stringio" - -if HighLine::CHARACTER_MODE == "Win32API" - class HighLine - # Override Windows' character reading so it's not tied to STDIN. - def get_character( input = STDIN ) - input.getc - end - end -end - -class TestHighLine < Test::Unit::TestCase - def setup - @input = StringIO.new - @output = StringIO.new - @terminal = HighLine.new(@input, @output) - end - - def test_agree - @input << "y\nyes\nYES\nHell no!\nNo\n" - @input.rewind - - assert_equal(true, @terminal.agree("Yes or no? ")) - assert_equal(true, @terminal.agree("Yes or no? ")) - assert_equal(true, @terminal.agree("Yes or no? ")) - assert_equal(false, @terminal.agree("Yes or no? ")) - - @input.truncate(@input.rewind) - @input << "yellow" - @input.rewind - - assert_equal(true, @terminal.agree("Yes or no? ", :getc)) - end - - def test_ask - name = "James Edward Gray II" - @input << name << "\n" - @input.rewind - - assert_equal(name, @terminal.ask("What is your name? ")) - - assert_raise(EOFError) { @terminal.ask("Any input left? ") } - end - - def test_bug_fixes - # auto-complete bug - @input << "ruby\nRuby\n" - @input.rewind - - languages = [:Perl, :Python, :Ruby] - answer = @terminal.ask( "What is your favorite programming language? ", - languages ) - assert_equal(languages.last, answer) - - @input.truncate(@input.rewind) - @input << "ruby\n" - @input.rewind - - answer = @terminal.ask( "What is your favorite programming language? ", - languages ) do |q| - q.case = :capitalize - end - assert_equal(languages.last, answer) - - # poor auto-complete error message - @input.truncate(@input.rewind) - @input << "lisp\nruby\n" - @input.rewind - @output.truncate(@output.rewind) - - answer = @terminal.ask( "What is your favorite programming language? ", - languages ) do |q| - q.case = :capitalize - end - assert_equal(languages.last, answer) - assert_equal( "What is your favorite programming language? " + - "You must choose one of [:Perl, :Python, :Ruby].\n" + - "? ", @output.string ) - end - - def test_case_changes - @input << "jeg2\n" - @input.rewind - - answer = @terminal.ask("Enter your initials ") do |q| - q.case = :up - end - assert_equal("JEG2", answer) - - @input.truncate(@input.rewind) - @input << "cRaZY\n" - @input.rewind - - answer = @terminal.ask("Enter a search string: ") do |q| - q.case = :down - end - assert_equal("crazy", answer) - end - - def test_character_echo - @input << "password\r" - @input.rewind - - answer = @terminal.ask("Please enter your password: ") do |q| - q.echo = "*" - end - assert_equal("password", answer) - assert_equal("Please enter your password: ********\n", @output.string) - - @input.truncate(@input.rewind) - @input << "2" - @input.rewind - @output.truncate(@output.rewind) - - answer = @terminal.ask( "Select an option (1, 2 or 3): ", - Integer ) do |q| - q.echo = "*" - q.character = true - end - assert_equal(2, answer) - assert_equal("Select an option (1, 2 or 3): *\n", @output.string) - end - - def test_backspace_does_not_enter_prompt - @input << "\b\b" - @input.rewind - answer = @terminal.ask("Please enter your password: ") do |q| - q.echo = "*" - end - assert_equal("", answer) - assert_equal("Please enter your password: \n",@output.string) - end - - def test_readline_on_non_echo_question_has_prompt - @input << "you can't see me" - @input.rewind - answer = @terminal.ask("Please enter some hidden text: ") do |q| - q.readline = true - q.echo = "*" - end - assert_equal("you can't see me", answer) - assert_equal("Please enter some hidden text: ****************\n",@output.string) - end - - def test_character_reading - # WARNING: This method does NOT cover Unix and Windows savvy testing! - @input << "12345" - @input.rewind - - answer = @terminal.ask("Enter a single digit: ", Integer) do |q| - q.character = :getc - end - assert_equal(1, answer) - end - - def test_color - @terminal.say("This should be <%= BLUE %>blue<%= CLEAR %>!") - assert_equal("This should be \e[34mblue\e[0m!\n", @output.string) - - @output.truncate(@output.rewind) - - @terminal.say( "This should be " + - "<%= BOLD + ON_WHITE %>bold on white<%= CLEAR %>!" ) - assert_equal( "This should be \e[1m\e[47mbold on white\e[0m!\n", - @output.string ) - - @output.truncate(@output.rewind) - - @terminal.say("This should be <%= color('cyan', CYAN) %>!") - assert_equal("This should be \e[36mcyan\e[0m!\n", @output.string) - - @output.truncate(@output.rewind) - - @terminal.say( "This should be " + - "<%= color('blinking on red', :blink, :on_red) %>!" ) - assert_equal( "This should be \e[5m\e[41mblinking on red\e[0m!\n", - @output.string ) - - @output.truncate(@output.rewind) - - # turn off color - old_setting = HighLine.use_color? - assert_nothing_raised(Exception) { HighLine.use_color = false } - @terminal.say("This should be <%= color('cyan', CYAN) %>!") - assert_equal("This should be cyan!\n", @output.string) - HighLine.use_color = old_setting - end - - def test_confirm - @input << "junk.txt\nno\nsave.txt\ny\n" - @input.rewind - - answer = @terminal.ask("Enter a filename: ") do |q| - q.confirm = "Are you sure you want to overwrite <%= @answer %>? " - q.responses[:ask_on_error] = :question - end - assert_equal("save.txt", answer) - assert_equal( "Enter a filename: " + - "Are you sure you want to overwrite junk.txt? " + - "Enter a filename: " + - "Are you sure you want to overwrite save.txt? ", - @output.string ) - - @input.truncate(@input.rewind) - @input << "junk.txt\nyes\nsave.txt\nn\n" - @input.rewind - @output.truncate(@output.rewind) - - answer = @terminal.ask("Enter a filename: ") do |q| - q.confirm = "Are you sure you want to overwrite <%= @answer %>? " - end - assert_equal("junk.txt", answer) - assert_equal( "Enter a filename: " + - "Are you sure you want to overwrite junk.txt? ", - @output.string ) - end - - def test_defaults - @input << "\nNo Comment\n" - @input.rewind - - answer = @terminal.ask("Are you sexually active? ") do |q| - q.validate = /\Ay(?:es)?|no?|no comment\Z/i - end - assert_equal("No Comment", answer) - - @input.truncate(@input.rewind) - @input << "\nYes\n" - @input.rewind - @output.truncate(@output.rewind) - - answer = @terminal.ask("Are you sexually active? ") do |q| - q.default = "No Comment" - q.validate = /\Ay(?:es)?|no?|no comment\Z/i - end - assert_equal("No Comment", answer) - assert_equal( "Are you sexually active? |No Comment| ", - @output.string ) - end - - def test_empty - @input << "\n" - @input.rewind - - answer = @terminal.ask("") do |q| - q.default = "yes" - q.validate = /\Ay(?:es)?|no?\Z/i - end - assert_equal("yes", answer) - end - - def test_erb - @terminal.say( "The integers from 1 to 10 are:\n" + - "% (1...10).each do |n|\n" + - "\t<%= n %>,\n" + - "% end\n" + - "\tand 10" ) - assert_equal( "The integers from 1 to 10 are:\n" + - "\t1,\n\t2,\n\t3,\n\t4,\n\t5,\n" + - "\t6,\n\t7,\n\t8,\n\t9,\n\tand 10\n", - @output.string ) - end - - def test_files - @input << "#{File.basename(__FILE__)[0, 5]}\n" - @input.rewind - - file = @terminal.ask("Select a file: ", File) do |q| - q.directory = File.expand_path(File.dirname(__FILE__)) - q.glob = "*.rb" - end - assert_instance_of(File, file) - assert_equal("#!/usr/local/bin/ruby -w\n", file.gets) - assert_equal("\n", file.gets) - assert_equal("# tc_highline.rb\n", file.gets) - file.close - - @input.rewind - - pathname = @terminal.ask("Select a file: ", Pathname) do |q| - q.directory = File.expand_path(File.dirname(__FILE__)) - q.glob = "*.rb" - end - assert_instance_of(Pathname, pathname) - assert_equal(File.size(__FILE__), pathname.size) - end - - def test_gather - @input << "James\nDana\nStorm\nGypsy\n\n" - @input.rewind - - answers = @terminal.ask("Enter four names:") do |q| - q.gather = 4 - end - assert_equal(%w{James Dana Storm Gypsy}, answers) - assert_equal("\n", @input.gets) - assert_equal("Enter four names:\n", @output.string) - - @input.rewind - - answers = @terminal.ask("Enter four names:") do |q| - q.gather = "" - end - assert_equal(%w{James Dana Storm Gypsy}, answers) - - @input.rewind - - answers = @terminal.ask("Enter four names:") do |q| - q.gather = /^\s*$/ - end - assert_equal(%w{James Dana Storm Gypsy}, answers) - - @input.truncate(@input.rewind) - @input << "29\n49\n30\n" - @input.rewind - @output.truncate(@output.rewind) - - answers = @terminal.ask("<%= @key %>: ", Integer) do |q| - q.gather = { "Age" => 0, "Wife's Age" => 0, "Father's Age" => 0} - end - assert_equal( { "Age" => 29, "Wife's Age" => 30, "Father's Age" => 49}, - answers ) - assert_equal("Age: Father's Age: Wife's Age: ", @output.string) - end - - def test_lists - digits = %w{Zero One Two Three Four Five Six Seven Eight Nine} - erb_digits = digits.dup - erb_digits[erb_digits.index("Five")] = "<%= color('Five', :blue) %%>" - - @terminal.say("<%= list(#{digits.inspect}) %>") - assert_equal(digits.map { |d| "#{d}\n" }.join, @output.string) - - @output.truncate(@output.rewind) - - @terminal.say("<%= list(#{digits.inspect}, :inline) %>") - assert_equal( digits[0..-2].join(", ") + " or #{digits.last}\n", - @output.string ) - - @output.truncate(@output.rewind) - - @terminal.say("<%= list(#{digits.inspect}, :inline, ' and ') %>") - assert_equal( digits[0..-2].join(", ") + " and #{digits.last}\n", - @output.string ) - - @output.truncate(@output.rewind) - - @terminal.say("<%= list(#{digits.inspect}, :columns_down, 3) %>") - assert_equal( "Zero Four Eight\n" + - "One Five Nine \n" + - "Two Six \n" + - "Three Seven\n", - @output.string ) - - @output.truncate(@output.rewind) - - @terminal.say("<%= list(#{erb_digits.inspect}, :columns_down, 3) %>") - assert_equal( "Zero Four Eight\n" + - "One \e[34mFive\e[0m Nine \n" + - "Two Six \n" + - "Three Seven\n", - @output.string ) - - colums_of_twenty = ["12345678901234567890"] * 5 - - @output.truncate(@output.rewind) - - @terminal.say("<%= list(#{colums_of_twenty.inspect}, :columns_down) %>") - assert_equal( "12345678901234567890 12345678901234567890 " + - "12345678901234567890\n" + - "12345678901234567890 12345678901234567890\n", - @output.string ) - - @output.truncate(@output.rewind) - - @terminal.say("<%= list(#{digits.inspect}, :columns_across, 3) %>") - assert_equal( "Zero One Two \n" + - "Three Four Five \n" + - "Six Seven Eight\n" + - "Nine \n", - @output.string ) - - colums_of_twenty.pop - - @output.truncate(@output.rewind) - - @terminal.say("<%= list( #{colums_of_twenty.inspect}, :columns_across ) %>") - assert_equal( "12345678901234567890 12345678901234567890 " + - "12345678901234567890\n" + - "12345678901234567890\n", - @output.string ) - end - - def test_mode - assert(%w[Win32API termios stty].include?(HighLine::CHARACTER_MODE)) - end - - class NameClass - def self.parse( string ) - if string =~ /^\s*(\w+),\s*(\w+)\s+(\w+)\s*$/ - self.new($2, $3, $1) - else - raise ArgumentError, "Invalid name format." - end - end - - def initialize(first, middle, last) - @first, @middle, @last = first, middle, last - end - - attr_reader :first, :middle, :last - end - - def test_my_class_conversion - @input << "Gray, James Edward\n" - @input.rewind - - answer = @terminal.ask("Your name? ", NameClass) do |q| - q.validate = lambda do |name| - names = name.split(/,\s*/) - return false unless names.size == 2 - return false if names.first =~ /\s/ - names.last.split.size == 2 - end - end - assert_instance_of(NameClass, answer) - assert_equal("Gray", answer.last) - assert_equal("James", answer.first) - assert_equal("Edward", answer.middle) - end - - def test_no_echo - @input << "password\r" - @input.rewind - - answer = @terminal.ask("Please enter your password: ") do |q| - q.echo = false - end - assert_equal("password", answer) - assert_equal("Please enter your password: \n", @output.string) - - @input.rewind - @output.truncate(@output.rewind) - - answer = @terminal.ask("Pick a letter or number: ") do |q| - q.character = true - q.echo = false - end - assert_equal("p", answer) - assert_equal("a", @input.getc.chr) - assert_equal("Pick a letter or number: \n", @output.string) - end - - def test_paging - @terminal.page_at = 22 - - @input << "\n\n" - @input.rewind - - @terminal.say((1..50).map { |n| "This is line #{n}.\n"}.join) - assert_equal( (1..22).map { |n| "This is line #{n}.\n"}.join + - "\n-- press enter/return to continue or q to stop -- \n\n" + - (23..44).map { |n| "This is line #{n}.\n"}.join + - "\n-- press enter/return to continue or q to stop -- \n\n" + - (45..50).map { |n| "This is line #{n}.\n"}.join, - @output.string ) - end - - def test_range_requirements - @input << "112\n-541\n28\n" - @input.rewind - - answer = @terminal.ask("Tell me your age.", Integer) do |q| - q.in = 0..105 - end - assert_equal(28, answer) - assert_equal( "Tell me your age.\n" + - "Your answer isn't within the expected range " + - "(included in 0..105).\n" + - "? " + - "Your answer isn't within the expected range " + - "(included in 0..105).\n" + - "? ", @output.string ) - - @input.truncate(@input.rewind) - @input << "1\n-541\n28\n" - @input.rewind - @output.truncate(@output.rewind) - - answer = @terminal.ask("Tell me your age.", Integer) do |q| - q.above = 3 - end - assert_equal(28, answer) - assert_equal( "Tell me your age.\n" + - "Your answer isn't within the expected range " + - "(above 3).\n" + - "? " + - "Your answer isn't within the expected range " + - "(above 3).\n" + - "? ", @output.string ) - - @input.truncate(@input.rewind) - @input << "1\n28\n-541\n" - @input.rewind - @output.truncate(@output.rewind) - - answer = @terminal.ask("Lowest numer you can think of?", Integer) do |q| - q.below = 0 - end - assert_equal(-541, answer) - assert_equal( "Lowest numer you can think of?\n" + - "Your answer isn't within the expected range " + - "(below 0).\n" + - "? " + - "Your answer isn't within the expected range " + - "(below 0).\n" + - "? ", @output.string ) - - @input.truncate(@input.rewind) - @input << "1\n-541\n6\n" - @input.rewind - @output.truncate(@output.rewind) - - answer = @terminal.ask("Enter a low even number: ", Integer) do |q| - q.above = 0 - q.below = 10 - q.in = [2, 4, 6, 8] - end - assert_equal(6, answer) - assert_equal( "Enter a low even number: " + - "Your answer isn't within the expected range " + - "(above 0, below 10, and included in [2, 4, 6, 8]).\n" + - "? " + - "Your answer isn't within the expected range " + - "(above 0, below 10, and included in [2, 4, 6, 8]).\n" + - "? ", @output.string ) - end - - def test_reask - number = 61676 - @input << "Junk!\n" << number << "\n" - @input.rewind - - answer = @terminal.ask("Favorite number? ", Integer) - assert_kind_of(Integer, number) - assert_instance_of(Fixnum, number) - assert_equal(number, answer) - assert_equal( "Favorite number? " + - "You must enter a valid Integer.\n" + - "? ", @output.string ) - - @input.rewind - @output.truncate(@output.rewind) - - answer = @terminal.ask("Favorite number? ", Integer) do |q| - q.responses[:ask_on_error] = :question - q.responses[:invalid_type] = "Not a valid number!" - end - assert_kind_of(Integer, number) - assert_instance_of(Fixnum, number) - assert_equal(number, answer) - assert_equal( "Favorite number? " + - "Not a valid number!\n" + - "Favorite number? ", @output.string ) - - @input.truncate(@input.rewind) - @input << "gen\ngene\n" - @input.rewind - @output.truncate(@output.rewind) - - answer = @terminal.ask("Select a mode: ", [:generate, :gentle]) - assert_instance_of(Symbol, answer) - assert_equal(:generate, answer) - assert_equal( "Select a mode: " + - "Ambiguous choice. " + - "Please choose one of [:generate, :gentle].\n" + - "? ", @output.string ) - end - - def test_response_embedding - @input << "112\n-541\n28\n" - @input.rewind - - answer = @terminal.ask("Tell me your age.", Integer) do |q| - q.in = 0..105 - q.responses[:not_in_range] = "Need a <%= @question.answer_type %>" + - " <%= @question.expected_range %>." - end - assert_equal(28, answer) - assert_equal( "Tell me your age.\n" + - "Need a Integer included in 0..105.\n" + - "? " + - "Need a Integer included in 0..105.\n" + - "? ", @output.string ) - end - - def test_say - @terminal.say("This will have a newline.") - assert_equal("This will have a newline.\n", @output.string) - - @output.truncate(@output.rewind) - - @terminal.say("This will also have one newline.\n") - assert_equal("This will also have one newline.\n", @output.string) - - @output.truncate(@output.rewind) - - @terminal.say("This will not have a newline. ") - assert_equal("This will not have a newline. ", @output.string) - end - - def test_type_conversion - number = 61676 - @input << number << "\n" - @input.rewind - - answer = @terminal.ask("Favorite number? ", Integer) - assert_kind_of(Integer, answer) - assert_instance_of(Fixnum, answer) - assert_equal(number, answer) - - @input.truncate(@input.rewind) - number = 1_000_000_000_000_000_000_000_000_000_000 - @input << number << "\n" - @input.rewind - - answer = @terminal.ask("Favorite number? ", Integer) - assert_kind_of(Integer, answer) - assert_instance_of(Bignum, answer) - assert_equal(number, answer) - - @input.truncate(@input.rewind) - number = 10.5002 - @input << number << "\n" - @input.rewind - - answer = @terminal.ask( "Favorite number? ", - lambda { |n| n.to_f.abs.round } ) - assert_kind_of(Integer, answer) - assert_instance_of(Fixnum, answer) - assert_equal(11, answer) - - @input.truncate(@input.rewind) - animal = :dog - @input << animal << "\n" - @input.rewind - - answer = @terminal.ask("Favorite animal? ", Symbol) - assert_instance_of(Symbol, answer) - assert_equal(animal, answer) - - @input.truncate(@input.rewind) - @input << "6/16/76\n" - @input.rewind - - answer = @terminal.ask("Enter your birthday.", Date) - assert_instance_of(Date, answer) - assert_equal(16, answer.day) - assert_equal(6, answer.month) - assert_equal(76, answer.year) - - @input.truncate(@input.rewind) - pattern = "^yes|no$" - @input << pattern << "\n" - @input.rewind - - answer = @terminal.ask("Give me a pattern to match with: ", Regexp) - assert_instance_of(Regexp, answer) - assert_equal(/#{pattern}/, answer) - - @input.truncate(@input.rewind) - @input << "gen\n" - @input.rewind - - answer = @terminal.ask("Select a mode: ", [:generate, :run]) - assert_instance_of(Symbol, answer) - assert_equal(:generate, answer) - end - - def test_validation - @input << "system 'rm -rf /'\n105\n0b101_001\n" - @input.rewind - - answer = @terminal.ask("Enter a binary number: ") do |q| - q.validate = /\A(?:0b)?[01_]+\Z/ - end - assert_equal("0b101_001", answer) - assert_equal( "Enter a binary number: " + - "Your answer isn't valid " + - "(must match /\\A(?:0b)?[01_]+\\Z/).\n" + - "? " + - "Your answer isn't valid " + - "(must match /\\A(?:0b)?[01_]+\\Z/).\n" + - "? ", @output.string ) - - @input.truncate(@input.rewind) - @input << "Gray II, James Edward\n" + - "Gray, Dana Ann Leslie\n" + - "Gray, James Edward\n" - @input.rewind - - answer = @terminal.ask("Your name? ") do |q| - q.validate = lambda do |name| - names = name.split(/,\s*/) - return false unless names.size == 2 - return false if names.first =~ /\s/ - names.last.split.size == 2 - end - end - assert_equal("Gray, James Edward", answer) - end - - def test_whitespace - @input << " A lot\tof \t space\t \there! \n" - @input.rewind - - answer = @terminal.ask("Enter a whitespace filled string: ") do |q| - q.whitespace = :chomp - end - assert_equal(" A lot\tof \t space\t \there! ", answer) - - @input.rewind - - answer = @terminal.ask("Enter a whitespace filled string: ") - assert_equal("A lot\tof \t space\t \there!", answer) - - @input.rewind - - answer = @terminal.ask("Enter a whitespace filled string: ") do |q| - q.whitespace = :strip_and_collapse - end - assert_equal("A lot of space here!", answer) - - @input.rewind - - answer = @terminal.ask("Enter a whitespace filled string: ") do |q| - q.whitespace = :remove - end - assert_equal("Alotofspacehere!", answer) - - @input.rewind - - answer = @terminal.ask("Enter a whitespace filled string: ") do |q| - q.whitespace = :none - end - assert_equal(" A lot\tof \t space\t \there! \n", answer) - end - - def test_wrap - @terminal.wrap_at = 80 - - @terminal.say("This is a very short line.") - assert_equal("This is a very short line.\n", @output.string) - - @output.truncate(@output.rewind) - - @terminal.say( "This is a long flowing paragraph meant to span " + - "several lines. This text should definitely be " + - "wrapped at the set limit, in the result. Your code " + - "does well with things like this.\n\n" + - " * This is a simple embedded list.\n" + - " * You're code should not mess with this...\n" + - " * Because it's already formatted correctly and " + - "does not\n" + - " exceed the limit!" ) - assert_equal( "This is a long flowing paragraph meant to span " + - "several lines. This text should\n" + - "definitely be wrapped at the set limit, in the " + - "result. Your code does well with\n" + - "things like this.\n\n" + - " * This is a simple embedded list.\n" + - " * You're code should not mess with this...\n" + - " * Because it's already formatted correctly and does " + - "not\n" + - " exceed the limit!\n", @output.string ) - - @output.truncate(@output.rewind) - - @terminal.say("-=" * 50) - assert_equal(("-=" * 40 + "\n") + ("-=" * 10 + "\n"), @output.string) - end - - def test_track_eof - assert_raise(EOFError) { @terminal.ask("Any input left? ") } - - # turn EOF tracking - old_setting = HighLine.track_eof? - assert_nothing_raised(Exception) { HighLine.track_eof = false } - begin - @terminal.ask("And now? ") # this will still blow up, nothing available - rescue - assert_not_equal(EOFError, $!.class) # but HighLine's safe guards are off - end - HighLine.track_eof = old_setting - end - - def test_version - assert_not_nil(HighLine::VERSION) - assert_instance_of(String, HighLine::VERSION) - assert(HighLine::VERSION.frozen?) - assert_match(/\A\d\.\d\.\d\Z/, HighLine::VERSION) - end -end diff --git a/vendor/gems/highline-1.4.0/test/tc_import.rb b/vendor/gems/highline-1.4.0/test/tc_import.rb deleted file mode 100644 index 005d5a92..00000000 --- a/vendor/gems/highline-1.4.0/test/tc_import.rb +++ /dev/null @@ -1,54 +0,0 @@ -#!/usr/local/bin/ruby -w - -# tc_import.rb -# -# Created by James Edward Gray II on 2005-04-26. -# Copyright 2005 Gray Productions. All rights reserved. -# -# This is Free Software. See LICENSE and COPYING for details. - -require "test/unit" - -require "highline/import" -require "stringio" - -class TestImport < Test::Unit::TestCase - def test_import - assert_respond_to(self, :agree) - assert_respond_to(self, :ask) - assert_respond_to(self, :choose) - assert_respond_to(self, :say) - end - - def test_or_ask - old_terminal = $terminal - - input = StringIO.new - output = StringIO.new - $terminal = HighLine.new(input, output) - - input << "10\n" - input.rewind - - assert_equal(10, nil.or_ask("How much? ", Integer)) - - input.rewind - - assert_equal(20, "20".or_ask("How much? ", Integer)) - assert_equal(20, 20.or_ask("How much? ", Integer)) - - assert_equal(10, 20.or_ask("How much? ", Integer) { |q| q.in = 1..10 }) - ensure - $terminal = old_terminal - end - - def test_redirection - old_terminal = $terminal - - $terminal = HighLine.new(nil, (output = StringIO.new)) - say("Testing...") - assert_equal("Testing...\n", output.string) - ensure - $terminal = old_terminal - end -end diff --git a/vendor/gems/highline-1.4.0/test/tc_menu.rb b/vendor/gems/highline-1.4.0/test/tc_menu.rb deleted file mode 100644 index fee18714..00000000 --- a/vendor/gems/highline-1.4.0/test/tc_menu.rb +++ /dev/null @@ -1,429 +0,0 @@ -#!/usr/local/bin/ruby -w - -# tc_menu.rb -# -# Created by Gregory Thomas Brown on 2005-05-10. -# Copyright 2005. All rights reserved. -# -# This is Free Software. See LICENSE and COPYING for details. - -require "test/unit" - -require "highline" -require "stringio" - -class TestMenu < Test::Unit::TestCase - def setup - @input = StringIO.new - @output = StringIO.new - @terminal = HighLine.new(@input, @output) - end - - def test_choices - @input << "2\n" - @input.rewind - - output = @terminal.choose do |menu| - menu.choices("Sample1", "Sample2", "Sample3") - end - assert_equal("Sample2", output) - end - - def test_flow - @input << "Sample1\n" - @input.rewind - - @terminal.choose do |menu| - # Default: menu.flow = :rows - - menu.choice "Sample1" - menu.choice "Sample2" - menu.choice "Sample3" - end - assert_equal("1. Sample1\n2. Sample2\n3. Sample3\n? ", @output.string) - - @output.truncate(@output.rewind) - @input.rewind - - @terminal.choose do |menu| - menu.flow = :columns_across - - menu.choice "Sample1" - menu.choice "Sample2" - menu.choice "Sample3" - end - assert_equal("1. Sample1 2. Sample2 3. Sample3\n? ", @output.string) - - @output.truncate(@output.rewind) - @input.rewind - - @terminal.choose do |menu| - menu.flow = :inline - menu.index = :none - - menu.choice "Sample1" - menu.choice "Sample2" - menu.choice "Sample3" - end - assert_equal("Sample1, Sample2 or Sample3? ", @output.string) - end - - def test_help - @input << "help\nhelp load\nhelp rules\nhelp missing\n" - @input.rewind - - 4.times do - @terminal.choose do |menu| - menu.shell = true - - menu.choice(:load, "Load a file.") - menu.choice(:save, "Save data in file.") - menu.choice(:quit, "Exit program.") - - menu.help("rules", "The rules of this system are as follows...") - end - end - assert_equal( "1. load\n2. save\n3. quit\n4. help\n? " + - "This command will display helpful messages about " + - "functionality, like this one. To see the help for a " + - "specific topic enter:\n" + - "\thelp [TOPIC]\n" + - "Try asking for help on any of the following:\n" + - "\nload quit rules save \n" + - "1. load\n2. save\n3. quit\n4. help\n? " + - "= load\n\n" + - "Load a file.\n" + - "1. load\n2. save\n3. quit\n4. help\n? " + - "= rules\n\n" + - "The rules of this system are as follows...\n" + - "1. load\n2. save\n3. quit\n4. help\n? " + - "= missing\n\n" + - "There's no help for that topic.\n", @output.string ) - end - - def test_index - @input << "Sample1\n" - @input.rewind - - @terminal.choose do |menu| - # Default: menu.index = :number - - menu.choice "Sample1" - menu.choice "Sample2" - menu.choice "Sample3" - end - assert_equal("1. Sample1\n2. Sample2\n3. Sample3\n? ", @output.string) - - @output.truncate(@output.rewind) - @input.rewind - - @terminal.choose do |menu| - menu.index = :letter - menu.index_suffix = ") " - - menu.choice "Sample1" - menu.choice "Sample2" - menu.choice "Sample3" - end - assert_equal("a) Sample1\nb) Sample2\nc) Sample3\n? ", @output.string) - - @output.truncate(@output.rewind) - @input.rewind - - @terminal.choose do |menu| - menu.index = :none - - menu.choice "Sample1" - menu.choice "Sample2" - menu.choice "Sample3" - end - assert_equal("Sample1\nSample2\nSample3\n? ", @output.string) - - @output.truncate(@output.rewind) - @input.rewind - - @terminal.choose do |menu| - menu.index = "*" - - menu.choice "Sample1" - menu.choice "Sample2" - menu.choice "Sample3" - end - assert_equal("* Sample1\n* Sample2\n* Sample3\n? ", @output.string) - end - - def test_layouts - @input << "save\n" - @input.rewind - - @terminal.choose(:load, :save, :quit) # Default: layout = :list - assert_equal("1. load\n2. save\n3. quit\n? ", @output.string) - - @input.rewind - @output.truncate(@output.rewind) - - @terminal.choose(:load, :save, :quit) do |menu| - menu.header = "File Menu" - end - assert_equal( "File Menu:\n" + - "1. load\n2. save\n3. quit\n? ", @output.string ) - - @input.rewind - @output.truncate(@output.rewind) - - @terminal.choose(:load, :save, :quit) do |menu| - menu.layout = :one_line - menu.header = "File Menu" - menu.prompt = "Operation? " - end - assert_equal( "File Menu: Operation? " + - "(load, save or quit) ", @output.string ) - - @input.rewind - @output.truncate(@output.rewind) - - @terminal.choose(:load, :save, :quit) do |menu| - menu.layout = :menu_only - end - assert_equal("load, save or quit? ", @output.string) - - @input.rewind - @output.truncate(@output.rewind) - - @terminal.choose(:load, :save, :quit) do |menu| - menu.layout = '<%= list(@menu) %>File Menu: ' - end - assert_equal("1. load\n2. save\n3. quit\nFile Menu: ", @output.string) - end - - def test_list_option - @input << "l\n" - @input.rewind - - @terminal.choose(:load, :save, :quit) do |menu| - menu.layout = :menu_only - menu.list_option = ", or " - end - assert_equal("load, save, or quit? ", @output.string) - end - - def test_nil_on_handled - @input << "3\n3\n2\n" - @input.rewind - - # Shows that by default proc results are returned. - output = @terminal.choose do |menu| - menu.choice "Sample1" do "output1" end - menu.choice "Sample2" do "output2" end - menu.choice "Sample3" do "output3" end - end - assert_equal("output3", output) - - # - # Shows that they can be replaced with +nil+ by setting - # _nil_on_handled to +true+. - # - output = @terminal.choose do |menu| - menu.nil_on_handled = true - menu.choice "Sample1" do "output1" end - menu.choice "Sample2" do "output2" end - menu.choice "Sample3" do "output3" end - end - assert_equal(nil, output) - - # Shows that a menu item without a proc will be returned no matter what. - output = @terminal.choose do |menu| - menu.choice "Sample1" - menu.choice "Sample2" - menu.choice "Sample3" - end - assert_equal("Sample2", output) - end - - def test_passed_command - @input << "q\n" - @input.rewind - - selected = nil - @terminal.choose do |menu| - menu.choices(:load, :save, :quit) { |command| selected = command } - end - assert_equal(:quit, selected) - end - - def test_question_options - @input << "save\n" - @input.rewind - - answer = @terminal.choose(:Load, :Save, :Quit) do |menu| - menu.case = :capitalize - end - assert_equal(:Save, answer) - - @input.rewind - - answer = @terminal.choose(:Load, :Save, :Quit) do |menu| - menu.case = :capitalize - menu.character = :getc - end - assert_equal(:Save, answer) - assert_equal(?a, @input.getc) - end - - def test_select_by - @input << "Sample1\n2\n" - @input.rewind - - selected = @terminal.choose do |menu| - menu.choice "Sample1" - menu.choice "Sample2" - menu.choice "Sample3" - end - assert_equal("Sample1", selected) - - @input.rewind - - selected = @terminal.choose do |menu| - menu.select_by = :index - - menu.choice "Sample1" - menu.choice "Sample2" - menu.choice "Sample3" - end - assert_equal("Sample2", selected) - - @input.rewind - - selected = @terminal.choose do |menu| - menu.select_by = :name - - menu.choice "Sample1" - menu.choice "Sample2" - menu.choice "Sample3" - end - assert_equal("Sample1", selected) - end - - def test_hidden - @input << "Hidden\n4\n" - @input.rewind - - selected = @terminal.choose do |menu| - menu.choice "Sample1" - menu.choice "Sample2" - menu.choice "Sample3" - menu.hidden "Hidden!" - end - assert_equal("Hidden!", selected) - assert_equal("1. Sample1\n2. Sample2\n3. Sample3\n? ", @output.string) - - @input.rewind - - selected = @terminal.choose do |menu| - menu.select_by = :index - - menu.choice "Sample1" - menu.choice "Sample2" - menu.choice "Sample3" - menu.hidden "Hidden!" - end - assert_equal("Hidden!", selected) - - @input.rewind - - selected = @terminal.choose do |menu| - menu.select_by = :name - - menu.choice "Sample1" - menu.choice "Sample2" - menu.choice "Sample3" - menu.hidden "Hidden!" - end - assert_equal("Hidden!", selected) - - @input.rewind - end - - def test_select_by_letter - @input << "b\n" - @input.rewind - - selected = @terminal.choose do |menu| - menu.index = :letter - menu.choice :save - menu.choice :load - menu.choice :quit - end - assert_equal(:load, selected) - end - - def test_shell - @input << "save --some-option my_file.txt\n" - @input.rewind - - selected = nil - options = nil - answer = @terminal.choose do |menu| - menu.choices(:load, :quit) - menu.choice(:save) do |command, details| - selected = command - options = details - - "Saved!" - end - menu.shell = true - end - assert_equal("Saved!", answer) - assert_equal(:save, selected) - assert_equal("--some-option my_file.txt", options) - end - - def test_simple_menu_shortcut - @input << "3\n" - @input.rewind - - selected = @terminal.choose(:save, :load, :quit) - assert_equal(:quit, selected) - end - - def test_symbols - @input << "3\n" - @input.rewind - - selected = @terminal.choose do |menu| - menu.choices(:save, :load, :quit) - end - assert_equal(:quit, selected) - end - - def test_paged_print_infinite_loop_bug - @terminal.page_at = 5 - # Will page twice, so start with two new lines - @input << "\n\n3\n" - @input.rewind - - # Sadly this goes into an infinite loop without the fix to page_print - selected = @terminal.choose(* 1..10) - assert_equal(selected, 3) - end - - - def test_cancel_paging - # Tests that paging can be cancelled halfway through - @terminal.page_at = 5 - # Will page twice, so stop after first page and make choice 3 - @input << "q\n3\n" - @input.rewind - - selected = @terminal.choose(* 1..10) - assert_equal(selected, 3) - - # Make sure paging message appeared - assert( @output.string.index('press enter/return to continue or q to stop'), - "Paging message did not appear." ) - - # Make sure it only appeared once - assert( @output.string !~ /q to stop.*q to stop/m, - "Paging message appeared more than once." ) - end -end diff --git a/vendor/gems/highline-1.4.0/test/ts_all.rb b/vendor/gems/highline-1.4.0/test/ts_all.rb deleted file mode 100644 index 735dccee..00000000 --- a/vendor/gems/highline-1.4.0/test/ts_all.rb +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/local/bin/ruby -w - -# ts_all.rb -# -# Created by James Edward Gray II on 2005-04-26. -# Copyright 2005 Gray Productions. All rights reserved. -# -# This is Free Software. See LICENSE and COPYING for details. - -require "test/unit" - -require "tc_highline" -require "tc_import" -require "tc_menu" -require "tc_color_scheme"