Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse code

Initial commit

  • Loading branch information...
commit 7eee3b16afce45fc89cadb683dee638eabc850e9 0 parents
authored March 18, 2010

Showing 44 changed files with 8,468 additions and 0 deletions. Show diff stats Hide diff stats

  1. 7  .gitignore
  2. 243  README
  3. 10  Rakefile
  4. 10  app/controllers/application_controller.rb
  5. 3  app/helpers/application_helper.rb
  6. 110  config/boot.rb
  7. 22  config/database.yml
  8. 41  config/environment.rb
  9. 17  config/environments/development.rb
  10. 28  config/environments/production.rb
  11. 28  config/environments/test.rb
  12. 7  config/initializers/backtrace_silencers.rb
  13. 10  config/initializers/inflections.rb
  14. 5  config/initializers/mime_types.rb
  15. 21  config/initializers/new_rails_defaults.rb
  16. 15  config/initializers/session_store.rb
  17. 5  config/locales/en.yml
  18. 43  config/routes.rb
  19. 7  db/seeds.rb
  20. 2  doc/README_FOR_APP
  21. 30  public/404.html
  22. 30  public/422.html
  23. 30  public/500.html
  24. 0  public/favicon.ico
  25. BIN  public/images/rails.png
  26. 275  public/index.html
  27. 2  public/javascripts/application.js
  28. 963  public/javascripts/controls.js
  29. 973  public/javascripts/dragdrop.js
  30. 1,128  public/javascripts/effects.js
  31. 4,320  public/javascripts/prototype.js
  32. 5  public/robots.txt
  33. 4  script/about
  34. 3  script/console
  35. 3  script/dbconsole
  36. 3  script/destroy
  37. 3  script/generate
  38. 3  script/performance/benchmarker
  39. 3  script/performance/profiler
  40. 3  script/plugin
  41. 3  script/runner
  42. 3  script/server
  43. 9  test/performance/browsing_test.rb
  44. 38  test/test_helper.rb
7  .gitignore
... ...
@@ -0,0 +1,7 @@
  1
