tagged_logger 0.5.1 → 0.5.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. data/README.markdown +9 -7
  2. data/lib/tagged_logger/railtie.rb +23 -13
  3. data/lib/tagged_logger/tagged_logger.rb +3 -5
  4. data/test/test_rails.rb +1 -2
  5. data/test/test_rails_app/Gemfile +12 -0
  6. data/test/test_rails_app/Gemfile.lock +115 -0
  7. data/test/test_rails_app/README +256 -0
  8. data/test/test_rails_app/Rakefile +7 -0
  9. data/test/test_rails_app/app/controllers/application_controller.rb +3 -0
  10. data/test/test_rails_app/app/controllers/users_controller.rb +8 -0
  11. data/test/test_rails_app/app/helpers/application_helper.rb +2 -0
  12. data/test/test_rails_app/app/helpers/users_helper.rb +2 -0
  13. data/test/test_rails_app/app/mailers/user_mailer.rb +6 -0
  14. data/test/test_rails_app/app/models/user.rb +6 -0
  15. data/test/test_rails_app/app/views/layouts/application.html.erb +14 -0
  16. data/test/test_rails_app/app/views/user_mailer/index_email.html.erb +2 -0
  17. data/test/test_rails_app/app/views/users/index.html.erb +1 -0
  18. data/test/test_rails_app/config/application.rb +42 -0
  19. data/test/test_rails_app/config/boot.rb +13 -0
  20. data/test/test_rails_app/config/database.yml +22 -0
  21. data/test/test_rails_app/config/environment.rb +5 -0
  22. data/test/test_rails_app/config/environments/development.rb +26 -0
  23. data/test/test_rails_app/config/environments/production.rb +49 -0
  24. data/test/test_rails_app/config/environments/test.rb +41 -0
  25. data/test/test_rails_app/config/initializers/backtrace_silencers.rb +7 -0
  26. data/test/test_rails_app/config/initializers/generators.rb +2 -0
  27. data/test/test_rails_app/config/initializers/inflections.rb +10 -0
  28. data/test/test_rails_app/config/initializers/mime_types.rb +5 -0
  29. data/test/test_rails_app/config/initializers/secret_token.rb +7 -0
  30. data/test/test_rails_app/config/initializers/session_store.rb +8 -0
  31. data/test/test_rails_app/config/initializers/tagged_logger.rb +11 -0
  32. data/test/test_rails_app/config/locales/en.yml +5 -0
  33. data/test/test_rails_app/config/routes.rb +60 -0
  34. data/test/test_rails_app/config.ru +4 -0
  35. data/test/test_rails_app/db/development.sqlite3 +0 -0
  36. data/test/test_rails_app/db/migrate/20101031213200_create_users.rb +12 -0
  37. data/test/test_rails_app/db/schema.rb +20 -0
  38. data/test/test_rails_app/db/seeds.rb +7 -0
  39. data/test/test_rails_app/db/test.sqlite3 +0 -0
  40. data/test/test_rails_app/doc/README_FOR_APP +2 -0
  41. data/test/test_rails_app/lib/test_logger.rb +14 -0
  42. data/test/test_rails_app/log/development.log +69 -0
  43. data/test/test_rails_app/log/production.log +0 -0
  44. data/test/test_rails_app/log/server.log +0 -0
  45. data/test/test_rails_app/log/test.log +105 -0
  46. data/test/test_rails_app/public/404.html +26 -0
  47. data/test/test_rails_app/public/422.html +26 -0
  48. data/test/test_rails_app/public/500.html +26 -0
  49. data/test/test_rails_app/public/favicon.ico +0 -0
  50. data/test/test_rails_app/public/images/rails.png +0 -0
  51. data/test/test_rails_app/public/index.html +239 -0
  52. data/test/test_rails_app/public/javascripts/application.js +2 -0
  53. data/test/test_rails_app/public/javascripts/controls.js +965 -0
  54. data/test/test_rails_app/public/javascripts/dragdrop.js +974 -0
  55. data/test/test_rails_app/public/javascripts/effects.js +1123 -0
  56. data/test/test_rails_app/public/javascripts/prototype.js +6001 -0
  57. data/test/test_rails_app/public/javascripts/rails.js +175 -0
  58. data/test/test_rails_app/public/robots.txt +5 -0
  59. data/test/test_rails_app/script/rails +6 -0
  60. data/test/test_rails_app/test/integration/logging_test.rb +63 -0
  61. data/test/test_rails_app/test/performance/browsing_test.rb +9 -0
  62. data/test/test_rails_app/test/test_helper.rb +6 -0
  63. data/test/test_rails_app/tmp/capybara/capybara-20101031161745.html +239 -0
  64. data/test/test_rails_app/tmp/capybara/capybara-20101031162015.html +239 -0
  65. metadata +67 -7
