rails_exception_handler 1.3.0 → 1.3.2
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +11 -3
- data/Gemfile.lock +32 -30
- data/README.markdown +2 -2
- data/Rakefile +1 -0
- data/VERSION +1 -1
- data/lib/rails_exception_handler.rb +1 -0
- data/lib/rails_exception_handler/handler.rb +7 -1
- data/rails_exception_handler.gemspec +18 -42
- data/spec/testapp_32/.gitignore +15 -0
- data/spec/testapp_32/app/mailers/.gitkeep +0 -0
- data/spec/testapp_32/app/models/.gitkeep +0 -0
- data/spec/testapp_32/lib/assets/.gitkeep +0 -0
- data/spec/testapp_32/lib/tasks/.gitkeep +0 -0
- data/spec/testapp_32/log/.gitkeep +0 -0
- data/spec/testapp_32/vendor/assets/javascripts/.gitkeep +0 -0
- data/spec/testapp_32/vendor/assets/stylesheets/.gitkeep +0 -0
- data/spec/testapp_32/vendor/plugins/.gitkeep +0 -0
- metadata +21 -45
- data/spec/integration/configuration_spec.rb +0 -220
- data/spec/integration/rails_exception_handler_spec.rb +0 -67
- data/spec/spec_helper.rb +0 -24
- data/spec/test_macros.rb +0 -63
- data/spec/testapp_30/Gemfile +0 -31
- data/spec/testapp_30/Gemfile.lock +0 -75
- data/spec/testapp_30/Rakefile +0 -7
- data/spec/testapp_30/app/controllers/application_controller.rb +0 -16
- data/spec/testapp_30/app/controllers/home_controller.rb +0 -22
- data/spec/testapp_30/app/helpers/application_helper.rb +0 -2
- data/spec/testapp_30/app/models/stored_exception.rb +0 -9
- data/spec/testapp_30/app/views/home/view_error.html.erb +0 -2
- data/spec/testapp_30/app/views/layouts/fallback.html.erb +0 -15
- data/spec/testapp_30/app/views/layouts/home.html.erb +0 -15
- data/spec/testapp_30/config.ru +0 -4
- data/spec/testapp_30/config/application.rb +0 -44
- data/spec/testapp_30/config/boot.rb +0 -6
- data/spec/testapp_30/config/environment.rb +0 -5
- data/spec/testapp_30/config/environments/development.rb +0 -26
- data/spec/testapp_30/config/environments/production.rb +0 -49
- data/spec/testapp_30/config/environments/test.rb +0 -35
- data/spec/testapp_30/config/examples/database.yml +0 -13
- data/spec/testapp_30/config/locales/en.yml +0 -5
- data/spec/testapp_30/config/routes.rb +0 -6
- data/spec/testapp_30/db/migrate/20110630174538_create_error_messages.rb +0 -22
- data/spec/testapp_30/db/migrate/20110702131654_add_sessions_table.rb +0 -16
- data/spec/testapp_30/db/schema.rb +0 -39
- data/spec/testapp_30/db/seeds.rb +0 -7
- data/spec/testapp_30/script/rails +0 -6
- data/spec/testapp_30/script/setup +0 -19
- data/spec/unit/configuration_spec.rb +0 -37
- data/spec/unit/handler_spec.rb +0 -200
- data/spec/unit/parser_spec.rb +0 -136
@@ -1,220 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe RailsExceptionHandler::Configuration do
|
4
|
-
describe ".storage_strategies" do
|
5
|
-
it "should store errors in the database when storage_strategies contains :active_record" do
|
6
|
-
RailsExceptionHandler.configure { |config| config.storage_strategies = [:active_record] }
|
7
|
-
get('/incorrect_route')
|
8
|
-
ErrorMessage.count.should == 1
|
9
|
-
end
|
10
|
-
|
11
|
-
it "should store errors in the rails log when storage_strategies contains :rails_log" do
|
12
|
-
RailsExceptionHandler.configure { |config| config.storage_strategies = [:rails_log] }
|
13
|
-
get('/home/model_error')
|
14
|
-
read_test_log.should match /NoMethodError \(undefined method `foo' for nil:NilClass\)/
|
15
|
-
read_test_log.should match /lib\/active_support\/whiny_nil\.rb:48/
|
16
|
-
read_test_log.should match /PARAMS:\s+\{/
|
17
|
-
read_test_log.should match /TARGET:\s+http:\/\/example\.org\/home\/model_error/
|
18
|
-
end
|
19
|
-
|
20
|
-
# No idea how to integration test remote_url without spawning a dedicated test server
|
21
|
-
end
|
22
|
-
|
23
|
-
describe '.filters' do
|
24
|
-
describe ":all_404s" do
|
25
|
-
it "should ignore routing errors when the filters contains :all_404s" do
|
26
|
-
RailsExceptionHandler.configure { |config| config.filters = [:all_404s]}
|
27
|
-
get('/incorrect_route')
|
28
|
-
ErrorMessage.count.should == 0
|
29
|
-
end
|
30
|
-
|
31
|
-
it "should not ignore routing errors when the filters doesnt contain :all_404s" do
|
32
|
-
RailsExceptionHandler.configure { |config| config.filters = []}
|
33
|
-
get('/incorrect_route')
|
34
|
-
ErrorMessage.count.should == 1
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
describe ":no_referer_404s" do
|
39
|
-
it "should not store a routing error that contains a referer" do
|
40
|
-
RailsExceptionHandler.configure { |config| config.filters = [:no_referer_404s]}
|
41
|
-
get "/incorrect_route"
|
42
|
-
ErrorMessage.count.should == 0
|
43
|
-
end
|
44
|
-
|
45
|
-
it "should store a routing error that has a referer" do
|
46
|
-
RailsExceptionHandler.configure { |config| config.filters = [:no_referer_404s]}
|
47
|
-
get "/incorrect_route", {}, {'HTTP_REFERER' => 'http://example.com'}
|
48
|
-
ErrorMessage.count.should == 1
|
49
|
-
end
|
50
|
-
|
51
|
-
it "should store a non routing error without referer" do
|
52
|
-
RailsExceptionHandler.configure { |config| config.filters = [:no_referer_404s]}
|
53
|
-
get "/home/view_error"
|
54
|
-
ErrorMessage.count.should == 1
|
55
|
-
end
|
56
|
-
|
57
|
-
end
|
58
|
-
|
59
|
-
describe ":user_agent_regxp" do
|
60
|
-
it "should not store the error message when the user agent matches this regxp" do
|
61
|
-
RailsExceptionHandler.configure { |config| config.filters = [:user_agent_regxp => /\b(NaughtyBot)\b/]}
|
62
|
-
get "/incorrect_route", {}, {'HTTP_USER_AGENT' => 'I am a NaughtyBot'}
|
63
|
-
ErrorMessage.count.should == 0
|
64
|
-
end
|
65
|
-
|
66
|
-
it "should store the error message when the user agent doesnt match this regxp" do
|
67
|
-
RailsExceptionHandler.configure { |config| config.filters = [:user_agent_regxp => /\b(NaughtyBot)\b/]}
|
68
|
-
get "/incorrect_route", {}, {'HTTP_USER_AGENT' => "Mozilla/5.0 (Windows NT 6.1; rv:5.0) Gecko/20100101 Firefox/5.0"}
|
69
|
-
ErrorMessage.count.should == 1
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
describe ":target_url_regxp" do
|
74
|
-
it "should not store the error message when the url matches this regxp" do
|
75
|
-
RailsExceptionHandler.configure { |config| config.filters = [:target_url_regxp => /incorrect/]}
|
76
|
-
get "/incorrect_route"
|
77
|
-
ErrorMessage.count.should == 0
|
78
|
-
end
|
79
|
-
|
80
|
-
it "should store the error message when the url doesnt matche this regxp" do
|
81
|
-
RailsExceptionHandler.configure { |config| config.filters = [:target_url_regxp => /\b(phpMyAdmin)\b/]}
|
82
|
-
get "/incorrect_route"
|
83
|
-
ErrorMessage.count.should == 1
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
describe ":anon_404s" do
|
88
|
-
it "should log a 404 from a logged in user" do
|
89
|
-
RailsExceptionHandler.configure do |config|
|
90
|
-
config.environments = [Rails.env.to_sym]
|
91
|
-
config.storage_strategies = [:active_record]
|
92
|
-
config.store_user_info = {:method => :current_user, :field => :login}
|
93
|
-
config.filters = [:anon_404s]
|
94
|
-
end
|
95
|
-
get "/incorrect_route"
|
96
|
-
ErrorMessage.count.should == 1
|
97
|
-
end
|
98
|
-
|
99
|
-
it "should filter 404s from anonymous users" do
|
100
|
-
RailsExceptionHandler.configure do |config|
|
101
|
-
config.environments = [Rails.env.to_sym]
|
102
|
-
config.storage_strategies = [:active_record]
|
103
|
-
config.store_user_info = {:method => :nil_user, :field => :login}
|
104
|
-
config.filters = [:anon_404s]
|
105
|
-
end
|
106
|
-
get "/incorrect_route"
|
107
|
-
ErrorMessage.count.should == 0
|
108
|
-
end
|
109
|
-
|
110
|
-
it "should not filter 500s from anonymous users" do
|
111
|
-
RailsExceptionHandler.configure do |config|
|
112
|
-
config.environments = [Rails.env.to_sym]
|
113
|
-
config.storage_strategies = [:active_record]
|
114
|
-
config.store_user_info = {:method => :nil_user, :field => :login}
|
115
|
-
config.filters = [:anon_404s]
|
116
|
-
end
|
117
|
-
get "/home/model_error"
|
118
|
-
ErrorMessage.count.should == 1
|
119
|
-
end
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
describe ".environments" do
|
124
|
-
it "should not log routing errors if the current rails environment is not included" do
|
125
|
-
Rails.configuration.middleware.delete RailsExceptionHandler
|
126
|
-
RailsExceptionHandler.configure { |config| config.environments = [:production] }
|
127
|
-
lambda { get('/incorrect_route') }.should raise_exception
|
128
|
-
ErrorMessage.count.should == 0
|
129
|
-
end
|
130
|
-
|
131
|
-
it "should not log regular errors if the current rails environment is not included" do
|
132
|
-
Rails.configuration.middleware.delete RailsExceptionHandler
|
133
|
-
RailsExceptionHandler.configure { |config| config.environments = [:production] }
|
134
|
-
lambda { get('/home/model_error') }.should raise_exception
|
135
|
-
ErrorMessage.count.should == 0
|
136
|
-
end
|
137
|
-
|
138
|
-
it "should log routing errors if the rails environment is included" do
|
139
|
-
Rails.configuration.middleware.delete RailsExceptionHandler
|
140
|
-
RailsExceptionHandler.configure { |config| config.environments = [Rails.env.to_sym] }
|
141
|
-
get('/incorrect_route')
|
142
|
-
ErrorMessage.count.should == 1
|
143
|
-
last_response.body.should match(/this_is_the_fallback_layout/)
|
144
|
-
end
|
145
|
-
|
146
|
-
it "should log regular errors if the rails environment is included" do
|
147
|
-
Rails.configuration.middleware.delete RailsExceptionHandler
|
148
|
-
RailsExceptionHandler.configure { |config| config.environments = [Rails.env.to_sym] }
|
149
|
-
get('/home/model_error')
|
150
|
-
ErrorMessage.count.should == 1
|
151
|
-
last_response.body.should match(/this_is_the_home_layout/)
|
152
|
-
end
|
153
|
-
end
|
154
|
-
|
155
|
-
describe ".fallback_layout" do
|
156
|
-
it "should use the supplied layout on routing errors" do
|
157
|
-
RailsExceptionHandler.configure { |config| config.fallback_layout = 'home' }
|
158
|
-
get('/incorrect_route')
|
159
|
-
last_response.body.should match(/this_is_the_home_layout/)
|
160
|
-
end
|
161
|
-
end
|
162
|
-
|
163
|
-
describe ".store_user_info" do
|
164
|
-
it "should not store user info when disbled" do
|
165
|
-
RailsExceptionHandler.configure do |config|
|
166
|
-
config.environments = [Rails.env.to_sym]
|
167
|
-
config.storage_strategies = [:active_record]
|
168
|
-
config.store_user_info = nil
|
169
|
-
end
|
170
|
-
get('/incorrect_route')
|
171
|
-
ErrorMessage.count.should == 1
|
172
|
-
ErrorMessage.first.user_info.should == nil
|
173
|
-
end
|
174
|
-
|
175
|
-
it "should store user info on routing errors" do
|
176
|
-
RailsExceptionHandler.configure do |config|
|
177
|
-
config.environments = [Rails.env.to_sym]
|
178
|
-
config.storage_strategies = [:active_record]
|
179
|
-
config.store_user_info = {:method => :current_user, :field => :login}
|
180
|
-
end
|
181
|
-
get('/incorrect_route')
|
182
|
-
ErrorMessage.count.should == 1
|
183
|
-
ErrorMessage.first.user_info.should == 'matz'
|
184
|
-
end
|
185
|
-
|
186
|
-
it "should store user info on application errors" do
|
187
|
-
RailsExceptionHandler.configure do |config|
|
188
|
-
config.environments = [Rails.env.to_sym]
|
189
|
-
config.storage_strategies = [:active_record]
|
190
|
-
config.store_user_info = {:method => :current_user, :field => :login}
|
191
|
-
end
|
192
|
-
get('/home/view_error')
|
193
|
-
ErrorMessage.count.should == 1
|
194
|
-
ErrorMessage.first.user_info.should == 'matz'
|
195
|
-
end
|
196
|
-
end
|
197
|
-
|
198
|
-
describe "reponses and response_mapping" do
|
199
|
-
it "should use the default response on non-mapped errors" do
|
200
|
-
RailsExceptionHandler.configure do |config|
|
201
|
-
config.environments = [Rails.env.to_sym]
|
202
|
-
config.storage_strategies = []
|
203
|
-
config.responses = {:default => 'Customized response'}
|
204
|
-
end
|
205
|
-
get('/home/view_error')
|
206
|
-
last_response.body.should match(/Customized response/)
|
207
|
-
end
|
208
|
-
|
209
|
-
it "should use mapped response where they exist" do
|
210
|
-
RailsExceptionHandler.configure do |config|
|
211
|
-
config.environments = [Rails.env.to_sym]
|
212
|
-
config.storage_strategies = []
|
213
|
-
config.responses[:not_found] = 'custom_routing_response_text'
|
214
|
-
config.response_mapping['ActionController::RoutingError'] = :not_found
|
215
|
-
end
|
216
|
-
get('/incorrect_route')
|
217
|
-
last_response.body.should match(/custom_routing_response_text/)
|
218
|
-
end
|
219
|
-
end
|
220
|
-
end
|
@@ -1,67 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe RailsExceptionHandler do
|
4
|
-
it "should catch controller errors" do
|
5
|
-
get "/home/controller_error"
|
6
|
-
ErrorMessage.count.should == 1
|
7
|
-
last_response.body.should match(/Internal server error/)
|
8
|
-
ErrorMessage.first.class_name.should == 'NoMethodError'
|
9
|
-
end
|
10
|
-
|
11
|
-
it "should catch model errors" do
|
12
|
-
get "/home/model_error"
|
13
|
-
ErrorMessage.count.should == 1
|
14
|
-
last_response.body.should match(/Internal server error/)
|
15
|
-
ErrorMessage.first.class_name.should == 'NoMethodError'
|
16
|
-
end
|
17
|
-
|
18
|
-
it "should catch view errors" do
|
19
|
-
get "/home/view_error"
|
20
|
-
ErrorMessage.count.should == 1
|
21
|
-
last_response.body.should match(/Internal server error/)
|
22
|
-
ErrorMessage.first.class_name.should == 'ActionView::Template::Error'
|
23
|
-
end
|
24
|
-
|
25
|
-
it "should catch routing errors" do
|
26
|
-
get "/incorrect_route"
|
27
|
-
ErrorMessage.count.should == 1
|
28
|
-
last_response.body.should match(/Internal server error/)
|
29
|
-
ErrorMessage.first.class_name.should == 'ActionController::RoutingError'
|
30
|
-
end
|
31
|
-
|
32
|
-
it "should catch syntax errors" do
|
33
|
-
get "/home/syntax_error"
|
34
|
-
ErrorMessage.count.should == 1
|
35
|
-
last_response.body.should match(/Internal server error/)
|
36
|
-
ErrorMessage.first.class_name.should == 'SyntaxError'
|
37
|
-
end
|
38
|
-
|
39
|
-
it "should append the failed controllers view layout when rendering the response" do
|
40
|
-
get "/home/view_error"
|
41
|
-
last_response.body.should match(/this_is_the_home_layout/)
|
42
|
-
end
|
43
|
-
|
44
|
-
it "should fall back to using the application layout on routing errors" do
|
45
|
-
get "/incorrect_route"
|
46
|
-
last_response.body.should match(/this_is_the_fallback_layout/)
|
47
|
-
end
|
48
|
-
|
49
|
-
it "should store the correct information in the database" do
|
50
|
-
RailsExceptionHandler.configure { |config| config.store_user_info = {:method => :current_user, :field => :login} }
|
51
|
-
get "/home/controller_error", {}, {'HTTP_REFERER' => 'http://google.com/', 'HTTP_USER_AGENT' => 'Mozilla/4.0 (compatible; MSIE 8.0)'}
|
52
|
-
ErrorMessage.count.should == 1
|
53
|
-
msg = ErrorMessage.first
|
54
|
-
msg.app_name.should == 'ExceptionHandlerTestApp'
|
55
|
-
msg.class_name.should == 'NoMethodError'
|
56
|
-
msg.message.should == "undefined method `foo' for nil:NilClass"
|
57
|
-
msg.trace.should match /#{TEST_APP}\/app\/controllers\/home_controller.rb:5:in `controller_error'/
|
58
|
-
msg.params.should match /"controller"=>"home"/
|
59
|
-
msg.params.should match /"action"=>"controller_error"/
|
60
|
-
msg.user_agent.should == 'Mozilla/4.0 (compatible; MSIE 8.0)'
|
61
|
-
msg.target_url.should == 'http://example.org/home/controller_error'
|
62
|
-
msg.referer_url.should == 'http://google.com/'
|
63
|
-
msg.user_info.should == 'matz'
|
64
|
-
msg.created_at.should be > 5.seconds.ago
|
65
|
-
msg.created_at.should be < Time.now
|
66
|
-
end
|
67
|
-
end
|
data/spec/spec_helper.rb
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
|
2
|
-
TEST_APP = 'testapp_30'
|
3
|
-
ENV["RAILS_ENV"] = 'test'
|
4
|
-
require File.expand_path(File.dirname(__FILE__)) + "/#{TEST_APP}/config/environment.rb"
|
5
|
-
|
6
|
-
require File.expand_path(File.dirname(__FILE__)) + '/test_macros.rb'
|
7
|
-
|
8
|
-
require "rspec/rails"
|
9
|
-
require "rack/test"
|
10
|
-
|
11
|
-
ActiveRecord::Base.logger = nil
|
12
|
-
ActionController::Base.logger = nil
|
13
|
-
|
14
|
-
RSpec.configure do |config|
|
15
|
-
config.include Rack::Test::Methods
|
16
|
-
config.include TestMacros
|
17
|
-
config.color_enabled = true
|
18
|
-
config.full_backtrace = true
|
19
|
-
config.before(:each) do
|
20
|
-
ErrorMessage.delete_all
|
21
|
-
clear_test_log
|
22
|
-
reset_configuration
|
23
|
-
end
|
24
|
-
end
|
data/spec/test_macros.rb
DELETED
@@ -1,63 +0,0 @@
|
|
1
|
-
|
2
|
-
require 'fileutils'
|
3
|
-
|
4
|
-
module TestMacros
|
5
|
-
def app # Used by by Rack::Test to get the application object
|
6
|
-
Rails.application.app
|
7
|
-
end
|
8
|
-
|
9
|
-
def create_env(*args)
|
10
|
-
options = args.extract_options!
|
11
|
-
referer = options[:referer] || 'http://google.com/'
|
12
|
-
s = Rack::Test::Session.new(nil)
|
13
|
-
env = s.send(:env_for,'/home', {:params => {:foo => 'bar'}, 'HTTP_REFERER' => referer, 'HTTP_USER_AGENT' => "Mozilla/4.0 (compatible; MSIE 8.0)"})
|
14
|
-
end
|
15
|
-
|
16
|
-
def create_parser(exception = nil, request = nil, controller = nil)
|
17
|
-
env = create_env
|
18
|
-
controller ||= mock(ApplicationController, :current_user => mock(Object, :login => 'matz'))
|
19
|
-
request ||= ActionDispatch::Request.new(env)
|
20
|
-
exception ||= create_exception
|
21
|
-
parser = RailsExceptionHandler::Parser.new(exception, request, controller)
|
22
|
-
end
|
23
|
-
|
24
|
-
def create_exception
|
25
|
-
exception = nil
|
26
|
-
begin
|
27
|
-
nil.foo
|
28
|
-
rescue Exception => e
|
29
|
-
exception = e
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
def clear_test_log
|
34
|
-
File.open(log_path, 'w') {|f| f.write('') }
|
35
|
-
end
|
36
|
-
|
37
|
-
def read_test_log
|
38
|
-
data = ""
|
39
|
-
File.open(log_path, 'r').each_line do |line|
|
40
|
-
data += line + '\n'
|
41
|
-
end
|
42
|
-
return data
|
43
|
-
end
|
44
|
-
|
45
|
-
def reset_configuration
|
46
|
-
Rails.configuration.middleware.delete(RailsExceptionHandler)
|
47
|
-
RailsExceptionHandler.configure do |config|
|
48
|
-
config.storage_strategies = [:active_record]
|
49
|
-
config.environments = [:test]
|
50
|
-
config.store_user_info = false
|
51
|
-
config.filters = []
|
52
|
-
config.fallback_layout = 'fallback'
|
53
|
-
config.response_mapping = {}
|
54
|
-
config.responses = { :default => '<h1>Internal server error</h1><p>The application has encountered an unexpected issue.</p>' }
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
private
|
59
|
-
|
60
|
-
def log_path
|
61
|
-
File.expand_path(File.dirname(__FILE__)) + "/#{TEST_APP}/log/test.log"
|
62
|
-
end
|
63
|
-
end
|
data/spec/testapp_30/Gemfile
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
source 'http://rubygems.org'
|
2
|
-
|
3
|
-
gem 'rails', '3.0.9'
|
4
|
-
|
5
|
-
# Bundle edge Rails instead:
|
6
|
-
# gem 'rails', :git => 'git://github.com/rails/rails.git'
|
7
|
-
|
8
|
-
gem 'mysql2', '0.2.6'
|
9
|
-
|
10
|
-
# Use unicorn as the web server
|
11
|
-
# gem 'unicorn'
|
12
|
-
|
13
|
-
# Deploy with Capistrano
|
14
|
-
# gem 'capistrano'
|
15
|
-
|
16
|
-
# To use debugger (ruby-debug for Ruby 1.8.7+, ruby-debug19 for Ruby 1.9.2+)
|
17
|
-
# gem 'ruby-debug'
|
18
|
-
# gem 'ruby-debug19', :require => 'ruby-debug'
|
19
|
-
|
20
|
-
# Bundle the extra gems:
|
21
|
-
# gem 'bj'
|
22
|
-
# gem 'nokogiri'
|
23
|
-
# gem 'sqlite3-ruby', :require => 'sqlite3'
|
24
|
-
# gem 'aws-s3', :require => 'aws/s3'
|
25
|
-
|
26
|
-
# Bundle gems for the local environment. Make sure to
|
27
|
-
# put test-only gems in this group so their generators
|
28
|
-
# and rake tasks are available in development mode:
|
29
|
-
# group :development, :test do
|
30
|
-
# gem 'webrat'
|
31
|
-
# end
|
@@ -1,75 +0,0 @@
|
|
1
|
-
GEM
|
2
|
-
remote: http://rubygems.org/
|
3
|
-
specs:
|
4
|
-
abstract (1.0.0)
|
5
|
-
actionmailer (3.0.9)
|
6
|
-
actionpack (= 3.0.9)
|
7
|
-
mail (~> 2.2.19)
|
8
|
-
actionpack (3.0.9)
|
9
|
-
activemodel (= 3.0.9)
|
10
|
-
activesupport (= 3.0.9)
|
11
|
-
builder (~> 2.1.2)
|
12
|
-
erubis (~> 2.6.6)
|
13
|
-
i18n (~> 0.5.0)
|
14
|
-
rack (~> 1.2.1)
|
15
|
-
rack-mount (~> 0.6.14)
|
16
|
-
rack-test (~> 0.5.7)
|
17
|
-
tzinfo (~> 0.3.23)
|
18
|
-
activemodel (3.0.9)
|
19
|
-
activesupport (= 3.0.9)
|
20
|
-
builder (~> 2.1.2)
|
21
|
-
i18n (~> 0.5.0)
|
22
|
-
activerecord (3.0.9)
|
23
|
-
activemodel (= 3.0.9)
|
24
|
-
activesupport (= 3.0.9)
|
25
|
-
arel (~> 2.0.10)
|
26
|
-
tzinfo (~> 0.3.23)
|
27
|
-
activeresource (3.0.9)
|
28
|
-
activemodel (= 3.0.9)
|
29
|
-
activesupport (= 3.0.9)
|
30
|
-
activesupport (3.0.9)
|
31
|
-
arel (2.0.10)
|
32
|
-
builder (2.1.2)
|
33
|
-
erubis (2.6.6)
|
34
|
-
abstract (>= 1.0.0)
|
35
|
-
i18n (0.5.0)
|
36
|
-
mail (2.2.19)
|
37
|
-
activesupport (>= 2.3.6)
|
38
|
-
i18n (>= 0.4.0)
|
39
|
-
mime-types (~> 1.16)
|
40
|
-
treetop (~> 1.4.8)
|
41
|
-
mime-types (1.16)
|
42
|
-
mysql2 (0.2.6)
|
43
|
-
polyglot (0.3.1)
|
44
|
-
rack (1.2.3)
|
45
|
-
rack-mount (0.6.14)
|
46
|
-
rack (>= 1.0.0)
|
47
|
-
rack-test (0.5.7)
|
48
|
-
rack (>= 1.0)
|
49
|
-
rails (3.0.9)
|
50
|
-
actionmailer (= 3.0.9)
|
51
|
-
actionpack (= 3.0.9)
|
52
|
-
activerecord (= 3.0.9)
|
53
|
-
activeresource (= 3.0.9)
|
54
|
-
activesupport (= 3.0.9)
|
55
|
-
bundler (~> 1.0)
|
56
|
-
railties (= 3.0.9)
|
57
|
-
railties (3.0.9)
|
58
|
-
actionpack (= 3.0.9)
|
59
|
-
activesupport (= 3.0.9)
|
60
|
-
rake (>= 0.8.7)
|
61
|
-
rdoc (~> 3.4)
|
62
|
-
thor (~> 0.14.4)
|
63
|
-
rake (0.9.2)
|
64
|
-
rdoc (3.8)
|
65
|
-
thor (0.14.6)
|
66
|
-
treetop (1.4.9)
|
67
|
-
polyglot (>= 0.3.1)
|
68
|
-
tzinfo (0.3.29)
|
69
|
-
|
70
|
-
PLATFORMS
|
71
|
-
ruby
|
72
|
-
|
73
|
-
DEPENDENCIES
|
74
|
-
mysql2 (= 0.2.6)
|
75
|
-
rails (= 3.0.9)
|