+log/*.log
  2
+db/*.sqlite3
  3
+*~
  4
+coverage.features
  5
+coverage.tests
  6
+tmp
  7
+db/*.sqlite3-journal
243  README
... ...
@@ -0,0 +1,243 @@
  1
+== Welcome to Rails
  2
+
  3
+Rails is a web-application framework that includes everything needed to create 
  4
+database-backed web applications according to the Model-View-Control pattern. 
  5
+
  6
+This pattern splits the view (also called the presentation) into "dumb" templates
  7
+that are primarily responsible for inserting pre-built data in between HTML tags.
  8
+The model contains the "smart" domain objects (such as Account, Product, Person,
  9
+Post) that holds all the business logic and knows how to persist themselves to
  10
+a database. The controller handles the incoming requests (such as Save New Account,
  11
+Update Product, Show Post) by manipulating the model and directing data to the view.
  12
+
  13
+In Rails, the model is handled by what's called an object-relational mapping
  14
+layer entitled Active Record. This layer allows you to present the data from
  15
+database rows as objects and embellish these data objects with business logic
  16
+methods. You can read more about Active Record in
  17
+link:files/vendor/rails/activerecord/README.html.
  18
+
  19
+The controller and view are handled by the Action Pack, which handles both
  20
+layers by its two parts: Action View and Action Controller. These two layers
  21
+are bundled in a single package due to their heavy interdependence. This is
  22
+unlike the relationship between the Active Record and Action Pack that is much
  23
+more separate. Each of these packages can be used independently outside of
  24
+Rails.  You can read more about Action Pack in
  25
+link:files/vendor/rails/actionpack/README.html.
  26
+
  27
+
  28
+== Getting Started
  29
+
  30
+1. At the command prompt, start a new Rails application using the <tt>rails</tt> command
  31
+   and your application name. Ex: rails myapp
  32
+2. Change directory into myapp and start the web server: <tt>script/server</tt> (run with --help for options)
  33
+3. Go to http://localhost:3000/ and get "Welcome aboard: You're riding the Rails!"
  34
+4. Follow the guidelines to start developing your application
  35
+
  36
+
  37
+== Web Servers
  38
+
  39
+By default, Rails will try to use Mongrel if it's are installed when started with script/server, otherwise Rails will use WEBrick, the webserver that ships with Ruby. But you can also use Rails
  40
+with a variety of other web servers.
  41
+
  42
+Mongrel is a Ruby-based webserver with a C component (which requires compilation) that is
  43
+suitable for development and deployment of Rails applications. If you have Ruby Gems installed,
  44
+getting up and running with mongrel is as easy as: <tt>gem install mongrel</tt>.
  45
+More info at: http://mongrel.rubyforge.org
  46
+
  47
+Say other Ruby web servers like Thin and Ebb or regular web servers like Apache or LiteSpeed or
  48
+Lighttpd or IIS. The Ruby web servers are run through Rack and the latter can either be setup to use
  49
+FCGI or proxy to a pack of Mongrels/Thin/Ebb servers.
  50
+
  51
+== Apache .htaccess example for FCGI/CGI
  52
+
  53
+# General Apache options
  54
+AddHandler fastcgi-script .fcgi
  55
+AddHandler cgi-script .cgi
  56
+Options +FollowSymLinks +ExecCGI
  57
+
  58
+# If you don't want Rails to look in certain directories,
  59
+# use the following rewrite rules so that Apache won't rewrite certain requests
  60
+# 
  61
+# Example:
  62
+#   RewriteCond %{REQUEST_URI} ^/notrails.*
  63
+#   RewriteRule .* - [L]
  64
+
  65
+# Redirect all requests not available on the filesystem to Rails
  66
+# By default the cgi dispatcher is used which is very slow
  67
+# 
  68
+# For better performance replace the dispatcher with the fastcgi one
  69
+#
  70
+# Example:
  71
+#   RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
  72
+RewriteEngine On
  73
+
  74
+# If your Rails application is accessed via an Alias directive,
  75
+# then you MUST also set the RewriteBase in this htaccess file.
  76
+#
  77
+# Example:
  78
+#   Alias /myrailsapp /path/to/myrailsapp/public
  79
+#   RewriteBase /myrailsapp
  80
+
  81
+RewriteRule ^$ index.html [QSA]
  82
+RewriteRule ^([^.]+)$ $1.html [QSA]
  83
+RewriteCond %{REQUEST_FILENAME} !-f
  84
+RewriteRule ^(.*)$ dispatch.cgi [QSA,L]
  85
+
  86
+# In case Rails experiences terminal errors
  87
+# Instead of displaying this message you can supply a file here which will be rendered instead
  88
+# 
  89
+# Example:
  90
+#   ErrorDocument 500 /500.html
  91
+
  92
+ErrorDocument 500 "<h2>Application error</h2>Rails application failed to start properly"
  93
+
  94
+
  95
+== Debugging Rails
  96
+
  97
+Sometimes your application goes wrong.  Fortunately there are a lot of tools that
  98
+will help you debug it and get it back on the rails.
  99
+
  100
+First area to check is the application log files.  Have "tail -f" commands running
  101
+on the server.log and development.log. Rails will automatically display debugging
  102
+and runtime information to these files. Debugging info will also be shown in the
  103
+browser on requests from 127.0.0.1.
  104
+
  105
+You can also log your own messages directly into the log file from your code using
  106
+the Ruby logger class from inside your controllers. Example:
  107
+
  108
+  class WeblogController < ActionController::Base
  109
+    def destroy
  110
+      @weblog = Weblog.find(params[:id])
  111
+      @weblog.destroy
  112
+      logger.info("#{Time.now} Destroyed Weblog ID ##{@weblog.id}!")
  113
+    end
  114
+  end
  115
+
  116
+The result will be a message in your log file along the lines of:
  117
+
  118
+  Mon Oct 08 14:22:29 +1000 2007 Destroyed Weblog ID #1
  119
+
  120
+More information on how to use the logger is at http://www.ruby-doc.org/core/
  121
+
  122
+Also, Ruby documentation can be found at http://www.ruby-lang.org/ including:
  123
+
  124
+* The Learning Ruby (Pickaxe) Book: http://www.ruby-doc.org/docs/ProgrammingRuby/
  125
+* Learn to Program: http://pine.fm/LearnToProgram/  (a beginners guide)
  126
+
  127
+These two online (and free) books will bring you up to speed on the Ruby language
  128
+and also on programming in general.
  129
+
  130
+
  131
+== Debugger
  132
+
  133
+Debugger support is available through the debugger command when you start your Mongrel or
  134
+Webrick server with --debugger. This means that you can break out of execution at any point
  135
+in the code, investigate and change the model, AND then resume execution! 
  136
+You need to install ruby-debug to run the server in debugging mode. With gems, use 'gem install ruby-debug'
  137
+Example:
  138
+
  139
+  class WeblogController < ActionController::Base
  140
+    def index
  141
+      @posts = Post.find(:all)
  142
+      debugger
  143
+    end
  144
+  end
  145
+
  146
+So the controller will accept the action, run the first line, then present you
  147
+with a IRB prompt in the server window. Here you can do things like:
  148
+
  149
+  >> @posts.inspect
  150
+  => "[#<Post:0x14a6be8 @attributes={\"title\"=>nil, \"body\"=>nil, \"id\"=>\"1\"}>,
  151
+       #<Post:0x14a6620 @attributes={\"title\"=>\"Rails you know!\", \"body\"=>\"Only ten..\", \"id\"=>\"2\"}>]"
  152
+  >> @posts.first.title = "hello from a debugger"
  153
+  => "hello from a debugger"
  154
+
  155
+...and even better is that you can examine how your runtime objects actually work:
  156
+
  157
+  >> f = @posts.first
  158
+  => #<Post:0x13630c4 @attributes={"title"=>nil, "body"=>nil, "id"=>"1"}>
  159
+  >> f.
  160
+  Display all 152 possibilities? (y or n)
  161
+
  162
+Finally, when you're ready to resume execution, you enter "cont"
  163
+
  164
+
  165
+== Console
  166
+
  167
+You can interact with the domain model by starting the console through <tt>script/console</tt>.
  168
+Here you'll have all parts of the application configured, just like it is when the
  169
+application is running. You can inspect domain models, change values, and save to the
  170
+database. Starting the script without arguments will launch it in the development environment.
  171
+Passing an argument will specify a different environment, like <tt>script/console production</tt>.
  172
+
  173
+To reload your controllers and models after launching the console run <tt>reload!</tt>
  174
+
  175
+== dbconsole
  176
+
  177
+You can go to the command line of your database directly through <tt>script/dbconsole</tt>.
  178
+You would be connected to the database with the credentials defined in database.yml.
  179
+Starting the script without arguments will connect you to the development database. Passing an
  180
+argument will connect you to a different database, like <tt>script/dbconsole production</tt>.
  181
+Currently works for mysql, postgresql and sqlite.
  182
+
  183
+== Description of Contents
  184
+
  185
+app
  186
+  Holds all the code that's specific to this particular application.
  187
+
  188
+app/controllers
  189
+  Holds controllers that should be named like weblogs_controller.rb for
  190
+  automated URL mapping. All controllers should descend from ApplicationController
  191
+  which itself descends from ActionController::Base.
  192
+
  193
+app/models
  194
+  Holds models that should be named like post.rb.
  195
+  Most models will descend from ActiveRecord::Base.
  196
+
  197
+app/views
  198
+  Holds the template files for the view that should be named like
  199
+  weblogs/index.html.erb for the WeblogsController#index action. All views use eRuby
  200
+  syntax.
  201
+
  202
+app/views/layouts
  203
+  Holds the template files for layouts to be used with views. This models the common
  204
+  header/footer method of wrapping views. In your views, define a layout using the
  205
+  <tt>layout :default</tt> and create a file named default.html.erb. Inside default.html.erb,
  206
+  call <% yield %> to render the view using this layout.
  207
+
  208
+app/helpers
  209
+  Holds view helpers that should be named like weblogs_helper.rb. These are generated
  210
+  for you automatically when using script/generate for controllers. Helpers can be used to
  211
+  wrap functionality for your views into methods.
  212
+
  213
+config
  214
+  Configuration files for the Rails environment, the routing map, the database, and other dependencies.
  215
+
  216
+db
  217
+  Contains the database schema in schema.rb.  db/migrate contains all
  218
+  the sequence of Migrations for your schema.
  219
+
  220
+doc
  221
+  This directory is where your application documentation will be stored when generated
  222
+  using <tt>rake doc:app</tt>
  223
+
  224
+lib
  225
+  Application specific libraries. Basically, any kind of custom code that doesn't
  226
+  belong under controllers, models, or helpers. This directory is in the load path.
  227
+
  228
+public
  229
+  The directory available for the web server. Contains subdirectories for images, stylesheets,
  230
+  and javascripts. Also contains the dispatchers and the default HTML files. This should be
  231
+  set as the DOCUMENT_ROOT of your web server.
  232
+
  233
+script
  234
+  Helper scripts for automation and generation.
  235
+
  236
+test
  237
+  Unit and functional tests along with fixtures. When using the script/generate scripts, template
  238
+  test files will be generated for you and placed in this directory.
  239
+
  240
+vendor
  241
+  External libraries that the application depends on. Also includes the plugins subdirectory.
  242
+  If the app has frozen rails, those gems also go here, under vendor/rails/.
  243
+  This directory is in the load path.
10  Rakefile
... ...
@@ -0,0 +1,10 @@
  1
+# Add your own tasks in files placed in lib/tasks ending in .rake,
  2
+# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
  3
+
  4
+require(File.join(File.dirname(__FILE__), 'config', 'boot'))
  5
+
  6
+require 'rake'
  7
+require 'rake/testtask'
  8
+require 'rake/rdoctask'
  9
+
  10
+require 'tasks/rails'
10  app/controllers/application_controller.rb
... ...
@@ -0,0 +1,10 @@
  1
+# Filters added to this controller apply to all controllers in the application.
  2
+# Likewise, all the methods added will be available for all controllers.
  3
+
  4
+class ApplicationController < ActionController::Base
  5
+  helper :all # include all helpers, all the time
  6
+  protect_from_forgery # See ActionController::RequestForgeryProtection for details
  7
+
  8
+  # Scrub sensitive parameters from your log
  9
+  # filter_parameter_logging :password
  10
+end
3  app/helpers/application_helper.rb
... ...
@@ -0,0 +1,3 @@
  1
+# Methods added to this helper will be available to all templates in the application.
  2
+module ApplicationHelper
  3
+end
110  config/boot.rb
... ...
@@ -0,0 +1,110 @@
  1
+# Don't change this file!
  2
+# Configure your app in config/environment.rb and config/environments/*.rb
  3
+
  4
+RAILS_ROOT = "#{File.dirname(__FILE__)}/.." unless defined?(RAILS_ROOT)
  5
+
  6
+module Rails
  7
+  class << self
  8
+    def boot!
  9
+      unless booted?
  10
+        preinitialize
  11
+        pick_boot.run
  12
+      end
  13
+    end
  14
+
  15
+    def booted?
  16
+      defined? Rails::Initializer
  17
+    end
  18
+
  19
+    def pick_boot
  20
+      (vendor_rails? ? VendorBoot : GemBoot).new
  21
+    end
  22
+
  23
+    def vendor_rails?
  24
+      File.exist?("#{RAILS_ROOT}/vendor/rails")
  25
+    end
  26
+
  27
+    def preinitialize
  28
+      load(preinitializer_path) if File.exist?(preinitializer_path)
  29
+    end
  30
+
  31
+    def preinitializer_path
  32
+      "#{RAILS_ROOT}/config/preinitializer.rb"
  33
+    end
  34
+  end
  35
+
  36
+  class Boot
  37
+    def run
  38
+      load_initializer
  39
+      Rails::Initializer.run(:set_load_path)
  40
+    end
  41
+  end
  42
+
  43
+  class VendorBoot < Boot
  44
+    def load_initializer
  45
+      require "#{RAILS_ROOT}/vendor/rails/railties/lib/initializer"
  46
+      Rails::Initializer.run(:install_gem_spec_stubs)
  47
+      Rails::GemDependency.add_frozen_gem_path
  48
+    end
  49
+  end
  50
+
  51
+  class GemBoot < Boot
  52
+    def load_initializer
  53
+      self.class.load_rubygems
  54
+      load_rails_gem
  55
+      require 'initializer'
  56
+    end
  57
+
  58
+    def load_rails_gem
  59
+      if version = self.class.gem_version
  60
+        gem 'rails', version
  61
+      else
  62
+        gem 'rails'
  63
+      end
  64
+    rescue Gem::LoadError => load_error
  65
+      $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.)
  66
+      exit 1
  67
+    end
  68
+
  69
+    class << self
  70
+      def rubygems_version
  71
+        Gem::RubyGemsVersion rescue nil
  72
+      end
  73
+
  74
+      def gem_version
  75
+        if defined? RAILS_GEM_VERSION
  76
+          RAILS_GEM_VERSION
  77
+        elsif ENV.include?('RAILS_GEM_VERSION')
  78
+          ENV['RAILS_GEM_VERSION']
  79
+        else
  80
+          parse_gem_version(read_environment_rb)
  81
+        end
  82
+      end
  83
+
  84
+      def load_rubygems
  85
+        min_version = '1.3.2'
  86
+        require 'rubygems'
  87
+        unless rubygems_version >= min_version
  88
+          $stderr.puts %Q(Rails requires RubyGems >= #{min_version} (you have #{rubygems_version}). Please `gem update --system` and try again.)
  89
+          exit 1
  90
+        end
  91
+
  92
+      rescue LoadError
  93
+        $stderr.puts %Q(Rails requires RubyGems >= #{min_version}. Please install RubyGems and try again: http://rubygems.rubyforge.org)
  94
+        exit 1
  95
+      end
  96
+
  97
+      def parse_gem_version(text)
  98
+        $1 if text =~ /^[^#]*RAILS_GEM_VERSION\s*=\s*["']([!~<>=]*\s*[\d.]+)["']/
  99
+      end
  100
+
  101
+      private
  102
+        def read_environment_rb
  103
+          File.read("#{RAILS_ROOT}/config/environment.rb")
  104
+        end
  105
+    end
  106
+  end
  107
+end
  108
+
  109
+# All that for this:
  110
+Rails.boot!
22  config/database.yml
... ...
@@ -0,0 +1,22 @@
  1
+# SQLite version 3.x
  2
+#   gem install sqlite3-ruby (not necessary on OS X Leopard)
  3
+development:
  4
+  adapter: sqlite3
  5
+  database: db/development.sqlite3
  6
+  pool: 5
  7
+  timeout: 5000
  8
+
  9
+# Warning: The database defined as "test" will be erased and
  10
+# re-generated from your development database when you run "rake".
  11
+# Do not set this db to the same as development or production.
  12
+test:
  13
+  adapter: sqlite3
  14
+  database: db/test.sqlite3
  15
+  pool: 5
  16
+  timeout: 5000
  17
+
  18
+production:
  19
+  adapter: sqlite3
  20
+  database: db/production.sqlite3
  21
+  pool: 5
  22
+  timeout: 5000
41  config/environment.rb
... ...
@@ -0,0 +1,41 @@
  1
+# Be sure to restart your server when you modify this file
  2
+
  3
+# Specifies gem version of Rails to use when vendor/rails is not present
  4
+RAILS_GEM_VERSION = '2.3.4' unless defined? RAILS_GEM_VERSION
  5
+
  6
+# Bootstrap the Rails environment, frameworks, and default configuration
  7
+require File.join(File.dirname(__FILE__), 'boot')
  8
+
  9
+Rails::Initializer.run do |config|
  10
+  # Settings in config/environments/* take precedence over those specified here.
  11
+  # Application configuration should go into files in config/initializers
  12
+  # -- all .rb files in that directory are automatically loaded.
  13
+
  14
+  # Add additional load paths for your own custom dirs
  15
+  # config.load_paths += %W( #{RAILS_ROOT}/extras )
  16
+
  17
+  # Specify gems that this application depends on and have them installed with rake gems:install
  18
+  # config.gem "bj"
  19
+  # config.gem "hpricot", :version => '0.6', :source => "http://code.whytheluckystiff.net"
  20
+  # config.gem "sqlite3-ruby", :lib => "sqlite3"
  21
+  # config.gem "aws-s3", :lib => "aws/s3"
  22
+
  23
+  # Only load the plugins named here, in the order given (default is alphabetical).
  24
+  # :all can be used as a placeholder for all plugins not explicitly named
  25
+  # config.plugins = [ :exception_notification, :ssl_requirement, :all ]
  26
+
  27
+  # Skip frameworks you're not going to use. To use Rails without a database,
  28
+  # you must remove the Active Record framework.
  29
+  # config.frameworks -= [ :active_record, :active_resource, :action_mailer ]
  30
+
  31
+  # Activate observers that should always be running
  32
+  # config.active_record.observers = :cacher, :garbage_collector, :forum_observer
  33
+
  34
+  # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
  35
+  # Run "rake -D time" for a list of tasks for finding time zone names.
  36
+  config.time_zone = 'UTC'
  37
+
  38
+  # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
  39
+  # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}')]
  40
+  # config.i18n.default_locale = :de
  41
+end
17  config/environments/development.rb
... ...
@@ -0,0 +1,17 @@
  1
+# Settings specified here will take precedence over those in config/environment.rb
  2
+
  3
+# In the development environment your application's code is reloaded on
  4
+# every request.  This slows down response time but is perfect for development
  5
+# since you don't have to restart the webserver when you make code changes.
  6
+config.cache_classes = false
  7
+
  8
+# Log error messages when you accidentally call methods on nil.
  9
+config.whiny_nils = true
  10
+
  11
+# Show full error reports and disable caching
  12
+config.action_controller.consider_all_requests_local = true
  13
+config.action_view.debug_rjs                         = true
  14
+config.action_controller.perform_caching             = false
  15
+
  16
+# Don't care if the mailer can't send
  17
+config.action_mailer.raise_delivery_errors = false
28  config/environments/production.rb
... ...
@@ -0,0 +1,28 @@
  1
+# Settings specified here will take precedence over those in config/environment.rb
  2
+
  3
+# The production environment is meant for finished, "live" apps.
  4
+# Code is not reloaded between requests
  5
+config.cache_classes = true
  6
+
  7
+# Full error reports are disabled and caching is turned on
  8
+config.action_controller.consider_all_requests_local = false
  9
+config.action_controller.perform_caching             = true
  10
+config.action_view.cache_template_loading            = true
  11
+
  12
+# See everything in the log (default is :info)
  13
+# config.log_level = :debug
  14
+
  15
+# Use a different logger for distributed setups
  16
+# config.logger = SyslogLogger.new
  17
+
  18
+# Use a different cache store in production
  19
+# config.cache_store = :mem_cache_store
  20
+
  21
+# Enable serving of images, stylesheets, and javascripts from an asset server
  22
+# config.action_controller.asset_host = "http://assets.example.com"
  23
+
  24
+# Disable delivery errors, bad email addresses will be ignored
  25
+# config.action_mailer.raise_delivery_errors = false
  26
+
  27
+# Enable threaded mode
  28
+# config.threadsafe!
28  config/environments/test.rb
... ...
@@ -0,0 +1,28 @@
  1
+# Settings specified here will take precedence over those in config/environment.rb
  2
+
  3
+# The test environment is used exclusively to run your application's
  4
+# test suite.  You never need to work with it otherwise.  Remember that
  5
+# your test database is "scratch space" for the test suite and is wiped
  6
+# and recreated between test runs.  Don't rely on the data there!
  7
+config.cache_classes = true
  8
+
  9
+# Log error messages when you accidentally call methods on nil.
  10
+config.whiny_nils = true
  11
+
  12
+# Show full error reports and disable caching
  13
+config.action_controller.consider_all_requests_local = true
  14
+config.action_controller.perform_caching             = false
  15
+config.action_view.cache_template_loading            = true
  16
+
  17
+# Disable request forgery protection in test environment
  18
+config.action_controller.allow_forgery_protection    = false
  19
+
  20
+# Tell Action Mailer not to deliver emails to the real world.
  21
+# The :test delivery method accumulates sent emails in the
  22
+# ActionMailer::Base.deliveries array.
  23
+config.action_mailer.delivery_method = :test
  24
+
  25
+# Use SQL instead of Active Record's schema dumper when creating the test database.
  26
+# This is necessary if your schema can't be completely dumped by the schema dumper,
  27
+# like if you have constraints or database-specific column types
  28
+# config.active_record.schema_format = :sql
7  config/initializers/backtrace_silencers.rb
... ...
@@ -0,0 +1,7 @@
  1
+# Be sure to restart your server when you modify this file.
  2
+
  3
+# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces.
  4
+# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ }
  5
+
  6
+# You can also remove all the silencers if you're trying do debug a problem that might steem from framework code.
  7
+# Rails.backtrace_cleaner.remove_silencers!
10  config/initializers/inflections.rb
... ...
@@ -0,0 +1,10 @@
  1
+# Be sure to restart your server when you modify this file.
  2
+
  3
+# Add new inflection rules using the following format 
  4
+# (all these examples are active by default):
  5
+# ActiveSupport::Inflector.inflections do |inflect|
  6
+#   inflect.plural /^(ox)$/i, '\1en'
  7
+#   inflect.singular /^(ox)en/i, '\1'
  8
+#   inflect.irregular 'person', 'people'
  9
+#   inflect.uncountable %w( fish sheep )
  10
+# end
5  config/initializers/mime_types.rb
... ...
@@ -0,0 +1,5 @@
  1
+# Be sure to restart your server when you modify this file.
  2
+
  3
+# Add new mime types for use in respond_to blocks:
  4
+# Mime::Type.register "text/richtext", :rtf
  5
+# Mime::Type.register_alias "text/html", :iphone
21  config/initializers/new_rails_defaults.rb
... ...
@@ -0,0 +1,21 @@
  1
+# Be sure to restart your server when you modify this file.
  2
+
  3
+# These settings change the behavior of Rails 2 apps and will be defaults
  4
+# for Rails 3. You can remove this initializer when Rails 3 is released.
  5
+
  6
+if defined?(ActiveRecord)
  7
+  # Include Active Record class name as root for JSON serialized output.
  8
+  ActiveRecord::Base.include_root_in_json = true
  9
+
  10
+  # Store the full class name (including module namespace) in STI type column.
  11
+  ActiveRecord::Base.store_full_sti_class = true
  12
+end
  13
+
  14
+ActionController::Routing.generate_best_match = false
  15
+
  16
+# Use ISO 8601 format for JSON serialized times and dates.
  17
+ActiveSupport.use_standard_json_time_format = true
  18
+
  19
+# Don't escape HTML entities in JSON, leave that for the #json_escape helper.
  20
+# if you're including raw json in an HTML page.
  21
+ActiveSupport.escape_html_entities_in_json = false
15  config/initializers/session_store.rb
... ...
@@ -0,0 +1,15 @@
  1
+# Be sure to restart your server when you modify this file.
  2
+
  3
+# Your secret key for verifying cookie session data integrity.
  4
+# If you change this key, all old sessions will become invalid!
  5
+# Make sure the secret is at least 30 characters and all random, 
  6
+# no regular words or you'll be exposed to dictionary attacks.
  7
+ActionController::Base.session = {
  8
+  :key         => '_reportz_session',
  9
+  :secret      => 'c33d70985dea741cd6074212899096094d55d6448d7d5ef47a6cc7aed73d44ce6eb7d0e738ea837adb50009c6b7d9241498069b86aefd488cb149cae2ad40b8b'
  10
+}
  11
+
  12
+# Use the database for sessions instead of the cookie-based default,
  13
+# which shouldn't be used to store highly confidential information
  14
+# (create the session table with "rake db:sessions:create")
  15
+# ActionController::Base.session_store = :active_record_store
5  config/locales/en.yml
... ...
@@ -0,0 +1,5 @@
  1
+# Sample localization file for English. Add more files in this directory for other locales.
  2
+# See http://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points.
  3
+
  4
+en:
  5
+  hello: "Hello world"
43  config/routes.rb
... ...
@@ -0,0 +1,43 @@
  1
+ActionController::Routing::Routes.draw do |map|
  2
+  # The priority is based upon order of creation: first created -> highest priority.
  3
+
  4
+  # Sample of regular route:
  5
+  #   map.connect 'products/:id', :controller => 'catalog', :action => 'view'
  6
+  # Keep in mind you can assign values other than :controller and :action
  7
+
  8
+  # Sample of named route:
  9
+  #   map.purchase 'products/:id/purchase', :controller => 'catalog', :action => 'purchase'
  10
+  # This route can be invoked with purchase_url(:id => product.id)
  11
+
  12
+  # Sample resource route (maps HTTP verbs to controller actions automatically):
  13
+  #   map.resources :products
  14
+
  15
+  # Sample resource route with options:
  16
+  #   map.resources :products, :member => { :short => :get, :toggle => :post }, :collection => { :sold => :get }
  17
+
  18
+  # Sample resource route with sub-resources:
  19
+  #   map.resources :products, :has_many => [ :comments, :sales ], :has_one => :seller
  20
+  
  21
+  # Sample resource route with more complex sub-resources
  22
+  #   map.resources :products do |products|
  23
+  #     products.resources :comments
  24
+  #     products.resources :sales, :collection => { :recent => :get }
  25
+  #   end
  26
+
  27
+  # Sample resource route within a namespace:
  28
+  #   map.namespace :admin do |admin|
  29
+  #     # Directs /admin/products/* to Admin::ProductsController (app/controllers/admin/products_controller.rb)
  30
+  #     admin.resources :products
  31
+  #   end
  32
+
  33
+  # You can have the root of your site routed with map.root -- just remember to delete public/index.html.
  34
+  # map.root :controller => "welcome"
  35
+
  36
+  # See how all your routes lay out with "rake routes"
  37
+
  38
+  # Install the default routes as the lowest priority.
  39
+  # Note: These default routes make all actions in every controller accessible via GET requests. You should
  40
+  # consider removing or commenting them out if you're using named routes and resources.
  41
+  map.connect ':controller/:action/:id'
  42
+  map.connect ':controller/:action/:id.:format'
  43
+end
7  db/seeds.rb
... ...
@@ -0,0 +1,7 @@
  1
+# This file should contain all the record creation needed to seed the database with its default values.
  2
+# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup).
  3
+#
  4
+# Examples:
  5
+#   
  6
+#   cities = City.create([{ :name => 'Chicago' }, { :name => 'Copenhagen' }])
  7
+#   Major.create(:name => 'Daley', :city => cities.first)
2  doc/README_FOR_APP
... ...
@@ -0,0 +1,2 @@
  1
+Use this README file to introduce your application and point to useful places in the API for learning more.
  2
+Run "rake doc:app" to generate API documentation for your models, controllers, helpers, and libraries.
30  public/404.html
... ...
@@ -0,0 +1,30 @@
  1
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2
+       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3
+
  4
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  5
+
  6
+<head>
  7
+  <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
  8
+  <title>The page you were looking for doesn't exist (404)</title>
  9
+	<style type="text/css">
  10
+		body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
  11
+		div.dialog {
  12
+			width: 25em;
  13
+			padding: 0 4em;
  14
+			margin: 4em auto 0 auto;
  15
+			border: 1px solid #ccc;
  16
+			border-right-color: #999;
  17
+			border-bottom-color: #999;
  18
+		}
  19
+		h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
  20
+	</style>
  21
+</head>
  22
+
  23
+<body>
  24
+  <!-- This file lives in public/404.html -->
  25
+  <div class="dialog">
  26
+    <h1>The page you were looking for doesn't exist.</h1>
  27
+    <p>You may have mistyped the address or the page may have moved.</p>
  28
+  </div>
  29
+</body>
  30
+</html>
30  public/422.html
... ...
@@ -0,0 +1,30 @@
  1
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2
+       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3
+
  4
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  5
+
  6
+<head>
  7
+  <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
  8
+  <title>The change you wanted was rejected (422)</title>
  9
+	<style type="text/css">
  10
+		body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
  11
+		div.dialog {
  12
+			width: 25em;
  13
+			padding: 0 4em;
  14
+			margin: 4em auto 0 auto;
  15
+			border: 1px solid #ccc;
  16
+			border-right-color: #999;
  17
+			border-bottom-color: #999;
  18
+		}
  19
+		h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
  20
+	</style>
  21
+</head>
  22
+
  23
+<body>
  24
+  <!-- This file lives in public/422.html -->
  25
+  <div class="dialog">
  26
+    <h1>The change you wanted was rejected.</h1>
  27
+    <p>Maybe you tried to change something you didn't have access to.</p>
  28
+  </div>
  29
+</body>
  30
+</html>
30  public/500.html
... ...
@@ -0,0 +1,30 @@
  1
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2
+       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3
+
  4
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  5
+
  6
+<head>
  7
+  <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
  8
+  <title>We're sorry, but something went wrong (500)</title>
  9
+	<style type="text/css">
  10
+		body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
  11
+		div.dialog {
  12
+			width: 25em;
  13
+			padding: 0 4em;
  14
+			margin: 4em auto 0 auto;
  15
+			border: 1px solid #ccc;
  16
+			border-right-color: #999;
  17
+			border-bottom-color: #999;
  18
+		}
  19
+		h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
  20
+	</style>
  21
+</head>
  22
+
  23
+<body>
  24
+  <!-- This file lives in public/500.html -->
  25
+  <div class="dialog">
  26
+    <h1>We're sorry, but something went wrong.</h1>
  27
+    <p>We've been notified about this issue and we'll take a look at it shortly.</p>
  28
+  </div>
  29
+</body>
  30
+</html>
0  public/favicon.ico
No changes.
BIN  public/images/rails.png
275  public/index.html
... ...
@@ -0,0 +1,275 @@
  1
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2
+        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3
+<html>
  4
+  <head>
  5
+    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
  6
+    <title>Ruby on Rails: Welcome aboard</title>
  7
+    <style type="text/css" media="screen">
  8
+      body {
  9
+        margin: 0;
  10
+        margin-bottom: 25px;
  11
+        padding: 0;
  12
+        background-color: #f0f0f0;
  13
+        font-family: "Lucida Grande", "Bitstream Vera Sans", "Verdana";
  14
+        font-size: 13px;
  15
+        color: #333;
  16
+      }
  17
+      
  18
+      h1 {
  19
+        font-size: 28px;
  20
+        color: #000;
  21
+      }
  22
+      
  23
+      a  {color: #03c}
  24
+      a:hover {
  25
+        background-color: #03c;
  26
+        color: white;
  27
+        text-decoration: none;
  28
+      }
  29
+      
  30
+      
  31
+      #page {
  32
+        background-color: #f0f0f0;
  33
+        width: 750px;
  34
+        margin: 0;
  35
+        margin-left: auto;
  36
+        margin-right: auto;
  37
+      }
  38
+      
  39
+      #content {
  40
+        float: left;
  41
+        background-color: white;
  42
+        border: 3px solid #aaa;
  43
+        border-top: none;
  44
+        padding: 25px;
  45
+        width: 500px;
  46
+      }
  47
+      
  48
+      #sidebar {
  49
+        float: right;
  50
+        width: 175px;
  51
+      }
  52
+
  53
+      #footer {
  54
+        clear: both;
  55
+      }
  56
+      
  57
+
  58
+      #header, #about, #getting-started {
  59
+        padding-left: 75px;
  60
+        padding-right: 30px;
  61
+      }
  62
+
  63
+
  64
+      #header {
  65
+        background-image: url("images/rails.png");
  66
+        background-repeat: no-repeat;
  67
+        background-position: top left;
  68
+        height: 64px;
  69
+      }
  70
+      #header h1, #header h2 {margin: 0}
  71
+      #header h2 {
  72
+        color: #888;
  73
+        font-weight: normal;
  74
+        font-size: 16px;
  75
+      }
  76
+      
  77
+      
  78
+      #about h3 {
  79
+        margin: 0;
  80
+        margin-bottom: 10px;
  81
+        font-size: 14px;
  82
+      }
  83
+      
  84
+      #about-content {
  85
+        background-color: #ffd;
  86
+        border: 1px solid #fc0;
  87
+        margin-left: -11px;
  88
+      }
  89
+      #about-content table {
  90
+        margin-top: 10px;
  91
+        margin-bottom: 10px;
  92
+        font-size: 11px;
  93
+        border-collapse: collapse;
  94
+      }
  95
+      #about-content td {
  96
+        padding: 10px;
  97
+        padding-top: 3px;
  98
+        padding-bottom: 3px;
  99
+      }
  100
+      #about-content td.name  {color: #555}
  101
+      #about-content td.value {color: #000}
  102
+      
  103
+      #about-content.failure {
  104
+        background-color: #fcc;
  105
+        border: 1px solid #f00;
  106
+      }
  107
+      #about-content.failure p {
  108
+        margin: 0;
  109
+        padding: 10px;
  110
+      }
  111
+      
  112
+      
  113
+      #getting-started {
  114
+        border-top: 1px solid #ccc;
  115
+        margin-top: 25px;
  116
+        padding-top: 15px;
  117
+      }
  118
+      #getting-started h1 {
  119
+        margin: 0;
  120
+        font-size: 20px;
  121
+      }
  122
+      #getting-started h2 {
  123
+        margin: 0;
  124
+        font-size: 14px;
  125
+        font-weight: normal;
  126
+        color: #333;
  127
+        margin-bottom: 25px;
  128
+      }
  129
+      #getting-started ol {
  130
+        margin-left: 0;
  131
+        padding-left: 0;
  132
+      }
  133
+      #getting-started li {
  134
+        font-size: 18px;
  135
+        color: #888;
  136
+        margin-bottom: 25px;
  137
+      }
  138
+      #getting-started li h2 {
  139
+        margin: 0;
  140
+        font-weight: normal;
  141
+        font-size: 18px;
  142
+        color: #333;
  143
+      }
  144
+      #getting-started li p {
  145
+        color: #555;
  146
+        font-size: 13px;
  147
+      }
  148
+      
  149
+      
  150
+      #search {
  151
+        margin: 0;
  152
+        padding-top: 10px;
  153
+        padding-bottom: 10px;
  154
+        font-size: 11px;
  155
+      }
  156
+      #search input {
  157
+        font-size: 11px;
  158
+        margin: 2px;
  159
+      }
  160
+      #search-text {width: 170px}
  161
+      
  162
+      
  163
+      #sidebar ul {
  164
+        margin-left: 0;
  165
+        padding-left: 0;
  166
+      }
  167
+      #sidebar ul h3 {
  168
+        margin-top: 25px;
  169
+        font-size: 16px;
  170
+        padding-bottom: 10px;
  171
+        border-bottom: 1px solid #ccc;
  172
+      }
  173
+      #sidebar li {
  174
+        list-style-type: none;
  175
+      }
  176
+      #sidebar ul.links li {
  177
+        margin-bottom: 5px;
  178
+      }
  179
+      
  180
+    </style>
  181
+    <script type="text/javascript" src="javascripts/prototype.js"></script>
  182
+    <script type="text/javascript" src="javascripts/effects.js"></script>
  183
+    <script type="text/javascript">
  184
+      function about() {
  185
+        if (Element.empty('about-content')) {
  186
+          new Ajax.Updater('about-content', 'rails/info/properties', {
  187
+            method:     'get',
  188
+            onFailure:  function() {Element.classNames('about-content').add('failure')},
  189
+            onComplete: function() {new Effect.BlindDown('about-content', {duration: 0.25})}
  190
+          });
  191
+        } else {
  192
+          new Effect[Element.visible('about-content') ? 
  193
+            'BlindUp' : 'BlindDown']('about-content', {duration: 0.25});
  194
+        }
  195
+      }
  196
+      
  197
+      window.onload = function() {
  198
+        $('search-text').value = '';
  199
+        $('search').onsubmit = function() {
  200
+          $('search-text').value = 'site:rubyonrails.org ' + $F('search-text');
  201
+        }
  202
+      }
  203
+    </script>
  204
+  </head>
  205
+  <body>
  206
+    <div id="page">
  207
+      <div id="sidebar">
  208
+        <ul id="sidebar-items">
  209
+          <li>
  210
+            <form id="search" action="http://www.google.com/search" method="get">
  211
+              <input type="hidden" name="hl" value="en" />
  212
+              <input type="text" id="search-text" name="q" value="site:rubyonrails.org " />
  213
+              <input type="submit" value="Search" /> the Rails site
  214
+            </form>
  215
+          </li>
  216
+        
  217
+          <li>
  218
+            <h3>Join the community</h3>
  219
+            <ul class="links">
  220
+              <li><a href="http://www.rubyonrails.org/">Ruby on Rails</a></li>
  221
+              <li><a href="http://weblog.rubyonrails.org/">Official weblog</a></li>
  222
+              <li><a href="http://wiki.rubyonrails.org/">Wiki</a></li>
  223
+            </ul>
  224
+          </li>
  225
+          
  226
+          <li>
  227
+            <h3>Browse the documentation</h3>
  228
+            <ul class="links">
  229
+              <li><a href="http://api.rubyonrails.org/">Rails API</a></li>
  230
+              <li><a href="http://stdlib.rubyonrails.org/">Ruby standard library</a></li>
  231
+              <li><a href="http://corelib.rubyonrails.org/">Ruby core</a></li>
  232
+              <li><a href="http://guides.rubyonrails.org/">Rails Guides</a></li>
  233
+            </ul>
  234
+          </li>
  235
+        </ul>
  236
+      </div>
  237
+
  238
+      <div id="content">
  239
+        <div id="header">
  240
+          <h1>Welcome aboard</h1>
  241
+          <h2>You&rsquo;re riding Ruby on Rails!</h2>
  242
+        </div>
  243
+
  244
+        <div id="about">
  245
+          <h3><a href="rails/info/properties" onclick="about(); return false">About your application&rsquo;s environment</a></h3>
  246
+          <div id="about-content" style="display: none"></div>
  247
+        </div>
  248
+        
  249
+        <div id="getting-started">
  250
+          <h1>Getting started</h1>
  251
+          <h2>Here&rsquo;s how to get rolling:</h2>
  252
+          
  253
+          <ol>          
  254
+            <li>
  255
+              <h2>Use <tt>script/generate</tt> to create your models and controllers</h2>
  256
+              <p>To see all available options, run it without parameters.</p>
  257
+            </li>
  258
+            
  259
+            <li>
  260
+              <h2>Set up a default route and remove or rename this file</h2>
  261
+              <p>Routes are set up in config/routes.rb.</p>
  262
+            </li>
  263
+
  264
+            <li>
  265
+              <h2>Create your database</h2>
  266
+              <p>Run <tt>rake db:migrate</tt> to create your database. If you're not using SQLite (the default), edit <tt>config/database.yml</tt> with your username and password.</p>
  267
+            </li>
  268
+          </ol>
  269
+        </div>
  270
+      </div>
  271
+      
  272
+      <div id="footer">&nbsp;</div>
  273
+    </div>
  274
+  </body>
  275
+</html>
2  public/javascripts/application.js
... ...
@@ -0,0 +1,2 @@
  1
+// Place your application-specific JavaScript functions and classes here
  2
+// This file is automatically included by javascript_include_tag :defaults
963  public/javascripts/controls.js
... ...
@@ -0,0 +1,963 @@
  1
+// Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
  2
+//           (c) 2005-2008 Ivan Krstic (http://blogs.law.harvard.edu/ivan)
  3
+//           (c) 2005-2008 Jon Tirsen (http://www.tirsen.com)
  4
+// Contributors:
  5
+//  Richard Livsey
  6
+//  Rahul Bhargava
  7
+//  Rob Wills
  8
+//
  9
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
  10
+// For details, see the script.aculo.us web site: http://script.aculo.us/
  11
+
  12
+// Autocompleter.Base handles all the autocompletion functionality
  13
+// that's independent of the data source for autocompletion. This
  14
+// includes drawing the autocompletion menu, observing keyboard
  15
+// and mouse events, and similar.
  16
+//
  17
+// Specific autocompleters need to provide, at the very least,
  18
+// a getUpdatedChoices function that will be invoked every time
  19
+// the text inside the monitored textbox changes. This method
  20
+// should get the text for which to provide autocompletion by
  21
+// invoking this.getToken(), NOT by directly accessing
  22
+// this.element.value. This is to allow incremental tokenized
  23
+// autocompletion. Specific auto-completion logic (AJAX, etc)
  24
+// belongs in getUpdatedChoices.
  25
+//
  26
+// Tokenized incremental autocompletion is enabled automatically
  27
+// when an autocompleter is instantiated with the 'tokens' option
  28
+// in the options parameter, e.g.:
  29
+// new Ajax.Autocompleter('id','upd', '/url/', { tokens: ',' });
  30
+// will incrementally autocomplete with a comma as the token.
  31
+// Additionally, ',' in the above example can be replaced with
  32
+// a token array, e.g. { tokens: [',', '\n'] } which
  33
+// enables autocompletion on multiple tokens. This is most
  34
+// useful when one of the tokens is \n (a newline), as it
  35
+// allows smart autocompletion after linebreaks.
  36
+
  37
+if(typeof Effect == 'undefined')
  38
+  throw("controls.js requires including script.aculo.us' effects.js library");
  39
+
  40
+var Autocompleter = { };
  41
+Autocompleter.Base = Class.create({
  42
+  baseInitialize: function(element, update, options) {
  43
+    element          = $(element);
  44
+    this.element     = element;
  45
+    this.update      = $(update);
  46
+    this.hasFocus    = false;
  47
+    this.changed     = false;
  48
+    this.active      = false;
  49
+    this.index       = 0;
  50
+    this.entryCount  = 0;
  51
+    this.oldElementValue = this.element.value;
  52
+
  53
+    if(this.setOptions)
  54
+      this.setOptions(options);
  55
+    else
  56
+      this.options = options || { };
  57
+
  58
+    this.options.paramName    = this.options.paramName || this.element.name;
  59
+    this.options.tokens       = this.options.tokens || [];
  60
+    this.options.frequency    = this.options.frequency || 0.4;
  61
+    this.options.minChars     = this.options.minChars || 1;
  62
+    this.options.onShow       = this.options.onShow ||
  63
+      function(element, update){
  64
+        if(!update.style.position || update.style.position=='absolute') {
  65
+          update.style.position = 'absolute';
  66
+          Position.clone(element, update, {
  67
+            setHeight: false,
  68
+            offsetTop: element.offsetHeight
  69
+          });
  70
+        }
  71
+        Effect.Appear(update,{duration:0.15});
  72
+      };
  73
+    this.options.onHide = this.options.onHide ||
  74
+      function(element, update){ new Effect.Fade(update,{duration:0.15}) };
  75
+
  76
+    if(typeof(this.options.tokens) == 'string')
  77
+      this.options.tokens = new Array(this.options.tokens);
  78
+    // Force carriage returns as token delimiters anyway
  79
+    if (!this.options.tokens.include('\n'))
  80
+      this.options.tokens.push('\n');
  81
+
  82
+    this.observer = null;
  83
+
  84
+    this.element.setAttribute('autocomplete','off');
  85
+
  86
+    Element.hide(this.update);
  87
+
  88
+    Event.observe(this.element, 'blur', this.onBlur.bindAsEventListener(this));
  89
+    Event.observe(this.element, 'keydown', this.onKeyPress.bindAsEventListener(this));
  90
+  },
  91
+
  92
+  show: function() {
  93
+    if(Element.getStyle(this.update, 'display')=='none') this.options.onShow(this.element, this.update);
  94
+    if(!this.iefix &&
  95
+      (Prototype.Browser.IE) &&
  96
+      (Element.getStyle(this.update, 'position')=='absolute')) {
  97
+      new Insertion.After(this.update,
  98
+       '<iframe id="' + this.update.id + '_iefix" '+
  99
+       'style="display:none;position:absolute;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);" ' +
  100
+       'src="javascript:false;" frameborder="0" scrolling="no"></iframe>');
  101
+      this.iefix = $(this.update.id+'_iefix');
  102
+    }
  103
+    if(this.iefix) setTimeout(this.fixIEOverlapping.bind(this), 50);
  104
+  },
  105
+
  106
+  fixIEOverlapping: function() {
  107
+    Position.clone(this.update, this.iefix, {setTop:(!this.update.style.height)});
  108
+    this.iefix.style.zIndex = 1;
  109
+    this.update.style.zIndex = 2;
  110
+    Element.show(this.iefix);
  111
+  },
  112
+
  113
+  hide: function() {
  114
+    this.stopIndicator();
  115
+    if(Element.getStyle(this.update, 'display')!='none') this.options.onHide(this.element, this.update);
  116
+    if(this.iefix) Element.hide(this.iefix);
  117
+  },
  118
+
  119
+  startIndicator: function() {
  120
+    if(this.options.indicator) Element.show(this.options.indicator);
  121
+  },
  122
+
  123
+  stopIndicator: function() {
  124
+    if(this.options.indicator) Element.hide(this.options.indicator);
  125
+  },
  126
+
  127
+  onKeyPress: function(event) {
  128
+    if(this.active)
  129
+      switch(event.keyCode) {
  130
+       case Event.KEY_TAB:
  131
+       case Event.KEY_RETURN:
  132
+         this.selectEntry();
  133
+         Event.stop(event);