rails-logstasher 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. checksums.yaml +15 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +100 -0
  4. data/Rakefile +38 -0
  5. data/lib/rails_logstasher.rb +16 -0
  6. data/lib/rails_logstasher/action_controller/log_subscriber.rb +75 -0
  7. data/lib/rails_logstasher/action_view/log_subscriber.rb +31 -0
  8. data/lib/rails_logstasher/active_record/log_subscriber.rb +88 -0
  9. data/lib/rails_logstasher/active_resource/log_subscriber.rb +34 -0
  10. data/lib/rails_logstasher/core_ext/object/blank.rb +110 -0
  11. data/lib/rails_logstasher/event.rb +44 -0
  12. data/lib/rails_logstasher/logger.rb +55 -0
  13. data/lib/rails_logstasher/rack/logger.rb +53 -0
  14. data/lib/rails_logstasher/railtie.rb +70 -0
  15. data/lib/rails_logstasher/tagged_logging.rb +108 -0
  16. data/lib/rails_logstasher/version.rb +3 -0
  17. data/test/action_controller/log_subscriber_test.rb +165 -0
  18. data/test/action_view/log_subscriber_test.rb +89 -0
  19. data/test/active_record/log_subscriber_test.rb +87 -0
  20. data/test/active_resource/log_subscriber_test.rb +42 -0
  21. data/test/core_ext/blank_test.rb +31 -0
  22. data/test/dummy/README.rdoc +261 -0
  23. data/test/dummy/Rakefile +7 -0
  24. data/test/dummy/app/assets/javascripts/application.js +13 -0
  25. data/test/dummy/app/assets/javascripts/widgets.js +2 -0
  26. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  27. data/test/dummy/app/assets/stylesheets/scaffold.css +56 -0
  28. data/test/dummy/app/assets/stylesheets/widgets.css +4 -0
  29. data/test/dummy/app/controllers/application_controller.rb +3 -0
  30. data/test/dummy/app/controllers/log_subscriber_controller.rb +56 -0
  31. data/test/dummy/app/controllers/widgets_controller.rb +83 -0
  32. data/test/dummy/app/helpers/application_helper.rb +2 -0
  33. data/test/dummy/app/helpers/widgets_helper.rb +2 -0
  34. data/test/dummy/app/models/widget.rb +3 -0
  35. data/test/dummy/app/views/customers/_customer.html.erb +1 -0
  36. data/test/dummy/app/views/good_customers/_good_customer.html.erb +1 -0
  37. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  38. data/test/dummy/app/views/test/_customer.erb +1 -0
  39. data/test/dummy/app/views/test/hello_world.erb +1 -0
  40. data/test/dummy/app/views/widgets/_form.html.erb +17 -0
  41. data/test/dummy/app/views/widgets/edit.html.erb +6 -0
  42. data/test/dummy/app/views/widgets/index.html.erb +21 -0
  43. data/test/dummy/app/views/widgets/new.html.erb +5 -0
  44. data/test/dummy/app/views/widgets/show.html.erb +5 -0
  45. data/test/dummy/config.ru +4 -0
  46. data/test/dummy/config/application.rb +69 -0
  47. data/test/dummy/config/boot.rb +10 -0
  48. data/test/dummy/config/database.yml +22 -0
  49. data/test/dummy/config/environment.rb +5 -0
  50. data/test/dummy/config/environments/development.rb +31 -0
  51. data/test/dummy/config/environments/production.rb +64 -0
  52. data/test/dummy/config/environments/test.rb +35 -0
  53. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  54. data/test/dummy/config/initializers/inflections.rb +15 -0
  55. data/test/dummy/config/initializers/mime_types.rb +5 -0
  56. data/test/dummy/config/initializers/secret_token.rb +7 -0
  57. data/test/dummy/config/initializers/session_store.rb +8 -0
  58. data/test/dummy/config/initializers/wrap_parameters.rb +10 -0
  59. data/test/dummy/config/locales/en.yml +5 -0
  60. data/test/dummy/config/routes.rb +69 -0
  61. data/test/dummy/db/migrate/20120927084605_create_widgets.rb +8 -0
  62. data/test/dummy/db/schema.rb +16 -0
  63. data/test/dummy/public/404.html +26 -0
  64. data/test/dummy/public/422.html +26 -0
  65. data/test/dummy/public/500.html +25 -0
  66. data/test/dummy/public/favicon.ico +0 -0
  67. data/test/dummy/script/rails +6 -0
  68. data/test/logger_test.rb +126 -0
  69. data/test/rack/logger_test.rb +68 -0
  70. data/test/rails_logstasher_test.rb +7 -0
  71. data/test/support/fake_models.rb +12 -0
  72. data/test/support/integration_case.rb +5 -0
  73. data/test/support/multibyte_test_helpers.rb +19 -0
  74. data/test/tagged_logging_test.rb +155 -0
  75. data/test/test_helper.rb +40 -0
  76. metadata +219 -0
