├── test ├── dummy │ ├── log │ │ └── .gitkeep │ ├── app │ │ ├── mailers │ │ │ └── .gitkeep │ │ ├── models │ │ │ └── .gitkeep │ │ ├── helpers │ │ │ └── application_helper.rb │ │ ├── views │ │ │ ├── koala │ │ │ │ ├── index.html.erb │ │ │ │ └── index.xls.rxls │ │ │ └── layouts │ │ │ │ └── application.html.erb │ │ ├── assets │ │ │ ├── config │ │ │ │ └── manifest.js │ │ │ ├── stylesheets │ │ │ │ └── application.css │ │ │ └── javascripts │ │ │ │ └── application.js │ │ └── controllers │ │ │ ├── application_controller.rb │ │ │ └── koala_controller.rb │ ├── config │ │ ├── storage.yml │ │ ├── environment.rb │ │ ├── routes.rb │ │ ├── locales │ │ │ └── en.yml │ │ ├── boot.rb │ │ ├── initializers │ │ │ ├── mime_types.rb │ │ │ ├── backtrace_silencers.rb │ │ │ ├── session_store.rb │ │ │ ├── secret_token.rb │ │ │ ├── wrap_parameters.rb │ │ │ └── inflections.rb │ │ ├── database.yml │ │ ├── environments │ │ │ ├── development.rb │ │ │ ├── test.rb │ │ │ └── production.rb │ │ └── application.rb │ ├── lib │ │ └── assets │ │ │ └── .gitkeep │ ├── public │ │ ├── favicon.ico │ │ ├── 500.html │ │ ├── 422.html │ │ └── 404.html │ ├── .gitignore │ ├── config.ru │ ├── Rakefile │ ├── script │ │ └── rails │ └── README.rdoc ├── spreadsheet_on_rails_test.rb ├── test_helper.rb └── integration │ └── navigation_test.rb ├── .tool-versions ├── lib ├── spreadsheet_on_rails │ └── version.rb ├── tasks │ └── spreadsheet_on_rails_tasks.rake └── spreadsheet_on_rails.rb ├── gemfiles ├── rails_6.1.gemfile └── rails_6.1.gemfile.lock ├── .gitignore ├── Appraisals ├── .travis.yml ├── Gemfile ├── Rakefile ├── MIT-LICENSE ├── spreadsheet_on_rails.gemspec └── README.rdoc /test/dummy/log/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.tool-versions: -------------------------------------------------------------------------------- 1 | ruby 3.2.2 2 | -------------------------------------------------------------------------------- /test/dummy/app/mailers/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/dummy/app/models/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/dummy/config/storage.yml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/dummy/lib/assets/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/dummy/public/favicon.ico: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/dummy/app/helpers/application_helper.rb: -------------------------------------------------------------------------------- 1 | module ApplicationHelper 2 | end 3 | -------------------------------------------------------------------------------- /lib/spreadsheet_on_rails/version.rb: -------------------------------------------------------------------------------- 1 | module SpreadsheetOnRails 2 | VERSION = "1.0.1" 3 | end 4 | -------------------------------------------------------------------------------- /test/dummy/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | log 3 | tmp 4 | db/*.sqlite3 5 | public/stylesheets/compiled/* 6 | -------------------------------------------------------------------------------- /test/dummy/app/views/koala/index.html.erb: -------------------------------------------------------------------------------- 1 |
Download XLS below
2 |<%= link_to "XLS", koala_path("xls") %>
3 | -------------------------------------------------------------------------------- /test/dummy/app/assets/config/manifest.js: -------------------------------------------------------------------------------- 1 | //= link application.js 2 | //= link application.css 3 | //= link_directory ../stylesheets .css 4 | -------------------------------------------------------------------------------- /test/dummy/app/controllers/application_controller.rb: -------------------------------------------------------------------------------- 1 | class ApplicationController < ActionController::Base 2 | protect_from_forgery 3 | end 4 | -------------------------------------------------------------------------------- /lib/tasks/spreadsheet_on_rails_tasks.rake: -------------------------------------------------------------------------------- 1 | # desc "Explaining what the task does" 2 | # task :spreadsheet_on_rails do 3 | # # Task goes here 4 | # end 5 | -------------------------------------------------------------------------------- /test/dummy/app/views/koala/index.xls.rxls: -------------------------------------------------------------------------------- 1 | sheet = workbook.create_worksheet 2 | sheet.name = "Koalas" 3 | sheet.row(0).push "This is a row" 4 | sheet.row(1).push "This is a second row" 5 | -------------------------------------------------------------------------------- /test/dummy/config.ru: -------------------------------------------------------------------------------- 1 | # This file is used by Rack-based servers to start the application. 2 | 3 | require ::File.expand_path('../config/environment', __FILE__) 4 | run Dummy::Application 5 | -------------------------------------------------------------------------------- /gemfiles/rails_6.1.gemfile: -------------------------------------------------------------------------------- 1 | # This file was generated by Appraisal 2 | 3 | source "http://rubygems.org" 4 | 5 | gem "jquery-rails" 6 | gem "activemodel", "~> 6.1.0" 7 | 8 | gemspec path: "../" 9 | -------------------------------------------------------------------------------- /test/dummy/config/environment.rb: -------------------------------------------------------------------------------- 1 | # Load the rails application 2 | require File.expand_path('../application', __FILE__) 3 | 4 | # Initialize the rails application 5 | Dummy::Application.initialize! 6 | -------------------------------------------------------------------------------- /test/dummy/config/routes.rb: -------------------------------------------------------------------------------- 1 | Dummy::Application.routes.draw do 2 | get "/koala(.:format)", :to => "koala#index", :as => :koala 3 | get "/another(.:format)", :to => "koala#another", :as => :another 4 | end 5 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # rcov generated 2 | coverage 3 | 4 | # rdoc generated 5 | rdoc 6 | 7 | # yard generated 8 | doc 9 | .yardoc 10 | 11 | # bundler 12 | .bundle 13 | 14 | # jeweler generated 15 | pkg 16 | .rvmrc 17 | Gemfile.lock 18 | -------------------------------------------------------------------------------- /test/dummy/config/locales/en.yml: -------------------------------------------------------------------------------- 1 | # Sample localization file for English. Add more files in this directory for other locales. 2 | # See https://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points. 3 | 4 | en: 5 | hello: "Hello world" 6 | -------------------------------------------------------------------------------- /test/dummy/config/boot.rb: -------------------------------------------------------------------------------- 1 | require 'rubygems' 2 | gemfile = File.expand_path('../../../../Gemfile', __FILE__) 3 | 4 | if File.exist?(gemfile) 5 | ENV['BUNDLE_GEMFILE'] = gemfile 6 | require 'bundler' 7 | Bundler.setup 8 | end 9 | 10 | $:.unshift File.expand_path('../../../../lib', __FILE__) -------------------------------------------------------------------------------- /test/dummy/Rakefile: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env rake 2 | # Add your own tasks in files placed in lib/tasks ending in .rake, 3 | # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. 4 | 5 | require File.expand_path('../config/application', __FILE__) 6 | 7 | Dummy::Application.load_tasks 8 | -------------------------------------------------------------------------------- /test/dummy/config/initializers/mime_types.rb: -------------------------------------------------------------------------------- 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 6 | Mime::Type.register "application/xls", :xls 7 | -------------------------------------------------------------------------------- /test/dummy/script/rails: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application. 3 | 4 | APP_PATH = File.expand_path('../../config/application', __FILE__) 5 | require File.expand_path('../../config/boot', __FILE__) 6 | require 'rails/commands' 7 | -------------------------------------------------------------------------------- /test/dummy/app/views/layouts/application.html.erb: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |Maybe you tried to change something you didn't have access to.
24 |You may have mistyped the address or the page may have moved.
24 |
}[http://travis-ci.org/10to1/spreadsheet_on_rails]
46 |
47 | Copyright (c) 2012 10to1, released under the MIT license
48 |
--------------------------------------------------------------------------------
/test/dummy/config/environments/production.rb:
--------------------------------------------------------------------------------
1 | Dummy::Application.configure do
2 | # Settings specified here will take precedence over those in config/application.rb
3 |
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.consider_all_requests_local = false
9 | config.action_controller.perform_caching = true
10 |
11 | # Disable Rails's static asset server (Apache or nginx will already do this)
12 | config.serve_static_assets = false
13 |
14 | # Compress JavaScripts and CSS
15 | config.assets.compress = true
16 |
17 | # Don't fallback to assets pipeline if a precompiled asset is missed
18 | config.assets.compile = false
19 |
20 | # Generate digests for assets URLs
21 | config.assets.digest = true
22 |
23 | # Defaults to Rails.root.join("public/assets")
24 | # config.assets.manifest = YOUR_PATH
25 |
26 | # Specifies the header that your server uses for sending files
27 | # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache
28 | # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx
29 |
30 | # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
31 | # config.force_ssl = true
32 |
33 | # See everything in the log (default is :info)
34 | # config.log_level = :debug
35 |
36 | # Prepend all log lines with the following tags
37 | # config.log_tags = [ :subdomain, :uuid ]
38 |
39 | # Use a different logger for distributed setups
40 | # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new)
41 |
42 | # Use a different cache store in production
43 | # config.cache_store = :mem_cache_store
44 |
45 | # Enable serving of images, stylesheets, and JavaScripts from an asset server
46 | # config.action_controller.asset_host = "http://assets.example.com"
47 |
48 | # Precompile additional assets (application.js, application.css, and all non-JS/CSS are already added)
49 | # config.assets.precompile += %w( search.js )
50 |
51 | # Disable delivery errors, bad email addresses will be ignored
52 | # config.action_mailer.raise_delivery_errors = false
53 |
54 | # Enable threaded mode
55 | # config.threadsafe!
56 |
57 | # Enable locale fallbacks for I18n (makes lookups for any locale fall back to
58 | # the I18n.default_locale when a translation can not be found)
59 | config.i18n.fallbacks = true
60 |
61 | # Send deprecation notices to registered listeners
62 | config.active_support.deprecation = :notify
63 | end
64 |
--------------------------------------------------------------------------------
/test/dummy/config/application.rb:
--------------------------------------------------------------------------------
1 | require File.expand_path('../boot', __FILE__)
2 |
3 | require 'rails/all'
4 |
5 | Bundler.require
6 | require "spreadsheet_on_rails"
7 |
8 | module Dummy
9 | class Application < Rails::Application
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 | # Custom directories with classes and modules you want to be autoloadable.
15 | # config.autoload_paths += %W(#{config.root}/extras)
16 |
17 | # Only load the plugins named here, in the order given (default is alphabetical).
18 | # :all can be used as a placeholder for all plugins not explicitly named.
19 | # config.plugins = [ :exception_notification, :ssl_requirement, :all ]
20 |
21 | # Activate observers that should always be running.
22 | # config.active_record.observers = :cacher, :garbage_collector, :forum_observer
23 |
24 | # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
25 | # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
26 | # config.time_zone = 'Central Time (US & Canada)'
27 |
28 | # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
29 | # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
30 | # config.i18n.default_locale = :de
31 |
32 | # Configure the default encoding used in templates for Ruby 1.9.
33 | config.encoding = "utf-8"
34 |
35 | # Configure sensitive parameters which will be filtered from the log file.
36 | config.filter_parameters += [:password]
37 |
38 | # Use SQL instead of Active Record's schema dumper when creating the database.
39 | # This is necessary if your schema can't be completely dumped by the schema dumper,
40 | # like if you have constraints or database-specific column types
41 | # config.active_record.schema_format = :sql
42 |
43 | # Enforce whitelist mode for mass assignment.
44 | # This will create an empty whitelist of attributes available for mass-assignment for all models
45 | # in your app. As such, your models will need to explicitly whitelist or blacklist accessible
46 | # parameters by using an attr_accessible or attr_protected declaration.
47 | # config.active_record.whitelist_attributes = true
48 |
49 | # Enable the asset pipeline
50 | config.assets.enabled = true
51 |
52 | # Version of your assets, change this if you want to expire all your assets
53 | config.assets.version = '1.0'
54 | end
55 | end
56 |
57 |
--------------------------------------------------------------------------------
/gemfiles/rails_6.1.gemfile.lock:
--------------------------------------------------------------------------------
1 | PATH
2 | remote: ..
3 | specs:
4 | spreadsheet_on_rails (1.0.0)
5 | rails (~> 6.1)
6 | spreadsheet
7 |
8 | GEM
9 | remote: http://rubygems.org/
10 | specs:
11 | actioncable (6.1.7.4)
12 | actionpack (= 6.1.7.4)
13 | activesupport (= 6.1.7.4)
14 | nio4r (~> 2.0)
15 | websocket-driver (>= 0.6.1)
16 | actionmailbox (6.1.7.4)
17 | actionpack (= 6.1.7.4)
18 | activejob (= 6.1.7.4)
19 | activerecord (= 6.1.7.4)
20 | activestorage (= 6.1.7.4)
21 | activesupport (= 6.1.7.4)
22 | mail (>= 2.7.1)
23 | actionmailer (6.1.7.4)
24 | actionpack (= 6.1.7.4)
25 | actionview (= 6.1.7.4)
26 | activejob (= 6.1.7.4)
27 | activesupport (= 6.1.7.4)
28 | mail (~> 2.5, >= 2.5.4)
29 | rails-dom-testing (~> 2.0)
30 | actionpack (6.1.7.4)
31 | actionview (= 6.1.7.4)
32 | activesupport (= 6.1.7.4)
33 | rack (~> 2.0, >= 2.0.9)
34 | rack-test (>= 0.6.3)
35 | rails-dom-testing (~> 2.0)
36 | rails-html-sanitizer (~> 1.0, >= 1.2.0)
37 | actiontext (6.1.7.4)
38 | actionpack (= 6.1.7.4)
39 | activerecord (= 6.1.7.4)
40 | activestorage (= 6.1.7.4)
41 | activesupport (= 6.1.7.4)
42 | nokogiri (>= 1.8.5)
43 | actionview (6.1.7.4)
44 | activesupport (= 6.1.7.4)
45 | builder (~> 3.1)
46 | erubi (~> 1.4)
47 | rails-dom-testing (~> 2.0)
48 | rails-html-sanitizer (~> 1.1, >= 1.2.0)
49 | activejob (6.1.7.4)
50 | activesupport (= 6.1.7.4)
51 | globalid (>= 0.3.6)
52 | activemodel (6.1.7.4)
53 | activesupport (= 6.1.7.4)
54 | activerecord (6.1.7.4)
55 | activemodel (= 6.1.7.4)
56 | activesupport (= 6.1.7.4)
57 | activestorage (6.1.7.4)
58 | actionpack (= 6.1.7.4)
59 | activejob (= 6.1.7.4)
60 | activerecord (= 6.1.7.4)
61 | activesupport (= 6.1.7.4)
62 | marcel (~> 1.0)
63 | mini_mime (>= 1.1.0)
64 | activesupport (6.1.7.4)
65 | concurrent-ruby (~> 1.0, >= 1.0.2)
66 | i18n (>= 1.6, < 2)
67 | minitest (>= 5.1)
68 | tzinfo (~> 2.0)
69 | zeitwerk (~> 2.3)
70 | addressable (2.8.4)
71 | public_suffix (>= 2.0.2, < 6.0)
72 | appraisal (2.4.1)
73 | bundler
74 | rake
75 | thor (>= 0.14.0)
76 | builder (3.2.4)
77 | byebug (11.1.3)
78 | capybara (3.39.2)
79 | addressable
80 | matrix
81 | mini_mime (>= 0.1.3)
82 | nokogiri (~> 1.8)
83 | rack (>= 1.6.0)
84 | rack-test (>= 0.6.3)
85 | regexp_parser (>= 1.5, < 3.0)
86 | xpath (~> 3.2)
87 | coderay (1.1.3)
88 | concurrent-ruby (1.2.2)
89 | crass (1.0.6)
90 | date (3.3.3)
91 | erubi (1.12.0)
92 | globalid (1.1.0)
93 | activesupport (>= 5.0)
94 | i18n (1.14.1)
95 | concurrent-ruby (~> 1.0)
96 | jquery-rails (4.6.0)
97 | rails-dom-testing (>= 1, < 3)
98 | railties (>= 4.2.0)
99 | thor (>= 0.14, < 2.0)
100 | loofah (2.21.3)
101 | crass (~> 1.0.2)
102 | nokogiri (>= 1.12.0)
103 | mail (2.8.1)
104 | mini_mime (>= 0.1.1)
105 | net-imap
106 | net-pop
107 | net-smtp
108 | marcel (1.0.2)
109 | matrix (0.4.2)
110 | method_source (1.0.0)
111 | mini_mime (1.1.2)
112 | minitest (5.18.1)
113 | net-imap (0.3.6)
114 | date
115 | net-protocol
116 | net-pop (0.1.2)
117 | net-protocol
118 | net-protocol (0.2.1)
119 | timeout
120 | net-smtp (0.3.3)
121 | net-protocol
122 | nio4r (2.5.9)
123 | nokogiri (1.15.2-x86_64-darwin)
124 | racc (~> 1.4)
125 | pry (0.14.2)
126 | coderay (~> 1.1)
127 | method_source (~> 1.0)
128 | pry-byebug (3.10.1)
129 | byebug (~> 11.0)
130 | pry (>= 0.13, < 0.15)
131 | public_suffix (5.0.1)
132 | racc (1.7.1)
133 | rack (2.2.7)
134 | rack-test (2.1.0)
135 | rack (>= 1.3)
136 | rails (6.1.7.4)
137 | actioncable (= 6.1.7.4)
138 | actionmailbox (= 6.1.7.4)
139 | actionmailer (= 6.1.7.4)
140 | actionpack (= 6.1.7.4)
141 | actiontext (= 6.1.7.4)
142 | actionview (= 6.1.7.4)
143 | activejob (= 6.1.7.4)
144 | activemodel (= 6.1.7.4)
145 | activerecord (= 6.1.7.4)
146 | activestorage (= 6.1.7.4)
147 | activesupport (= 6.1.7.4)
148 | bundler (>= 1.15.0)
149 | railties (= 6.1.7.4)
150 | sprockets-rails (>= 2.0.0)
151 | rails-dom-testing (2.1.1)
152 | activesupport (>= 5.0.0)
153 | minitest
154 | nokogiri (>= 1.6)
155 | rails-html-sanitizer (1.6.0)
156 | loofah (~> 2.21)
157 | nokogiri (~> 1.14)
158 | railties (6.1.7.4)
159 | actionpack (= 6.1.7.4)
160 | activesupport (= 6.1.7.4)
161 | method_source
162 | rake (>= 12.2)
163 | thor (~> 1.0)
164 | rake (13.0.6)
165 | regexp_parser (2.8.1)
166 | ruby-ole (1.2.12.2)
167 | shoulda (4.0.0)
168 | shoulda-context (~> 2.0)
169 | shoulda-matchers (~> 4.0)
170 | shoulda-context (2.0.0)
171 | shoulda-matchers (4.5.1)
172 | activesupport (>= 4.2.0)
173 | spreadsheet (1.3.0)
174 | ruby-ole
175 | sprockets (4.2.0)
176 | concurrent-ruby (~> 1.0)
177 | rack (>= 2.2.4, < 4)
178 | sprockets-rails (3.4.2)
179 | actionpack (>= 5.2)
180 | activesupport (>= 5.2)
181 | sprockets (>= 3.0.0)
182 | sqlite3 (1.6.3-x86_64-darwin)
183 | thor (1.2.2)
184 | timeout (0.4.0)
185 | tzinfo (2.0.6)
186 | concurrent-ruby (~> 1.0)
187 | websocket-driver (0.7.5)
188 | websocket-extensions (>= 0.1.0)
189 | websocket-extensions (0.1.5)
190 | xpath (3.2.0)
191 | nokogiri (~> 1.8)
192 | zeitwerk (2.6.8)
193 |
194 | PLATFORMS
195 | x86_64-darwin-22
196 |
197 | DEPENDENCIES
198 | activemodel (~> 6.1.0)
199 | appraisal
200 | capybara
201 | jquery-rails
202 | pry-byebug
203 | shoulda
204 | spreadsheet_on_rails!
205 | sqlite3
206 |
207 | BUNDLED WITH
208 | 2.4.15
209 |
--------------------------------------------------------------------------------
/test/dummy/README.rdoc:
--------------------------------------------------------------------------------
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"
7 | templates that are primarily responsible for inserting pre-built data in between
8 | HTML tags. The model contains the "smart" domain objects (such as Account,
9 | Product, Person, Post) that holds all the business logic and knows how to
10 | persist themselves to a database. The controller handles the incoming requests
11 | (such as Save New Account, Update Product, Show Post) by manipulating the model
12 | and directing data to the view.
13 |
14 | In Rails, the model is handled by what's called an object-relational mapping
15 | layer entitled Active Record. This layer allows you to present the data from
16 | database rows as objects and embellish these data objects with business logic
17 | methods. You can read more about Active Record in
18 | link:files/vendor/rails/activerecord/README.html.
19 |
20 | The controller and view are handled by the Action Pack, which handles both
21 | layers by its two parts: Action View and Action Controller. These two layers
22 | are bundled in a single package due to their heavy interdependence. This is
23 | unlike the relationship between the Active Record and Action Pack that is much
24 | more separate. Each of these packages can be used independently outside of
25 | Rails. You can read more about Action Pack in
26 | link:files/vendor/rails/actionpack/README.html.
27 |
28 |
29 | == Getting Started
30 |
31 | 1. At the command prompt, create a new Rails application:
32 | rails new myapp (where myapp is the application name)
33 |
34 | 2. Change directory to myapp and start the web server:
35 | cd myapp; rails server (run with --help for options)
36 |
37 | 3. Go to http://localhost:3000/ and you'll see:
38 | "Welcome aboard: You're riding Ruby on Rails!"
39 |
40 | 4. Follow the guidelines to start developing your application. You can find
41 | the following resources handy:
42 |
43 | * The Getting Started Guide: http://guides.rubyonrails.org/getting_started.html
44 | * Ruby on Rails Tutorial Book: http://www.railstutorial.org/
45 |
46 |
47 | == Debugging Rails
48 |
49 | Sometimes your application goes wrong. Fortunately there are a lot of tools that
50 | will help you debug it and get it back on the rails.
51 |
52 | First area to check is the application log files. Have "tail -f" commands
53 | running on the server.log and development.log. Rails will automatically display
54 | debugging and runtime information to these files. Debugging info will also be
55 | shown in the browser on requests from 127.0.0.1.
56 |
57 | You can also log your own messages directly into the log file from your code
58 | using the Ruby logger class from inside your controllers. Example:
59 |
60 | class WeblogController < ActionController::Base
61 | def destroy
62 | @weblog = Weblog.find(params[:id])
63 | @weblog.destroy
64 | logger.info("#{Time.now} Destroyed Weblog ID ##{@weblog.id}!")
65 | end
66 | end
67 |
68 | The result will be a message in your log file along the lines of:
69 |
70 | Mon Oct 08 14:22:29 +1000 2007 Destroyed Weblog ID #1!
71 |
72 | More information on how to use the logger is at http://www.ruby-doc.org/core/
73 |
74 | Also, Ruby documentation can be found at http://www.ruby-lang.org/. There are
75 | several books available online as well:
76 |
77 | * Programming Ruby: http://www.ruby-doc.org/docs/ProgrammingRuby/ (Pickaxe)
78 | * Learn to Program: http://pine.fm/LearnToProgram/ (a beginners guide)
79 |
80 | These two books will bring you up to speed on the Ruby language and also on
81 | programming in general.
82 |
83 |
84 | == Debugger
85 |
86 | Debugger support is available through the debugger command when you start your
87 | Mongrel or WEBrick server with --debugger. This means that you can break out of
88 | execution at any point in the code, investigate and change the model, and then,
89 | resume execution! You need to install ruby-debug to run the server in debugging
90 | mode. With gems, use sudo gem install ruby-debug. Example:
91 |
92 | class WeblogController < ActionController::Base
93 | def index
94 | @posts = Post.all
95 | debugger
96 | end
97 | end
98 |
99 | So the controller will accept the action, run the first line, then present you
100 | with a IRB prompt in the server window. Here you can do things like:
101 |
102 | >> @posts.inspect
103 | => "[#