data/README.markdown CHANGED
@@ -117,7 +117,7 @@ There is more general form for rules, it accepts block with three parameters:
117
117
 
118
118
  As previously explained the *tag* is a class name the *#logger* is being called from (except when you override Rails instrumentation, see below)
119
119
 
120
- ## Integration with Rails (only Rails 3.0 supported at the moment, not completely tested)
120
+ ## Integration with Rails (only Rails 3.0 supported at the moment)
121
121
 
122
122
  ### Installation
123
123
 
@@ -127,8 +127,9 @@ In Rails.root/config/application.rb:
127
127
 
128
128
  TaggedLogger.config(:replace_existing_logger => true)
129
129
 
130
- Without that original methods *ActionController::Base#logger*, *ActiveRecord::Base#logger* and alike will remain untouched, and they have to be patched if we want
131
- redefine their behavior.
130
+ Without that original methods *ActionController::Base#logger*, *ActiveRecord::Base#logger* and alike will remain untouched,
131
+ and they have to be patched if we want to redefine their behavior. By default *TaggedLogger* is safe and it
132
+ does not patch existing *#logger()* method.
132
133
 
133
134
  ### Logging in Rails
134
135
 
@@ -151,12 +152,12 @@ The event *"sendfile.action_controller"* will be signaled after actual work on s
151
152
  ### Overriding Rails logging
152
153
  Logging inside Rails is done by log subscribers - their task to subscribe to instrumentation events, receive and log them.
153
154
  *TaggedLogger* allows you to override how these subscribers work, for example,