@@ -0,0 +1,68 @@
1
+ require 'test_helper'
2
+
3
+ # TODO These tests are fragile because they rely on the output being added
4
+ # to the last line of the log file. See if there is a better way to do this
5
+ class LoggerTest < ActiveSupport::IntegrationCase
6
+ class MyLogger < RailsLogstasher::Logger
7
+ def flush(*)
8
+ end
9
+
10
+ end
11
+
12
+ setup do
13
+ @output = StringIO.new
14
+ Rails.logger = RailsLogstasher::TaggedLogging.new(MyLogger.new(@output))
15
+ visit('/widgets')
16
+ end
17
+
18
+ test 'writes a hash to the log file when a request is received' do
19
+ assert_equal Hash, entry.class
20
+ end
21
+
22
+ test 'fills in the client_ip' do
23
+ assert_equal "127.0.0.1", entry['@fields']['client_ip']
24
+ end
25
+
26
+ test 'fills in the method' do
27
+ assert_equal "GET", entry['@fields']['method']
28
+ end
29
+
30
+ test 'fills in the path' do
31
+ assert_equal "/widgets", entry['@fields']['path']
32
+ end
33
+
34
+ test 'fills in the status' do
35
+ assert_equal "/widgets", entry['@fields']['path']
36
+ end
37
+
38
+ test 'fills in the total_duration' do
39
+ assert entry['@fields']['total_duration'].to_f >= 0, "total_duration was not a positive number"
40
+ end
41
+
42
+ test 'fills in the rendering_duration' do
43
+ assert entry['@fields']['rendering_duration'].to_f >= 0, "rendering_duration was not a positive number"
44
+ end
45
+
46
+ test 'fills in the sql_duration' do
47
+ assert entry['@fields']['rendering_duration'].to_f >= 0, "sql_duration was not a positive number"
48
+ end
49
+
50
+ test 'fills in the method name tag' do
51
+ assert_equal 32, entry['@fields']['uuid'].size
52
+ end
53
+
54
+ test 'fills in the string tag' do
55
+ assert_match "Hello", entry['@tags'].first
56
+ end
57
+
58
+ test 'fills in the proc tag' do
59
+ assert_match "Proc", entry['@tags'].last
60
+ end
61
+
62
+ #TODO Add tests for view and SQL rendering summaries
63
+
64
+ def entry
65
+ JSON.parse(@output.string)
66
+ end
67
+
68
+ end
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+
3
+ class RailsLogstasherTest < ActiveSupport::TestCase
4
+ test "truth" do
5
+ assert_kind_of Module, RailsLogstasher
6
+ end
7
+ end
@@ -0,0 +1,12 @@
1
+ require "active_model"
2
+
3
+ class Customer < Struct.new(:name, :id)
4
+ extend ActiveModel::Naming
5
+ include ActiveModel::Conversion
6
+ end
7
+
8
+ class BadCustomer < Customer
9
+ end
10
+
11
+ class GoodCustomer < Customer
12
+ end
@@ -0,0 +1,5 @@
1
+ # Define a bare test case to use with Capybara
2
+ class ActiveSupport::IntegrationCase < ActiveSupport::TestCase
3
+ include Capybara::DSL
4
+ include Rails.application.routes.url_helpers
5
+ end
@@ -0,0 +1,19 @@
1
+ # encoding: utf-8
2
+
3
+ module MultibyteTestHelpers
4
+ UNICODE_STRING = 'こにちわ'
5
+ ASCII_STRING = 'ohayo'
6
+ BYTE_STRING = "\270\236\010\210\245".force_encoding("ASCII-8BIT")
7
+
8
+ def chars(str)
9
+ ActiveSupport::Multibyte::Chars.new(str)
10
+ end
11
+
12
+ def inspect_codepoints(str)
13
+ str.to_s.unpack("U*").map{|cp| cp.to_s(16) }.join(' ')
14
+ end
15
+
16
+ def assert_equal_codepoints(expected, actual, message=nil)
17
+ assert_equal(inspect_codepoints(expected), inspect_codepoints(actual), message)
18
+ end
19
+ end
@@ -0,0 +1,155 @@
1
+ require 'rails_logstasher/logger'
2
+ require 'rails_logstasher/tagged_logging'
3
+
4
+ class TaggedLoggingTest < ActiveSupport::TestCase
5
+ class MyLogger < RailsLogstasher::Logger
6
+ end
7
+
8
+ setup do
9
+ @output = StringIO.new
10
+ @logger = RailsLogstasher::TaggedLogging.new(MyLogger.new(@output))
11
+ end
12
+
13
+ test 'sets logger.formatter if missing and extends it with a tagging API' do
14
+ logger = ::Logger.new(StringIO.new)
15
+ # assert_nil logger.formatter #TODO This assertion is failing but I do not think it is end of the world
16
+ RailsLogstasher::TaggedLogging.new(logger)
17
+ assert_not_nil logger.formatter
18
+ assert logger.formatter.respond_to?(:tagged)
19
+ end
20
+
21
+ test 'fills in the severity' do
22
+ @logger.info "Severity Test"
23
+ assert_equal "INFO", JSON.parse(@output.string)['@fields']['severity']
24
+ end
25
+
26
+ test "tagged once" do
27
+ @logger.tagged("BCX") { @logger.info "Funky time" }
28
+ assert_equal "BCX", JSON.parse(@output.string)['@tags'][0]
29
+ assert_equal "Funky time", JSON.parse(@output.string)['@message']
30
+ end
31
+
32
+ test "tagged twice" do
33
+ @logger.tagged("BCX") { @logger.tagged("Jason") { @logger.info "Funky time" } }
34
+ assert_equal "BCX", JSON.parse(@output.string)['@tags'][0]
35
+ assert_equal "Jason", JSON.parse(@output.string)['@tags'][1]
36
+ end
37
+
38
+ test "tagged thrice at once" do
39
+ @logger.tagged("BCX", "Jason", "New") { @logger.info "Funky time" }
40
+ assert_equal "BCX", JSON.parse(@output.string)['@tags'][0]
41
+ assert_equal "Jason", JSON.parse(@output.string)['@tags'][1]
42
+ assert_equal "New", JSON.parse(@output.string)['@tags'][2]
43
+ end
44
+
45
+ test "tagged are flattened" do
46
+ @logger.tagged("BCX", %w(Jason New)) { @logger.info "Funky time" }
47
+ assert_equal "BCX", JSON.parse(@output.string)['@tags'][0]
48
+ assert_equal "Jason", JSON.parse(@output.string)['@tags'][1]
49
+ assert_equal "New", JSON.parse(@output.string)['@tags'][2]
50
+ end
51
+
52
+
53
+ test "push and pop tags directly" do
54
+ assert_equal %w(A B C), @logger.push_tags('A', ['B', ' ', ['C']])
55
+ @logger.info 'a'
56
+ assert_equal %w(C), @logger.pop_tags
57
+ @logger.info 'b'
58
+ assert_equal %w(B), @logger.pop_tags(1)
59
+ @logger.info 'c'
60
+ assert_equal [], @logger.clear_tags!
61
+ @logger.info 'd'
62
+ # assert_equal "[A] [B] [C] a\n[A] [B] b\n[A] c\nd\n", JSON.parse(@output.string)['@tags']
63
+
64
+ first_log = JSON.parse(@output.string.split("\n")[0])
65
+ assert_equal "A", first_log['@tags'][0]
66
+ assert_equal "B", first_log['@tags'][1]
67
+ assert_equal "C", first_log['@tags'][2]
68
+ assert_equal "a", first_log['@message']
69
+
70
+ second_log = JSON.parse(@output.string.split("\n")[1])
71
+ assert_equal "A", second_log['@tags'][0]
72
+ assert_equal "B", second_log['@tags'][1]
73
+ assert_equal "b", second_log['@message']
74
+
75
+ third_log = JSON.parse(@output.string.split("\n")[2])
76
+ assert_equal "A", third_log['@tags'][0]
77
+ assert_equal "c", third_log['@message']
78
+
79
+ fourth_log = JSON.parse(@output.string.split("\n")[3])
80
+ assert fourth_log['@tags'].empty?
81
+ assert_equal "d", fourth_log['@message']
82
+ end
83
+
84
+
85
+
86
+ test "does not strip message content" do
87
+ @logger.info " Hello"
88
+ assert_equal " Hello", JSON.parse(@output.string)['@message']
89
+ end
90
+
91
+ test "provides access to the logger instance" do
92
+ @logger.tagged("BCX") { |logger| logger.info "Funky time" }
93
+ assert_equal "BCX", JSON.parse(@output.string)['@tags'][0]
94
+ assert_equal "Funky time", JSON.parse(@output.string)['@message']
95
+ end
96
+
97
+ test "tagged once with blank and nil" do
98
+ @logger.tagged(nil, "", "New") { @logger.info "Funky time" }
99
+ assert_equal "New", JSON.parse(@output.string)['@tags'].last
100
+ end
101
+
102
+ test "keeps each tag in their own thread" do
103
+ @logger.tagged("BCX") do
104
+ Thread.new do
105
+ @logger.tagged("OMG") { @logger.info "Cool story bro" }
106
+ end.join
107
+ @logger.info "Funky time"
108
+ end
109
+
110
+ # Sub-thread
111
+ main_thread = JSON.parse(@output.string.split("\n").first)
112
+ assert_equal "OMG", main_thread['@tags'][0]
113
+ assert_equal "Cool story bro", main_thread['@message']
114
+
115
+ # Main thread
116
+ main_thread = JSON.parse(@output.string.split("\n").last)
117
+ assert_equal "BCX", main_thread['@tags'][0]
118
+ assert_equal "Funky time", main_thread['@message']
119
+ end
120
+
121
+ test "cleans up the taggings on flush" do
122
+ @logger.tagged("BCX") do
123
+ Thread.new do
124
+ @logger.tagged("OMG") do
125
+ @logger.flush
126
+ @logger.info "Cool story bro"
127
+ end
128
+ end.join
129
+ end
130
+
131
+ first_log = JSON.parse(@output.string.split("\n").first)
132
+ assert first_log['@tags'].empty?
133
+ assert_equal "Cool story bro", first_log['@message']
134
+ end
135
+
136
+
137
+ test "mixed levels of tagging" do
138
+ @logger.tagged("BCX") do
139
+ @logger.tagged("Jason") { @logger.info "Funky time" }
140
+ @logger.info "Junky time!"
141
+ end
142
+
143
+ first_log = JSON.parse(@output.string.split("\n").first)
144
+ assert_equal "BCX", first_log['@tags'][0]
145
+ assert_equal "Jason", first_log['@tags'][1]
146
+ assert_equal "Funky time", first_log['@message']
147
+
148
+ second_log = JSON.parse(@output.string.split("\n").last)
149
+ assert_equal "BCX", second_log['@tags'][0]
150
+ assert_equal "Junky time!", second_log['@message']
151
+ end
152
+
153
+ end
154
+
155
+
@@ -0,0 +1,40 @@
1
+ unless defined? JRUBY_VERSION
2
+ require 'simplecov'
3
+ require 'coveralls'
4
+
5
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
6
+ SimpleCov::Formatter::HTMLFormatter,
7
+ Coveralls::SimpleCov::Formatter
8
+ ]
9
+
10
+ SimpleCov.start do
11
+ add_filter '/test/'
12
+ add_filter '/vendor/'
13
+ add_filter '/bin/'
14
+ add_filter '/.bundle/'
15
+ end
16
+ end
17
+
18
+ # Configure Rails Environment
19
+ ENV["RAILS_ENV"] = "test"
20
+
21
+ require File.expand_path("../dummy/config/environment.rb", __FILE__)
22
+ require "rails/test_help"
23
+
24
+ Rails.backtrace_cleaner.remove_silencers!
25
+
26
+ # Configure capybara for integration testing
27
+ require 'capybara/rails' # Must be required after rails/test_help
28
+ Capybara.default_driver = :rack_test
29
+ Capybara.default_selector = :css
30
+
31
+ #Run any available migrations
32
+ ActiveRecord::Migrator.migrate File.expand_path("../dummy/db/migrate/", __FILE__)
33
+
34
+ # Load support files
35
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
36
+
37
+ # Load fixtures from the engine
38
+ if ActiveSupport::TestCase.method_defined?(:fixture_path=)
39
+ ActiveSupport::TestCase.fixture_path = File.expand_path("../fixtures", __FILE__)
40
+ end
metadata ADDED
@@ -0,0 +1,219 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rails-logstasher
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Nadav Fischer
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-12-05 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: 3.2.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: 3.2.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: logstash-event
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 1.2.02
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: 1.2.02
41
+ - !ruby/object:Gem::Dependency
42
+ name: capybara
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: 1.1.2
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 1.1.2
55
+ description: Replaces the default string based Ruby on Rails logging system with a
56
+ Logstash based one
57
+ email:
58
+ - nadav.fischer@capriza.com
59
+ executables: []
60
+ extensions: []
61
+ extra_rdoc_files: []
62
+ files:
63
+ - lib/rails_logstasher/event.rb
64
+ - lib/rails_logstasher/core_ext/object/blank.rb
65
+ - lib/rails_logstasher/version.rb
66
+ - lib/rails_logstasher/active_resource/log_subscriber.rb
67
+ - lib/rails_logstasher/rack/logger.rb
68
+ - lib/rails_logstasher/railtie.rb
69
+ - lib/rails_logstasher/logger.rb
70
+ - lib/rails_logstasher/action_view/log_subscriber.rb
71
+ - lib/rails_logstasher/tagged_logging.rb
72
+ - lib/rails_logstasher/action_controller/log_subscriber.rb
73
+ - lib/rails_logstasher/active_record/log_subscriber.rb
74
+ - lib/rails_logstasher.rb
75
+ - MIT-LICENSE
76
+ - Rakefile
77
+ - README.md
78
+ - test/support/integration_case.rb
79
+ - test/support/fake_models.rb
80
+ - test/support/multibyte_test_helpers.rb
81
+ - test/test_helper.rb
82
+ - test/core_ext/blank_test.rb
83
+ - test/tagged_logging_test.rb
84
+ - test/logger_test.rb
85
+ - test/active_resource/log_subscriber_test.rb
86
+ - test/rack/logger_test.rb
87
+ - test/action_view/log_subscriber_test.rb
88
+ - test/action_controller/log_subscriber_test.rb
89
+ - test/rails_logstasher_test.rb
90
+ - test/dummy/README.rdoc
91
+ - test/dummy/config.ru
92
+ - test/dummy/Rakefile
93
+ - test/dummy/app/assets/javascripts/application.js
94
+ - test/dummy/app/assets/javascripts/widgets.js
95
+ - test/dummy/app/assets/stylesheets/scaffold.css
96
+ - test/dummy/app/assets/stylesheets/widgets.css
97
+ - test/dummy/app/assets/stylesheets/application.css
98
+ - test/dummy/app/helpers/application_helper.rb
99
+ - test/dummy/app/helpers/widgets_helper.rb
100
+ - test/dummy/app/controllers/widgets_controller.rb
101
+ - test/dummy/app/controllers/log_subscriber_controller.rb
102
+ - test/dummy/app/controllers/application_controller.rb
103
+ - test/dummy/app/models/widget.rb
104
+ - test/dummy/app/views/widgets/new.html.erb
105
+ - test/dummy/app/views/widgets/show.html.erb
106
+ - test/dummy/app/views/widgets/edit.html.erb
107
+ - test/dummy/app/views/widgets/index.html.erb
108
+ - test/dummy/app/views/widgets/_form.html.erb
109
+ - test/dummy/app/views/good_customers/_good_customer.html.erb
110
+ - test/dummy/app/views/test/_customer.erb
111
+ - test/dummy/app/views/test/hello_world.erb
112
+ - test/dummy/app/views/layouts/application.html.erb
113
+ - test/dummy/app/views/customers/_customer.html.erb
114
+ - test/dummy/db/migrate/20120927084605_create_widgets.rb
115
+ - test/dummy/db/schema.rb
116
+ - test/dummy/public/500.html
117
+ - test/dummy/public/404.html
118
+ - test/dummy/public/422.html
119
+ - test/dummy/public/favicon.ico
120
+ - test/dummy/script/rails
121
+ - test/dummy/config/database.yml
122
+ - test/dummy/config/environment.rb
123
+ - test/dummy/config/application.rb
124
+ - test/dummy/config/initializers/wrap_parameters.rb
125
+ - test/dummy/config/initializers/mime_types.rb
126
+ - test/dummy/config/initializers/secret_token.rb
127
+ - test/dummy/config/initializers/session_store.rb
128
+ - test/dummy/config/initializers/backtrace_silencers.rb
129
+ - test/dummy/config/initializers/inflections.rb
130
+ - test/dummy/config/environments/production.rb
131
+ - test/dummy/config/environments/test.rb
132
+ - test/dummy/config/environments/development.rb
133
+ - test/dummy/config/boot.rb
134
+ - test/dummy/config/routes.rb
135
+ - test/dummy/config/locales/en.yml
136
+ - test/active_record/log_subscriber_test.rb
137
+ homepage: https://github.com/capriza/rails-logstasher
138
+ licenses: []
139
+ metadata: {}
140
+ post_install_message:
141
+ rdoc_options: []
142
+ require_paths:
143
+ - lib
144
+ required_ruby_version: !ruby/object:Gem::Requirement
145
+ requirements:
146
+ - - ! '>='
147
+ - !ruby/object:Gem::Version
148
+ version: '0'
149
+ required_rubygems_version: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - ! '>='
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
154
+ requirements: []
155
+ rubyforge_project:
156
+ rubygems_version: 2.1.11
157
+ signing_key:
158
+ specification_version: 4
159
+ summary: Lostash format replacement for Ruby on Rails logging system
160
+ test_files:
161
+ - test/support/integration_case.rb
162
+ - test/support/fake_models.rb
163
+ - test/support/multibyte_test_helpers.rb
164
+ - test/test_helper.rb
165
+ - test/core_ext/blank_test.rb
166
+ - test/tagged_logging_test.rb
167
+ - test/logger_test.rb
168
+ - test/active_resource/log_subscriber_test.rb
169
+ - test/rack/logger_test.rb
170
+ - test/action_view/log_subscriber_test.rb
171
+ - test/action_controller/log_subscriber_test.rb
172
+ - test/rails_logstasher_test.rb
173
+ - test/dummy/README.rdoc
174
+ - test/dummy/config.ru
175
+ - test/dummy/Rakefile
176
+ - test/dummy/app/assets/javascripts/application.js
177
+ - test/dummy/app/assets/javascripts/widgets.js
178
+ - test/dummy/app/assets/stylesheets/scaffold.css
179
+ - test/dummy/app/assets/stylesheets/widgets.css
180
+ - test/dummy/app/assets/stylesheets/application.css
181
+ - test/dummy/app/helpers/application_helper.rb
182
+ - test/dummy/app/helpers/widgets_helper.rb
183
+ - test/dummy/app/controllers/widgets_controller.rb
184
+ - test/dummy/app/controllers/log_subscriber_controller.rb
185
+ - test/dummy/app/controllers/application_controller.rb
186
+ - test/dummy/app/models/widget.rb
187
+ - test/dummy/app/views/widgets/new.html.erb
188
+ - test/dummy/app/views/widgets/show.html.erb
189
+ - test/dummy/app/views/widgets/edit.html.erb
190
+ - test/dummy/app/views/widgets/index.html.erb
191
+ - test/dummy/app/views/widgets/_form.html.erb
192
+ - test/dummy/app/views/good_customers/_good_customer.html.erb
193
+ - test/dummy/app/views/test/_customer.erb
194
+ - test/dummy/app/views/test/hello_world.erb
195
+ - test/dummy/app/views/layouts/application.html.erb
196
+ - test/dummy/app/views/customers/_customer.html.erb
197
+ - test/dummy/db/migrate/20120927084605_create_widgets.rb
198
+ - test/dummy/db/schema.rb
199
+ - test/dummy/public/500.html
200
+ - test/dummy/public/404.html
201
+ - test/dummy/public/422.html
202
+ - test/dummy/public/favicon.ico
203
+ - test/dummy/script/rails
204
+ - test/dummy/config/database.yml
205
+ - test/dummy/config/environment.rb
206
+ - test/dummy/config/application.rb
207
+ - test/dummy/config/initializers/wrap_parameters.rb
208
+ - test/dummy/config/initializers/mime_types.rb
209
+ - test/dummy/config/initializers/secret_token.rb
210
+ - test/dummy/config/initializers/session_store.rb
211
+ - test/dummy/config/initializers/backtrace_silencers.rb
212
+ - test/dummy/config/initializers/inflections.rb
213
+ - test/dummy/config/environments/production.rb
214
+ - test/dummy/config/environments/test.rb
215
+ - test/dummy/config/environments/development.rb
216
+ - test/dummy/config/boot.rb
217
+ - test/dummy/config/routes.rb
218
+ - test/dummy/config/locales/en.yml
219
+ - test/active_record/log_subscriber_test.rb