-<% end %>
-
-<%= link_to 'Back', users_path %>
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/app/views/users/show.html.erb b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/app/views/users/show.html.erb
deleted file mode 100644
index 3109a37d..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/app/views/users/show.html.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-
-<%= link_to 'Edit', edit_user_path(@user) %> |
-<%= link_to 'Back', users_path %>
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/config/boot.rb b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/config/boot.rb
deleted file mode 100644
index cb9a72da..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/config/boot.rb
+++ /dev/null
@@ -1,110 +0,0 @@
-# Don't change this file!
-# Configure your app in config/environment.rb and config/environments/*.rb
-
-RAILS_ROOT = "#{File.dirname(__FILE__)}/.." unless defined?(RAILS_ROOT)
-
-module Rails
- class << self
- def boot!
- unless booted?
- preinitialize
- pick_boot.run
- end
- end
-
- def booted?
- defined? Rails::Initializer
- end
-
- def pick_boot
- (vendor_rails? ? VendorBoot : GemBoot).new
- end
-
- def vendor_rails?
- File.exist?("#{RAILS_ROOT}/vendor/rails")
- end
-
- def preinitialize
- load(preinitializer_path) if File.exists?(preinitializer_path)
- end
-
- def preinitializer_path
- "#{RAILS_ROOT}/config/preinitializer.rb"
- end
- end
-
- class Boot
- def run
- load_initializer
- Rails::Initializer.run(:set_load_path)
- end
- end
-
- class VendorBoot < Boot
- def load_initializer
- require "#{RAILS_ROOT}/vendor/rails/railties/lib/initializer"
- end
- end
-
- class GemBoot < Boot
- def load_initializer
- self.class.load_rubygems
- load_rails_gem
- require 'initializer'
- end
-
- def load_rails_gem
- if version = self.class.gem_version
- STDERR.puts "Boot.rb loading version #{version}"
- gem 'rails', version
- else
- STDERR.puts "Boot.rb loading latest available version"
- gem 'rails'
- end
- rescue Gem::LoadError => load_error
- $stderr.puts %(Missing the Rails #{version} gem. Please `gem install -v=#{version} rails`, update your RAILS_GEM_VERSION setting in config/environment.rb for the Rails version you do have installed, or comment out RAILS_GEM_VERSION to use the latest version installed.)
- exit 1
- end
-
- class << self
- def rubygems_version
- Gem::RubyGemsVersion if defined? Gem::RubyGemsVersion
- end
-
- def gem_version
- if defined? RAILS_GEM_VERSION
- RAILS_GEM_VERSION
- elsif ENV.include?('RAILS_GEM_VERSION')
- ENV['RAILS_GEM_VERSION']
- else
- parse_gem_version(read_environment_rb)
- end
- end
-
- def load_rubygems
- require 'rubygems'
-
- unless rubygems_version >= '0.9.4'
- $stderr.puts %(Rails requires RubyGems >= 0.9.4 (you have #{rubygems_version}). Please `gem update --system` and try again.)
- exit 1
- end
-
- rescue LoadError
- $stderr.puts %(Rails requires RubyGems >= 0.9.4. Please install RubyGems and try again: http://rubygems.rubyforge.org)
- exit 1
- end
-
- def parse_gem_version(text)
- $1 if text =~ /^[^#]*RAILS_GEM_VERSION\s*=\s*'([!~<>=]*\s*[\d.]+)'/
- end
-
- private
- def read_environment_rb
- File.read("#{RAILS_ROOT}/config/environment.rb")
- end
- end
- end
-end
-
-# All that for this:
-Rails.boot!
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/config/database.yml b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/config/database.yml
deleted file mode 100644
index c64a5d89..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/config/database.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-
-defaults: &defaults
- adapter: <%= ENV['DB'] || 'mysql' %>
- host: localhost
- database: hmp_development
- username: root
- password:
-
-development:
- <<: *defaults
-
-test:
- <<: *defaults
-
-production:
- <<: *defaults
-
\ No newline at end of file
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/config/environment.rb b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/config/environment.rb
deleted file mode 100644
index 39f34dee..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/config/environment.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-require File.join(File.dirname(__FILE__), 'boot')
-require 'action_controller'
-
-Rails::Initializer.run do |config|
-
- if ActionController::Base.respond_to? 'session='
- config.action_controller.session = {:session_key => '_app_session', :secret => '22cde4d5c1a61ba69a81795322cde4d5c1a61ba69a817953'}
- end
-
- config.load_paths << "#{RAILS_ROOT}/app/models/person" # moduleless model path
-
- config.after_initialize do
- config.has_many_polymorphs_options['requirements'] << "#{RAILS_ROOT}/lib/library_model"
- end
-end
-
-# Dependencies.log_activity = true
-
-ENV['RAILS_ASSET_ID'] = Time.now.to_i.to_s
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/config/environment.rb.canonical b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/config/environment.rb.canonical
deleted file mode 100644
index 39f34dee..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/config/environment.rb.canonical
+++ /dev/null
@@ -1,19 +0,0 @@
-require File.join(File.dirname(__FILE__), 'boot')
-require 'action_controller'
-
-Rails::Initializer.run do |config|
-
- if ActionController::Base.respond_to? 'session='
- config.action_controller.session = {:session_key => '_app_session', :secret => '22cde4d5c1a61ba69a81795322cde4d5c1a61ba69a817953'}
- end
-
- config.load_paths << "#{RAILS_ROOT}/app/models/person" # moduleless model path
-
- config.after_initialize do
- config.has_many_polymorphs_options['requirements'] << "#{RAILS_ROOT}/lib/library_model"
- end
-end
-
-# Dependencies.log_activity = true
-
-ENV['RAILS_ASSET_ID'] = Time.now.to_i.to_s
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/config/environments/development.rb b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/config/environments/development.rb
deleted file mode 100644
index 54ae4ed2..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/config/environments/development.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-
-config.cache_classes = ENV['PRODUCTION']
-config.whiny_nils = true
-config.action_controller.consider_all_requests_local = !ENV['PRODUCTION']
-config.action_controller.perform_caching = ENV['PRODUCTION']
-# The following has been deprecated in Rails 2.1 and removed in 2.2
-config.action_view.cache_template_extensions = ENV['PRODUCTION'] if Rails::VERSION::MAJOR < 2 or Rails::VERSION::MAJOR == 2 && Rails::VERSION::MINOR < 1
-config.action_view.debug_rjs = !ENV['PRODUCTION']
-config.action_mailer.raise_delivery_errors = false
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/config/environments/production.rb b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/config/environments/production.rb
deleted file mode 100644
index cb295b83..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/config/environments/production.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-# Settings specified here will take precedence over those in config/environment.rb
-
-# The production environment is meant for finished, "live" apps.
-# Code is not reloaded between requests
-config.cache_classes = true
-
-# Use a different logger for distributed setups
-# config.logger = SyslogLogger.new
-
-# Full error reports are disabled and caching is turned on
-config.action_controller.consider_all_requests_local = false
-config.action_controller.perform_caching = true
-
-# Enable serving of images, stylesheets, and javascripts from an asset server
-# config.action_controller.asset_host = "http://assets.example.com"
-
-# Disable delivery errors, bad email addresses will be ignored
-# config.action_mailer.raise_delivery_errors = false
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/config/environments/test.rb b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/config/environments/test.rb
deleted file mode 100644
index f0689b92..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/config/environments/test.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-# Settings specified here will take precedence over those in config/environment.rb
-
-# The test environment is used exclusively to run your application's
-# test suite. You never need to work with it otherwise. Remember that
-# your test database is "scratch space" for the test suite and is wiped
-# and recreated between test runs. Don't rely on the data there!
-config.cache_classes = true
-
-# Log error messages when you accidentally call methods on nil.
-config.whiny_nils = true
-
-# Show full error reports and disable caching
-config.action_controller.consider_all_requests_local = true
-config.action_controller.perform_caching = false
-
-# Tell ActionMailer not to deliver emails to the real world.
-# The :test delivery method accumulates sent emails in the
-# ActionMailer::Base.deliveries array.
-config.action_mailer.delivery_method = :test
\ No newline at end of file
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/config/locomotive.yml b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/config/locomotive.yml
deleted file mode 100644
index 01d79773..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/config/locomotive.yml
+++ /dev/null
@@ -1,6 +0,0 @@
----
-mode: development
-runs_at_launch: 0
-identifier: testapp
-port: 3005
-bundle: /Applications/Locomotive2/Bundles/rmagickRailsMar2007_i386.locobundle
\ No newline at end of file
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/config/routes.rb b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/config/routes.rb
deleted file mode 100644
index b83b6f4d..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/config/routes.rb
+++ /dev/null
@@ -1,33 +0,0 @@
-ActionController::Routing::Routes.draw do |map|
- map.resources :states
-
- map.resources :states
-
- map.resources :addresses
-
- map.resources :sellers
-
- map.resources :users
-
- # The priority is based upon order of creation: first created -> highest priority.
-
- # Sample of regular route:
- # map.connect 'products/:id', :controller => 'catalog', :action => 'view'
- # Keep in mind you can assign values other than :controller and :action
-
- # Sample of named route:
- # map.purchase 'products/:id/purchase', :controller => 'catalog', :action => 'purchase'
- # This route can be invoked with purchase_url(:id => product.id)
-
- # You can have the root of your site routed by hooking up ''
- # -- just remember to delete public/index.html.
- # map.connect '', :controller => "welcome"
-
- # Allow downloading Web Service WSDL as a file with an extension
- # instead of a file named 'wsdl'
- map.connect ':controller/service.wsdl', :action => 'wsdl'
-
- # Install the default route as the lowest priority.
- map.connect ':controller/:action/:id.:format'
- map.connect ':controller/:action/:id'
-end
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/config/ultrasphinx/default.base b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/config/ultrasphinx/default.base
deleted file mode 100644
index 2886ccdc..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/config/ultrasphinx/default.base
+++ /dev/null
@@ -1,56 +0,0 @@
-#
-# Sphinx/Ultrasphinx user-configurable options.
-#
-# Copy this file to RAILS_ROOT/config/ultrasphinx.
-# You can use individual namespaces if you want (e.g. "development.base").
-#
-
-indexer
-{
- # Indexer running options
- mem_limit = 256M
-}
-
-searchd
-{
- # Daemon options
- # What interface the search daemon should listen on and where to store its logs
- address = 0.0.0.0
- port = 3313
- log = /tmp/sphinx/searchd.log
- query_log = /tmp/sphinx/query.log
- read_timeout = 5
- max_children = 300
- pid_file = /tmp/sphinx/searchd.pid
- max_matches = 100000
-}
-
-client
-{
- # Client options
- dictionary_name = ts
- # How your application connects to the search daemon (not necessarily the same as above)
- server_host = localhost
- server_port = 3313
-}
-
-source
-{
- # Individual SQL source options
- sql_range_step = 20000
- strip_html = 0
- index_html_attrs =
- sql_query_post =
-}
-
-index
-{
- # Index building options
- path = /tmp/sphinx/
- docinfo = extern # just leave this alone
- morphology = stem_en
- stopwords = # /path/to/stopwords.txt
- min_word_len = 1
- charset_type = utf-8 # or sbcs (Single Byte Character Set)
- charset_table = 0..9, A..Z->a..z, -, _, ., &, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F,U+C5->U+E5, U+E5, U+C4->U+E4, U+E4, U+D6->U+F6, U+F6, U+16B, U+0c1->a, U+0c4->a, U+0c9->e, U+0cd->i, U+0d3->o, U+0d4->o, U+0da->u, U+0dd->y, U+0e1->a, U+0e4->a, U+0e9->e, U+0ed->i, U+0f3->o, U+0f4->o, U+0fa->u, U+0fd->y, U+104->U+105, U+105, U+106->U+107, U+10c->c, U+10d->c, U+10e->d, U+10f->d, U+116->U+117, U+117, U+118->U+119, U+11a->e, U+11b->e, U+12E->U+12F, U+12F, U+139->l, U+13a->l, U+13d->l, U+13e->l, U+141->U+142, U+142, U+143->U+144, U+144,U+147->n, U+148->n, U+154->r, U+155->r, U+158->r, U+159->r, U+15A->U+15B, U+15B, U+160->s, U+160->U+161, U+161->s, U+164->t, U+165->t, U+16A->U+16B, U+16B, U+16e->u, U+16f->u, U+172->U+173, U+173, U+179->U+17A, U+17A, U+17B->U+17C, U+17C, U+17d->z, U+17e->z,
-}
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/config/ultrasphinx/development.conf.canonical b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/config/ultrasphinx/development.conf.canonical
deleted file mode 100644
index f08e8ed4..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/config/ultrasphinx/development.conf.canonical
+++ /dev/null
@@ -1,155 +0,0 @@
-
-# Auto-generated at Wed Oct 03 03:57:12 -0400 2007.
-# Hand modifications will be overwritten.
-# /Users/eweaver/Desktop/projects/chow/vendor/plugins/ultrasphinx/test/integration/app/config/ultrasphinx/default.base
-indexer {
- mem_limit = 256M
-}
-searchd {
- read_timeout = 5
- max_children = 300
- log = /tmp/sphinx/searchd.log
- port = 3313
- max_matches = 100000
- query_log = /tmp/sphinx/query.log
- pid_file = /tmp/sphinx/searchd.pid
- address = 0.0.0.0
-}
-
-# Source configuration
-
-source geo__states
-{
- strip_html = 0
- sql_range_step = 20000
- index_html_attrs =
- sql_query_post =
-
-type = mysql
-sql_query_pre = SET SESSION group_concat_max_len = 65535
-sql_query_pre = SET NAMES utf8
-
-sql_db = app_development
-sql_host = localhost
-sql_pass =
-sql_user = root
-sql_query_range = SELECT MIN(id), MAX(id) FROM states
-sql_query = SELECT (states.id * 4 + 0) AS id, CAST(GROUP_CONCAT(addresses.name SEPARATOR ' ') AS CHAR) AS address_name, 0 AS capitalization, 'Geo::State' AS class, 0 AS class_id, '' AS company, '' AS company_name, 0 AS company_name_facet, '' AS content, UNIX_TIMESTAMP('1970-01-01 00:00:00') AS created_at, 0 AS deleted, '' AS email, '__empty_searchable__' AS empty_searchable, '' AS login, '' AS name, '' AS state, 0 AS user_id FROM states LEFT OUTER JOIN addresses ON states.id = addresses.state_id WHERE states.id >= $start AND states.id <= $end GROUP BY id
-
-sql_group_column = capitalization
-sql_group_column = class_id
-sql_group_column = company_name_facet
-sql_date_column = created_at
-sql_group_column = deleted
-sql_group_column = user_id
-sql_query_info = SELECT * FROM states WHERE states.id = (($id - 0) / 4)
-}
-
-
-# Source configuration
-
-source sellers
-{
- strip_html = 0
- sql_range_step = 20000
- index_html_attrs =
- sql_query_post =
-
-type = mysql
-sql_query_pre = SET SESSION group_concat_max_len = 65535
-sql_query_pre = SET NAMES utf8
-
-sql_db = app_development
-sql_host = localhost
-sql_pass =
-sql_user = root
-sql_query_range = SELECT MIN(id), MAX(id) FROM sellers
-sql_query = SELECT (sellers.id * 4 + 1) AS id, '' AS address_name, sellers.capitalization AS capitalization, 'Seller' AS class, 1 AS class_id, '' AS company, sellers.company_name AS company_name, CRC32(sellers.company_name) AS company_name_facet, '' AS content, UNIX_TIMESTAMP(sellers.created_at) AS created_at, 0 AS deleted, '' AS email, '__empty_searchable__' AS empty_searchable, '' AS login, '' AS name, '' AS state, sellers.user_id AS user_id FROM sellers WHERE sellers.id >= $start AND sellers.id <= $end GROUP BY id
-
-sql_group_column = capitalization
-sql_group_column = class_id
-sql_group_column = company_name_facet
-sql_date_column = created_at
-sql_group_column = deleted
-sql_group_column = user_id
-sql_query_info = SELECT * FROM sellers WHERE sellers.id = (($id - 1) / 4)
-}
-
-
-# Source configuration
-
-source geo__addresses
-{
- strip_html = 0
- sql_range_step = 20000
- index_html_attrs =
- sql_query_post =
-
-type = mysql
-sql_query_pre = SET SESSION group_concat_max_len = 65535
-sql_query_pre = SET NAMES utf8
-
-sql_db = app_development
-sql_host = localhost
-sql_pass =
-sql_user = root
-sql_query_range = SELECT MIN(id), MAX(id) FROM addresses
-sql_query = SELECT (addresses.id * 4 + 2) AS id, '' AS address_name, 0 AS capitalization, 'Geo::Address' AS class, 2 AS class_id, '' AS company, '' AS company_name, 0 AS company_name_facet, CONCAT_WS(' ', addresses.line_1, addresses.line_2, addresses.city, addresses.province_region, addresses.zip_postal_code) AS content, UNIX_TIMESTAMP('1970-01-01 00:00:00') AS created_at, 0 AS deleted, '' AS email, '__empty_searchable__' AS empty_searchable, '' AS login, addresses.name AS name, states.name AS state, 0 AS user_id FROM addresses LEFT OUTER JOIN states ON states.id = addresses.state_id WHERE addresses.id >= $start AND addresses.id <= $end GROUP BY id
-
-sql_group_column = capitalization
-sql_group_column = class_id
-sql_group_column = company_name_facet
-sql_date_column = created_at
-sql_group_column = deleted
-sql_group_column = user_id
-sql_query_info = SELECT * FROM addresses WHERE addresses.id = (($id - 2) / 4)
-}
-
-
-# Source configuration
-
-source users
-{
- strip_html = 0
- sql_range_step = 20000
- index_html_attrs =
- sql_query_post =
-
-type = mysql
-sql_query_pre = SET SESSION group_concat_max_len = 65535
-sql_query_pre = SET NAMES utf8
-
-sql_db = app_development
-sql_host = localhost
-sql_pass =
-sql_user = root
-sql_query_range = SELECT MIN(id), MAX(id) FROM users
-sql_query = SELECT (users.id * 4 + 3) AS id, '' AS address_name, 0 AS capitalization, 'User' AS class, 3 AS class_id, sellers.company_name AS company, '' AS company_name, 0 AS company_name_facet, '' AS content, UNIX_TIMESTAMP('1970-01-01 00:00:00') AS created_at, users.deleted AS deleted, users.email AS email, '__empty_searchable__' AS empty_searchable, users.login AS login, '' AS name, '' AS state, 0 AS user_id FROM users LEFT OUTER JOIN sellers ON users.id = sellers.user_id WHERE users.id >= $start AND users.id <= $end AND (deleted = 0) GROUP BY id
-
-sql_group_column = capitalization
-sql_group_column = class_id
-sql_group_column = company_name_facet
-sql_date_column = created_at
-sql_group_column = deleted
-sql_group_column = user_id
-sql_query_info = SELECT * FROM users WHERE users.id = (($id - 3) / 4)
-}
-
-
-# Index configuration
-
-index complete
-{
- source = geo__addresses
- source = geo__states
- source = sellers
- source = users
- charset_type = utf-8
- charset_table = 0..9, A..Z->a..z, -, _, ., &, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F,U+C5->U+E5, U+E5, U+C4->U+E4, U+E4, U+D6->U+F6, U+F6, U+16B, U+0c1->a, U+0c4->a, U+0c9->e, U+0cd->i, U+0d3->o, U+0d4->o, U+0da->u, U+0dd->y, U+0e1->a, U+0e4->a, U+0e9->e, U+0ed->i, U+0f3->o, U+0f4->o, U+0fa->u, U+0fd->y, U+104->U+105, U+105, U+106->U+107, U+10c->c, U+10d->c, U+10e->d, U+10f->d, U+116->U+117, U+117, U+118->U+119, U+11a->e, U+11b->e, U+12E->U+12F, U+12F, U+139->l, U+13a->l, U+13d->l, U+13e->l, U+141->U+142, U+142, U+143->U+144, U+144,U+147->n, U+148->n, U+154->r, U+155->r, U+158->r, U+159->r, U+15A->U+15B, U+15B, U+160->s, U+160->U+161, U+161->s, U+164->t, U+165->t, U+16A->U+16B, U+16B, U+16e->u, U+16f->u, U+172->U+173, U+173, U+179->U+17A, U+17A, U+17B->U+17C, U+17C, U+17d->z, U+17e->z,
- min_word_len = 1
- stopwords =
- path = /tmp/sphinx//sphinx_index_complete
- docinfo = extern
- morphology = stem_en
-}
-
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/db/migrate/001_create_sticks.rb b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/db/migrate/001_create_sticks.rb
deleted file mode 100644
index 6193c313..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/db/migrate/001_create_sticks.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-class CreateSticks < ActiveRecord::Migration
- def self.up
- create_table :sticks do |t|
- t.column :name, :string
- end
- end
-
- def self.down
- drop_table :sticks
- end
-end
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/db/migrate/002_create_stones.rb b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/db/migrate/002_create_stones.rb
deleted file mode 100644
index 4c1ec154..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/db/migrate/002_create_stones.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-class CreateStones < ActiveRecord::Migration
- def self.up
- create_table :stones do |t|
- t.column :name, :string
- end
- end
-
- def self.down
- drop_table :stones
- end
-end
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/db/migrate/003_create_organic_substances.rb b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/db/migrate/003_create_organic_substances.rb
deleted file mode 100644
index 1bf82da6..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/db/migrate/003_create_organic_substances.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-class CreateOrganicSubstances < ActiveRecord::Migration
- def self.up
- create_table :organic_substances do |t|
- t.column :type, :string
- end
- end
-
- def self.down
- drop_table :organic_substances
- end
-end
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/db/migrate/004_create_bones.rb b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/db/migrate/004_create_bones.rb
deleted file mode 100644
index 6faa0aa1..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/db/migrate/004_create_bones.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-class CreateBones < ActiveRecord::Migration
- def self.up
- # Using STI
- end
-
- def self.down
- end
-end
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/db/migrate/005_create_single_sti_parents.rb b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/db/migrate/005_create_single_sti_parents.rb
deleted file mode 100644
index eef14621..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/db/migrate/005_create_single_sti_parents.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-class CreateSingleStiParents < ActiveRecord::Migration
- def self.up
- create_table :single_sti_parents do |t|
- t.column :name, :string
- end
- end
-
- def self.down
- drop_table :single_sti_parents
- end
-end
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/db/migrate/006_create_double_sti_parents.rb b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/db/migrate/006_create_double_sti_parents.rb
deleted file mode 100644
index 2a28f4ab..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/db/migrate/006_create_double_sti_parents.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-class CreateDoubleStiParents < ActiveRecord::Migration
- def self.up
- create_table :double_sti_parents do |t|
- t.column :name, :string
- end
- end
-
- def self.down
- drop_table :double_sti_parents
- end
-end
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/db/migrate/007_create_single_sti_parent_relationships.rb b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/db/migrate/007_create_single_sti_parent_relationships.rb
deleted file mode 100644
index deceeec7..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/db/migrate/007_create_single_sti_parent_relationships.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-class CreateSingleStiParentRelationships < ActiveRecord::Migration
- def self.up
- create_table :single_sti_parent_relationships do |t|
- t.column :the_bone_type, :string, :null => false
- t.column :the_bone_id, :integer, :null => false
- t.column :single_sti_parent_id, :integer, :null => false
- end
- end
-
- def self.down
- drop_table :single_sti_parent_relationships
- end
-end
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/db/migrate/008_create_double_sti_parent_relationships.rb b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/db/migrate/008_create_double_sti_parent_relationships.rb
deleted file mode 100644
index 46605d9b..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/db/migrate/008_create_double_sti_parent_relationships.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-class CreateDoubleStiParentRelationships < ActiveRecord::Migration
- def self.up
- create_table :double_sti_parent_relationships do |t|
- t.column :the_bone_type, :string, :null => false
- t.column :the_bone_id, :integer, :null => false
- t.column :parent_type, :string, :null => false
- t.column :parent_id, :integer, :null => false
- end
- end
-
- def self.down
- drop_table :double_sti_parent_relationships
- end
-end
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/db/migrate/009_create_library_model.rb b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/db/migrate/009_create_library_model.rb
deleted file mode 100644
index bdf7cf46..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/db/migrate/009_create_library_model.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-class CreateLibraryModel < ActiveRecord::Migration
- def self.up
- create_table :library_models do |t|
- t.column :name, :string
- end
- end
-
- def self.down
- drop_table :library_models
- end
-end
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/doc/README_FOR_APP b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/doc/README_FOR_APP
deleted file mode 100644
index ac6c1491..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/doc/README_FOR_APP
+++ /dev/null
@@ -1,2 +0,0 @@
-Use this README file to introduce your application and point to useful places in the API for learning more.
-Run "rake appdoc" to generate API documentation for your models and controllers.
\ No newline at end of file
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/generators/commenting_generator_test.rb b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/generators/commenting_generator_test.rb
deleted file mode 100644
index 96c6a799..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/generators/commenting_generator_test.rb
+++ /dev/null
@@ -1,83 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-require 'fileutils'
-
-class CommentingGeneratorTest < Test::Unit::TestCase
-
- def test_ensure_comments_dont_exist
- # make sure the comments are already defined
- assert_equal false, Object.send(:const_defined?, :Comment)
- assert_equal false, Object.send(:const_defined?, :Commenting)
- end
-
- def test_ensure_files_exist_after_generator_runs
- run_generator
-
- # make sure the files are there
- for generated_file in generated_files do
- assert File.exists?(File.expand_path(generated_file))
- end
- end
-
- def test_classes_exist_with_associations
- run_generator
- assert_nothing_raised { Commenting }
- assert_nothing_raised { Comment }
- citation = Citation.find(:first)
- assert !citation.nil?
- assert citation.respond_to?(:comments)
- user = User.find(:first)
- assert !user.nil?
- assert user.respond_to?(:comments)
- end
-
- def teardown
- Object.send(:remove_const, :Comment) if Object.send(:const_defined?, :Comment)
- Object.send(:remove_const, :Commenting) if Object.send(:const_defined?, :Commenting)
- remove_all_generated_files
- remove_require_for_commenting_extensions
- end
-
- def generated_files
- generated_files = [File.join(File.dirname(__FILE__), '..', '..', 'app', 'models', 'comment.rb')]
- generated_files << File.join(File.dirname(__FILE__), '..', '..', 'app', 'models', 'commenting.rb')
- generated_files << File.join(File.dirname(__FILE__), '..', '..', 'test', 'unit', 'commenting_test.rb')
- generated_files << File.join(File.dirname(__FILE__), '..', '..', 'test', 'unit', 'comment_test.rb')
- generated_files << File.join(File.dirname(__FILE__), '..', '..', 'lib', 'commenting_extensions.rb')
- generated_files << File.join(File.dirname(__FILE__), '..', '..', 'test', 'fixtures', 'comments.yml')
- generated_files << File.join(File.dirname(__FILE__), '..', '..', 'test', 'fixtures', 'commentings.yml')
- end
-
- def remove_all_generated_files
- for generated_file in generated_files do
- if File.exists?(generated_file)
- assert FileUtils.rm(generated_file)
- end
- end
- end
-
- def run_migrate
- `rake db:migrate RAILS_ENV=test`
- end
-
- def run_generator
- command = File.join(File.dirname(__FILE__), '..', '..', 'script', 'generate')
- `#{command} commenting Citation User`
- run_migrate
- end
-
- def remove_require_for_commenting_extensions
- environment = File.join(File.dirname(__FILE__), '..', '..', 'config', 'environment.rb')
- new_environment = ''
- if File.exists?(environment)
- if (open(environment) { |file| file.grep(/Rails/).any? })
- IO.readlines(environment).each do |line|
- new_environment += line unless line.match(/commenting_extensions/i)
- end
- File.open(environment, "w+") do |f|
- f.pos = 0
- f.print new_environment
- end
- end
- end
- end
-end
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/lib/library_model.rb b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/lib/library_model.rb
deleted file mode 100644
index e27106fa..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/lib/library_model.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-class LibraryModel < ActiveRecord::Base
-end
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/public/404.html b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/public/404.html
deleted file mode 100644
index eff660b9..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/public/404.html
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
-
-
-
- The page you were looking for doesn't exist (404)
-
-
-
-
-
-
-
The page you were looking for doesn't exist.
-
You may have mistyped the address or the page may have moved.
-
-
-
\ No newline at end of file
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/public/500.html b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/public/500.html
deleted file mode 100644
index f0aee0e9..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/public/500.html
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
-
-
-
- We're sorry, but something went wrong
-
-
-
-
-
-
-
We're sorry, but something went wrong.
-
We've been notified about this issue and we'll take a look at it shortly.
-
-
-
\ No newline at end of file
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/public/dispatch.cgi b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/public/dispatch.cgi
deleted file mode 100755
index 9b5ae760..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/public/dispatch.cgi
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/local/bin/ruby
-
-require File.dirname(__FILE__) + "/../config/environment" unless defined?(RAILS_ROOT)
-
-# If you're using RubyGems and mod_ruby, this require should be changed to an absolute path one, like:
-# "/usr/local/lib/ruby/gems/1.8/gems/rails-0.8.0/lib/dispatcher" -- otherwise performance is severely impaired
-require "dispatcher"
-
-ADDITIONAL_LOAD_PATHS.reverse.each { |dir| $:.unshift(dir) if File.directory?(dir) } if defined?(Apache::RubyRun)
-Dispatcher.dispatch
\ No newline at end of file
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/public/dispatch.fcgi b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/public/dispatch.fcgi
deleted file mode 100755
index 664dbbbe..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/public/dispatch.fcgi
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/usr/bin/env ruby
-#
-# You may specify the path to the FastCGI crash log (a log of unhandled
-# exceptions which forced the FastCGI instance to exit, great for debugging)
-# and the number of requests to process before running garbage collection.
-#
-# By default, the FastCGI crash log is RAILS_ROOT/log/fastcgi.crash.log
-# and the GC period is nil (turned off). A reasonable number of requests
-# could range from 10-100 depending on the memory footprint of your app.
-#
-# Example:
-# # Default log path, normal GC behavior.
-# RailsFCGIHandler.process!
-#
-# # Default log path, 50 requests between GC.
-# RailsFCGIHandler.process! nil, 50
-#
-# # Custom log path, normal GC behavior.
-# RailsFCGIHandler.process! '/var/log/myapp_fcgi_crash.log'
-#
-require File.dirname(__FILE__) + "/../config/environment"
-require 'fcgi_handler'
-
-RailsFCGIHandler.process!
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/public/dispatch.rb b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/public/dispatch.rb
deleted file mode 100755
index 9b5ae760..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/public/dispatch.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/local/bin/ruby
-
-require File.dirname(__FILE__) + "/../config/environment" unless defined?(RAILS_ROOT)
-
-# If you're using RubyGems and mod_ruby, this require should be changed to an absolute path one, like:
-# "/usr/local/lib/ruby/gems/1.8/gems/rails-0.8.0/lib/dispatcher" -- otherwise performance is severely impaired
-require "dispatcher"
-
-ADDITIONAL_LOAD_PATHS.reverse.each { |dir| $:.unshift(dir) if File.directory?(dir) } if defined?(Apache::RubyRun)
-Dispatcher.dispatch
\ No newline at end of file
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/public/favicon.ico b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/public/favicon.ico
deleted file mode 100644
index e69de29b..00000000
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/public/images/rails.png b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/public/images/rails.png
deleted file mode 100644
index b8441f182e06974083cf08f0acaf0e2fd612bd40..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 1787
zcmVCLdthj)A!BBmWB&y|X`RY;f`BJ<_ju%@N||NoLFD~mQl$aHGjq>;5dG_D{h(5s}0
z6&=HANU$m__3PuddU(lvR_xWj`}Oho@9EyQt-n!E*P(KhM@X_VFV2l&>deNZJT%y8iwA
zoG>u1B`p2=_u9k4v1Mud`1+qvOZoHg#bITJ9U`qBAek?40RR96!AV3xRCwBy*IQ$v
zN(=yC9IhRft9V64L`77pqF_Cx@c;kSNoGK)`?Ps*cP(EtGlYZ{D5cxspMQvjKH)Oh6X(pa|J{
zGy1J$Ej7=Z{uvmMfRRsE;v`p;45B~6*ep#hM^ji
zl$+7qoWq~}ewG=61uFw0He{tJurMU&4Iv?=B^eR(wAHk!miA)O7p_+YR>lbmU3rmn
ze?+ze(+sEd6foB&*l9+?zkr_a-5*v&p*?c}HOGtyHg6r{WFYpQ=#z0Hc7VWLx$>M3|b0|Gn
z+5t#z6*ffSVc6DjpmB2?AAR@@vB!wCK?9Yl;33;Q7^%(401QW|k=R8b!OwtLJPjjm
zO9Ia;qCq)rOq!1Ia*6#A%#xb}yDx1P*pWla>9j$bnMn3CBqe4`TRll_Iy29kmG?4fbKuF=XqU|?3b@B
zA`&a?KIgZ|KJx5eND_c3Em=WZn@xW8hRJ^G&sY^b(FW?WC9W_sb;+lAPdLTdBaKIK;-f}*h4|1aTjw7qX_k~e{TWO7jqcekERN;Jyh%67)q4rKpL*CEYL;|#GY{B@5
zi52XoC?xsoorJKxsliugF#z38M
';
- return $A(div.childNodes[0].childNodes[0].childNodes);
- }
-}
-
-var Insertion = new Object();
-
-Insertion.Before = Class.create();
-Insertion.Before.prototype = Object.extend(new Abstract.Insertion('beforeBegin'), {
- initializeRange: function() {
- this.range.setStartBefore(this.element);
- },
-
- insertContent: function(fragments) {
- fragments.each((function(fragment) {
- this.element.parentNode.insertBefore(fragment, this.element);
- }).bind(this));
- }
-});
-
-Insertion.Top = Class.create();
-Insertion.Top.prototype = Object.extend(new Abstract.Insertion('afterBegin'), {
- initializeRange: function() {
- this.range.selectNodeContents(this.element);
- this.range.collapse(true);
- },
-
- insertContent: function(fragments) {
- fragments.reverse(false).each((function(fragment) {
- this.element.insertBefore(fragment, this.element.firstChild);
- }).bind(this));
- }
-});
-
-Insertion.Bottom = Class.create();
-Insertion.Bottom.prototype = Object.extend(new Abstract.Insertion('beforeEnd'), {
- initializeRange: function() {
- this.range.selectNodeContents(this.element);
- this.range.collapse(this.element);
- },
-
- insertContent: function(fragments) {
- fragments.each((function(fragment) {
- this.element.appendChild(fragment);
- }).bind(this));
- }
-});
-
-Insertion.After = Class.create();
-Insertion.After.prototype = Object.extend(new Abstract.Insertion('afterEnd'), {
- initializeRange: function() {
- this.range.setStartAfter(this.element);
- },
-
- insertContent: function(fragments) {
- fragments.each((function(fragment) {
- this.element.parentNode.insertBefore(fragment,
- this.element.nextSibling);
- }).bind(this));
- }
-});
-
-/*--------------------------------------------------------------------------*/
-
-Element.ClassNames = Class.create();
-Element.ClassNames.prototype = {
- initialize: function(element) {
- this.element = $(element);
- },
-
- _each: function(iterator) {
- this.element.className.split(/\s+/).select(function(name) {
- return name.length > 0;
- })._each(iterator);
- },
-
- set: function(className) {
- this.element.className = className;
- },
-
- add: function(classNameToAdd) {
- if (this.include(classNameToAdd)) return;
- this.set($A(this).concat(classNameToAdd).join(' '));
- },
-
- remove: function(classNameToRemove) {
- if (!this.include(classNameToRemove)) return;
- this.set($A(this).without(classNameToRemove).join(' '));
- },
-
- toString: function() {
- return $A(this).join(' ');
- }
-};
-
-Object.extend(Element.ClassNames.prototype, Enumerable);
-var Selector = Class.create();
-Selector.prototype = {
- initialize: function(expression) {
- this.params = {classNames: []};
- this.expression = expression.toString().strip();
- this.parseExpression();
- this.compileMatcher();
- },
-
- parseExpression: function() {
- function abort(message) { throw 'Parse error in selector: ' + message; }
-
- if (this.expression == '') abort('empty expression');
-
- var params = this.params, expr = this.expression, match, modifier, clause, rest;
- while (match = expr.match(/^(.*)\[([a-z0-9_:-]+?)(?:([~\|!]?=)(?:"([^"]*)"|([^\]\s]*)))?\]$/i)) {
- params.attributes = params.attributes || [];
- params.attributes.push({name: match[2], operator: match[3], value: match[4] || match[5] || ''});
- expr = match[1];
- }
-
- if (expr == '*') return this.params.wildcard = true;
-
- while (match = expr.match(/^([^a-z0-9_-])?([a-z0-9_-]+)(.*)/i)) {
- modifier = match[1], clause = match[2], rest = match[3];
- switch (modifier) {
- case '#': params.id = clause; break;
- case '.': params.classNames.push(clause); break;
- case '':
- case undefined: params.tagName = clause.toUpperCase(); break;
- default: abort(expr.inspect());
- }
- expr = rest;
- }
-
- if (expr.length > 0) abort(expr.inspect());
- },
-
- buildMatchExpression: function() {
- var params = this.params, conditions = [], clause;
-
- if (params.wildcard)
- conditions.push('true');
- if (clause = params.id)
- conditions.push('element.readAttribute("id") == ' + clause.inspect());
- if (clause = params.tagName)
- conditions.push('element.tagName.toUpperCase() == ' + clause.inspect());
- if ((clause = params.classNames).length > 0)
- for (var i = 0, length = clause.length; i < length; i++)
- conditions.push('element.hasClassName(' + clause[i].inspect() + ')');
- if (clause = params.attributes) {
- clause.each(function(attribute) {
- var value = 'element.readAttribute(' + attribute.name.inspect() + ')';
- var splitValueBy = function(delimiter) {
- return value + ' && ' + value + '.split(' + delimiter.inspect() + ')';
- }
-
- switch (attribute.operator) {
- case '=': conditions.push(value + ' == ' + attribute.value.inspect()); break;
- case '~=': conditions.push(splitValueBy(' ') + '.include(' + attribute.value.inspect() + ')'); break;
- case '|=': conditions.push(
- splitValueBy('-') + '.first().toUpperCase() == ' + attribute.value.toUpperCase().inspect()
- ); break;
- case '!=': conditions.push(value + ' != ' + attribute.value.inspect()); break;
- case '':
- case undefined: conditions.push('element.hasAttribute(' + attribute.name.inspect() + ')'); break;
- default: throw 'Unknown operator ' + attribute.operator + ' in selector';
- }
- });
- }
-
- return conditions.join(' && ');
- },
-
- compileMatcher: function() {
- this.match = new Function('element', 'if (!element.tagName) return false; \
- element = $(element); \
- return ' + this.buildMatchExpression());
- },
-
- findElements: function(scope) {
- var element;
-
- if (element = $(this.params.id))
- if (this.match(element))
- if (!scope || Element.childOf(element, scope))
- return [element];
-
- scope = (scope || document).getElementsByTagName(this.params.tagName || '*');
-
- var results = [];
- for (var i = 0, length = scope.length; i < length; i++)
- if (this.match(element = scope[i]))
- results.push(Element.extend(element));
-
- return results;
- },
-
- toString: function() {
- return this.expression;
- }
-}
-
-Object.extend(Selector, {
- matchElements: function(elements, expression) {
- var selector = new Selector(expression);
- return elements.select(selector.match.bind(selector)).map(Element.extend);
- },
-
- findElement: function(elements, expression, index) {
- if (typeof expression == 'number') index = expression, expression = false;
- return Selector.matchElements(elements, expression || '*')[index || 0];
- },
-
- findChildElements: function(element, expressions) {
- return expressions.map(function(expression) {
- return expression.match(/[^\s"]+(?:"[^"]*"[^\s"]+)*/g).inject([null], function(results, expr) {
- var selector = new Selector(expr);
- return results.inject([], function(elements, result) {
- return elements.concat(selector.findElements(result || element));
- });
- });
- }).flatten();
- }
-});
-
-function $$() {
- return Selector.findChildElements(document, $A(arguments));
-}
-var Form = {
- reset: function(form) {
- $(form).reset();
- return form;
- },
-
- serializeElements: function(elements, getHash) {
- var data = elements.inject({}, function(result, element) {
- if (!element.disabled && element.name) {
- var key = element.name, value = $(element).getValue();
- if (value != undefined) {
- if (result[key]) {
- if (result[key].constructor != Array) result[key] = [result[key]];
- result[key].push(value);
- }
- else result[key] = value;
- }
- }
- return result;
- });
-
- return getHash ? data : Hash.toQueryString(data);
- }
-};
-
-Form.Methods = {
- serialize: function(form, getHash) {
- return Form.serializeElements(Form.getElements(form), getHash);
- },
-
- getElements: function(form) {
- return $A($(form).getElementsByTagName('*')).inject([],
- function(elements, child) {
- if (Form.Element.Serializers[child.tagName.toLowerCase()])
- elements.push(Element.extend(child));
- return elements;
- }
- );
- },
-
- getInputs: function(form, typeName, name) {
- form = $(form);
- var inputs = form.getElementsByTagName('input');
-
- if (!typeName && !name) return $A(inputs).map(Element.extend);
-
- for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) {
- var input = inputs[i];
- if ((typeName && input.type != typeName) || (name && input.name != name))
- continue;
- matchingInputs.push(Element.extend(input));
- }
-
- return matchingInputs;
- },
-
- disable: function(form) {
- form = $(form);
- form.getElements().each(function(element) {
- element.blur();
- element.disabled = 'true';
- });
- return form;
- },
-
- enable: function(form) {
- form = $(form);
- form.getElements().each(function(element) {
- element.disabled = '';
- });
- return form;
- },
-
- findFirstElement: function(form) {
- return $(form).getElements().find(function(element) {
- return element.type != 'hidden' && !element.disabled &&
- ['input', 'select', 'textarea'].include(element.tagName.toLowerCase());
- });
- },
-
- focusFirstElement: function(form) {
- form = $(form);
- form.findFirstElement().activate();
- return form;
- }
-}
-
-Object.extend(Form, Form.Methods);
-
-/*--------------------------------------------------------------------------*/
-
-Form.Element = {
- focus: function(element) {
- $(element).focus();
- return element;
- },
-
- select: function(element) {
- $(element).select();
- return element;
- }
-}
-
-Form.Element.Methods = {
- serialize: function(element) {
- element = $(element);
- if (!element.disabled && element.name) {
- var value = element.getValue();
- if (value != undefined) {
- var pair = {};
- pair[element.name] = value;
- return Hash.toQueryString(pair);
- }
- }
- return '';
- },
-
- getValue: function(element) {
- element = $(element);
- var method = element.tagName.toLowerCase();
- return Form.Element.Serializers[method](element);
- },
-
- clear: function(element) {
- $(element).value = '';
- return element;
- },
-
- present: function(element) {
- return $(element).value != '';
- },
-
- activate: function(element) {
- element = $(element);
- element.focus();
- if (element.select && ( element.tagName.toLowerCase() != 'input' ||
- !['button', 'reset', 'submit'].include(element.type) ) )
- element.select();
- return element;
- },
-
- disable: function(element) {
- element = $(element);
- element.disabled = true;
- return element;
- },
-
- enable: function(element) {
- element = $(element);
- element.blur();
- element.disabled = false;
- return element;
- }
-}
-
-Object.extend(Form.Element, Form.Element.Methods);
-var Field = Form.Element;
-var $F = Form.Element.getValue;
-
-/*--------------------------------------------------------------------------*/
-
-Form.Element.Serializers = {
- input: function(element) {
- switch (element.type.toLowerCase()) {
- case 'checkbox':
- case 'radio':
- return Form.Element.Serializers.inputSelector(element);
- default:
- return Form.Element.Serializers.textarea(element);
- }
- },
-
- inputSelector: function(element) {
- return element.checked ? element.value : null;
- },
-
- textarea: function(element) {
- return element.value;
- },
-
- select: function(element) {
- return this[element.type == 'select-one' ?
- 'selectOne' : 'selectMany'](element);
- },
-
- selectOne: function(element) {
- var index = element.selectedIndex;
- return index >= 0 ? this.optionValue(element.options[index]) : null;
- },
-
- selectMany: function(element) {
- var values, length = element.length;
- if (!length) return null;
-
- for (var i = 0, values = []; i < length; i++) {
- var opt = element.options[i];
- if (opt.selected) values.push(this.optionValue(opt));
- }
- return values;
- },
-
- optionValue: function(opt) {
- // extend element because hasAttribute may not be native
- return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text;
- }
-}
-
-/*--------------------------------------------------------------------------*/
-
-Abstract.TimedObserver = function() {}
-Abstract.TimedObserver.prototype = {
- initialize: function(element, frequency, callback) {
- this.frequency = frequency;
- this.element = $(element);
- this.callback = callback;
-
- this.lastValue = this.getValue();
- this.registerCallback();
- },
-
- registerCallback: function() {
- setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
- },
-
- onTimerEvent: function() {
- var value = this.getValue();
- var changed = ('string' == typeof this.lastValue && 'string' == typeof value
- ? this.lastValue != value : String(this.lastValue) != String(value));
- if (changed) {
- this.callback(this.element, value);
- this.lastValue = value;
- }
- }
-}
-
-Form.Element.Observer = Class.create();
-Form.Element.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
- getValue: function() {
- return Form.Element.getValue(this.element);
- }
-});
-
-Form.Observer = Class.create();
-Form.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
- getValue: function() {
- return Form.serialize(this.element);
- }
-});
-
-/*--------------------------------------------------------------------------*/
-
-Abstract.EventObserver = function() {}
-Abstract.EventObserver.prototype = {
- initialize: function(element, callback) {
- this.element = $(element);
- this.callback = callback;
-
- this.lastValue = this.getValue();
- if (this.element.tagName.toLowerCase() == 'form')
- this.registerFormCallbacks();
- else
- this.registerCallback(this.element);
- },
-
- onElementEvent: function() {
- var value = this.getValue();
- if (this.lastValue != value) {
- this.callback(this.element, value);
- this.lastValue = value;
- }
- },
-
- registerFormCallbacks: function() {
- Form.getElements(this.element).each(this.registerCallback.bind(this));
- },
-
- registerCallback: function(element) {
- if (element.type) {
- switch (element.type.toLowerCase()) {
- case 'checkbox':
- case 'radio':
- Event.observe(element, 'click', this.onElementEvent.bind(this));
- break;
- default:
- Event.observe(element, 'change', this.onElementEvent.bind(this));
- break;
- }
- }
- }
-}
-
-Form.Element.EventObserver = Class.create();
-Form.Element.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
- getValue: function() {
- return Form.Element.getValue(this.element);
- }
-});
-
-Form.EventObserver = Class.create();
-Form.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
- getValue: function() {
- return Form.serialize(this.element);
- }
-});
-if (!window.Event) {
- var Event = new Object();
-}
-
-Object.extend(Event, {
- KEY_BACKSPACE: 8,
- KEY_TAB: 9,
- KEY_RETURN: 13,
- KEY_ESC: 27,
- KEY_LEFT: 37,
- KEY_UP: 38,
- KEY_RIGHT: 39,
- KEY_DOWN: 40,
- KEY_DELETE: 46,
- KEY_HOME: 36,
- KEY_END: 35,
- KEY_PAGEUP: 33,
- KEY_PAGEDOWN: 34,
-
- element: function(event) {
- return event.target || event.srcElement;
- },
-
- isLeftClick: function(event) {
- return (((event.which) && (event.which == 1)) ||
- ((event.button) && (event.button == 1)));
- },
-
- pointerX: function(event) {
- return event.pageX || (event.clientX +
- (document.documentElement.scrollLeft || document.body.scrollLeft));
- },
-
- pointerY: function(event) {
- return event.pageY || (event.clientY +
- (document.documentElement.scrollTop || document.body.scrollTop));
- },
-
- stop: function(event) {
- if (event.preventDefault) {
- event.preventDefault();
- event.stopPropagation();
- } else {
- event.returnValue = false;
- event.cancelBubble = true;
- }
- },
-
- // find the first node with the given tagName, starting from the
- // node the event was triggered on; traverses the DOM upwards
- findElement: function(event, tagName) {
- var element = Event.element(event);
- while (element.parentNode && (!element.tagName ||
- (element.tagName.toUpperCase() != tagName.toUpperCase())))
- element = element.parentNode;
- return element;
- },
-
- observers: false,
-
- _observeAndCache: function(element, name, observer, useCapture) {
- if (!this.observers) this.observers = [];
- if (element.addEventListener) {
- this.observers.push([element, name, observer, useCapture]);
- element.addEventListener(name, observer, useCapture);
- } else if (element.attachEvent) {
- this.observers.push([element, name, observer, useCapture]);
- element.attachEvent('on' + name, observer);
- }
- },
-
- unloadCache: function() {
- if (!Event.observers) return;
- for (var i = 0, length = Event.observers.length; i < length; i++) {
- Event.stopObserving.apply(this, Event.observers[i]);
- Event.observers[i][0] = null;
- }
- Event.observers = false;
- },
-
- observe: function(element, name, observer, useCapture) {
- element = $(element);
- useCapture = useCapture || false;
-
- if (name == 'keypress' &&
- (navigator.appVersion.match(/Konqueror|Safari|KHTML/)
- || element.attachEvent))
- name = 'keydown';
-
- Event._observeAndCache(element, name, observer, useCapture);
- },
-
- stopObserving: function(element, name, observer, useCapture) {
- element = $(element);
- useCapture = useCapture || false;
-
- if (name == 'keypress' &&
- (navigator.appVersion.match(/Konqueror|Safari|KHTML/)
- || element.detachEvent))
- name = 'keydown';
-
- if (element.removeEventListener) {
- element.removeEventListener(name, observer, useCapture);
- } else if (element.detachEvent) {
- try {
- element.detachEvent('on' + name, observer);
- } catch (e) {}
- }
- }
-});
-
-/* prevent memory leaks in IE */
-if (navigator.appVersion.match(/\bMSIE\b/))
- Event.observe(window, 'unload', Event.unloadCache, false);
-var Position = {
- // set to true if needed, warning: firefox performance problems
- // NOT neeeded for page scrolling, only if draggable contained in
- // scrollable elements
- includeScrollOffsets: false,
-
- // must be called before calling withinIncludingScrolloffset, every time the
- // page is scrolled
- prepare: function() {
- this.deltaX = window.pageXOffset
- || document.documentElement.scrollLeft
- || document.body.scrollLeft
- || 0;
- this.deltaY = window.pageYOffset
- || document.documentElement.scrollTop
- || document.body.scrollTop
- || 0;
- },
-
- realOffset: function(element) {
- var valueT = 0, valueL = 0;
- do {
- valueT += element.scrollTop || 0;
- valueL += element.scrollLeft || 0;
- element = element.parentNode;
- } while (element);
- return [valueL, valueT];
- },
-
- cumulativeOffset: function(element) {
- var valueT = 0, valueL = 0;
- do {
- valueT += element.offsetTop || 0;
- valueL += element.offsetLeft || 0;
- element = element.offsetParent;
- } while (element);
- return [valueL, valueT];
- },
-
- positionedOffset: function(element) {
- var valueT = 0, valueL = 0;
- do {
- valueT += element.offsetTop || 0;
- valueL += element.offsetLeft || 0;
- element = element.offsetParent;
- if (element) {
- if(element.tagName=='BODY') break;
- var p = Element.getStyle(element, 'position');
- if (p == 'relative' || p == 'absolute') break;
- }
- } while (element);
- return [valueL, valueT];
- },
-
- offsetParent: function(element) {
- if (element.offsetParent) return element.offsetParent;
- if (element == document.body) return element;
-
- while ((element = element.parentNode) && element != document.body)
- if (Element.getStyle(element, 'position') != 'static')
- return element;
-
- return document.body;
- },
-
- // caches x/y coordinate pair to use with overlap
- within: function(element, x, y) {
- if (this.includeScrollOffsets)
- return this.withinIncludingScrolloffsets(element, x, y);
- this.xcomp = x;
- this.ycomp = y;
- this.offset = this.cumulativeOffset(element);
-
- return (y >= this.offset[1] &&
- y < this.offset[1] + element.offsetHeight &&
- x >= this.offset[0] &&
- x < this.offset[0] + element.offsetWidth);
- },
-
- withinIncludingScrolloffsets: function(element, x, y) {
- var offsetcache = this.realOffset(element);
-
- this.xcomp = x + offsetcache[0] - this.deltaX;
- this.ycomp = y + offsetcache[1] - this.deltaY;
- this.offset = this.cumulativeOffset(element);
-
- return (this.ycomp >= this.offset[1] &&
- this.ycomp < this.offset[1] + element.offsetHeight &&
- this.xcomp >= this.offset[0] &&
- this.xcomp < this.offset[0] + element.offsetWidth);
- },
-
- // within must be called directly before
- overlap: function(mode, element) {
- if (!mode) return 0;
- if (mode == 'vertical')
- return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
- element.offsetHeight;
- if (mode == 'horizontal')
- return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
- element.offsetWidth;
- },
-
- page: function(forElement) {
- var valueT = 0, valueL = 0;
-
- var element = forElement;
- do {
- valueT += element.offsetTop || 0;
- valueL += element.offsetLeft || 0;
-
- // Safari fix
- if (element.offsetParent==document.body)
- if (Element.getStyle(element,'position')=='absolute') break;
-
- } while (element = element.offsetParent);
-
- element = forElement;
- do {
- if (!window.opera || element.tagName=='BODY') {
- valueT -= element.scrollTop || 0;
- valueL -= element.scrollLeft || 0;
- }
- } while (element = element.parentNode);
-
- return [valueL, valueT];
- },
-
- clone: function(source, target) {
- var options = Object.extend({
- setLeft: true,
- setTop: true,
- setWidth: true,
- setHeight: true,
- offsetTop: 0,
- offsetLeft: 0
- }, arguments[2] || {})
-
- // find page position of source
- source = $(source);
- var p = Position.page(source);
-
- // find coordinate system to use
- target = $(target);
- var delta = [0, 0];
- var parent = null;
- // delta [0,0] will do fine with position: fixed elements,
- // position:absolute needs offsetParent deltas
- if (Element.getStyle(target,'position') == 'absolute') {
- parent = Position.offsetParent(target);
- delta = Position.page(parent);
- }
-
- // correct by body offsets (fixes Safari)
- if (parent == document.body) {
- delta[0] -= document.body.offsetLeft;
- delta[1] -= document.body.offsetTop;
- }
-
- // set position
- if(options.setLeft) target.style.left = (p[0] - delta[0] + options.offsetLeft) + 'px';
- if(options.setTop) target.style.top = (p[1] - delta[1] + options.offsetTop) + 'px';
- if(options.setWidth) target.style.width = source.offsetWidth + 'px';
- if(options.setHeight) target.style.height = source.offsetHeight + 'px';
- },
-
- absolutize: function(element) {
- element = $(element);
- if (element.style.position == 'absolute') return;
- Position.prepare();
-
- var offsets = Position.positionedOffset(element);
- var top = offsets[1];
- var left = offsets[0];
- var width = element.clientWidth;
- var height = element.clientHeight;
-
- element._originalLeft = left - parseFloat(element.style.left || 0);
- element._originalTop = top - parseFloat(element.style.top || 0);
- element._originalWidth = element.style.width;
- element._originalHeight = element.style.height;
-
- element.style.position = 'absolute';
- element.style.top = top + 'px';
- element.style.left = left + 'px';
- element.style.width = width + 'px';
- element.style.height = height + 'px';
- },
-
- relativize: function(element) {
- element = $(element);
- if (element.style.position == 'relative') return;
- Position.prepare();
-
- element.style.position = 'relative';
- var top = parseFloat(element.style.top || 0) - (element._originalTop || 0);
- var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);
-
- element.style.top = top + 'px';
- element.style.left = left + 'px';
- element.style.height = element._originalHeight;
- element.style.width = element._originalWidth;
- }
-}
-
-// Safari returns margins on body which is incorrect if the child is absolutely
-// positioned. For performance reasons, redefine Position.cumulativeOffset for
-// KHTML/WebKit only.
-if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) {
- Position.cumulativeOffset = function(element) {
- var valueT = 0, valueL = 0;
- do {
- valueT += element.offsetTop || 0;
- valueL += element.offsetLeft || 0;
- if (element.offsetParent == document.body)
- if (Element.getStyle(element, 'position') == 'absolute') break;
-
- element = element.offsetParent;
- } while (element);
-
- return [valueL, valueT];
- }
-}
-
-Element.addMethods();
\ No newline at end of file
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/public/robots.txt b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/public/robots.txt
deleted file mode 100644
index 4ab9e89f..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/public/robots.txt
+++ /dev/null
@@ -1 +0,0 @@
-# See http://www.robotstxt.org/wc/norobots.html for documentation on how to use the robots.txt file
\ No newline at end of file
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/public/stylesheets/scaffold.css b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/public/stylesheets/scaffold.css
deleted file mode 100644
index 8f239a35..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/public/stylesheets/scaffold.css
+++ /dev/null
@@ -1,74 +0,0 @@
-body { background-color: #fff; color: #333; }
-
-body, p, ol, ul, td {
- font-family: verdana, arial, helvetica, sans-serif;
- font-size: 13px;
- line-height: 18px;
-}
-
-pre {
- background-color: #eee;
- padding: 10px;
- font-size: 11px;
-}
-
-a { color: #000; }
-a:visited { color: #666; }
-a:hover { color: #fff; background-color:#000; }
-
-.fieldWithErrors {
- padding: 2px;
- background-color: red;
- display: table;
-}
-
-#errorExplanation {
- width: 400px;
- border: 2px solid red;
- padding: 7px;
- padding-bottom: 12px;
- margin-bottom: 20px;
- background-color: #f0f0f0;
-}
-
-#errorExplanation h2 {
- text-align: left;
- font-weight: bold;
- padding: 5px 5px 5px 15px;
- font-size: 12px;
- margin: -7px;
- background-color: #c00;
- color: #fff;
-}
-
-#errorExplanation p {
- color: #333;
- margin-bottom: 0;
- padding: 5px;
-}
-
-#errorExplanation ul li {
- font-size: 12px;
- list-style: square;
-}
-
-div.uploadStatus {
- margin: 5px;
-}
-
-div.progressBar {
- margin: 5px;
-}
-
-div.progressBar div.border {
- background-color: #fff;
- border: 1px solid grey;
- width: 100%;
-}
-
-div.progressBar div.background {
- background-color: #333;
- height: 18px;
- width: 0%;
-}
-
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/script/about b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/script/about
deleted file mode 100755
index 7b07d46a..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/script/about
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../config/boot'
-require 'commands/about'
\ No newline at end of file
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/script/breakpointer b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/script/breakpointer
deleted file mode 100755
index 64af76ed..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/script/breakpointer
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../config/boot'
-require 'commands/breakpointer'
\ No newline at end of file
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/script/console b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/script/console
deleted file mode 100755
index 42f28f7d..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/script/console
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../config/boot'
-require 'commands/console'
\ No newline at end of file
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/script/destroy b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/script/destroy
deleted file mode 100755
index fa0e6fcd..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/script/destroy
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../config/boot'
-require 'commands/destroy'
\ No newline at end of file
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/script/generate b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/script/generate
deleted file mode 100755
index ef976e09..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/script/generate
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../config/boot'
-require 'commands/generate'
\ No newline at end of file
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/script/performance/benchmarker b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/script/performance/benchmarker
deleted file mode 100755
index c842d35d..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/script/performance/benchmarker
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../config/boot'
-require 'commands/performance/benchmarker'
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/script/performance/profiler b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/script/performance/profiler
deleted file mode 100755
index d855ac8b..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/script/performance/profiler
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../config/boot'
-require 'commands/performance/profiler'
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/script/plugin b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/script/plugin
deleted file mode 100755
index 26ca64c0..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/script/plugin
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../config/boot'
-require 'commands/plugin'
\ No newline at end of file
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/script/process/inspector b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/script/process/inspector
deleted file mode 100755
index bf25ad86..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/script/process/inspector
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../config/boot'
-require 'commands/process/inspector'
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/script/process/reaper b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/script/process/reaper
deleted file mode 100755
index c77f0453..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/script/process/reaper
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../config/boot'
-require 'commands/process/reaper'
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/script/process/spawner b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/script/process/spawner
deleted file mode 100755
index 7118f398..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/script/process/spawner
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../config/boot'
-require 'commands/process/spawner'
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/script/runner b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/script/runner
deleted file mode 100755
index ccc30f9d..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/script/runner
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../config/boot'
-require 'commands/runner'
\ No newline at end of file
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/script/server b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/script/server
deleted file mode 100755
index dfabcb88..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/script/server
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../config/boot'
-require 'commands/server'
\ No newline at end of file
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/fixtures/double_sti_parent_relationships.yml b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/fixtures/double_sti_parent_relationships.yml
deleted file mode 100644
index 5bf02933..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/fixtures/double_sti_parent_relationships.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
-
-# one:
-# column: value
-#
-# two:
-# column: value
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/fixtures/double_sti_parents.yml b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/fixtures/double_sti_parents.yml
deleted file mode 100644
index 5bf02933..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/fixtures/double_sti_parents.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
-
-# one:
-# column: value
-#
-# two:
-# column: value
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/fixtures/organic_substances.yml b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/fixtures/organic_substances.yml
deleted file mode 100644
index 123ef537..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/fixtures/organic_substances.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-one:
- type: Bone
-
-two:
- type: Bone
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/fixtures/single_sti_parent_relationships.yml b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/fixtures/single_sti_parent_relationships.yml
deleted file mode 100644
index 5bf02933..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/fixtures/single_sti_parent_relationships.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
-
-# one:
-# column: value
-#
-# two:
-# column: value
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/fixtures/single_sti_parents.yml b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/fixtures/single_sti_parents.yml
deleted file mode 100644
index 5bf02933..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/fixtures/single_sti_parents.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
-
-# one:
-# column: value
-#
-# two:
-# column: value
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/fixtures/sticks.yml b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/fixtures/sticks.yml
deleted file mode 100644
index 157d7472..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/fixtures/sticks.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
-
-one:
- name: MyString
-
-two:
- name: MyString
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/fixtures/stones.yml b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/fixtures/stones.yml
deleted file mode 100644
index 157d7472..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/fixtures/stones.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
-
-one:
- name: MyString
-
-two:
- name: MyString
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/functional/addresses_controller_test.rb b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/functional/addresses_controller_test.rb
deleted file mode 100644
index 65284b5b..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/functional/addresses_controller_test.rb
+++ /dev/null
@@ -1,57 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-require 'addresses_controller'
-
-# Re-raise errors caught by the controller.
-class AddressesController; def rescue_action(e) raise e end; end
-
-class AddressesControllerTest < Test::Unit::TestCase
- fixtures :addresses
-
- def setup
- @controller = AddressesController.new
- @request = ActionController::TestRequest.new
- @response = ActionController::TestResponse.new
- end
-
- def test_should_get_index
- get :index
- assert_response :success
- assert assigns(:addresses)
- end
-
- def test_should_get_new
- get :new
- assert_response :success
- end
-
- def test_should_create_address
- assert_difference('Address.count') do
- post :create, :address => { :country_id => 1, :user_id => 1, :state_id => 1}
- end
-
- assert_redirected_to address_path(assigns(:address))
- end
-
- def test_should_show_address
- get :show, :id => 1
- assert_response :success
- end
-
- def test_should_get_edit
- get :edit, :id => 1
- assert_response :success
- end
-
- def test_should_update_address
- put :update, :id => 1, :address => { }
- assert_redirected_to address_path(assigns(:address))
- end
-
- def test_should_destroy_address
- assert_difference('Address.count', -1) do
- delete :destroy, :id => 1
- end
-
- assert_redirected_to addresses_path
- end
-end
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/functional/bones_controller_test.rb b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/functional/bones_controller_test.rb
deleted file mode 100644
index fc0c7bd8..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/functional/bones_controller_test.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-
-class BonesControllerTest < ActionController::TestCase
- # Replace this with your real tests.
- def test_truth
- assert true
- end
-end
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/functional/sellers_controller_test.rb b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/functional/sellers_controller_test.rb
deleted file mode 100644
index fb992e5d..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/functional/sellers_controller_test.rb
+++ /dev/null
@@ -1,57 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-require 'sellers_controller'
-
-# Re-raise errors caught by the controller.
-class SellersController; def rescue_action(e) raise e end; end
-
-class SellersControllerTest < Test::Unit::TestCase
- fixtures :sellers
-
- def setup
- @controller = SellersController.new
- @request = ActionController::TestRequest.new
- @response = ActionController::TestResponse.new
- end
-
- def test_should_get_index
- get :index
- assert_response :success
- assert assigns(:sellers)
- end
-
- def test_should_get_new
- get :new
- assert_response :success
- end
-
- def test_should_create_seller
- assert_difference('Seller.count') do
- post :create, :seller => { }
- end
-
- assert_redirected_to seller_path(assigns(:seller))
- end
-
- def test_should_show_seller
- get :show, :id => 1
- assert_response :success
- end
-
- def test_should_get_edit
- get :edit, :id => 1
- assert_response :success
- end
-
- def test_should_update_seller
- put :update, :id => 1, :seller => { }
- assert_redirected_to seller_path(assigns(:seller))
- end
-
- def test_should_destroy_seller
- assert_difference('Seller.count', -1) do
- delete :destroy, :id => 1
- end
-
- assert_redirected_to sellers_path
- end
-end
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/functional/states_controller_test.rb b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/functional/states_controller_test.rb
deleted file mode 100644
index 2e93453b..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/functional/states_controller_test.rb
+++ /dev/null
@@ -1,57 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-require 'states_controller'
-
-# Re-raise errors caught by the controller.
-class StatesController; def rescue_action(e) raise e end; end
-
-class StatesControllerTest < Test::Unit::TestCase
- fixtures :states
-
- def setup
- @controller = StatesController.new
- @request = ActionController::TestRequest.new
- @response = ActionController::TestResponse.new
- end
-
- def test_should_get_index
- get :index
- assert_response :success
- assert assigns(:states)
- end
-
- def test_should_get_new
- get :new
- assert_response :success
- end
-
- def test_should_create_state
- assert_difference('State.count') do
- post :create, :state => { }
- end
-
- assert_redirected_to state_path(assigns(:state))
- end
-
- def test_should_show_state
- get :show, :id => 1
- assert_response :success
- end
-
- def test_should_get_edit
- get :edit, :id => 1
- assert_response :success
- end
-
- def test_should_update_state
- put :update, :id => 1, :state => { }
- assert_redirected_to state_path(assigns(:state))
- end
-
- def test_should_destroy_state
- assert_difference('State.count', -1) do
- delete :destroy, :id => 1
- end
-
- assert_redirected_to states_path
- end
-end
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/functional/users_controller_test.rb b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/functional/users_controller_test.rb
deleted file mode 100644
index bc36751f..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/functional/users_controller_test.rb
+++ /dev/null
@@ -1,57 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-require 'users_controller'
-
-# Re-raise errors caught by the controller.
-class UsersController; def rescue_action(e) raise e end; end
-
-class UsersControllerTest < Test::Unit::TestCase
- fixtures :users
-
- def setup
- @controller = UsersController.new
- @request = ActionController::TestRequest.new
- @response = ActionController::TestResponse.new
- end
-
- def test_should_get_index
- get :index
- assert_response :success
- assert assigns(:users)
- end
-
- def test_should_get_new
- get :new
- assert_response :success
- end
-
- def test_should_create_user
- assert_difference('User.count') do
- post :create, :user => { }
- end
-
- assert_redirected_to user_path(assigns(:user))
- end
-
- def test_should_show_user
- get :show, :id => 1
- assert_response :success
- end
-
- def test_should_get_edit
- get :edit, :id => 1
- assert_response :success
- end
-
- def test_should_update_user
- put :update, :id => 1, :user => { }
- assert_redirected_to user_path(assigns(:user))
- end
-
- def test_should_destroy_user
- assert_difference('User.count', -1) do
- delete :destroy, :id => 1
- end
-
- assert_redirected_to users_path
- end
-end
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/test_helper.rb b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/test_helper.rb
deleted file mode 100644
index 773c49de..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/test_helper.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-ENV["RAILS_ENV"] = "development"
-require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
-require 'test_help'
-
-class Test::Unit::TestCase
- self.use_transactional_fixtures = true
- self.use_instantiated_fixtures = false
-end
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/unit/bone_test.rb b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/unit/bone_test.rb
deleted file mode 100644
index 8afcb87b..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/unit/bone_test.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-
-class BoneTest < Test::Unit::TestCase
- # Replace this with your real tests.
- def test_truth
- assert true
- end
-end
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/unit/double_sti_parent_relationship_test.rb b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/unit/double_sti_parent_relationship_test.rb
deleted file mode 100644
index dc20e74d..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/unit/double_sti_parent_relationship_test.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-
-class DoubleStiParentRelationshipTest < Test::Unit::TestCase
- # Replace this with your real tests.
- def test_truth
- assert true
- end
-end
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/unit/double_sti_parent_test.rb b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/unit/double_sti_parent_test.rb
deleted file mode 100644
index 154383a2..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/unit/double_sti_parent_test.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-
-class DoubleStiParentTest < Test::Unit::TestCase
- # Replace this with your real tests.
- def test_truth
- assert true
- end
-end
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/unit/organic_substance_test.rb b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/unit/organic_substance_test.rb
deleted file mode 100644
index af328b95..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/unit/organic_substance_test.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-
-class OrganicSubstanceTest < Test::Unit::TestCase
- # Replace this with your real tests.
- def test_truth
- assert true
- end
-end
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/unit/single_sti_parent_relationship_test.rb b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/unit/single_sti_parent_relationship_test.rb
deleted file mode 100644
index d5563fd8..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/unit/single_sti_parent_relationship_test.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-
-class SingleStiParentRelationshipTest < Test::Unit::TestCase
- # Replace this with your real tests.
- def test_truth
- assert true
- end
-end
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/unit/single_sti_parent_test.rb b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/unit/single_sti_parent_test.rb
deleted file mode 100644
index 70a00ecb..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/unit/single_sti_parent_test.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-
-class SingleStiParentTest < Test::Unit::TestCase
- # Replace this with your real tests.
- def test_truth
- assert true
- end
-end
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/unit/stick_test.rb b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/unit/stick_test.rb
deleted file mode 100644
index 6729e0d6..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/unit/stick_test.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-
-class StickTest < Test::Unit::TestCase
- # Replace this with your real tests.
- def test_truth
- assert true
- end
-end
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/unit/stone_test.rb b/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/unit/stone_test.rb
deleted file mode 100644
index 76b518d7..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/app/test/unit/stone_test.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-
-class StoneTest < Test::Unit::TestCase
- # Replace this with your real tests.
- def test_truth
- assert true
- end
-end
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/integration/server_test.rb b/vendor/gems/has_many_polymorphs-2.13/test/integration/server_test.rb
deleted file mode 100644
index e53ea1aa..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/integration/server_test.rb
+++ /dev/null
@@ -1,43 +0,0 @@
-
-require "#{File.dirname(__FILE__)}/../test_helper"
-require 'open-uri'
-
-# Start the server
-
-class ServerTest < Test::Unit::TestCase
-
- PORT = 43040
- URL = "http://localhost:#{PORT}/"
-
- def setup
- @pid = Process.fork do
- Dir.chdir RAILS_ROOT do
- # print "S"
- exec("script/server -p #{PORT} &> #{LOG}")
- end
- end
- sleep(5)
- end
-
- def teardown
- # Process.kill(9, @pid) doesn't work because Mongrel has double-forked itself away
- `ps awx | grep #{PORT} | grep -v grep | awk '{print $1}'`.split("\n").each do |pid|
- system("kill -9 #{pid}")
- # print "K"
- end
- sleep(2)
- @pid = nil
- end
-
- def test_association_reloading
- assert_match(/Bones: index/, open(URL + 'bones').read)
- assert_match(/Bones: index/, open(URL + 'bones').read)
- assert_match(/Bones: index/, open(URL + 'bones').read)
- assert_match(/Bones: index/, open(URL + 'bones').read)
- end
-
- def test_verify_autoload_gets_invoked_in_console
- # XXX Probably can use script/runner to test this
- end
-
-end
\ No newline at end of file
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/models/aquatic/fish.rb b/vendor/gems/has_many_polymorphs-2.13/test/models/aquatic/fish.rb
deleted file mode 100644
index 204642e9..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/models/aquatic/fish.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-class Aquatic::Fish < ActiveRecord::Base
- # set_table_name "fish"
- # attr_accessor :after_find_test, :after_initialize_test
-end
-
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/models/aquatic/pupils_whale.rb b/vendor/gems/has_many_polymorphs-2.13/test/models/aquatic/pupils_whale.rb
deleted file mode 100644
index ae4cbc18..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/models/aquatic/pupils_whale.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-
-class Aquatic::PupilsWhale < ActiveRecord::Base
- set_table_name "little_whale_pupils"
- belongs_to :whale, :class_name => "Aquatic::Whale", :foreign_key => "whale_id"
- belongs_to :aquatic_pupil, :polymorphic => true
-end
-
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/models/aquatic/whale.rb b/vendor/gems/has_many_polymorphs-2.13/test/models/aquatic/whale.rb
deleted file mode 100644
index 0ca1b7fb..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/models/aquatic/whale.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-# see http://dev.rubyonrails.org/ticket/5935
-module Aquatic; end
-require 'aquatic/fish'
-require 'aquatic/pupils_whale'
-
-class Aquatic::Whale < ActiveRecord::Base
- # set_table_name "whales"
-
- has_many_polymorphs(:aquatic_pupils, :from => [:dogs, :"aquatic/fish"],
- :through => "aquatic/pupils_whales") do
- def a_method
- :correct_block_result
- end
- end
-end
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/models/beautiful_fight_relationship.rb b/vendor/gems/has_many_polymorphs-2.13/test/models/beautiful_fight_relationship.rb
deleted file mode 100644
index b678c982..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/models/beautiful_fight_relationship.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-
-require 'extension_module'
-
-class BeautifulFightRelationship < ActiveRecord::Base
- set_table_name 'keep_your_enemies_close'
-
- belongs_to :enemy, :polymorphic => true
- belongs_to :protector, :polymorphic => true
- # polymorphic relationships with column names different from the relationship name
- # are not supported by Rails
-
- acts_as_double_polymorphic_join :enemies => [:dogs, :kittens, :frogs],
- :protectors => [:wild_boars, :kittens, :"aquatic/fish", :dogs],
- :enemies_extend => [ExtensionModule, proc {}],
- :protectors_extend => proc {
- def a_method
- :correct_proc_result
- end
- },
- :join_extend => proc {
- def a_method
- :correct_join_result
- end
- }
-end
-
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/models/canine.rb b/vendor/gems/has_many_polymorphs-2.13/test/models/canine.rb
deleted file mode 100644
index b0010160..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/models/canine.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-class Canine < ActiveRecord::Base
- self.abstract_class = true
-
- def an_abstract_method
- :correct_abstract_method_response
- end
-
-end
-
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/models/cat.rb b/vendor/gems/has_many_polymorphs-2.13/test/models/cat.rb
deleted file mode 100644
index 0c99ff08..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/models/cat.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-class Cat < ActiveRecord::Base
- # STI base class
- self.inheritance_column = 'cat_type'
-end
-
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/models/dog.rb b/vendor/gems/has_many_polymorphs-2.13/test/models/dog.rb
deleted file mode 100644
index 7f027237..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/models/dog.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-
-require 'canine'
-
-class Dog < Canine
- attr_accessor :after_find_test, :after_initialize_test
- set_table_name "bow_wows"
-
- def after_find
- @after_find_test = true
-# puts "After find called on #{name}."
- end
-
- def after_initialize
- @after_initialize_test = true
- end
-
-end
-
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/models/eaters_foodstuff.rb b/vendor/gems/has_many_polymorphs-2.13/test/models/eaters_foodstuff.rb
deleted file mode 100644
index d904bb16..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/models/eaters_foodstuff.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-
-class EatersFoodstuff < ActiveRecord::Base
- belongs_to :foodstuff, :class_name => "Petfood", :foreign_key => "foodstuff_id"
- belongs_to :eater, :polymorphic => true
-
- def before_save
- self.some_attribute = 3
- end
-end
-
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/models/frog.rb b/vendor/gems/has_many_polymorphs-2.13/test/models/frog.rb
deleted file mode 100644
index 5a0f4658..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/models/frog.rb
+++ /dev/null
@@ -1,4 +0,0 @@
-class Frog < ActiveRecord::Base
-
-end
-
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/models/kitten.rb b/vendor/gems/has_many_polymorphs-2.13/test/models/kitten.rb
deleted file mode 100644
index 2a244c03..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/models/kitten.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-class Kitten < Cat
-# has_many :eaters_parents, :dependent => true, :as => 'eater'
-end
\ No newline at end of file
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/models/parentship.rb b/vendor/gems/has_many_polymorphs-2.13/test/models/parentship.rb
deleted file mode 100644
index e87b759b..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/models/parentship.rb
+++ /dev/null
@@ -1,4 +0,0 @@
-class Parentship < ActiveRecord::Base
- belongs_to :parent, :class_name => "Person", :foreign_key => "parent_id"
- belongs_to :kid, :polymorphic => true, :foreign_type => "child_type"
-end
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/models/person.rb b/vendor/gems/has_many_polymorphs-2.13/test/models/person.rb
deleted file mode 100644
index 5d019829..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/models/person.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-require 'parentship'
-class Person < ActiveRecord::Base
- has_many_polymorphs :kids,
- :through => :parentships,
- :from => [:people],
- :as => :parent,
- :polymorphic_type_key => "child_type",
- :conditions => "people.age < 10"
-end
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/models/petfood.rb b/vendor/gems/has_many_polymorphs-2.13/test/models/petfood.rb
deleted file mode 100644
index df420ea8..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/models/petfood.rb
+++ /dev/null
@@ -1,39 +0,0 @@
-# see http://dev.rubyonrails.org/ticket/5935
-require 'eaters_foodstuff'
-require 'petfood'
-require 'cat'
-module Aquatic; end
-require 'aquatic/fish'
-require 'dog'
-require 'wild_boar'
-require 'kitten'
-require 'tabby'
-require 'extension_module'
-require 'other_extension_module'
-
-class Petfood < ActiveRecord::Base
- set_primary_key 'the_petfood_primary_key'
- has_many_polymorphs :eaters,
- :from => [:dogs, :petfoods, :wild_boars, :kittens,
- :tabbies, :"aquatic/fish"],
-# :dependent => :destroy, :destroy is now the default
- :rename_individual_collections => true,
- :as => :foodstuff,
- :foreign_key => "foodstuff_id",
- :ignore_duplicates => false,
- :conditions => "NULL IS NULL",
- :order => "eaters_foodstuffs.updated_at ASC",
- :parent_order => "petfoods.the_petfood_primary_key DESC",
- :parent_conditions => "petfoods.name IS NULL OR petfoods.name != 'Snausages'",
- :extend => [ExtensionModule, OtherExtensionModule, proc {}],
- :join_extend => proc {
- def a_method
- :correct_join_result
- end
- },
- :parent_extend => proc {
- def a_method
- :correct_parent_proc_result
- end
- }
- end
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/models/tabby.rb b/vendor/gems/has_many_polymorphs-2.13/test/models/tabby.rb
deleted file mode 100644
index 3cd0f994..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/models/tabby.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-class Tabby < Cat
-end
\ No newline at end of file
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/models/wild_boar.rb b/vendor/gems/has_many_polymorphs-2.13/test/models/wild_boar.rb
deleted file mode 100644
index 27d36a53..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/models/wild_boar.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-class WildBoar < ActiveRecord::Base
-end
-
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/modules/extension_module.rb b/vendor/gems/has_many_polymorphs-2.13/test/modules/extension_module.rb
deleted file mode 100644
index 7cb4eff4..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/modules/extension_module.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-
-module ExtensionModule
- def a_method
- :correct_module_result
- end
- def self.a_method
- :incorrect_module_result
- end
-end
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/modules/other_extension_module.rb b/vendor/gems/has_many_polymorphs-2.13/test/modules/other_extension_module.rb
deleted file mode 100644
index 16313bd8..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/modules/other_extension_module.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-
-module OtherExtensionModule
- def another_method
- :correct_other_module_result
- end
- def self.another_method
- :incorrect_other_module_result
- end
-end
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/patches/symlinked_plugins_1.2.6.diff b/vendor/gems/has_many_polymorphs-2.13/test/patches/symlinked_plugins_1.2.6.diff
deleted file mode 100644
index 99e0df3e..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/patches/symlinked_plugins_1.2.6.diff
+++ /dev/null
@@ -1,46 +0,0 @@
-Index: /trunk/railties/lib/rails_generator/lookup.rb
-===================================================================
---- /trunk/railties/lib/rails_generator/lookup.rb (revision 4310)
-+++ /trunk/railties/lib/rails_generator/lookup.rb (revision 6101)
-@@ -101,5 +101,5 @@
- sources << PathSource.new(:lib, "#{::RAILS_ROOT}/lib/generators")
- sources << PathSource.new(:vendor, "#{::RAILS_ROOT}/vendor/generators")
-- sources << PathSource.new(:plugins, "#{::RAILS_ROOT}/vendor/plugins/**/generators")
-+ sources << PathSource.new(:plugins, "#{::RAILS_ROOT}/vendor/plugins/*/**/generators")
- end
- sources << PathSource.new(:user, "#{Dir.user_home}/.rails/generators")
-Index: /trunk/railties/lib/tasks/rails.rb
-===================================================================
---- /trunk/railties/lib/tasks/rails.rb (revision 5469)
-+++ /trunk/railties/lib/tasks/rails.rb (revision 6101)
-@@ -6,3 +6,3 @@
- # Load any custom rakefile extensions
- Dir["#{RAILS_ROOT}/lib/tasks/**/*.rake"].sort.each { |ext| load ext }
--Dir["#{RAILS_ROOT}/vendor/plugins/**/tasks/**/*.rake"].sort.each { |ext| load ext }
-+Dir["#{RAILS_ROOT}/vendor/plugins/*/**/tasks/**/*.rake"].sort.each { |ext| load ext }
-Index: /trunk/railties/lib/tasks/testing.rake
-===================================================================
---- /trunk/railties/lib/tasks/testing.rake (revision 5263)
-+++ /trunk/railties/lib/tasks/testing.rake (revision 6101)
-@@ -109,9 +109,9 @@
- t.pattern = "vendor/plugins/#{ENV['PLUGIN']}/test/**/*_test.rb"
- else
-- t.pattern = 'vendor/plugins/**/test/**/*_test.rb'
-+ t.pattern = 'vendor/plugins/*/**/test/**/*_test.rb'
- end
-
- t.verbose = true
- end
-- Rake::Task['test:plugins'].comment = "Run the plugin tests in vendor/plugins/**/test (or specify with PLUGIN=name)"
-+ Rake::Task['test:plugins'].comment = "Run the plugin tests in vendor/plugins/*/**/test (or specify with PLUGIN=name)"
- end
-Index: /trunk/railties/CHANGELOG
-===================================================================
---- /trunk/railties/CHANGELOG (revision 6069)
-+++ /trunk/railties/CHANGELOG (revision 6101)
-@@ -1,3 +1,5 @@
- *SVN*
-+
-+* Plugins may be symlinked in vendor/plugins. #4245 [brandon, progrium@gmail.com]
-
- * Resource generator depends on the model generator rather than duplicating it. #7269 [bscofield]
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/schema.rb b/vendor/gems/has_many_polymorphs-2.13/test/schema.rb
deleted file mode 100644
index 39d869dc..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/schema.rb
+++ /dev/null
@@ -1,87 +0,0 @@
-ActiveRecord::Schema.define(:version => 0) do
- create_table :petfoods, :force => true, :primary_key => :the_petfood_primary_key do |t|
- t.column :name, :string
- t.column :created_at, :datetime, :null => false
- t.column :updated_at, :datetime, :null => false
- end
-
- create_table :bow_wows, :force => true do |t|
- t.column :name, :string
- t.column :created_at, :datetime, :null => false
- t.column :updated_at, :datetime, :null => false
- end
-
- create_table :cats, :force => true do |t|
- t.column :name, :string
- t.column :cat_type, :string
- t.column :created_at, :datetime, :null => false
- t.column :updated_at, :datetime, :null => false
- end
-
- create_table :frogs, :force => true do |t|
- t.column :name, :string
- t.column :created_at, :datetime, :null => false
- t.column :updated_at, :datetime, :null => false
- end
-
- create_table :wild_boars, :force => true do |t|
- t.column :name, :string
- t.column :created_at, :datetime, :null => false
- t.column :updated_at, :datetime, :null => false
- end
-
- create_table :eaters_foodstuffs, :force => true do |t|
- t.column :foodstuff_id, :integer
- t.column :eater_id, :integer
- t.column :some_attribute, :integer, :default => 0
- t.column :eater_type, :string
- t.column :created_at, :datetime, :null => false
- t.column :updated_at, :datetime, :null => false
- end
-
- create_table :fish, :force => true do |t|
- t.column :name, :string
- t.column :speed, :integer
- t.column :created_at, :datetime, :null => false
- t.column :updated_at, :datetime, :null => false
- end
-
- create_table :whales, :force => true do |t|
- t.column :name, :string
- t.column :created_at, :datetime, :null => false
- t.column :updated_at, :datetime, :null => false
- end
-
- create_table :little_whale_pupils, :force => true do |t|
- t.column :whale_id, :integer
- t.column :aquatic_pupil_id, :integer
- t.column :aquatic_pupil_type, :string
- t.column :created_at, :datetime, :null => false
- t.column :updated_at, :datetime, :null => false
- end
-
- create_table :keep_your_enemies_close, :force => true do |t|
- t.column :enemy_id, :integer
- t.column :enemy_type, :string
- t.column :protector_id, :integer
- t.column :protector_type, :string
- t.column :created_at, :datetime, :null => false
- t.column :updated_at, :datetime, :null => false
- end
-
- create_table :parentships, :force => true do |t|
- t.column :parent_id, :integer
- t.column :child_type, :string
- t.column :kid_id, :integer
- t.column :created_at, :datetime, :null => false
- t.column :updated_at, :datetime, :null => false
- end
-
- create_table :people, :force => true do |t|
- t.column :name, :string
- t.column :age, :integer
- t.column :created_at, :datetime, :null => false
- t.column :updated_at, :datetime, :null => false
- end
-
-end
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/setup.rb b/vendor/gems/has_many_polymorphs-2.13/test/setup.rb
deleted file mode 100644
index 52535798..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/setup.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-
-# Setup integration system for the integration suite
-
-Dir.chdir "#{File.dirname(__FILE__)}/integration/app/" do
- Dir.chdir "vendor/plugins" do
- system("rm has_many_polymorphs; ln -s ../../../../../ has_many_polymorphs")
- end
-
- system "rake db:drop --trace RAILS_GEM_VERSION=2.2.2 "
- system "rake db:create --trace RAILS_GEM_VERSION=2.2.2 "
- system "rake db:migrate --trace"
- system "rake db:fixtures:load --trace"
-end
-
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/test_helper.rb b/vendor/gems/has_many_polymorphs-2.13/test/test_helper.rb
deleted file mode 100644
index 363a6607..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/test_helper.rb
+++ /dev/null
@@ -1,51 +0,0 @@
-
-$VERBOSE = nil
-require 'rubygems'
-require 'echoe'
-require 'test/unit'
-require 'multi_rails_init'
-require 'ruby-debug'
-
-if defined? ENV['MULTIRAILS_RAILS_VERSION']
- ENV['RAILS_GEM_VERSION'] = ENV['MULTIRAILS_RAILS_VERSION']
-end
-
-Echoe.silence do
- HERE = File.expand_path(File.dirname(__FILE__))
- $LOAD_PATH << HERE
- # $LOAD_PATH << "#{HERE}/integration/app"
-end
-
-LOG = "#{HERE}/integration/app/log/development.log"
-
-### For unit tests
-
-require 'integration/app/config/environment'
-require 'test_help'
-
-ActiveSupport::Inflector.inflections {|i| i.irregular 'fish', 'fish' }
-
-$LOAD_PATH.unshift(Test::Unit::TestCase.fixture_path = HERE + "/fixtures")
-$LOAD_PATH.unshift(HERE + "/models")
-$LOAD_PATH.unshift(HERE + "/modules")
-
-class Test::Unit::TestCase
- self.use_transactional_fixtures = !(ActiveRecord::Base.connection.is_a? ActiveRecord::ConnectionAdapters::MysqlAdapter rescue false)
- self.use_instantiated_fixtures = false
-end
-
-Echoe.silence do
- load(HERE + "/schema.rb")
-end
-
-### For integration tests
-
-def truncate
- system("> #{LOG}")
-end
-
-def log
- File.open(LOG, 'r') do |f|
- f.read
- end
-end
diff --git a/vendor/gems/has_many_polymorphs-2.13/test/unit/has_many_polymorphs_test.rb b/vendor/gems/has_many_polymorphs-2.13/test/unit/has_many_polymorphs_test.rb
deleted file mode 100644
index 7f4b05a4..00000000
--- a/vendor/gems/has_many_polymorphs-2.13/test/unit/has_many_polymorphs_test.rb
+++ /dev/null
@@ -1,714 +0,0 @@
-require File.dirname(__FILE__) + '/../test_helper'
-
-require 'dog'
-require 'wild_boar'
-require 'frog'
-require 'cat'
-require 'kitten'
-require 'aquatic/whale'
-require 'aquatic/fish'
-require 'aquatic/pupils_whale'
-require 'beautiful_fight_relationship'
-
-class PolymorphTest < Test::Unit::TestCase
-
- set_fixture_class :bow_wows => Dog
- set_fixture_class :keep_your_enemies_close => BeautifulFightRelationship
- set_fixture_class :whales => Aquatic::Whale
- set_fixture_class :fish => Aquatic::Fish
- set_fixture_class :little_whale_pupils => Aquatic::PupilsWhale
-
- fixtures :cats, :bow_wows, :frogs, :wild_boars, :eaters_foodstuffs, :petfoods,
- :fish, :whales, :little_whale_pupils, :keep_your_enemies_close, :people
-
- def setup
- @association_error = ActiveRecord::Associations::PolymorphicError
- @kibbles = Petfood.find(1)
- @bits = Petfood.find(2)
- @shamu = Aquatic::Whale.find(1)
- @swimmy = Aquatic::Fish.find(1)
- @rover = Dog.find(1)
- @spot = Dog.find(2)
- @puma = WildBoar.find(1)
- @chloe = Kitten.find(1)
- @alice = Kitten.find(2)
- @toby = Tabby.find(3)
- @froggy = Frog.find(1)
-
- @join_count = EatersFoodstuff.count
- @kibbles_eaters_count = @kibbles.eaters.size
- @bits_eaters_count = @bits.eaters.size
-
- @double_join_count = BeautifulFightRelationship.count
- @alice_enemies_count = @alice.enemies.size
- end
-
- def test_all_relationship_validities
- # q = []
- # ObjectSpace.each_object(Class){|c| q << c if c.ancestors.include? ActiveRecord::Base }
- # q.each{|c| puts "#{c.name}.reflect_on_all_associations.map(&:check_validity!)"}
- Petfood.reflect_on_all_associations.map(&:check_validity!)
- Tabby.reflect_on_all_associations.map(&:check_validity!)
- Kitten.reflect_on_all_associations.map(&:check_validity!)
- Dog.reflect_on_all_associations.map(&:check_validity!)
- Canine.reflect_on_all_associations.map(&:check_validity!)
- Aquatic::Fish.reflect_on_all_associations.map(&:check_validity!)
- EatersFoodstuff.reflect_on_all_associations.map(&:check_validity!)
- WildBoar.reflect_on_all_associations.map(&:check_validity!)
- Frog.reflect_on_all_associations.map(&:check_validity!)
- Cat.reflect_on_all_associations.map(&:check_validity!)
- BeautifulFightRelationship.reflect_on_all_associations.map(&:check_validity!)
- Person.reflect_on_all_associations.map(&:check_validity!)
- Parentship.reflect_on_all_associations.map(&:check_validity!)
- Aquatic::Whale.reflect_on_all_associations.map(&:check_validity!)
- Aquatic::PupilsWhale.reflect_on_all_associations.map(&:check_validity!)
- end
-
- def test_assignment
- assert @kibbles.eaters.blank?
- assert @kibbles.eaters.push(Cat.find_by_name('Chloe'))
- assert_equal @kibbles_eaters_count += 1, @kibbles.eaters.count
-
- @kibbles.reload
- assert_equal @kibbles_eaters_count, @kibbles.eaters.count
- end
-
- def test_duplicate_assignment
- # try to add a duplicate item when :ignore_duplicates is false
- @kibbles.eaters.push(@alice)
- assert @kibbles.eaters.include?(@alice)
- @kibbles.eaters.push(@alice)
- assert_equal @kibbles_eaters_count + 2, @kibbles.eaters.count
- assert_equal @join_count + 2, EatersFoodstuff.count
- end
-
- def test_create_and_push
- assert @kibbles.eaters.push(@spot)
- assert_equal @kibbles_eaters_count += 1, @kibbles.eaters.count
- assert @kibbles.eaters << @rover
- assert @kibbles.eaters << Kitten.create(:name => "Miranda")
- assert_equal @kibbles_eaters_count += 2, @kibbles.eaters.length
-
- @kibbles.reload
- assert_equal @kibbles_eaters_count, @kibbles.eaters.length
-
- # test that ids and new flags were set appropriately
- assert_not_nil @kibbles.eaters[0].id
- assert !@kibbles.eaters[1].new_record?
- end
-
- def test_reload
- assert @kibbles.reload
- assert @kibbles.eaters.reload
- end
-
- def test_add_join_record
- assert_equal Kitten, @chloe.class
- assert join = EatersFoodstuff.new(:foodstuff_id => @bits.id, :eater_id => @chloe.id, :eater_type => @chloe.class.name )
- assert join.save!
- assert join.id
- assert_equal @join_count + 1, EatersFoodstuff.count
-
- #assert_equal @bits_eaters_count, @bits.eaters.size # Doesn't behave this way on latest edge anymore
- assert_equal @bits_eaters_count + 1, @bits.eaters.count # SQL
-
- # reload; is the new association there?
- assert @bits.eaters.reload
- assert @bits.eaters.include?(@chloe)
- end
-
- def test_build_join_record_on_association
- assert_equal Kitten, @chloe.class
- assert join = @chloe.eaters_foodstuffs.build(:foodstuff => @bits)
- # assert_equal join.eater_type, @chloe.class.name # will be STI parent type
- assert join.save!
- assert join.id
- assert_equal @join_count + 1, EatersFoodstuff.count
-
- assert @bits.eaters.reload
- assert @bits.eaters.include?(@chloe)
- end
-
-# not supporting this, since has_many :through doesn't support it either
-# def test_add_unsaved
-# # add an unsaved item
-# assert @bits.eaters << Kitten.new(:name => "Bridget")
-# assert_nil Kitten.find_by_name("Bridget")
-# assert_equal @bits_eaters_count + 1, @bits.eaters.count
-#
-# assert @bits.save
-# @bits.reload
-# assert_equal @bits_eaters_count + 1, @bits.eaters.count
-#
-# end
-
- def test_self_reference
- assert @kibbles.eaters << @bits
- assert_equal @kibbles_eaters_count += 1, @kibbles.eaters.count
- assert @kibbles.eaters.include?(@bits)
- @kibbles.reload
- assert @kibbles.foodstuffs_of_eaters.blank?
-
- @bits.reload
- assert @bits.foodstuffs_of_eaters.include?(@kibbles)
- assert_equal [@kibbles], @bits.foodstuffs_of_eaters
- end
-
- def test_remove
- assert @kibbles.eaters << @chloe
- @kibbles.reload
- assert @kibbles.eaters.delete(@kibbles.eaters[0])
- assert_equal @kibbles_eaters_count, @kibbles.eaters.count
- end
-
- def test_destroy
- assert @kibbles.eaters.push(@chloe)
- @kibbles.reload
- assert @kibbles.eaters.length > 0
- assert @kibbles.eaters[0].destroy
- @kibbles.reload
- assert_equal @kibbles_eaters_count, @kibbles.eaters.count
- end
-
- def test_clear
- @kibbles.eaters << [@chloe, @spot, @rover]
- @kibbles.reload
- assert @kibbles.eaters.clear.blank?
- assert @kibbles.eaters.blank?
- @kibbles.reload
- assert @kibbles.eaters.blank?
- end
-
- def test_individual_collections
- assert @kibbles.eaters.push(@chloe)
- # check if individual collections work
- assert_equal @kibbles.eater_kittens.length, 1
- assert @kibbles.eater_dogs
- assert 1, @rover.eaters_foodstuffs.count
- end
-
- def test_individual_collections_push
- assert_equal [@chloe], (@kibbles.eater_kittens << @chloe)
- @kibbles.reload
- assert @kibbles.eaters.include?(@chloe)
- assert @kibbles.eater_kittens.include?(@chloe)
- assert !@kibbles.eater_dogs.include?(@chloe)
- end
-
- def test_individual_collections_delete
- @kibbles.eaters << [@chloe, @spot, @rover]
- @kibbles.reload
- assert_equal [@chloe], @kibbles.eater_kittens.delete(@chloe)
- assert @kibbles.eater_kittens.empty?
- @kibbles.eater_kittens.delete(@chloe) # what should this return?
-
- @kibbles.reload
- assert @kibbles.eater_kittens.empty?
- assert @kibbles.eater_dogs.include?(@spot)
- end
-
- def test_individual_collections_clear
- @kibbles.eaters << [@chloe, @spot, @rover]
- @kibbles.reload
-
- assert_equal [], @kibbles.eater_kittens.clear
- assert @kibbles.eater_kittens.empty?
- assert_equal 2, @kibbles.eaters.size
-
- assert @kibbles.eater_kittens.empty?
- assert_equal 2, @kibbles.eaters.size
- assert !@kibbles.eater_kittens.include?(@chloe)
- assert !@kibbles.eaters.include?(@chloe)
-
- @kibbles.reload
- assert @kibbles.eater_kittens.empty?
- assert_equal 2, @kibbles.eaters.size
- assert !@kibbles.eater_kittens.include?(@chloe)
- assert !@kibbles.eaters.include?(@chloe)
- end
-
- def test_childrens_individual_collections
- assert Cat.find_by_name('Chloe').eaters_foodstuffs
- assert @kibbles.eaters_foodstuffs
- end
-
- def test_self_referential_join_tables
- # check that the self-reference join tables go the right ways
- assert_equal @kibbles_eaters_count, @kibbles.eaters_foodstuffs.count
- assert_equal @kibbles.eaters_foodstuffs.count, @kibbles.eaters_foodstuffs_as_child.count
- end
-
- def test_dependent
- assert @kibbles.eaters << @chloe
- @kibbles.reload
-
- # delete ourself and see if :dependent was obeyed
- dependent_rows = @kibbles.eaters_foodstuffs
- assert_equal dependent_rows.length, @kibbles.eaters.count
- @join_count = EatersFoodstuff.count
-
- @kibbles.destroy
- assert_equal @join_count - dependent_rows.length, EatersFoodstuff.count
- assert_equal 0, EatersFoodstuff.find(:all, :conditions => ['foodstuff_id = ?', 1] ).length
- end
-
- def test_normal_callbacks
- assert @rover.respond_to?(:after_initialize)
- assert @rover.respond_to?(:after_find)
- assert @rover.after_initialize_test
- assert @rover.after_find_test
- end
-
- def test_model_callbacks_not_overridden_by_plugin_callbacks
- assert 0, @bits.eaters.count
- assert @bits.eaters.push(@rover)
- @bits.save
- @bits2 = Petfood.find_by_name("Bits")
- @bits.reload
- assert rover = @bits2.eaters.select { |x| x.name == "Rover" }[0]
- assert rover.after_initialize_test
- assert rover.after_find_test
- end
-
- def test_number_of_join_records
- assert EatersFoodstuff.create(:foodstuff_id => 1, :eater_id => 1, :eater_type => "Cat")
- @join_count = EatersFoodstuff.count
- assert @join_count > 0
- end
-
- def test_number_of_regular_records
- dogs = Dog.count
- assert Dog.new(:name => "Auggie").save!
- assert dogs + 1, Dog.count
- end
-
- def test_attributes_come_through_when_child_has_underscore_in_table_name
- join = EatersFoodstuff.new(:foodstuff_id => @bits.id, :eater_id => @puma.id, :eater_type => @puma.class.name)
- join.save!
-
- @bits.eaters.reload
-
- assert_equal "Puma", @puma.name
- assert_equal "Puma", @bits.eaters.first.name
- end
-
-
- def test_before_save_on_join_table_is_not_clobbered_by_sti_base_class_fix
- assert @kibbles.eaters << @chloe
- assert_equal 3, @kibbles.eaters_foodstuffs.first.some_attribute
- end
-
- def test_sti_type_counts_are_correct
- @kibbles.eaters << [@chloe, @alice, @toby]
- assert_equal 2, @kibbles.eater_kittens.count
- assert_equal 1, @kibbles.eater_tabbies.count
- assert !@kibbles.respond_to?(:eater_cats)
- end
-
-
- def test_creating_namespaced_relationship
- assert @shamu.aquatic_pupils.empty?
- @shamu.aquatic_pupils << @swimmy
- assert_equal 1, @shamu.aquatic_pupils.length
- @shamu.reload
- assert_equal 1, @shamu.aquatic_pupils.length
- end
-
- def test_namespaced_polymorphic_collection
- @shamu.aquatic_pupils << @swimmy
- assert @shamu.aquatic_pupils.include?(@swimmy)
- @shamu.reload
- assert @shamu.aquatic_pupils.include?(@swimmy)
-
- @shamu.aquatic_pupils << @spot
- assert @shamu.dogs.include?(@spot)
- assert @shamu.aquatic_pupils.include?(@swimmy)
- assert_equal @swimmy, @shamu.aquatic_fish.first
- assert_equal 10, @shamu.aquatic_fish.first.speed
- end
-
- def test_deleting_namespaced_relationship
- @shamu.aquatic_pupils << @swimmy
- @shamu.aquatic_pupils << @spot
-
- @shamu.reload
- @shamu.aquatic_pupils.delete @spot
- assert !@shamu.dogs.include?(@spot)
- assert !@shamu.aquatic_pupils.include?(@spot)
- assert_equal 1, @shamu.aquatic_pupils.length
- end
-
- def test_unrenamed_parent_of_namespaced_child
- @shamu.aquatic_pupils << @swimmy
- assert_equal [@shamu], @swimmy.whales
- end
-
- def test_empty_double_collections
- assert @puma.enemies.empty?
- assert @froggy.protectors.empty?
- assert @alice.enemies.empty?
- assert @spot.protectors.empty?
- assert @alice.beautiful_fight_relationships_as_enemy.empty?
- assert @alice.beautiful_fight_relationships_as_protector.empty?
- assert @alice.beautiful_fight_relationships.empty?
- end
-
- def test_double_collection_assignment
- @alice.enemies << @spot
- @alice.reload
- @spot.reload
- assert @spot.protectors.include?(@alice)
- assert @alice.enemies.include?(@spot)
- assert !@alice.protectors.include?(@alice)
- assert_equal 1, @alice.beautiful_fight_relationships_as_protector.size
- assert_equal 0, @alice.beautiful_fight_relationships_as_enemy.size
- assert_equal 1, @alice.beautiful_fight_relationships.size
-
- # self reference
- assert_equal 1, @alice.enemies.length
- @alice.enemies.push @alice
- assert @alice.enemies.include?(@alice)
- assert_equal 2, @alice.enemies.length
- @alice.reload
- assert_equal 2, @alice.beautiful_fight_relationships_as_protector.size
- assert_equal 1, @alice.beautiful_fight_relationships_as_enemy.size
- assert_equal 3, @alice.beautiful_fight_relationships.size
- end
-
- def test_double_collection_build_join_record_on_association
-
- join = @alice.beautiful_fight_relationships_as_protector.build(:enemy => @spot)
-
- assert_equal @alice.class.base_class.name, join.protector_type
- assert_nothing_raised { join.save! }
-
- assert join.id
- assert_equal @double_join_count + 1, BeautifulFightRelationship.count
-
- assert @alice.enemies.reload
- assert @alice.enemies.include?(@spot)
- end
-
- def test_double_dependency_injection
-# breakpoint
- end
-
- def test_double_collection_deletion
- @alice.enemies << @spot
- @alice.reload
- assert @alice.enemies.include?(@spot)
- @alice.enemies.delete(@spot)
- assert !@alice.enemies.include?(@spot)
- assert @alice.enemies.empty?
- @alice.reload
- assert !@alice.enemies.include?(@spot)
- assert @alice.enemies.empty?
- assert_equal 0, @alice.beautiful_fight_relationships.size
- end
-
- def test_double_collection_deletion_from_opposite_side
- @alice.protectors << @puma
- @alice.reload
- assert @alice.protectors.include?(@puma)
- @alice.protectors.delete(@puma)
- assert !@alice.protectors.include?(@puma)
- assert @alice.protectors.empty?
- @alice.reload
- assert !@alice.protectors.include?(@puma)
- assert @alice.protectors.empty?
- assert_equal 0, @alice.beautiful_fight_relationships.size
- end
-
- def test_individual_collections_created_for_double_relationship
- assert @alice.dogs.empty?
- @alice.enemies << @spot
-
- assert @alice.enemies.include?(@spot)
- assert !@alice.kittens.include?(@alice)
-
- assert !@alice.dogs.include?(@spot)
- @alice.reload
- assert @alice.dogs.include?(@spot)
- assert !WildBoar.find(@alice.id).dogs.include?(@spot) # make sure the parent type is checked
- end
-
- def test_individual_collections_created_for_double_relationship_from_opposite_side
- assert @alice.wild_boars.empty?
- @alice.protectors << @puma
-
- assert @alice.protectors.include?(@puma)
- assert !@alice.wild_boars.include?(@puma)
- @alice.reload
- assert @alice.wild_boars.include?(@puma)
-
- assert !Dog.find(@alice.id).wild_boars.include?(@puma) # make sure the parent type is checked
- end
-
- def test_self_referential_individual_collections_created_for_double_relationship
- @alice.enemies << @alice
- @alice.reload
- assert @alice.enemy_kittens.include?(@alice)
- assert @alice.protector_kittens.include?(@alice)
- assert @alice.kittens.include?(@alice)
- assert_equal 2, @alice.kittens.size
-
- @alice.enemies << (@chloe = Kitten.find_by_name('Chloe'))
- @alice.reload
- assert @alice.enemy_kittens.include?(@chloe)
- assert !@alice.protector_kittens.include?(@chloe)
- assert @alice.kittens.include?(@chloe)
- assert_equal 3, @alice.kittens.size
- end
-
- def test_child_of_polymorphic_join_can_reach_parent
- @alice.enemies << @spot
- @alice.reload
- assert @spot.protectors.include?(@alice)
- end
-
- def test_double_collection_deletion_from_child_polymorphic_join
- @alice.enemies << @spot
- @spot.protectors.delete(@alice)
- assert !@spot.protectors.include?(@alice)
- @alice.reload
- assert !@alice.enemies.include?(@spot)
- BeautifulFightRelationship.create(:protector_id => 2, :protector_type => "Dog", :enemy_id => @spot.id, :enemy_type => @spot.class.name)
- @alice.enemies << @spot
- @spot.protectors.delete(@alice)
- assert !@spot.protectors.include?(@alice)
- end
-
- def test_collection_query_on_unsaved_record
- assert Dog.new.enemies.empty?
- assert Dog.new.foodstuffs_of_eaters.empty?
- end
-
- def test_double_individual_collections_push
- assert_equal [@chloe], (@spot.protector_kittens << @chloe)
- @spot.reload
- assert @spot.protectors.include?(@chloe)
- assert @spot.protector_kittens.include?(@chloe)
- assert !@spot.protector_dogs.include?(@chloe)
-
- assert_equal [@froggy], (@spot.frogs << @froggy)
- @spot.reload
- assert @spot.enemies.include?(@froggy)
- assert @spot.frogs.include?(@froggy)
- assert !@spot.enemy_dogs.include?(@froggy)
- end
-
- def test_double_individual_collections_delete
- @spot.protectors << [@chloe, @puma]
- @spot.reload
- assert_equal [@chloe], @spot.protector_kittens.delete(@chloe)
- assert @spot.protector_kittens.empty?
- @spot.protector_kittens.delete(@chloe) # again, unclear what .delete should return
-
- @spot.reload
- assert @spot.protector_kittens.empty?
- assert @spot.wild_boars.include?(@puma)
- end
-
- def test_double_individual_collections_clear
- @spot.protectors << [@chloe, @puma, @alice]
- @spot.reload
- assert_equal [], @spot.protector_kittens.clear
- assert @spot.protector_kittens.empty?
- assert_equal 1, @spot.protectors.size
- @spot.reload
- assert @spot.protector_kittens.empty?
- assert_equal 1, @spot.protectors.size
- assert !@spot.protector_kittens.include?(@chloe)
- assert !@spot.protectors.include?(@chloe)
- assert !@spot.protector_kittens.include?(@alice)
- assert !@spot.protectors.include?(@alice)
- assert @spot.protectors.include?(@puma)
- assert @spot.wild_boars.include?(@puma)
- end
-
- def test_single_extensions
- assert_equal :correct_block_result, @shamu.aquatic_pupils.a_method
- @kibbles.eaters.push(@alice)
- @kibbles.eaters.push(@spot)
- assert_equal :correct_join_result, @kibbles.eaters_foodstuffs.a_method
- assert_equal :correct_module_result, @kibbles.eaters.a_method
- assert_equal :correct_other_module_result, @kibbles.eaters.another_method
- @kibbles.eaters.each do |eater|
- assert_equal :correct_join_result, eater.eaters_foodstuffs.a_method
- end
- assert_equal :correct_parent_proc_result, @kibbles.foodstuffs_of_eaters.a_method
- assert_equal :correct_parent_proc_result, @kibbles.eaters.first.foodstuffs_of_eaters.a_method
- end
-
- def test_double_extensions
- assert_equal :correct_proc_result, @spot.protectors.a_method
- assert_equal :correct_module_result, @spot.enemies.a_method
- assert_equal :correct_join_result, @spot.beautiful_fight_relationships_as_enemy.a_method
- assert_equal :correct_join_result, @spot.beautiful_fight_relationships_as_protector.a_method
- assert_equal :correct_join_result, @froggy.beautiful_fight_relationships.a_method
- assert_equal :correct_join_result, @froggy.beautiful_fight_relationships_as_enemy.a_method
- assert_raises(NoMethodError) {@froggy.beautiful_fight_relationships_as_protector.a_method}
- end
-
- def test_pluralization_checks
- assert_raises(@association_error) {
- eval "class SomeModel < ActiveRecord::Base
- has_many_polymorphs :polymorphs, :from => [:dog, :cats]
- end" }
- assert_raises(@association_error) {
- eval "class SomeModel < ActiveRecord::Base
- has_many_polymorphs :polymorph, :from => [:dogs, :cats]
- end" }
- assert_raises(@association_error) {
- eval "class SomeModel < ActiveRecord::Base
- acts_as_double_polymorphic_join :polymorph => [:dogs, :cats], :unimorphs => [:dogs, :cats]
- end" }
- end
-
- def test_error_message_on_namespaced_targets
- assert_raises(@association_error) {
- eval "class SomeModel < ActiveRecord::Base
- has_many_polymorphs :polymorphs, :from => [:fish]
- end" }
- end
-
- def test_single_custom_finders
- [@kibbles, @alice, @puma, @spot, @bits].each {|record| @kibbles.eaters << record; sleep 1} # XXX yeah i know
- assert_equal @kibbles.eaters, @kibbles.eaters.find(:all, :order => "eaters_foodstuffs.created_at ASC")
- assert_equal @kibbles.eaters.reverse, @kibbles.eaters.find(:all, :order => "eaters_foodstuffs.created_at DESC")
- if (ActiveRecord::Base.connection.is_a? ActiveRecord::ConnectionAdapters::MysqlAdapter rescue false)
- assert_equal @kibbles.eaters.sort_by(&:created_at), @kibbles.eaters.find(:all, :order => "IFNULL(bow_wows.created_at,(IFNULL(petfoods.created_at,(IFNULL(wild_boars.created_at,(IFNULL(cats.created_at,fish.created_at))))))) ASC")
- end
- assert_equal @kibbles.eaters.select{|x| x.is_a? Petfood}, @kibbles.eater_petfoods.find(:all, :order => "eaters_foodstuffs.created_at ASC")
- end
-
- def test_double_custom_finders
- @spot.protectors << [@chloe, @puma, @alice]
- assert_equal [@chloe], @spot.protectors.find(:all, :conditions => ["cats.name = ?", @chloe.name], :limit => 1)
- assert_equal [], @spot.protectors.find(:all, :conditions => ["cats.name = ?", @chloe.name], :limit => 1, :offset => 1)
- assert_equal 2, @spot.protectors.find(:all, :limit => 100, :offset => 1).size
- end
-
- def test_single_custom_finder_parameters_carry_to_individual_relationships
- # XXX test nullout here
- end
-
- def test_double_custom_finder_parameters_carry_to_individual_relationships
- # XXX test nullout here
- end
-
- def test_include_doesnt_fail
- assert_nothing_raised do
- @spot.protectors.find(:all, :include => :wild_boars)
- end
- end
-
- def test_abstract_method
- assert_equal :correct_abstract_method_response, @spot.an_abstract_method
- end
-
- def test_missing_target_should_raise
- @kibbles.eaters << [@kibbles, @alice, @puma, @spot, @bits]
- @spot.destroy_without_callbacks
- assert_raises(@association_error) { @kibbles.eaters.reload }
-# assert_raises(@association_error) { @kibbles.eater_dogs.reload } # bah AR
- end
-
- def test_lazy_loading_is_lazy
- # XXX
- end
-
- def test_push_with_skip_duplicates_false_doesnt_load_target
- # Loading kibbles locally again because setup calls .size which loads target
- kibbles = Petfood.find(1)
- assert !kibbles.eaters.loaded?
- assert !(kibbles.eater_dogs << Dog.create!(:name => "Mongy")).loaded?
- assert !kibbles.eaters.loaded?
- end
-
- def test_association_foreign_key_is_sane
- assert_equal "eater_id", Petfood.reflect_on_association(:eaters).association_foreign_key
- end
-
- def test_reflection_instance_methods_are_sane
- assert_equal EatersFoodstuff, Petfood.reflect_on_association(:eaters).klass
- assert_equal EatersFoodstuff.name, Petfood.reflect_on_association(:eaters).class_name
- end
-
- def test_parent_order
- @alice.foodstuffs_of_eaters << Petfood.find(:all, :order => "the_petfood_primary_key ASC")
- @alice.reload #not necessary
- assert_equal [2,1], @alice.foodstuffs_of_eaters.map(&:id)
- end
-
- def test_parent_conditions
- @kibbles.eaters << @alice
- assert_equal [@alice], @kibbles.eaters
-
- @snausages = Petfood.create(:name => 'Snausages')
- @snausages.eaters << @alice
- assert_equal [@alice], @snausages.eaters
-
- assert_equal [@kibbles], @alice.foodstuffs_of_eaters
- end
-
- def test_self_referential_hmp_with_conditions
- p = Person.find(:first)
- kid = Person.create(:name => "Tim", :age => 3)
- p.kids << kid
-
- kid.reload; p.reload
-
- # assert_equal [p], kid.parents
- # assert Rails.has_one? Bug
- # non-standard foreign_type key is not set properly when you are the polymorphic interface of a has_many going to a :through
-
- assert_equal [kid], p.kids
- assert_equal [kid], p.people
- end
-
-# def test_polymorphic_include
-# @kibbles.eaters << [@kibbles, @alice, @puma, @spot, @bits]
-# assert @kibbles.eaters.include?(@kibbles.eaters_foodstuffs.find(:all, :include => :eater).first.eater)
-# end
-#
-# def test_double_polymorphic_include
-# end
-#
-# def test_single_child_include
-# end
-#
-# def test_double_child_include
-# end
-#
-# def test_single_include_from_parent
-# end
-#
-# def test_double_include_from_parent
-# end
-#
-# def test_meta_referential_single_include
-# end
-#
-# def test_meta_referential_double_include
-# end
-#
-# def test_meta_referential_single_include
-# end
-#
-# def test_meta_referential_single_double_multi_include
-# end
-#
-# def test_dont_ignore_duplicates
-# end
-#
-# def test_ignore_duplicates
-# end
-#
-# def test_tagging_system_generator
-# end
-#
-# def test_tagging_system_library
-# end
-
-end
diff --git a/vendor/gems/highline-1.5.0/.specification b/vendor/gems/highline-1.5.0/.specification
deleted file mode 100644
index 2ebbb33c..00000000
--- a/vendor/gems/highline-1.5.0/.specification
+++ /dev/null
@@ -1,87 +0,0 @@
---- !ruby/object:Gem::Specification
-name: highline
-version: !ruby/object:Gem::Version
- version: 1.5.0
-platform: ruby
-authors:
-- James Edward Gray II
-autorequire:
-bindir: bin
-cert_chain: []
-
-date: 2008-11-05 00:00:00 +01:00
-default_executable:
-dependencies: []
-
-description: A high-level IO library that provides validation, type conversion, and more for command-line interfaces. HighLine also includes a complete menu system that can crank out anything from simple list selection to complete shells with just minutes of work.
-email: james@grayproductions.net
-executables: []
-
-extensions: []
-
-extra_rdoc_files:
-- README
-- INSTALL
-- TODO
-- CHANGELOG
-- LICENSE
-files:
-- examples/ansi_colors.rb
-- examples/asking_for_arrays.rb
-- examples/basic_usage.rb
-- examples/color_scheme.rb
-- examples/menus.rb
-- examples/overwrite.rb
-- examples/page_and_wrap.rb
-- examples/password.rb
-- examples/trapping_eof.rb
-- examples/using_readline.rb
-- lib/highline/color_scheme.rb
-- lib/highline/import.rb
-- lib/highline/menu.rb
-- lib/highline/question.rb
-- lib/highline/system_extensions.rb
-- lib/highline.rb
-- test/tc_color_scheme.rb
-- test/tc_highline.rb
-- test/tc_import.rb
-- test/tc_menu.rb
-- test/ts_all.rb
-- Rakefile
-- setup.rb
-- README
-- INSTALL
-- TODO
-- CHANGELOG
-- LICENSE
-has_rdoc: true
-homepage: http://highline.rubyforge.org
-post_install_message:
-rdoc_options:
-- --title
-- HighLine Documentation
-- --main
-- README
-require_paths:
-- lib
-required_ruby_version: !ruby/object:Gem::Requirement
- requirements:
- - - ">="
- - !ruby/object:Gem::Version
- version: "0"
- version:
-required_rubygems_version: !ruby/object:Gem::Requirement
- requirements:
- - - ">="
- - !ruby/object:Gem::Version
- version: "0"
- version:
-requirements: []
-
-rubyforge_project: highline
-rubygems_version: 1.3.1
-signing_key:
-specification_version: 2
-summary: HighLine is a high-level command-line IO library.
-test_files:
-- test/ts_all.rb
diff --git a/vendor/gems/highline-1.5.0/CHANGELOG b/vendor/gems/highline-1.5.0/CHANGELOG
deleted file mode 100644
index 3d04911e..00000000
--- a/vendor/gems/highline-1.5.0/CHANGELOG
+++ /dev/null
@@ -1,211 +0,0 @@
-= Change Log
-
-Below is a complete listing of changes for each revision of HighLine.
-
-== 1.5.0
-
-* Fixed a bug that would prevent Readline from showing all completions.
- (reported by Yaohan Chen)
-* Added the ability to pass a block to HighLine#agree().
- (patch by Yaohan Chen)
-
-== 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.5.0/INSTALL b/vendor/gems/highline-1.5.0/INSTALL
deleted file mode 100644
index c22f0414..00000000
--- a/vendor/gems/highline-1.5.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.5.0/LICENSE b/vendor/gems/highline-1.5.0/LICENSE
deleted file mode 100644
index ff6f232c..00000000
--- a/vendor/gems/highline-1.5.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.5.0/README b/vendor/gems/highline-1.5.0/README
deleted file mode 100644
index f28478bb..00000000
--- a/vendor/gems/highline-1.5.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.5.0/Rakefile b/vendor/gems/highline-1.5.0/Rakefile
deleted file mode 100644
index 26a68f00..00000000
--- a/vendor/gems/highline-1.5.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.5.0/examples/asking_for_arrays.rb b/vendor/gems/highline-1.5.0/examples/asking_for_arrays.rb
deleted file mode 100644
index 6c62a0e4..00000000
--- a/vendor/gems/highline-1.5.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.5.0/examples/basic_usage.rb b/vendor/gems/highline-1.5.0/examples/basic_usage.rb
deleted file mode 100644
index 60ecdc18..00000000
--- a/vendor/gems/highline-1.5.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.5.0/examples/color_scheme.rb b/vendor/gems/highline-1.5.0/examples/color_scheme.rb
deleted file mode 100644
index 6d1e0a76..00000000
--- a/vendor/gems/highline-1.5.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.5.0/examples/menus.rb b/vendor/gems/highline-1.5.0/examples/menus.rb
deleted file mode 100644
index e31c11df..00000000
--- a/vendor/gems/highline-1.5.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.5.0/examples/overwrite.rb b/vendor/gems/highline-1.5.0/examples/overwrite.rb
deleted file mode 100644
index 1ca2db52..00000000
--- a/vendor/gems/highline-1.5.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.5.0/examples/page_and_wrap.rb b/vendor/gems/highline-1.5.0/examples/page_and_wrap.rb
deleted file mode 100644
index 3209a4ab..00000000
--- a/vendor/gems/highline-1.5.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
- Readline.completion_proc = lambda do |string|
- @question.selection.grep(/\A#{Regexp.escape(string)}/)
- end
-
- # 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.5.0/lib/highline/color_scheme.rb b/vendor/gems/highline-1.5.0/lib/highline/color_scheme.rb
deleted file mode 100644
index e7cbdf99..00000000
--- a/vendor/gems/highline-1.5.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.5.0/lib/highline/import.rb b/vendor/gems/highline-1.5.0/lib/highline/import.rb
deleted file mode 100644
index 579a9734..00000000
--- a/vendor/gems/highline-1.5.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.5.0/lib/highline/menu.rb b/vendor/gems/highline-1.5.0/lib/highline/menu.rb
deleted file mode 100644
index ad992ac0..00000000
--- a/vendor/gems/highline-1.5.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.5.0/lib/highline/question.rb b/vendor/gems/highline-1.5.0/lib/highline/question.rb
deleted file mode 100644
index a3d89cc6..00000000
--- a/vendor/gems/highline-1.5.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.5.0/lib/highline/system_extensions.rb b/vendor/gems/highline-1.5.0/lib/highline/system_extensions.rb
deleted file mode 100644
index e08b4772..00000000
--- a/vendor/gems/highline-1.5.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.5.0/setup.rb b/vendor/gems/highline-1.5.0/setup.rb
deleted file mode 100644
index 0807023d..00000000
--- a/vendor/gems/highline-1.5.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.5.0/test/tc_color_scheme.rb b/vendor/gems/highline-1.5.0/test/tc_color_scheme.rb
deleted file mode 100644
index cb5cbd0e..00000000
--- a/vendor/gems/highline-1.5.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.5.0/test/tc_highline.rb b/vendor/gems/highline-1.5.0/test/tc_highline.rb
deleted file mode 100644
index bbb8354e..00000000
--- a/vendor/gems/highline-1.5.0/test/tc_highline.rb
+++ /dev/null
@@ -1,823 +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_agree_with_block
- @input << "\n\n"
- @input.rewind
-
- assert_equal(true, @terminal.agree("Yes or no? ") { |q| q.default = "y" })
- assert_equal(false, @terminal.agree("Yes or no? ") { |q| q.default = "n" })
- 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.5.0/test/tc_import.rb b/vendor/gems/highline-1.5.0/test/tc_import.rb
deleted file mode 100644
index 005d5a92..00000000
--- a/vendor/gems/highline-1.5.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.5.0/test/tc_menu.rb b/vendor/gems/highline-1.5.0/test/tc_menu.rb
deleted file mode 100644
index fee18714..00000000
--- a/vendor/gems/highline-1.5.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.5.0/test/ts_all.rb b/vendor/gems/highline-1.5.0/test/ts_all.rb
deleted file mode 100644
index 735dccee..00000000
--- a/vendor/gems/highline-1.5.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"
diff --git a/vendor/gems/ruby-openid-2.1.2/.specification b/vendor/gems/ruby-openid-2.1.2/.specification
deleted file mode 100644
index 6a1a03db..00000000
--- a/vendor/gems/ruby-openid-2.1.2/.specification
+++ /dev/null
@@ -1,290 +0,0 @@
---- !ruby/object:Gem::Specification
-name: ruby-openid
-version: !ruby/object:Gem::Version
- version: 2.1.2
-platform: ruby
-authors:
-- JanRain, Inc
-autorequire: openid
-bindir: bin
-cert_chain:
-date: 2008-06-27 05:00:00 +01:00
-default_executable:
-dependencies: []
-
-description:
-email: openid@janrain.com
-executables: []
-
-extensions: []
-
-extra_rdoc_files:
-- README
-- INSTALL
-- LICENSE
-- UPGRADE
-files:
-- examples/README
-- examples/active_record_openid_store
-- examples/rails_openid
-- examples/discover
-- examples/active_record_openid_store/lib
-- examples/active_record_openid_store/test
-- examples/active_record_openid_store/init.rb
-- examples/active_record_openid_store/README
-- examples/active_record_openid_store/XXX_add_open_id_store_to_db.rb
-- examples/active_record_openid_store/XXX_upgrade_open_id_store.rb
-- examples/active_record_openid_store/lib/association.rb
-- examples/active_record_openid_store/lib/nonce.rb
-- examples/active_record_openid_store/lib/open_id_setting.rb
-- examples/active_record_openid_store/lib/openid_ar_store.rb
-- examples/active_record_openid_store/test/store_test.rb
-- examples/rails_openid/app
-- examples/rails_openid/components
-- examples/rails_openid/config
-- examples/rails_openid/db
-- examples/rails_openid/doc
-- examples/rails_openid/lib
-- examples/rails_openid/log
-- examples/rails_openid/public
-- examples/rails_openid/script
-- examples/rails_openid/test
-- examples/rails_openid/vendor
-- examples/rails_openid/Rakefile
-- examples/rails_openid/README
-- examples/rails_openid/app/controllers
-- examples/rails_openid/app/helpers
-- examples/rails_openid/app/models
-- examples/rails_openid/app/views
-- examples/rails_openid/app/controllers/application.rb
-- examples/rails_openid/app/controllers/login_controller.rb
-- examples/rails_openid/app/controllers/server_controller.rb
-- examples/rails_openid/app/controllers/consumer_controller.rb
-- examples/rails_openid/app/helpers/application_helper.rb
-- examples/rails_openid/app/helpers/login_helper.rb
-- examples/rails_openid/app/helpers/server_helper.rb
-- examples/rails_openid/app/views/layouts
-- examples/rails_openid/app/views/login
-- examples/rails_openid/app/views/server
-- examples/rails_openid/app/views/consumer
-- examples/rails_openid/app/views/layouts/server.rhtml
-- examples/rails_openid/app/views/login/index.rhtml
-- examples/rails_openid/app/views/server/decide.rhtml
-- examples/rails_openid/app/views/consumer/index.rhtml
-- examples/rails_openid/config/environments
-- examples/rails_openid/config/database.yml
-- examples/rails_openid/config/boot.rb
-- examples/rails_openid/config/environment.rb
-- examples/rails_openid/config/routes.rb
-- examples/rails_openid/config/environments/development.rb
-- examples/rails_openid/config/environments/production.rb
-- examples/rails_openid/config/environments/test.rb
-- examples/rails_openid/doc/README_FOR_APP
-- examples/rails_openid/lib/tasks
-- examples/rails_openid/public/images
-- examples/rails_openid/public/javascripts
-- examples/rails_openid/public/stylesheets
-- examples/rails_openid/public/dispatch.cgi
-- examples/rails_openid/public/404.html
-- examples/rails_openid/public/500.html
-- examples/rails_openid/public/dispatch.fcgi
-- examples/rails_openid/public/dispatch.rb
-- examples/rails_openid/public/favicon.ico
-- examples/rails_openid/public/robots.txt
-- examples/rails_openid/public/images/openid_login_bg.gif
-- examples/rails_openid/public/javascripts/controls.js
-- examples/rails_openid/public/javascripts/dragdrop.js
-- examples/rails_openid/public/javascripts/effects.js
-- examples/rails_openid/public/javascripts/prototype.js
-- examples/rails_openid/script/performance
-- examples/rails_openid/script/process
-- examples/rails_openid/script/console
-- examples/rails_openid/script/about
-- examples/rails_openid/script/breakpointer
-- examples/rails_openid/script/destroy
-- examples/rails_openid/script/generate
-- examples/rails_openid/script/plugin
-- examples/rails_openid/script/runner
-- examples/rails_openid/script/server
-- examples/rails_openid/script/performance/benchmarker
-- examples/rails_openid/script/performance/profiler
-- examples/rails_openid/script/process/spawner
-- examples/rails_openid/script/process/reaper
-- examples/rails_openid/script/process/spinner
-- examples/rails_openid/test/fixtures
-- examples/rails_openid/test/functional
-- examples/rails_openid/test/mocks
-- examples/rails_openid/test/unit
-- examples/rails_openid/test/test_helper.rb
-- examples/rails_openid/test/functional/login_controller_test.rb
-- examples/rails_openid/test/functional/server_controller_test.rb
-- examples/rails_openid/test/mocks/development
-- examples/rails_openid/test/mocks/test
-- lib/openid
-- lib/hmac
-- lib/openid.rb
-- lib/openid/cryptutil.rb
-- lib/openid/extras.rb
-- lib/openid/urinorm.rb
-- lib/openid/util.rb
-- lib/openid/trustroot.rb
-- lib/openid/message.rb
-- lib/openid/yadis
-- lib/openid/consumer
-- lib/openid/fetchers.rb
-- lib/openid/dh.rb
-- lib/openid/kvform.rb
-- lib/openid/association.rb
-- lib/openid/store
-- lib/openid/kvpost.rb
-- lib/openid/extensions
-- lib/openid/protocolerror.rb
-- lib/openid/server.rb
-- lib/openid/extension.rb
-- lib/openid/consumer.rb
-- lib/openid/yadis/htmltokenizer.rb
-- lib/openid/yadis/parsehtml.rb
-- lib/openid/yadis/filters.rb
-- lib/openid/yadis/xrds.rb
-- lib/openid/yadis/accept.rb
-- lib/openid/yadis/constants.rb
-- lib/openid/yadis/discovery.rb
-- lib/openid/yadis/xri.rb
-- lib/openid/yadis/xrires.rb
-- lib/openid/yadis/services.rb
-- lib/openid/consumer/html_parse.rb
-- lib/openid/consumer/idres.rb
-- lib/openid/consumer/associationmanager.rb
-- lib/openid/consumer/discovery.rb
-- lib/openid/consumer/discovery_manager.rb
-- lib/openid/consumer/checkid_request.rb
-- lib/openid/consumer/responses.rb
-- lib/openid/store/filesystem.rb
-- lib/openid/store/interface.rb
-- lib/openid/store/nonce.rb
-- lib/openid/store/memory.rb
-- lib/openid/extensions/sreg.rb
-- lib/openid/extensions/ax.rb
-- lib/openid/extensions/pape.rb
-- lib/hmac/hmac.rb
-- lib/hmac/sha1.rb
-- lib/hmac/sha2.rb
-- test/data
-- test/test_association.rb
-- test/test_urinorm.rb
-- test/testutil.rb
-- test/test_util.rb
-- test/test_message.rb
-- test/test_cryptutil.rb
-- test/test_extras.rb
-- test/util.rb
-- test/test_trustroot.rb
-- test/test_parsehtml.rb
-- test/test_fetchers.rb
-- test/test_dh.rb
-- test/test_kvform.rb
-- test/test_openid_yadis.rb
-- test/test_linkparse.rb
-- test/test_stores.rb
-- test/test_filters.rb
-- test/test_xrds.rb
-- test/test_nonce.rb
-- test/test_accept.rb
-- test/test_kvpost.rb
-- test/test_associationmanager.rb
-- test/discoverdata.rb
-- test/test_server.rb
-- test/test_yadis_discovery.rb
-- test/test_sreg.rb
-- test/test_idres.rb
-- test/test_ax.rb
-- test/test_xri.rb
-- test/test_xrires.rb
-- test/test_discover.rb
-- test/test_consumer.rb
-- test/test_pape.rb
-- test/test_checkid_request.rb
-- test/test_discovery_manager.rb
-- test/test_responses.rb
-- test/test_extension.rb
-- test/data/test_xrds
-- test/data/urinorm.txt
-- test/data/n2b64
-- test/data/trustroot.txt
-- test/data/dh.txt
-- test/data/test1-parsehtml.txt
-- test/data/linkparse.txt
-- test/data/accept.txt
-- test/data/test_discover
-- test/data/example-xrds.xml
-- test/data/test1-discover.txt
-- test/data/test_xrds/ref.xrds
-- test/data/test_xrds/README
-- test/data/test_xrds/delegated-20060809-r1.xrds
-- test/data/test_xrds/delegated-20060809-r2.xrds
-- test/data/test_xrds/delegated-20060809.xrds
-- test/data/test_xrds/no-xrd.xml
-- test/data/test_xrds/not-xrds.xml
-- test/data/test_xrds/prefixsometimes.xrds
-- test/data/test_xrds/sometimesprefix.xrds
-- test/data/test_xrds/spoof1.xrds
-- test/data/test_xrds/spoof2.xrds
-- test/data/test_xrds/spoof3.xrds
-- test/data/test_xrds/status222.xrds
-- test/data/test_xrds/valid-populated-xrds.xml
-- test/data/test_xrds/=j3h.2007.11.14.xrds
-- test/data/test_xrds/subsegments.xrds
-- test/data/test_discover/openid2_xrds.xml
-- test/data/test_discover/openid.html
-- test/data/test_discover/openid2.html
-- test/data/test_discover/openid2_xrds_no_local_id.xml
-- test/data/test_discover/openid_1_and_2.html
-- test/data/test_discover/openid_1_and_2_xrds.xml
-- test/data/test_discover/openid_and_yadis.html
-- test/data/test_discover/openid_1_and_2_xrds_bad_delegate.xml
-- test/data/test_discover/openid_no_delegate.html
-- test/data/test_discover/yadis_0entries.xml
-- test/data/test_discover/yadis_2_bad_local_id.xml
-- test/data/test_discover/yadis_2entries_delegate.xml
-- test/data/test_discover/yadis_2entries_idp.xml
-- test/data/test_discover/yadis_another_delegate.xml
-- test/data/test_discover/yadis_idp.xml
-- test/data/test_discover/yadis_idp_delegate.xml
-- test/data/test_discover/yadis_no_delegate.xml
-- NOTICE
-- CHANGELOG
-- README
-- INSTALL
-- LICENSE
-- UPGRADE
-- admin/runtests.rb
-has_rdoc: true
-homepage: http://openidenabled.com/ruby-openid/
-post_install_message:
-rdoc_options:
-- --main
-- README
-require_paths:
-- bin
-- lib
-required_ruby_version: !ruby/object:Gem::Requirement
- requirements:
- - - ">"
- - !ruby/object:Gem::Version
- version: 0.0.0
- version:
-required_rubygems_version: !ruby/object:Gem::Requirement
- requirements:
- - - ">="
- - !ruby/object:Gem::Version
- version: "0"
- version:
-requirements: []
-
-rubyforge_project:
-rubygems_version: 1.0.1
-signing_key:
-specification_version: 1
-summary: A library for consuming and serving OpenID identities.
-test_files:
-- admin/runtests.rb
diff --git a/vendor/gems/ruby-openid-2.1.2/CHANGELOG b/vendor/gems/ruby-openid-2.1.2/CHANGELOG
deleted file mode 100644
index deece367..00000000
--- a/vendor/gems/ruby-openid-2.1.2/CHANGELOG
+++ /dev/null
@@ -1,78 +0,0 @@
-Fri Jun 27 15:39:14 PDT 2008 Kevin Turner
- tagged 2.1.2
-
-Fri Jun 27 15:38:05 PDT 2008 Kevin Turner
- * update version to 2.1.2
-
-Fri Jun 27 15:01:35 PDT 2008 Kevin Turner
- * util: remove call to srand
-
- From the Ruby FAQ:
-
- 9.2 How do random number seeds work?
-
- It depends. In Ruby versions prior to 1.5.2, the random number generator had
- (by default) a constant seed, and so would produce the same series of numbers
- each time a program was run. If you needed less deterministic behaviors, you
- called srand to set up a less predictable seed.
-
- Newer Rubys (Rubies?) have a different behavior. If rand is called without a
- prior call to srand, Ruby will generate its own random(ish) seed. Successive
- runs of a program that does not use srand will generate different sequences of
- random numbers. To get the old, predictable, behavior (perhaps for testing),
- call srand with a constant seed.
-
-Fri Jun 27 13:34:43 PDT 2008 Kevin Turner
- * LICENSE: htmltokenizer is (c) 2004 Ben Giddings
-
-Fri Jun 27 13:32:09 PDT 2008 Kevin Turner
- * Yadis.html_yadis_location: catch HTMLTokenizerError
-
-Fri Jun 27 13:24:13 PDT 2008 Kevin Turner
- * htmltokenizer: define HTMLTokenizerError to raise
-
-Fri Jun 27 13:18:38 PDT 2008 Kevin Turner
- * htmltokenizer: Don't raise OpenIDError from htmltokenizer (it's not in the OpenID module namespace) #255
-
-Wed Jun 25 17:31:26 PDT 2008 Kevin Turner
- * OpenID::Server::CheckIDRequest.answer: document return type
-
-Wed Jun 25 17:06:35 PDT 2008 Kevin Turner
- * TrustRoot.check_sanity: don't fail if the trust root is not parseable
-
-Wed Jun 25 16:31:30 PDT 2008 Kevin Turner
- * Message.from_http_response: accept 206 code
-
-Wed Jun 25 14:14:05 PDT 2008 Kevin Turner
- * move OpenID::VERSION definition in openid.rb, for #256
-
-Wed Jun 25 13:55:18 PDT 2008 Kevin Turner
- * Add admin/gettlds.py to ease updating of TLD list in trust root validation
-
-Wed Jun 25 13:50:22 PDT 2008 Kevin Turner
- * TrustRoot.TOP_LEVEL_DOMAINS: updated
-
-Fri Jun 13 14:18:04 PDT 2008 Kevin Turner
- * xrds.rb: fix stray colon
-
-Fri Jun 13 13:41:58 PDT 2008 Kevin Turner
- * Yadis::get_canonical_id: case-insensitive comparison
-
- Porting a patch from =wil:
-
- 1. There should only be a single CanonicalID in each XRD (in the latest XRI
- resolution spec), so I made it use the first CID found instead of the last.
-
- 2. Use case-insensitive comparison when comparing CanonicalIDs.
-
-Wed Jun 11 15:24:12 PDT 2008 Kevin Turner
- * Accept response code 206 from fetcher results. Fixes #260
-
-Wed Jun 11 11:27:25 PDT 2008 cygnus@janrain.com
- * admin/fixperms: Fix stale entries
-
-Wed Jun 11 11:08:11 PDT 2008 cygnus@janrain.com
- * Add test cases for trust roots with non-ASCII characters in path or hostname
-
-Fri Jun 6 15:50:12 PDT 2008 cygnus@janrain.com
- tagged 2.1.1
diff --git a/vendor/gems/ruby-openid-2.1.2/INSTALL b/vendor/gems/ruby-openid-2.1.2/INSTALL
deleted file mode 100644
index 89f1b9bd..00000000
--- a/vendor/gems/ruby-openid-2.1.2/INSTALL
+++ /dev/null
@@ -1,47 +0,0 @@
-= Ruby OpenID Library Installation
-
-== Rubygems Installation
-
-Rubygems is a tool for installing ruby libraries and their
-dependancies. If you have rubygems installed, simply:
-
- gem install ruby-openid
-
-== Manual Installation
-
-Unpack the archive and run setup.rb to install:
-
- ruby setup.rb
-
-setup.rb installs the library into your system ruby. If don't want to
-add openid to you system ruby, you may instead add the *lib* directory of
-the extracted tarball to your RUBYLIB environment variable:
-
- $ export RUBYLIB=${RUBYLIB}:/path/to/ruby-openid/lib
-
-
-== Testing the Installation
-
-Make sure everything installed ok:
- $> irb
- irb$> require "openid"
- => true
-
-Or, if you installed via rubygems:
-
- $> irb
- irb$> require "rubygems"
- => true
- irb$> require_gem "ruby-openid"
- => true
-
-== Run the test suite
-
-Go into the test directory and execute the *runtests.rb* script.
-
-== Next steps
-
-* Run consumer.rb in the examples directory.
-* Get started writing your own consumer using OpenID::Consumer
-* Write your own server with OpenID::Server
-* Use the OpenIDLoginGenerator! Read example/README for more info.
diff --git a/vendor/gems/ruby-openid-2.1.2/LICENSE b/vendor/gems/ruby-openid-2.1.2/LICENSE
deleted file mode 100644
index c1c57734..00000000
--- a/vendor/gems/ruby-openid-2.1.2/LICENSE
+++ /dev/null
@@ -1,210 +0,0 @@
-The code in lib/hmac/ is Copyright 2001 by Daiki Ueno, and distributed under
-the terms of the Ruby license. See http://www.ruby-lang.org/en/LICENSE.txt
-
-lib/openid/yadis/htmltokenizer.rb is Copyright 2004 by Ben Giddings and
-distributed under the terms of the Ruby license.
-
-The remainder of this package is Copyright 2006-2008 by JanRain, Inc. and
-distributed under the terms of license below:
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
diff --git a/vendor/gems/ruby-openid-2.1.2/NOTICE b/vendor/gems/ruby-openid-2.1.2/NOTICE
deleted file mode 100644
index 62df93be..00000000
--- a/vendor/gems/ruby-openid-2.1.2/NOTICE
+++ /dev/null
@@ -1,2 +0,0 @@
-This product includes software developed by JanRain,
-available from http://openidenabled.com/
diff --git a/vendor/gems/ruby-openid-2.1.2/README b/vendor/gems/ruby-openid-2.1.2/README
deleted file mode 100644
index c6e833b4..00000000
--- a/vendor/gems/ruby-openid-2.1.2/README
+++ /dev/null
@@ -1,82 +0,0 @@
-=Ruby OpenID
-
-A Ruby library for verifying and serving OpenID identities.
-
-==Features
-* Easy to use API for verifying OpenID identites - OpenID::Consumer
-* Support for serving OpenID identites - OpenID::Server
-* Does not depend on underlying web framework
-* Supports multiple storage mechanisms (Filesystem, ActiveRecord, Memory)
-* Example code to help you get started, including:
- * Ruby on Rails based consumer and server
- * OpenIDLoginGenerator for quickly getting creating a rails app that uses
- OpenID for authentication
- * ActiveRecordOpenIDStore plugin
-* Comprehensive test suite
-* Supports both OpenID 1 and OpenID 2 transparently
-
-==Installing
-Before running the examples or writing your own code you'll need to install
-the library. See the INSTALL file or use rubygems:
-
- gem install ruby-openid
-
-Check the installation:
-
- $ irb
- irb> require 'rubygems'
- irb> require_gem 'ruby-openid'
- => true
-
-The library is known to work with Ruby 1.8.4 on Unix, Max OSX and
-Win32. Examples have been tested with Rails 1.1 and 1.2, and 2.0.
-
-==Getting Started
-The best way to start is to look at the rails_openid example.
-You can run it with:
- cd examples/rails_openid
- script/server
-
-If you are writing an OpenID Relying Party, a good place to start is:
-examples/rails_openid/app/controllers/consumer_controller.rb
-
-And if you are writing an OpenID provider:
-examples/rails_openid/app/controllers/server_controller.rb
-
-The library code is quite well documented, so don't be squeamish, and
-look at the library itself if there's anything you don't understand in
-the examples.
-
-==Homepage
-http://openidenabled.com/ruby-openid/
-
-See also:
-http://openid.net/
-http://openidenabled.com/
-
-==Community
-Discussion regarding the Ruby OpenID library and other JanRain OpenID
-libraries takes place on the the OpenID mailing list on
-openidenabled.com.
-
-http://lists.openidenabled.com/mailman/listinfo/dev
-
-Please join this list to discuss, ask implementation questions, report
-bugs, etc. Also check out the openid channel on the freenode IRC
-network.
-
-If you have a bugfix or feature you'd like to contribute, don't
-hesitate to send it to us. For more detailed information on how to
-contribute, see
-
- http://openidenabled.com/contribute/
-
-==Author
-Copyright 2006-2008, JanRain, Inc.
-
-Contact openid@janrain.com or visit the OpenID channel on pibb.com:
-
-http://pibb.com/go/openid
-
-==License
-Apache Software License. For more information see the LICENSE file.
diff --git a/vendor/gems/ruby-openid-2.1.2/UPGRADE b/vendor/gems/ruby-openid-2.1.2/UPGRADE
deleted file mode 100644
index b80e8232..00000000
--- a/vendor/gems/ruby-openid-2.1.2/UPGRADE
+++ /dev/null
@@ -1,127 +0,0 @@
-= Upgrading from the OpenID 1.x series library
-
-== Consumer Upgrade
-
-The flow is largely the same, however there are a number of significant
-changes. The consumer example is helpful to look at:
-examples/rails_openid/app/controllers/consumer_controller.rb
-
-
-=== Stores
-
-You will need to require the file for the store that you are using.
-For the filesystem store, this is 'openid/stores/filesystem'
-They are also now in modules. The filesystem store is
- OpenID::Store::Filesystem
-The format has changed, and you should remove your old store directory.
-
-The ActiveRecord store ( examples/active_record_openid_store ) still needs
-to be put in a plugin directory for your rails app. There's a migration
-that needs to be run; examine the README in that directory.
-
-Also, note that the stores now can be garbage collected with the method
- store.cleanup
-
-
-=== Starting the OpenID transaction
-
-The OpenIDRequest object no longer has status codes. Instead,
-consumer.begin raises an OpenID::OpenIDError if there is a problem
-initiating the transaction, so you'll want something along the lines of:
-
- begin
- openid_request = consumer.begin(params[:openid_identifier])
- rescue OpenID::OpenIDError => e
- # display error e
- return
- end
- #success case
-
-Data regarding the OpenID server once lived in
- openid_request.service
-
-The corresponding object in the 2.0 lib can be retrieved with
- openid_request.endpoint
-
-Getting the unverified identifier: Where you once had
- openid_request.identity_url
-you will now want
- openid_request.endpoint.claimed_id
-which might be different from what you get at the end of the transaction,
-since it is now possible for users to enter their server's url directly.
-
-Arguments on the return_to URL are now verified, so if you want to add
-additional arguments to the return_to url, use
- openid_request.return_to_args['param'] = value
-
-Generating the redirect is the same as before, but add any extensions
-first.
-
-If you need to set up an SSL certificate authority list for the fetcher,
-use the 'ca_file' attr_accessor on the OpenID::StandardFetcher. This has
-changed from 'ca_path' in the 1.x.x series library. That is, set
-OpenID.fetcher.ca_file = '/path/to/ca.list'
-before calling consumer.begin.
-
-=== Requesting Simple Registration Data
-
-You'll need to require the code for the extension
- require 'openid/extensions/sreg'
-
-The new code for adding an SReg request now looks like:
-
- sreg_request = OpenID::SReg::Request.new
- sreg_request.request_fields(['email', 'dob'], true) # required
- sreg_request.request_fields(['nickname', 'fullname'], false) # optional
- sreg_request.policy_url = policy_url
- openid_request.add_extension(sreg_request)
-
-The code for adding other extensions is similar. Code for the Attribute
-Exchange (AX) and Provider Authentication Policy Extension (PAPE) are
-included with the library, and additional extensions can be implemented
-subclassing OpenID::Extension.
-
-
-=== Completing the transaction
-
-The return_to and its arguments are verified, so you need to pass in
-the base URL and the arguments. With Rails, the params method mashes
-together parameters from GET, POST, and the path, so you'll need to pull
-off the path "parameters" with something like
-
- return_to = url_for(:only_path => false,
- :controller => 'openid',
- :action => 'complete')
- parameters = params.reject{|k,v| request.path_parameters[k] }
- openid_response = consumer.complete(parameters, return_to)
-
-The response still uses the status codes, but they are now namespaced
-slightly differently, for example OpenID::Consumer::SUCCESS
-
-In the case of failure, the error message is now found in
- openid_response.message
-
-The identifier to display to the user can be found in
- openid_response.endpoint.display_identifier
-
-The Simple Registration response can be read from the OpenID response
-with
- sreg_response = OpenID::SReg::Response.from_success_response(openid_response)
- nickname = sreg_response['nickname']
- # etc.
-
-
-== Server Upgrade
-
-The server code is mostly the same as before, with the exception of
-extensions. Also, you must pass in the endpoint URL to the server
-constructor:
- @server = OpenID::Server.new(store, server_url)
-
-I recommend looking at
-examples/rails_openid/app/controllers/server_controller.rb
-for an example of the new way of doing extensions.
-
---
-Dag Arneson, JanRain Inc.
-Please direct questions to openid@janrain.com
diff --git a/vendor/gems/ruby-openid-2.1.2/admin/runtests.rb b/vendor/gems/ruby-openid-2.1.2/admin/runtests.rb
deleted file mode 100644
index 50abe044..00000000
--- a/vendor/gems/ruby-openid-2.1.2/admin/runtests.rb
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/usr/bin/ruby
-
-require "logger"
-require "stringio"
-require "pathname"
-
-require 'test/unit/collector/dir'
-require 'test/unit/ui/console/testrunner'
-
-def main
- old_verbose = $VERBOSE
- $VERBOSE = true
-
- tests_dir = Pathname.new(__FILE__).dirname.dirname.join('test')
-
- # Collect tests from everything named test_*.rb.
- c = Test::Unit::Collector::Dir.new
-
- if c.respond_to?(:base=)
- # In order to supress warnings from ruby 1.8.6 about accessing
- # undefined member
- c.base = tests_dir
- suite = c.collect
- else
- # Because base is not defined in ruby < 1.8.6
- suite = c.collect(tests_dir)
- end
-
-
- result = Test::Unit::UI::Console::TestRunner.run(suite)
- result.passed?
-ensure
- $VERBOSE = old_verbose
-end
-
-exit(main)
diff --git a/vendor/gems/ruby-openid-2.1.2/examples/README b/vendor/gems/ruby-openid-2.1.2/examples/README
deleted file mode 100644
index 71aa30d7..00000000
--- a/vendor/gems/ruby-openid-2.1.2/examples/README
+++ /dev/null
@@ -1,32 +0,0 @@
-This directory contains several examples that demonstrate use of the
-OpenID library. Make sure you have properly installed the library
-before running the examples. These examples are a great place to
-start in integrating OpenID into your application.
-
-==Rails example
-
-The rails_openid contains a fully functional OpenID server and relying
-party, and acts as a starting point for implementing your own
-production rails server. You'll need the latest version of Ruby on
-Rails installed, and then:
-
- cd rails_openid
- ./script/server
-
-Open a web browser to http://localhost:3000/ and follow the instructions.
-
-The relevant code to work from when writing your Rails OpenID Relying
-Party is:
- rails_openid/app/controllers/consumer_controller.rb
-If you are working on an OpenID provider, check out
- rails_openid/app/controllers/server_controller.rb
-
-Since the library and examples are Apache-licensed, don't be shy about
-copy-and-paste.
-
-==Rails ActiveRecord OpenIDStore plugin
-
-For various reasons you may want or need to deploy your ruby openid
-consumer/server using an SQL based store. The active_record_openid_store
-is a plugin that makes using an SQL based store simple. Follow the
-README inside the plugin's dir for usage.
diff --git a/vendor/gems/ruby-openid-2.1.2/examples/active_record_openid_store/README b/vendor/gems/ruby-openid-2.1.2/examples/active_record_openid_store/README
deleted file mode 100644
index 11787298..00000000
--- a/vendor/gems/ruby-openid-2.1.2/examples/active_record_openid_store/README
+++ /dev/null
@@ -1,58 +0,0 @@
-=Active Record OpenID Store Plugin
-
-A store is required by an OpenID server and optionally by the consumer
-to store associations, nonces, and auth key information across
-requests and processes. If rails is distributed across several
-machines, they must must all have access to the same OpenID store
-data, so the FilesystemStore won't do.
-
-This directory contains a plugin for connecting your
-OpenID enabled rails app to an ActiveRecord based OpenID store.
-
-==Install
-
-1) Copy this directory and all it's contents into your
-RAILS_ROOT/vendor/plugins directory. You structure should look like
-this:
-
- RAILS_ROOT/vendor/plugins/active_record_openid_store/
-
-2) Copy the migration, XXX_add_open_id_store_to_db.rb to your
- RAILS_ROOT/db/migrate directory. Rename the XXX portion of the
- file to next sequential migration number.
-
-3) Run the migration:
-
- rake migrate
-
-4) Change your app to use the ActiveRecordOpenIDStore:
-
- store = ActiveRecordOpenIDStore.new
- consumer = OpenID::Consumer.new(session, store)
-
-5) That's it! All your OpenID state will now be stored in the database.
-
-==Upgrade
-
-If you are upgrading from the 1.x ActiveRecord store, replace your old
-RAILS_ROOT/vendor/plugins/active_record_openid_store/ directory with
-the new one and run the migration XXX_upgrade_open_id_store.rb.
-
-==What about garbage collection?
-
-You may garbage collect unused nonces and expired associations using
-the gc instance method of ActiveRecordOpenIDStore. Hook it up to a
-task in your app's Rakefile like so:
-
- desc 'GC OpenID store'
- task :gc_openid_store => :environment do
- ActiveRecordOpenIDStore.new.cleanup
- end
-
-Run it by typing:
-
- rake gc_openid_store
-
-
-==Questions?
-Contact Dag Arneson: dag at janrain dot com
diff --git a/vendor/gems/ruby-openid-2.1.2/examples/active_record_openid_store/XXX_add_open_id_store_to_db.rb b/vendor/gems/ruby-openid-2.1.2/examples/active_record_openid_store/XXX_add_open_id_store_to_db.rb
deleted file mode 100644
index 99625453..00000000
--- a/vendor/gems/ruby-openid-2.1.2/examples/active_record_openid_store/XXX_add_open_id_store_to_db.rb
+++ /dev/null
@@ -1,24 +0,0 @@
-# Use this migration to create the tables for the ActiveRecord store
-class AddOpenIdStoreToDb < ActiveRecord::Migration
- def self.up
- create_table "open_id_associations", :force => true do |t|
- t.column "server_url", :binary, :null => false
- t.column "handle", :string, :null => false
- t.column "secret", :binary, :null => false
- t.column "issued", :integer, :null => false
- t.column "lifetime", :integer, :null => false
- t.column "assoc_type", :string, :null => false
- end
-
- create_table "open_id_nonces", :force => true do |t|
- t.column :server_url, :string, :null => false
- t.column :timestamp, :integer, :null => false
- t.column :salt, :string, :null => false
- end
- end
-
- def self.down
- drop_table "open_id_associations"
- drop_table "open_id_nonces"
- end
-end
diff --git a/vendor/gems/ruby-openid-2.1.2/examples/active_record_openid_store/XXX_upgrade_open_id_store.rb b/vendor/gems/ruby-openid-2.1.2/examples/active_record_openid_store/XXX_upgrade_open_id_store.rb
deleted file mode 100644
index 273d285b..00000000
--- a/vendor/gems/ruby-openid-2.1.2/examples/active_record_openid_store/XXX_upgrade_open_id_store.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-# Use this migration to upgrade the old 1.1 ActiveRecord store schema
-# to the new 2.0 schema.
-class UpgradeOpenIdStore < ActiveRecord::Migration
- def self.up
- drop_table "open_id_settings"
- drop_table "open_id_nonces"
- create_table "open_id_nonces", :force => true do |t|
- t.column :server_url, :string, :null => false
- t.column :timestamp, :integer, :null => false
- t.column :salt, :string, :null => false
- end
- end
-
- def self.down
- drop_table "open_id_nonces"
- create_table "open_id_nonces", :force => true do |t|
- t.column "nonce", :string
- t.column "created", :integer
- end
-
- create_table "open_id_settings", :force => true do |t|
- t.column "setting", :string
- t.column "value", :binary
- end
- end
-end
diff --git a/vendor/gems/ruby-openid-2.1.2/examples/active_record_openid_store/init.rb b/vendor/gems/ruby-openid-2.1.2/examples/active_record_openid_store/init.rb
deleted file mode 100644
index b625179e..00000000
--- a/vendor/gems/ruby-openid-2.1.2/examples/active_record_openid_store/init.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-# might using the ruby-openid gem
-begin
- require 'rubygems'
-rescue LoadError
- nil
-end
-require 'openid'
-require 'openid_ar_store'
diff --git a/vendor/gems/ruby-openid-2.1.2/examples/active_record_openid_store/lib/association.rb b/vendor/gems/ruby-openid-2.1.2/examples/active_record_openid_store/lib/association.rb
deleted file mode 100644
index 09eda8b5..00000000
--- a/vendor/gems/ruby-openid-2.1.2/examples/active_record_openid_store/lib/association.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-require 'openid/association'
-require 'time'
-
-class Association < ActiveRecord::Base
- set_table_name 'open_id_associations'
- def from_record
- OpenID::Association.new(handle, secret, Time.at(issued), lifetime, assoc_type)
- end
-end
-
diff --git a/vendor/gems/ruby-openid-2.1.2/examples/active_record_openid_store/lib/nonce.rb b/vendor/gems/ruby-openid-2.1.2/examples/active_record_openid_store/lib/nonce.rb
deleted file mode 100644
index fcf51530..00000000
--- a/vendor/gems/ruby-openid-2.1.2/examples/active_record_openid_store/lib/nonce.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-class Nonce < ActiveRecord::Base
- set_table_name 'open_id_nonces'
-end
diff --git a/vendor/gems/ruby-openid-2.1.2/examples/active_record_openid_store/lib/open_id_setting.rb b/vendor/gems/ruby-openid-2.1.2/examples/active_record_openid_store/lib/open_id_setting.rb
deleted file mode 100644
index 030e4c25..00000000
--- a/vendor/gems/ruby-openid-2.1.2/examples/active_record_openid_store/lib/open_id_setting.rb
+++ /dev/null
@@ -1,4 +0,0 @@
-class OpenIdSetting < ActiveRecord::Base
-
- validates_uniqueness_of :setting
-end
diff --git a/vendor/gems/ruby-openid-2.1.2/examples/active_record_openid_store/lib/openid_ar_store.rb b/vendor/gems/ruby-openid-2.1.2/examples/active_record_openid_store/lib/openid_ar_store.rb
deleted file mode 100644
index 276569c5..00000000
--- a/vendor/gems/ruby-openid-2.1.2/examples/active_record_openid_store/lib/openid_ar_store.rb
+++ /dev/null
@@ -1,57 +0,0 @@
-require 'association'
-require 'nonce'
-require 'openid/store/interface'
-
-# not in OpenID module to avoid namespace conflict
-class ActiveRecordStore < OpenID::Store::Interface
- def store_association(server_url, assoc)
- remove_association(server_url, assoc.handle)
- Association.create!(:server_url => server_url,
- :handle => assoc.handle,
- :secret => assoc.secret,
- :issued => assoc.issued.to_i,
- :lifetime => assoc.lifetime,
- :assoc_type => assoc.assoc_type)
- end
-
- def get_association(server_url, handle=nil)
- assocs = if handle.blank?
- Association.find_all_by_server_url(server_url)
- else
- Association.find_all_by_server_url_and_handle(server_url, handle)
- end
-
- assocs.reverse.each do |assoc|
- a = assoc.from_record
- if a.expires_in == 0
- assoc.destroy
- else
- return a
- end
- end if assocs.any?
-
- return nil
- end
-
- def remove_association(server_url, handle)
- Association.delete_all(['server_url = ? AND handle = ?', server_url, handle]) > 0
- end
-
- def use_nonce(server_url, timestamp, salt)
- return false if Nonce.find_by_server_url_and_timestamp_and_salt(server_url, timestamp, salt)
- return false if (timestamp - Time.now.to_i).abs > OpenID::Nonce.skew
- Nonce.create!(:server_url => server_url, :timestamp => timestamp, :salt => salt)
- return true
- end
-
- def cleanup_nonces
- now = Time.now.to_i
- Nonce.delete_all(["timestamp > ? OR timestamp < ?", now + OpenID::Nonce.skew, now - OpenID::Nonce.skew])
- end
-
- def cleanup_associations
- now = Time.now.to_i
- Association.delete_all(['issued + lifetime > ?',now])
- end
-
-end
diff --git a/vendor/gems/ruby-openid-2.1.2/examples/active_record_openid_store/test/store_test.rb b/vendor/gems/ruby-openid-2.1.2/examples/active_record_openid_store/test/store_test.rb
deleted file mode 100644
index 8e1986c6..00000000
--- a/vendor/gems/ruby-openid-2.1.2/examples/active_record_openid_store/test/store_test.rb
+++ /dev/null
@@ -1,212 +0,0 @@
-$:.unshift(File.dirname(__FILE__) + '/../lib')
-require 'test/unit'
-RAILS_ENV = "test"
-require File.expand_path(File.join(File.dirname(__FILE__), '../../../../config/environment.rb'))
-
-module StoreTestCase
- @@allowed_handle = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
- @@allowed_nonce = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
-
- def _gen_nonce
- OpenID::CryptUtil.random_string(8, @@allowed_nonce)
- end
-
- def _gen_handle(n)
- OpenID::CryptUtil.random_string(n, @@allowed_handle)
- end
-
- def _gen_secret(n, chars=nil)
- OpenID::CryptUtil.random_string(n, chars)
- end
-
- def _gen_assoc(issued, lifetime=600)
- secret = _gen_secret(20)
- handle = _gen_handle(128)
- OpenID::Association.new(handle, secret, Time.now + issued, lifetime,
- 'HMAC-SHA1')
- end
-
- def _check_retrieve(url, handle=nil, expected=nil)
- ret_assoc = @store.get_association(url, handle)
-
- if expected.nil?
- assert_nil(ret_assoc)
- else
- assert_equal(expected, ret_assoc)
- assert_equal(expected.handle, ret_assoc.handle)
- assert_equal(expected.secret, ret_assoc.secret)
- end
- end
-
- def _check_remove(url, handle, expected)
- present = @store.remove_association(url, handle)
- assert_equal(expected, present)
- end
-
- def test_store
- server_url = "http://www.myopenid.com/openid"
- assoc = _gen_assoc(issued=0)
-
- # Make sure that a missing association returns no result
- _check_retrieve(server_url)
-
- # Check that after storage, getting returns the same result
- @store.store_association(server_url, assoc)
- _check_retrieve(server_url, nil, assoc)
-
- # more than once
- _check_retrieve(server_url, nil, assoc)
-
- # Storing more than once has no ill effect
- @store.store_association(server_url, assoc)
- _check_retrieve(server_url, nil, assoc)
-
- # Removing an association that does not exist returns not present
- _check_remove(server_url, assoc.handle + 'x', false)
-
- # Removing an association that does not exist returns not present
- _check_remove(server_url + 'x', assoc.handle, false)
-
- # Removing an association that is present returns present
- _check_remove(server_url, assoc.handle, true)
-
- # but not present on subsequent calls
- _check_remove(server_url, assoc.handle, false)
-
- # Put assoc back in the store
- @store.store_association(server_url, assoc)
-
- # More recent and expires after assoc
- assoc2 = _gen_assoc(issued=1)
- @store.store_association(server_url, assoc2)
-
- # After storing an association with a different handle, but the
- # same server_url, the handle with the later expiration is returned.
- _check_retrieve(server_url, nil, assoc2)
-
- # We can still retrieve the older association
- _check_retrieve(server_url, assoc.handle, assoc)
-
- # Plus we can retrieve the association with the later expiration
- # explicitly
- _check_retrieve(server_url, assoc2.handle, assoc2)
-
- # More recent, and expires earlier than assoc2 or assoc. Make sure
- # that we're picking the one with the latest issued date and not
- # taking into account the expiration.
- assoc3 = _gen_assoc(issued=2, lifetime=100)
- @store.store_association(server_url, assoc3)
-
- _check_retrieve(server_url, nil, assoc3)
- _check_retrieve(server_url, assoc.handle, assoc)
- _check_retrieve(server_url, assoc2.handle, assoc2)
- _check_retrieve(server_url, assoc3.handle, assoc3)
-
- _check_remove(server_url, assoc2.handle, true)
-
- _check_retrieve(server_url, nil, assoc3)
- _check_retrieve(server_url, assoc.handle, assoc)
- _check_retrieve(server_url, assoc2.handle, nil)
- _check_retrieve(server_url, assoc3.handle, assoc3)
-
- _check_remove(server_url, assoc2.handle, false)
- _check_remove(server_url, assoc3.handle, true)
-
- _check_retrieve(server_url, nil, assoc)
- _check_retrieve(server_url, assoc.handle, assoc)
- _check_retrieve(server_url, assoc2.handle, nil)
- _check_retrieve(server_url, assoc3.handle, nil)
-
- _check_remove(server_url, assoc2.handle, false)
- _check_remove(server_url, assoc.handle, true)
- _check_remove(server_url, assoc3.handle, false)
-
- _check_retrieve(server_url, nil, nil)
- _check_retrieve(server_url, assoc.handle, nil)
- _check_retrieve(server_url, assoc2.handle, nil)
- _check_retrieve(server_url, assoc3.handle, nil)
-
- _check_remove(server_url, assoc2.handle, false)
- _check_remove(server_url, assoc.handle, false)
- _check_remove(server_url, assoc3.handle, false)
-
- assocValid1 = _gen_assoc(-3600, 7200)
- assocValid2 = _gen_assoc(-5)
- assocExpired1 = _gen_assoc(-7200, 3600)
- assocExpired2 = _gen_assoc(-7200, 3600)
-
- @store.cleanup_associations
- @store.store_association(server_url + '1', assocValid1)
- @store.store_association(server_url + '1', assocExpired1)
- @store.store_association(server_url + '2', assocExpired2)
- @store.store_association(server_url + '3', assocValid2)
-
- cleaned = @store.cleanup_associations()
- assert_equal(2, cleaned, "cleaned up associations")
- end
-
- def _check_use_nonce(nonce, expected, server_url, msg='')
- stamp, salt = OpenID::Nonce::split_nonce(nonce)
- actual = @store.use_nonce(server_url, stamp, salt)
- assert_equal(expected, actual, msg)
- end
-
- def test_nonce
- server_url = "http://www.myopenid.com/openid"
- [server_url, ''].each{|url|
- nonce1 = OpenID::Nonce::mk_nonce
-
- _check_use_nonce(nonce1, true, url, "#{url}: nonce allowed by default")
- _check_use_nonce(nonce1, false, url, "#{url}: nonce not allowed twice")
- _check_use_nonce(nonce1, false, url, "#{url}: nonce not allowed third time")
-
- # old nonces shouldn't pass
- old_nonce = OpenID::Nonce::mk_nonce(3600)
- _check_use_nonce(old_nonce, false, url, "Old nonce #{old_nonce.inspect} passed")
-
- }
-
- now = Time.now.to_i
- old_nonce1 = OpenID::Nonce::mk_nonce(now - 20000)
- old_nonce2 = OpenID::Nonce::mk_nonce(now - 10000)
- recent_nonce = OpenID::Nonce::mk_nonce(now - 600)
-
- orig_skew = OpenID::Nonce.skew
- OpenID::Nonce.skew = 0
- count = @store.cleanup_nonces
- OpenID::Nonce.skew = 1000000
- ts, salt = OpenID::Nonce::split_nonce(old_nonce1)
- assert(@store.use_nonce(server_url, ts, salt), "oldnonce1")
- ts, salt = OpenID::Nonce::split_nonce(old_nonce2)
- assert(@store.use_nonce(server_url, ts, salt), "oldnonce2")
- ts, salt = OpenID::Nonce::split_nonce(recent_nonce)
- assert(@store.use_nonce(server_url, ts, salt), "recent_nonce")
-
-
- OpenID::Nonce.skew = 1000
- cleaned = @store.cleanup_nonces
- assert_equal(2, cleaned, "Cleaned #{cleaned} nonces")
-
- OpenID::Nonce.skew = 100000
- ts, salt = OpenID::Nonce::split_nonce(old_nonce1)
- assert(@store.use_nonce(server_url, ts, salt), "oldnonce1 after cleanup")
- ts, salt = OpenID::Nonce::split_nonce(old_nonce2)
- assert(@store.use_nonce(server_url, ts, salt), "oldnonce2 after cleanup")
- ts, salt = OpenID::Nonce::split_nonce(recent_nonce)
- assert(!@store.use_nonce(server_url, ts, salt), "recent_nonce after cleanup")
-
- OpenID::Nonce.skew = orig_skew
-
- end
-end
-
-
-class TestARStore < Test::Unit::TestCase
- include StoreTestCase
-
- def setup
- @store = ActiveRecordStore.new
- end
-
-end
-
diff --git a/vendor/gems/ruby-openid-2.1.2/examples/discover b/vendor/gems/ruby-openid-2.1.2/examples/discover
deleted file mode 100644
index ab985a49..00000000
--- a/vendor/gems/ruby-openid-2.1.2/examples/discover
+++ /dev/null
@@ -1,49 +0,0 @@
-#!/usr/bin/env ruby
-require "openid/consumer/discovery"
-require 'openid/fetchers'
-
-OpenID::fetcher_use_env_http_proxy
-
-$names = [[:server_url, "Server URL "],
- [:local_id, "Local ID "],
- [:canonical_id, "Canonical ID"],
- ]
-
-def show_services(user_input, normalized, services)
- puts " Claimed identifier: #{normalized}"
- if services.empty?
- puts " No OpenID services found"
- puts
- else
- puts " Discovered services:"
- n = 0
- services.each do |service|
- n += 1
- puts " #{n}."
- $names.each do |meth, name|
- val = service.send(meth)
- if val
- printf(" %s: %s\n", name, val)
- end
- end
- puts " Type URIs:"
- for type_uri in service.type_uris
- puts " * #{type_uri}"
- end
- puts
- end
- end
-end
-
-ARGV.each do |openid_identifier|
- puts "=" * 50
- puts "Running discovery on #{openid_identifier}"
- begin
- normalized_identifier, services = OpenID.discover(openid_identifier)
- rescue OpenID::DiscoveryFailure => why
- puts "Discovery failed: #{why.message}"
- puts
- else
- show_services(openid_identifier, normalized_identifier, services)
- end
-end
diff --git a/vendor/gems/ruby-openid-2.1.2/examples/rails_openid/README b/vendor/gems/ruby-openid-2.1.2/examples/rails_openid/README
deleted file mode 100644
index cd9d0ffe..00000000
--- a/vendor/gems/ruby-openid-2.1.2/examples/rails_openid/README
+++ /dev/null
@@ -1,153 +0,0 @@
-== Welcome to Rails
-
-Rails is a web-application and persistence framework that includes everything
-needed to create database-backed web-applications according to the
-Model-View-Control pattern of separation. This pattern splits the view (also
-called the presentation) into "dumb" templates that are primarily responsible
-for inserting pre-built data in between HTML tags. The model contains the
-"smart" domain objects (such as Account, Product, Person, Post) that holds all
-the business logic and knows how to persist themselves to a database. The
-controller handles the incoming requests (such as Save New Account, Update
-Product, Show Post) by manipulating the model and directing data to the view.
-
-In Rails, the model is handled by what's called an object-relational mapping
-layer entitled Active Record. This layer allows you to present the data from
-database rows as objects and embellish these data objects with business logic
-methods. You can read more about Active Record in
-link:files/vendor/rails/activerecord/README.html.
-
-The controller and view are handled by the Action Pack, which handles both
-layers by its two parts: Action View and Action Controller. These two layers
-are bundled in a single package due to their heavy interdependence. This is
-unlike the relationship between the Active Record and Action Pack that is much
-more separate. Each of these packages can be used independently outside of
-Rails. You can read more about Action Pack in
-link:files/vendor/rails/actionpack/README.html.
-
-
-== Getting started
-
-1. Run the WEBrick servlet: ruby script/server (run with --help for options)
- ...or if you have lighttpd installed: ruby script/lighttpd (it's faster)
-2. Go to http://localhost:3000/ and get "Congratulations, you've put Ruby on Rails!"
-3. Follow the guidelines on the "Congratulations, you've put Ruby on Rails!" screen
-
-
-== Example for Apache conf
-
-
- ServerName rails
- DocumentRoot /path/application/public/
- ErrorLog /path/application/log/server.log
-
-
- Options ExecCGI FollowSymLinks
- AllowOverride all
- Allow from all
- Order allow,deny
-
-
-
-NOTE: Be sure that CGIs can be executed in that directory as well. So ExecCGI
-should be on and ".cgi" should respond. All requests from 127.0.0.1 go
-through CGI, so no Apache restart is necessary for changes. All other requests
-go through FCGI (or mod_ruby), which requires a restart to show changes.
-
-
-== Debugging Rails
-
-Have "tail -f" commands running on both the server.log, production.log, and
-test.log files. Rails will automatically display debugging and runtime
-information to these files. Debugging info will also be shown in the browser
-on requests from 127.0.0.1.
-
-
-== Breakpoints
-
-Breakpoint support is available through the script/breakpointer client. This
-means that you can break out of execution at any point in the code, investigate
-and change the model, AND then resume execution! Example:
-
- class WeblogController < ActionController::Base
- def index
- @posts = Post.find_all
- breakpoint "Breaking out from the list"
- end
- end
-
-So the controller will accept the action, run the first line, then present you
-with a IRB prompt in the breakpointer window. Here you can do things like:
-
-Executing breakpoint "Breaking out from the list" at .../webrick_server.rb:16 in 'breakpoint'
-
- >> @posts.inspect
- => "[#nil, \"body\"=>nil, \"id\"=>\"1\"}>,
- #\"Rails you know!\", \"body\"=>\"Only ten..\", \"id\"=>\"2\"}>]"
- >> @posts.first.title = "hello from a breakpoint"
- => "hello from a breakpoint"
-
-...and even better is that you can examine how your runtime objects actually work:
-
- >> f = @posts.first
- => #nil, "body"=>nil, "id"=>"1"}>
- >> f.
- Display all 152 possibilities? (y or n)
-
-Finally, when you're ready to resume execution, you press CTRL-D
-
-
-== Console
-
-You can interact with the domain model by starting the console through script/console.
-Here you'll have all parts of the application configured, just like it is when the
-application is running. You can inspect domain models, change values, and save to the
-database. Starting the script without arguments will launch it in the development environment.
-Passing an argument will specify a different environment, like console production.
-
-
-== Description of contents
-
-app
- Holds all the code that's specific to this particular application.
-
-app/controllers
- Holds controllers that should be named like weblog_controller.rb for
- automated URL mapping. All controllers should descend from
- ActionController::Base.
-
-app/models
- Holds models that should be named like post.rb.
- Most models will descend from ActiveRecord::Base.
-
-app/views
- Holds the template files for the view that should be named like
- weblog/index.rhtml for the WeblogController#index action. All views use eRuby
- syntax. This directory can also be used to keep stylesheets, images, and so on
- that can be symlinked to public.
-
-app/helpers
- Holds view helpers that should be named like weblog_helper.rb.
-
-config
- Configuration files for the Rails environment, the routing map, the database, and other dependencies.
-
-components
- Self-contained mini-applications that can bundle together controllers, models, and views.
-
-lib
- Application specific libraries. Basically, any kind of custom code that doesn't
- belong under controllers, models, or helpers. This directory is in the load path.
-
-public
- The directory available for the web server. Contains subdirectories for images, stylesheets,
- and javascripts. Also contains the dispatchers and the default HTML files.
-
-script
- Helper scripts for automation and generation.
-
-test
- Unit and functional tests along with fixtures.
-
-vendor
- External libraries that the application depends on. Also includes the plugins subdirectory.
- This directory is in the load path.
diff --git a/vendor/gems/ruby-openid-2.1.2/examples/rails_openid/Rakefile b/vendor/gems/ruby-openid-2.1.2/examples/rails_openid/Rakefile
deleted file mode 100644
index cffd19f0..00000000
--- a/vendor/gems/ruby-openid-2.1.2/examples/rails_openid/Rakefile
+++ /dev/null
@@ -1,10 +0,0 @@
-# Add your own tasks in files placed in lib/tasks ending in .rake,
-# for example lib/tasks/switchtower.rake, and they will automatically be available to Rake.
-
-require(File.join(File.dirname(__FILE__), 'config', 'boot'))
-
-require 'rake'
-require 'rake/testtask'
-require 'rake/rdoctask'
-
-require 'tasks/rails'
\ No newline at end of file
diff --git a/vendor/gems/ruby-openid-2.1.2/examples/rails_openid/app/controllers/application.rb b/vendor/gems/ruby-openid-2.1.2/examples/rails_openid/app/controllers/application.rb
deleted file mode 100644
index 537de40d..00000000
--- a/vendor/gems/ruby-openid-2.1.2/examples/rails_openid/app/controllers/application.rb
+++ /dev/null
@@ -1,4 +0,0 @@
-# Filters added to this controller will be run for all controllers in the application.
-# Likewise, all the methods added will be available for all controllers.
-class ApplicationController < ActionController::Base
-end
\ No newline at end of file
diff --git a/vendor/gems/ruby-openid-2.1.2/examples/rails_openid/app/controllers/consumer_controller.rb b/vendor/gems/ruby-openid-2.1.2/examples/rails_openid/app/controllers/consumer_controller.rb
deleted file mode 100644
index 37dd3bbd..00000000
--- a/vendor/gems/ruby-openid-2.1.2/examples/rails_openid/app/controllers/consumer_controller.rb
+++ /dev/null
@@ -1,122 +0,0 @@
-require 'pathname'
-
-require "openid"
-require 'openid/extensions/sreg'
-require 'openid/extensions/pape'
-require 'openid/store/filesystem'
-
-class ConsumerController < ApplicationController
- layout nil
-
- def index
- # render an openid form
- end
-
- def start
- begin
- identifier = params[:openid_identifier]
- if identifier.nil?
- flash[:error] = "Enter an OpenID identifier"
- redirect_to :action => 'index'
- return
- end
- oidreq = consumer.begin(identifier)
- rescue OpenID::OpenIDError => e
- flash[:error] = "Discovery failed for #{identifier}: #{e}"
- redirect_to :action => 'index'
- return
- end
- if params[:use_sreg]
- sregreq = OpenID::SReg::Request.new
- # required fields
- sregreq.request_fields(['email','nickname'], true)
- # optional fields
- sregreq.request_fields(['dob', 'fullname'], false)
- oidreq.add_extension(sregreq)
- oidreq.return_to_args['did_sreg'] = 'y'
- end
- if params[:use_pape]
- papereq = OpenID::PAPE::Request.new
- papereq.add_policy_uri(OpenID::PAPE::AUTH_PHISHING_RESISTANT)
- papereq.max_auth_age = 2*60*60
- oidreq.add_extension(papereq)
- oidreq.return_to_args['did_pape'] = 'y'
- end
- if params[:force_post]
- oidreq.return_to_args['force_post']='x'*2048
- end
- return_to = url_for :action => 'complete', :only_path => false
- realm = url_for :action => 'index', :only_path => false
-
- if oidreq.send_redirect?(realm, return_to, params[:immediate])
- redirect_to oidreq.redirect_url(realm, return_to, params[:immediate])
- else
- render :text => oidreq.html_markup(realm, return_to, params[:immediate], {'id' => 'openid_form'})
- end
- end
-
- def complete
- # FIXME - url_for some action is not necessarily the current URL.
- current_url = url_for(:action => 'complete', :only_path => false)
- parameters = params.reject{|k,v|request.path_parameters[k]}
- oidresp = consumer.complete(parameters, current_url)
- case oidresp.status
- when OpenID::Consumer::FAILURE
- if oidresp.display_identifier
- flash[:error] = ("Verification of #{oidresp.display_identifier}"\
- " failed: #{oidresp.message}")
- else
- flash[:error] = "Verification failed: #{oidresp.message}"
- end
- when OpenID::Consumer::SUCCESS
- flash[:success] = ("Verification of #{oidresp.display_identifier}"\
- " succeeded.")
- if params[:did_sreg]
- sreg_resp = OpenID::SReg::Response.from_success_response(oidresp)
- sreg_message = "Simple Registration data was requested"
- if sreg_resp.empty?
- sreg_message << ", but none was returned."
- else
- sreg_message << ". The following data were sent:"
- sreg_resp.data.each {|k,v|
- sreg_message << " #{k}: #{v}"
- }
- end
- flash[:sreg_results] = sreg_message
- end
- if params[:did_pape]
- pape_resp = OpenID::PAPE::Response.from_success_response(oidresp)
- pape_message = "A phishing resistant authentication method was requested"
- if pape_resp.auth_policies.member? OpenID::PAPE::AUTH_PHISHING_RESISTANT
- pape_message << ", and the server reported one."
- else
- pape_message << ", but the server did not report one."
- end
- if pape_resp.auth_time
- pape_message << " Authentication time: #{pape_resp.auth_time} seconds"
- end
- if pape_resp.nist_auth_level
- pape_message << " NIST Auth Level: #{pape_resp.nist_auth_level}"
- end
- flash[:pape_results] = pape_message
- end
- when OpenID::Consumer::SETUP_NEEDED
- flash[:alert] = "Immediate request failed - Setup Needed"
- when OpenID::Consumer::CANCEL
- flash[:alert] = "OpenID transaction cancelled."
- else
- end
- redirect_to :action => 'index'
- end
-
- private
-
- def consumer
- if @consumer.nil?
- dir = Pathname.new(RAILS_ROOT).join('db').join('cstore')
- store = OpenID::Store::Filesystem.new(dir)
- @consumer = OpenID::Consumer.new(session, store)
- end
- return @consumer
- end
-end
diff --git a/vendor/gems/ruby-openid-2.1.2/examples/rails_openid/app/controllers/login_controller.rb b/vendor/gems/ruby-openid-2.1.2/examples/rails_openid/app/controllers/login_controller.rb
deleted file mode 100644
index ff7c257b..00000000
--- a/vendor/gems/ruby-openid-2.1.2/examples/rails_openid/app/controllers/login_controller.rb
+++ /dev/null
@@ -1,45 +0,0 @@
-# Controller for handling the login, logout process for "users" of our
-# little server. Users have no password. This is just an example.
-
-require 'openid'
-
-class LoginController < ApplicationController
-
- layout 'server'
-
- def base_url
- url_for(:controller => 'login', :action => nil, :only_path => false)
- end
-
- def index
- response.headers['X-XRDS-Location'] = url_for(:controller => "server",
- :action => "idp_xrds",
- :only_path => false)
- @base_url = base_url
- # just show the login page
- end
-
- def submit
- user = params[:username]
-
- # if we get a user, log them in by putting their username in
- # the session hash.
- unless user.nil?
- session[:username] = user unless user.nil?
- session[:approvals] = []
- flash[:notice] = "Your OpenID URL is #{base_url}user/#{user}
Proceed to step 2 below."
- else
- flash[:error] = "Sorry, couldn't log you in. Try again."
- end
-
- redirect_to :action => 'index'
- end
-
- def logout
- # delete the username from the session hash
- session[:username] = nil
- session[:approvals] = nil
- redirect_to :action => 'index'
- end
-
-end
diff --git a/vendor/gems/ruby-openid-2.1.2/examples/rails_openid/app/controllers/server_controller.rb b/vendor/gems/ruby-openid-2.1.2/examples/rails_openid/app/controllers/server_controller.rb
deleted file mode 100644
index af0b1a7c..00000000
--- a/vendor/gems/ruby-openid-2.1.2/examples/rails_openid/app/controllers/server_controller.rb
+++ /dev/null
@@ -1,265 +0,0 @@
-require 'pathname'
-
-# load the openid library, first trying rubygems
-#begin
-# require "rubygems"
-# require_gem "ruby-openid", ">= 1.0"
-#rescue LoadError
-require "openid"
-require "openid/consumer/discovery"
-require 'openid/extensions/sreg'
-require 'openid/extensions/pape'
-require 'openid/store/filesystem'
-#end
-
-class ServerController < ApplicationController
-
- include ServerHelper
- include OpenID::Server
- layout nil
-
- def index
- begin
- oidreq = server.decode_request(params)
- rescue ProtocolError => e
- # invalid openid request, so just display a page with an error message
- render :text => e.to_s, :status => 500
- return
- end
-
- # no openid.mode was given
- unless oidreq
- render :text => "This is an OpenID server endpoint."
- return
- end
-
- oidresp = nil
-
- if oidreq.kind_of?(CheckIDRequest)
-
- identity = oidreq.identity
-
- if oidreq.id_select
- if oidreq.immediate
- oidresp = oidreq.answer(false)
- elsif session[:username].nil?
- # The user hasn't logged in.
- show_decision_page(oidreq)
- return
- else
- # Else, set the identity to the one the user is using.
- identity = url_for_user
- end
- end
-
- if oidresp
- nil
- elsif self.is_authorized(identity, oidreq.trust_root)
- oidresp = oidreq.answer(true, nil, identity)
-
- # add the sreg response if requested
- add_sreg(oidreq, oidresp)
- # ditto pape
- add_pape(oidreq, oidresp)
-
- elsif oidreq.immediate
- server_url = url_for :action => 'index'
- oidresp = oidreq.answer(false, server_url)
-
- else
- show_decision_page(oidreq)
- return
- end
-
- else
- oidresp = server.handle_request(oidreq)
- end
-
- self.render_response(oidresp)
- end
-
- def show_decision_page(oidreq, message="Do you trust this site with your identity?")
- session[:last_oidreq] = oidreq
- @oidreq = oidreq
-
- if message
- flash[:notice] = message
- end
-
- render :template => 'server/decide', :layout => 'server'
- end
-
- def user_page
- # Yadis content-negotiation: we want to return the xrds if asked for.
- accept = request.env['HTTP_ACCEPT']
-
- # This is not technically correct, and should eventually be updated
- # to do real Accept header parsing and logic. Though I expect it will work
- # 99% of the time.
- if accept and accept.include?('application/xrds+xml')
- user_xrds
- return
- end
-
- # content negotiation failed, so just render the user page
- xrds_url = url_for(:controller=>'user',:action=>params[:username])+'/xrds'
- identity_page = <
-
-
-