154
- you could redirect what is being logged in *ActionController* to some external logging service, like [Logworm](http://www.logworm.com/):
155
+ you could redirect what is being logged in *ActionController* to some external hosted log service, like [Logbook.me](http://logbook.me/):
155
156
 
156
157
  # In Rails.root/config/initializers/tagged_logger.rb:
157
158
  TaggedLogger.rules do
158
159
  debug "action_controller.logsubscriber" do |level, tag, msg|
159
- Logworm::Logger.log(:controllers, :level => level.to_s, :tag => tag.to_s, :message => msg.to_s )
160
+ Logbook.send(level, tag.to_s, :msg => msg.to_s )
160
161
  end
161
162
  end
162
163
 
@@ -168,8 +169,9 @@ rule with regular expression:
168
169
  #your special logging
169
170
  end
170
171
 
171
-
172
- You also could use *#logger* in your classes inherited from Rails bases and define your own logging rules, for example:
172
+ Rails classes having method *#logger()* are patched by *tagged_logger* (only if it is configured
173
+ with option :replace_existing_logger => true, of cause), so you may define rules for your controllers and models,
174
+ for example:
173
175
 
174
176
  class ApplicationController < ActionController::Base
175
177
  def welcome
@@ -2,27 +2,37 @@ if defined?(Rails::Railtie)
2
2
  module TaggedLogger
3
3
  class Railtie < Rails::Railtie
4
4
  ActiveSupport.on_load(:action_controller) do
5
- TaggedLogger.patch_logger(ActionController::Base, TaggedLogger.options[:replace_existing_logger]).
6
- patch_logger(ActionController::LogSubscriber, TaggedLogger.options[:replace_existing_logger]).
7
- rename [ActionController::LogSubscriber] => "action_controller.logsubscriber"
5
+ if TaggedLogger.options[:replace_existing_logger]
6
+ TaggedLogger.patch_logger(ActionController::Base, true).
7
+ patch_logger(ActionController::LogSubscriber, true).
8
+ rename [ActionController::LogSubscriber] => "action_controller.logsubscriber"
9
+ end
8
10
  end
9
11
  ActiveSupport.on_load(:active_record) do
10
- TaggedLogger.patch_logger(ActiveRecord::Base, TaggedLogger.options[:replace_existing_logger]).
11
- patch_logger(ActiveRecord::LogSubscriber, TaggedLogger.options[:replace_existing_logger]).
12
- rename [ActiveRecord::LogSubscriber] => "active_record.logsubscriber"
12
+ if TaggedLogger.options[:replace_existing_logger]
13
+ TaggedLogger.patch_logger(ActiveRecord::Base, true).
14
+ patch_logger(ActiveRecord::LogSubscriber, true).
15
+ rename [ActiveRecord::LogSubscriber] => "active_record.logsubscriber"
16
+ end
13
17
  end
14
18
  ActiveSupport.on_load(:action_mailer) do
15
- TaggedLogger.patch_logger(ActionMailer::Base, TaggedLogger.options[:replace_existing_logger]).
16
- patch_logger(ActionMailer::LogSubscriber, TaggedLogger.options[:replace_existing_logger]).
17
- rename [ActionMailer::LogSubscriber] => "action_mailer.logsubscriber"
19
+ if TaggedLogger.options[:replace_existing_logger]
20
+ TaggedLogger.patch_logger(ActionMailer::Base, true).
21
+ patch_logger(ActionMailer::LogSubscriber, true).
22
+ rename [ActionMailer::LogSubscriber] => "action_mailer.logsubscriber"
23
+ end
18
24
  end
19
25
  ActiveSupport.on_load(:action_view) do
20
- TaggedLogger.patch_logger(ActionView::LogSubscriber, TaggedLogger.options[:replace_existing_logger]).
21
- rename [ActionView::LogSubscriber] => "action_view.logsubscriber"
26
+ if TaggedLogger.options[:replace_existing_logger]
27
+ TaggedLogger.patch_logger(ActionView::LogSubscriber, true).
28
+ rename [ActionView::LogSubscriber] => "action_view.logsubscriber"
29
+ end
22
30
  end
23
31
  ActiveSupport.on_load(:after_initialize) do
24
- TaggedLogger.patch_logger(Rails::Rack::Logger, TaggedLogger.options[:replace_existing_logger]).
25
- rename [Rails::Rack::Logger] => "rack.logsubscriber"
32
+ if TaggedLogger.options[:replace_existing_logger]
33
+ TaggedLogger.patch_logger(Rails::Rack::Logger, true).
34
+ rename [Rails::Rack::Logger] => "rack.logsubscriber"
35
+ end
26
36
  end
27
37
 
28
38
  end
@@ -108,11 +108,6 @@ module TaggedLogger
108
108
  def warn(what, where = {}, &block) output(:warn, what, where, &block) end
109
109
  def error(what, where = {}, &block) output(:error, what, where, &block) end
110
110
  def fatal(what, where = {}, &block) output(:fatal, what, where, &block) end
111
- def any_level(what, where = {}, &block)
112
- [:debug, :info, :warn, :error, :fatal].each do |level|
113
- output(level, what, where, &block)
114
- end
115
- end
116
111
 
117
112
  def formatter
118
113
  @formatter = lambda { |level, tag, message| "#{message}\n"} unless @formatter
@@ -200,6 +195,9 @@ module TaggedLogger
200
195
  eigenclass.send(:define_method, level) do |msg|
201
196
  blocks.each { |(tag_alias, block)| block.call(level, tag_alias, msg) }
202
197
  end
198
+ eigenclass.send(:define_method, "#{level}?".to_sym) do
199
+ !blocks.empty?
200
+ end
203
201
  end
204
202
  end
205
203
 
data/test/test_rails.rb CHANGED
@@ -24,6 +24,7 @@ class TaggedLoggerRailsTest < Test::Unit::TestCase
24
24
 
25
25
  context "stub output device @@stub_out;" do
26
26
  setup do
27
+ TaggedLogger.config(:replace_existing_logger => true)
27
28
  @@stub_out = TestLogDevice.new
28
29
  end
29
30
 
@@ -33,7 +34,6 @@ class TaggedLoggerRailsTest < Test::Unit::TestCase
33
34
 
34
35
  should "be able possible to initialize in the way to override Rails existing logger" do
35
36
  assert TestController.new.respond_to? :logger
36
- TaggedLogger.config(:replace_existing_logger => true)
37
37
  TaggedLogger.rules do
38
38
  info /.*/ do |level, tag, message|
39
39
  @@stub_out.write(tag.to_s)
@@ -44,7 +44,6 @@ class TaggedLoggerRailsTest < Test::Unit::TestCase
44
44
  end
45
45
 
46
46
  should "be possible to restore old logger methods" do
47
- TaggedLogger.config(:replace_existing_logger => true)
48
47
  TaggedLogger.rules do
49
48
  info(/.*/) {|level, tag, message|}
50
49
  end
@@ -0,0 +1,12 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gem 'rails', '3.0.1'
4
+ gem 'sqlite3-ruby', :require => 'sqlite3'
5
+
6
+ group :test do
7
+ gem 'tagged_logger', :path => '../..'
8
+ gem 'capybara'
9
+ gem 'launchy'
10
+ gem 'rr'
11
+ end
12
+
@@ -0,0 +1,115 @@
1
+ PATH
2
+ remote: ../..
3
+ specs:
4
+ tagged_logger (0.5.1)
5
+ hashery
6
+
7
+ GEM
8
+ remote: http://rubygems.org/
9
+ specs:
10
+ abstract (1.0.0)
11
+ actionmailer (3.0.1)
12
+ actionpack (= 3.0.1)
13
+ mail (~> 2.2.5)
14
+ actionpack (3.0.1)
15
+ activemodel (= 3.0.1)
16
+ activesupport (= 3.0.1)
17
+ builder (~> 2.1.2)
18
+ erubis (~> 2.6.6)
19
+ i18n (~> 0.4.1)
20
+ rack (~> 1.2.1)
21
+ rack-mount (~> 0.6.12)
22
+ rack-test (~> 0.5.4)
23
+ tzinfo (~> 0.3.23)
24
+ activemodel (3.0.1)
25
+ activesupport (= 3.0.1)
26
+ builder (~> 2.1.2)
27
+ i18n (~> 0.4.1)
28
+ activerecord (3.0.1)
29
+ activemodel (= 3.0.1)
30
+ activesupport (= 3.0.1)
31
+ arel (~> 1.0.0)
32
+ tzinfo (~> 0.3.23)
33
+ activeresource (3.0.1)
34
+ activemodel (= 3.0.1)
35
+ activesupport (= 3.0.1)
36
+ activesupport (3.0.1)
37
+ arel (1.0.1)
38
+ activesupport (~> 3.0.0)
39
+ builder (2.1.2)
40
+ capybara (0.4.0)
41
+ celerity (>= 0.7.9)
42
+ culerity (>= 0.2.4)
43
+ mime-types (>= 1.16)
44
+ nokogiri (>= 1.3.3)
45
+ rack (>= 1.0.0)
46
+ rack-test (>= 0.5.4)
47
+ selenium-webdriver (>= 0.0.27)
48
+ xpath (~> 0.1.2)
49
+ celerity (0.8.2)
50
+ childprocess (0.1.3)
51
+ ffi (~> 0.6.3)
52
+ configuration (1.1.0)
53
+ culerity (0.2.12)
54
+ erubis (2.6.6)
55
+ abstract (>= 1.0.0)
56
+ ffi (0.6.3)
57
+ rake (>= 0.8.7)
58
+ hashery (1.3.0)
59
+ i18n (0.4.2)
60
+ json_pure (1.4.6)
61
+ launchy (0.3.7)
62
+ configuration (>= 0.0.5)
63
+ rake (>= 0.8.1)
64
+ mail (2.2.9)
65
+ activesupport (>= 2.3.6)
66
+ i18n (~> 0.4.1)
67
+ mime-types (~> 1.16)
68
+ treetop (~> 1.4.8)
69
+ mime-types (1.16)
70
+ nokogiri (1.4.3.1)
71
+ polyglot (0.3.1)
72
+ rack (1.2.1)
73
+ rack-mount (0.6.13)
74
+ rack (>= 1.0.0)
75
+ rack-test (0.5.6)
76
+ rack (>= 1.0)
77
+ rails (3.0.1)
78
+ actionmailer (= 3.0.1)
79
+ actionpack (= 3.0.1)
80
+ activerecord (= 3.0.1)
81
+ activeresource (= 3.0.1)
82
+ activesupport (= 3.0.1)
83
+ bundler (~> 1.0.0)
84
+ railties (= 3.0.1)
85
+ railties (3.0.1)
86
+ actionpack (= 3.0.1)
87
+ activesupport (= 3.0.1)
88
+ rake (>= 0.8.4)
89
+ thor (~> 0.14.0)
90
+ rake (0.8.7)
91
+ rr (1.0.1)
92
+ rubyzip (0.9.4)
93
+ selenium-webdriver (0.0.29)
94
+ childprocess (>= 0.0.7)
95
+ ffi (~> 0.6.3)
96
+ json_pure
97
+ rubyzip
98
+ sqlite3-ruby (1.3.2)
99
+ thor (0.14.3)
100
+ treetop (1.4.8)
101
+ polyglot (>= 0.3.1)
102
+ tzinfo (0.3.23)
103
+ xpath (0.1.2)
104
+ nokogiri (~> 1.3)
105
+
106
+ PLATFORMS
107
+ ruby
108
+
109
+ DEPENDENCIES
110
+ capybara
111
+ launchy
112
+ rails (= 3.0.1)
113
+ rr
114
+ sqlite3-ruby
115
+ tagged_logger!
@@ -0,0 +1,256 @@
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
+ <tt>rails new myapp</tt> (where <tt>myapp</tt> is the application name)
33
+
34
+ 2. Change directory to <tt>myapp</tt> and start the web server:
35
+ <tt>cd myapp; rails server</tt> (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 <tt>sudo gem install ruby-debug</tt>. Example:
91
+
92
+ class WeblogController < ActionController::Base
93
+ def index
94
+ @posts = Post.find(: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
+ => "[#<Post:0x14a6be8
104
+ @attributes={"title"=>nil, "body"=>nil, "id"=>"1"}>,
105
+ #<Post:0x14a6620
106
+ @attributes={"title"=>"Rails", "body"=>"Only ten..", "id"=>"2"}>]"
107
+ >> @posts.first.title = "hello from a debugger"
108
+ => "hello from a debugger"
109
+
110
+ ...and even better, you can examine how your runtime objects actually work:
111
+
112
+ >> f = @posts.first
113
+ => #<Post:0x13630c4 @attributes={"title"=>nil, "body"=>nil, "id"=>"1"}>
114
+ >> f.
115
+ Display all 152 possibilities? (y or n)
116
+
117
+ Finally, when you're ready to resume execution, you can enter "cont".
118
+
119
+
120
+ == Console
121
+
122
+ The console is a Ruby shell, which allows you to interact with your
123
+ application's domain model. Here you'll have all parts of the application
124
+ configured, just like it is when the application is running. You can inspect
125
+ domain models, change values, and save to the database. Starting the script
126
+ without arguments will launch it in the development environment.
127
+
128
+ To start the console, run <tt>rails console</tt> from the application
129
+ directory.
130
+
131
+ Options:
132
+
133
+ * Passing the <tt>-s, --sandbox</tt> argument will rollback any modifications
134
+ made to the database.
135
+ * Passing an environment name as an argument will load the corresponding
136
+ environment. Example: <tt>rails console production</tt>.
137
+
138
+ To reload your controllers and models after launching the console run
139
+ <tt>reload!</tt>
140
+
141
+ More information about irb can be found at:
142
+ link:http://www.rubycentral.com/pickaxe/irb.html
143
+
144
+
145
+ == dbconsole
146
+
147
+ You can go to the command line of your database directly through <tt>rails
148
+ dbconsole</tt>. You would be connected to the database with the credentials
149
+ defined in database.yml. Starting the script without arguments will connect you
150
+ to the development database. Passing an argument will connect you to a different
151
+ database, like <tt>rails dbconsole production</tt>. Currently works for MySQL,
152
+ PostgreSQL and SQLite 3.
153
+
154
+ == Description of Contents
155
+
156
+ The default directory structure of a generated Ruby on Rails application:
157
+
158
+ |-- app
159
+ | |-- controllers
160
+ | |-- helpers
161
+ | |-- models
162
+ | `-- views
163
+ | `-- layouts
164
+ |-- config
165
+ | |-- environments
166
+ | |-- initializers
167
+ | `-- locales
168
+ |-- db
169
+ |-- doc
170
+ |-- lib
171
+ | `-- tasks
172
+ |-- log
173
+ |-- public
174
+ | |-- images
175
+ | |-- javascripts
176
+ | `-- stylesheets
177
+ |-- script
178
+ | `-- performance
179
+ |-- test
180
+ | |-- fixtures
181
+ | |-- functional
182
+ | |-- integration
183
+ | |-- performance
184
+ | `-- unit
185
+ |-- tmp
186
+ | |-- cache
187
+ | |-- pids
188
+ | |-- sessions
189
+ | `-- sockets
190
+ `-- vendor
191
+ `-- plugins
192
+
193
+ app
194
+ Holds all the code that's specific to this particular application.
195
+
196
+ app/controllers
197
+ Holds controllers that should be named like weblogs_controller.rb for
198
+ automated URL mapping. All controllers should descend from
199
+ ApplicationController which itself descends from ActionController::Base.
200
+
201
+ app/models
202
+ Holds models that should be named like post.rb. Models descend from
203
+ ActiveRecord::Base by default.
204
+
205
+ app/views
206
+ Holds the template files for the view that should be named like
207
+ weblogs/index.html.erb for the WeblogsController#index action. All views use
208
+ eRuby syntax by default.
209
+
210
+ app/views/layouts
211
+ Holds the template files for layouts to be used with views. This models the
212
+ common header/footer method of wrapping views. In your views, define a layout
213
+ using the <tt>layout :default</tt> and create a file named default.html.erb.
214
+ Inside default.html.erb, call <% yield %> to render the view using this
215
+ layout.
216
+
217
+ app/helpers
218
+ Holds view helpers that should be named like weblogs_helper.rb. These are
219
+ generated for you automatically when using generators for controllers.
220
+ Helpers can be used to wrap functionality for your views into methods.
221
+
222
+ config
223
+ Configuration files for the Rails environment, the routing map, the database,
224
+ and other dependencies.
225
+
226
+ db
227
+ Contains the database schema in schema.rb. db/migrate contains all the
228
+ sequence of Migrations for your schema.
229
+
230
+ doc
231
+ This directory is where your application documentation will be stored when
232
+ generated using <tt>rake doc:app</tt>
233
+
234
+ lib
235
+ Application specific libraries. Basically, any kind of custom code that
236
+ doesn't belong under controllers, models, or helpers. This directory is in
237
+ the load path.
238
+
239
+ public
240
+ The directory available for the web server. Contains subdirectories for
241
+ images, stylesheets, and javascripts. Also contains the dispatchers and the
242
+ default HTML files. This should be set as the DOCUMENT_ROOT of your web
243
+ server.
244
+
245
+ script
246
+ Helper scripts for automation and generation.
247
+
248
+ test
249
+ Unit and functional tests along with fixtures. When using the rails generate
250
+ command, template test files will be generated for you and placed in this
251
+ directory.
252
+
253
+ vendor
254
+ External libraries that the application depends on. Also includes the plugins
255
+ subdirectory. If the app has frozen rails, those gems also go here, under
256
+ vendor/rails/. This directory is in the load path.
@@ -0,0 +1,7 @@
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.expand_path('../config/application', __FILE__)
5
+ require 'rake'
6
+
7
+ TestRailsApp::Application.load_tasks
@@ -0,0 +1,3 @@
1
+ class ApplicationController < ActionController::Base
2
+ protect_from_forgery
3
+ end
@@ -0,0 +1,8 @@
1
+ class UsersController < ApplicationController
2
+ def index
3
+ logger.debug "listing users..."
4
+ @users = User.everyone
5
+ UserMailer.index_email.deliver
6
+ render
7
+ end
8
+ end
@@ -0,0 +1,2 @@
1
+ module ApplicationHelper
2
+ end
@@ -0,0 +1,2 @@
1
+ module UsersHelper
2
+ end
@@ -0,0 +1,6 @@
1
+ class UserMailer < ActionMailer::Base
2
+ default :from => "from@example.com"
3
+ def index_email
4
+ mail(:to => "to@example.com", :subject => "list of users has been requested")
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ class User < ActiveRecord::Base
2
+ def self.everyone
3
+ logger.debug "everyone..."
4
+ all
5
+ end
6
+ end
@@ -0,0 +1,14 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>TestRailsApp</title>
5
+ <%= stylesheet_link_tag :all %>
6
+ <%= javascript_include_tag :defaults %>
7
+ <%= csrf_meta_tag %>
8
+ </head>
9
+ <body>
10
+
11
+ <%= yield %>
12
+
13
+ </body>
14
+ </html>
@@ -0,0 +1,2 @@
1
+ <!DOCTYPE html>
2
+ <html></html>
@@ -0,0 +1 @@
1
+ <h1>Listing users</h1>
@@ -0,0 +1,42 @@
1
+ require File.expand_path('../boot', __FILE__)
2
+
3
+ require 'rails/all'
4
+
5
+ # If you have a Gemfile, require the gems listed there, including any gems
6
+ # you've limited to :test, :development, or :production.
7
+ Bundler.require(:default, Rails.env) if defined?(Bundler)
8
+
9
+ module TestRailsApp
10
+ class Application < Rails::Application
11
+ # Settings in config/environments/* take precedence over those specified here.
12
+ # Application configuration should go into files in config/initializers
13
+ # -- all .rb files in that directory are automatically loaded.
14
+
15
+ # Custom directories with classes and modules you want to be autoloadable.
16
+ # config.autoload_paths += %W(#{config.root}/extras)
17
+
18
+ # Only load the plugins named here, in the order given (default is alphabetical).
19
+ # :all can be used as a placeholder for all plugins not explicitly named.
20
+ # config.plugins = [ :exception_notification, :ssl_requirement, :all ]
21
+
22
+ # Activate observers that should always be running.
23
+ # config.active_record.observers = :cacher, :garbage_collector, :forum_observer
24
+
25
+ # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
26
+ # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
27
+ # config.time_zone = 'Central Time (US & Canada)'
28
+
29
+ # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
30
+ # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
31
+ # config.i18n.default_locale = :de
32
+
33
+ # JavaScript files you want as :defaults (application.js is always included).
34
+ # config.action_view.javascript_expansions[:defaults] = %w(jquery rails)
35
+
36
+ # Configure the default encoding used in templates for Ruby 1.9.
37
+ config.encoding = "utf-8"
38
+
39
+ # Configure sensitive parameters which will be filtered from the log file.
40
+ config.filter_parameters += [:password]
41
+ end
42
+ end
@@ -0,0 +1,13 @@
1
+ require 'rubygems'
2
+
3
+ # Set up gems listed in the Gemfile.
4
+ gemfile = File.expand_path('../../Gemfile', __FILE__)
5
+ begin
6
+ ENV['BUNDLE_GEMFILE'] = gemfile
7
+ require 'bundler'
8
+ Bundler.setup
9
+ rescue Bundler::GemNotFound => e
10
+ STDERR.puts e.message
11
+ STDERR.puts "Try running `bundle install`."
12
+ exit!
13
+ end if File.exist?(gemfile)