mongodb_logger 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.
- data/.gitignore +20 -0
- data/.rvmrc +1 -0
- data/.travis.yml +17 -0
- data/Gemfile +4 -0
- data/README.md +177 -0
- data/Rakefile +110 -0
- data/SUPPORTED_RAILS_VERSIONS +13 -0
- data/TESTING.md +24 -0
- data/bin/mongodb_logger_web +24 -0
- data/config.ru +16 -0
- data/examples/server_config.yml +4 -0
- data/features/rails.feature +10 -0
- data/features/step_definitions/rails_application_steps.rb +48 -0
- data/features/support/env.rb +15 -0
- data/features/support/rails.rb +91 -0
- data/features/support/terminal.rb +94 -0
- data/lib/mongodb_logger.rb +31 -0
- data/lib/mongodb_logger/initializer_mixin.rb +26 -0
- data/lib/mongodb_logger/logger.rb +184 -0
- data/lib/mongodb_logger/railtie.rb +12 -0
- data/lib/mongodb_logger/replica_set_helper.rb +19 -0
- data/lib/mongodb_logger/server.rb +136 -0
- data/lib/mongodb_logger/server/model/filter.rb +37 -0
- data/lib/mongodb_logger/server/partials.rb +24 -0
- data/lib/mongodb_logger/server/public/images/ajax-loader.gif +0 -0
- data/lib/mongodb_logger/server/public/images/failure.png +0 -0
- data/lib/mongodb_logger/server/public/images/logo.png +0 -0
- data/lib/mongodb_logger/server/public/images/play-icon.png +0 -0
- data/lib/mongodb_logger/server/public/images/stop-icon.png +0 -0
- data/lib/mongodb_logger/server/public/images/success.png +0 -0
- data/lib/mongodb_logger/server/public/javascripts/jquery-1.7.min.js +4 -0
- data/lib/mongodb_logger/server/public/stylesheets/all.css +9 -0
- data/lib/mongodb_logger/server/public/stylesheets/grids.css +18 -0
- data/lib/mongodb_logger/server/public/stylesheets/group-buttons.css +83 -0
- data/lib/mongodb_logger/server/public/stylesheets/group-forms.css +60 -0
- data/lib/mongodb_logger/server/public/stylesheets/group-headers.css +8 -0
- data/lib/mongodb_logger/server/public/stylesheets/group-tables.css +42 -0
- data/lib/mongodb_logger/server/public/stylesheets/layout.css +168 -0
- data/lib/mongodb_logger/server/public/stylesheets/library.css +134 -0
- data/lib/mongodb_logger/server/public/stylesheets/reset.css +43 -0
- data/lib/mongodb_logger/server/public/stylesheets/spaces.css +42 -0
- data/lib/mongodb_logger/server/views/application.coffee +54 -0
- data/lib/mongodb_logger/server/views/error.erb +2 -0
- data/lib/mongodb_logger/server/views/layout.erb +32 -0
- data/lib/mongodb_logger/server/views/overview.erb +94 -0
- data/lib/mongodb_logger/server/views/shared/_log.erb +8 -0
- data/lib/mongodb_logger/server/views/shared/_log_info.erb +25 -0
- data/lib/mongodb_logger/server/views/shared/_tabs.erb +4 -0
- data/lib/mongodb_logger/server/views/show_log.erb +85 -0
- data/lib/mongodb_logger/server_config.rb +45 -0
- data/lib/mongodb_logger/version.rb +3 -0
- data/mongodb_logger.gemspec +37 -0
- data/test/active_record.rb +13 -0
- data/test/config/samples/database.yml +9 -0
- data/test/config/samples/database_no_file_logging.yml +10 -0
- data/test/config/samples/database_replica_set.yml +8 -0
- data/test/config/samples/database_with_auth.yml +9 -0
- data/test/config/samples/mongodb_logger.yml +2 -0
- data/test/config/samples/mongoid.yml +30 -0
- data/test/rails.rb +22 -0
- data/test/rails/app/controllers/order_controller.rb +20 -0
- data/test/rails/test/functional/order_controller_test.rb +56 -0
- data/test/rails/test/test_helper.rb +10 -0
- data/test/shoulda_macros/log_macros.rb +13 -0
- data/test/test.sh +4 -0
- data/test/test_helper.rb +88 -0
- data/test/unit/mongodb_logger_replica_test.rb +45 -0
- data/test/unit/mongodb_logger_test.rb +252 -0
- metadata +300 -0
data/.gitignore
ADDED
data/.rvmrc
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
rvm ruby-1.9.3-p0@mongodb_logger_gems --create
|
data/.travis.yml
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
#before_script:
|
2
|
+
# - "rake vendor_test_gems"
|
3
|
+
script: "sh -c 'test/test.sh'"
|
4
|
+
rvm:
|
5
|
+
- 1.8.7
|
6
|
+
- ree
|
7
|
+
- 1.9.2
|
8
|
+
- 1.9.3
|
9
|
+
- ruby-head
|
10
|
+
notifications:
|
11
|
+
email: false
|
12
|
+
branches:
|
13
|
+
only:
|
14
|
+
- master
|
15
|
+
- development
|
16
|
+
- gem
|
17
|
+
#bundler_args: --path vendor/bundle
|
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,177 @@
|
|
1
|
+
# MongodbLogger [](http://travis-ci.org/le0pard/mongodb_logger)
|
2
|
+
|
3
|
+
MongodbLogger is a alternative logger for Rails 3, which log all requests off you application into MongoDB database.
|
4
|
+
It:
|
5
|
+
|
6
|
+
* simple to integrate into existing Rails 3 application;
|
7
|
+
* allow to store all logs from web cluster into one scalable storage - MongoDB;
|
8
|
+
* flexible schema of MongoDB allow to store and search any information from logs;
|
9
|
+
* web panel allow filter logs, build graphs using MapReduce by information from logs;
|
10
|
+
|
11
|
+
## Installation
|
12
|
+
|
13
|
+
1. Add the following to your Gemfile then refresh your dependencies by executing "bundle install" (or just simple "bundle"):
|
14
|
+
|
15
|
+
gem "mongodb_logger"
|
16
|
+
|
17
|
+
1. Add the following line to your ApplicationController:
|
18
|
+
|
19
|
+
include MongodbLogger::Base
|
20
|
+
|
21
|
+
1. Add MongodbLogger settings to database.yml for each environment in which you want to use the MongodbLogger. The MongodbLogger will also
|
22
|
+
look for a separate mongodb\_logger.yml or mongoid.yml (if you are using mongoid) before looking in database.yml.
|
23
|
+
In the mongodb\_logger.yml and mongoid.yml case, the settings should be defined without the 'mongodb\_logger' subkey.
|
24
|
+
|
25
|
+
File: database.yml:
|
26
|
+
|
27
|
+
development:
|
28
|
+
adapter: postgresql
|
29
|
+
database: my_app_development
|
30
|
+
username: postgres
|
31
|
+
mongodb_logger:
|
32
|
+
database: my_app # required (the only required setting)
|
33
|
+
capsize: <%= 10.megabytes %> # default: 250MB
|
34
|
+
host: localhost # default: localhost
|
35
|
+
port: 27017 # default: 27017
|
36
|
+
replica_set: true # default: false - Adds retries for ConnectionFailure during voting for replica set master
|
37
|
+
safe_insert: false # default: false - Enable/Disable safe inserts (wait for insert to propagate to all nodes)
|
38
|
+
application_name: my_app # default: Rails.application
|
39
|
+
disable_file_logging: false # default: false - disable logging into filesystem (only in MongoDB)
|
40
|
+
collection: some_name # default: Rails.env + "_log" - name of MongoDB collection
|
41
|
+
|
42
|
+
File: mongodb\_logger.yml:
|
43
|
+
|
44
|
+
development:
|
45
|
+
database: my_app
|
46
|
+
capsize: <%= 10.megabytes %>
|
47
|
+
host: localhost
|
48
|
+
port: 27017
|
49
|
+
replica_set: true
|
50
|
+
|
51
|
+
|
52
|
+
## Usage
|
53
|
+
|
54
|
+
After success instalation of gem, a new MongoDB document (record) will be created for each request on your application,
|
55
|
+
by default will record the following information: Runtime, IP Address, Request Time, Controller, Method,
|
56
|
+
Action, Params, Application Name and All messages sent to the logger. The structure of the MongoDB document looks like this:
|
57
|
+
|
58
|
+
{
|
59
|
+
'action' : action_name,
|
60
|
+
'application_name' : application_name (rails root),
|
61
|
+
'controller' : controller_name,
|
62
|
+
'ip' : ip_address,
|
63
|
+
'messages' : {
|
64
|
+
'info' : [ ],
|
65
|
+
'debug' : [ ],
|
66
|
+
'error' : [ ],
|
67
|
+
'warn' : [ ],
|
68
|
+
'fatal' : [ ]
|
69
|
+
},
|
70
|
+
'params' : { },
|
71
|
+
'path' : path,
|
72
|
+
'request_time' : date_of_request,
|
73
|
+
'runtime' : elapsed_execution_time_in_milliseconds,
|
74
|
+
'url' : full_url,
|
75
|
+
'method' : request method (GET, POST, PUT, DELETE, OPTIONS)
|
76
|
+
}
|
77
|
+
|
78
|
+
Beyond that, if you want to add extra information to the base of the document (let's say something like user\_id on every request that it's available),
|
79
|
+
you can just call the Rails.logger.add\_metadata method on your logger like so (for example from a before\_filter):
|
80
|
+
|
81
|
+
# make sure we're using the MongodbLogger in this environment
|
82
|
+
if Rails.logger.respond_to?(:add_metadata)
|
83
|
+
Rails.logger.add_metadata(:user_id => @current_user.id)
|
84
|
+
end
|
85
|
+
|
86
|
+
|
87
|
+
## The Front End
|
88
|
+
To setup web interface in you Rails application, first of all create autoload file in you Rails application
|
89
|
+
|
90
|
+
File: you\_rails\_app/config/initializers/mongodb\_logger.rb (example)
|
91
|
+
|
92
|
+
require 'mongodb_logger/server' # required
|
93
|
+
# this secure you web interface by basic auth, but you can skip this, if you no need this
|
94
|
+
MongodbLogger::Server.use Rack::Auth::Basic do |username, password|
|
95
|
+
[username, password] == ['admin', 'password']
|
96
|
+
end
|
97
|
+
|
98
|
+
and just mount MongodbLogger::Server in rails routes:
|
99
|
+
|
100
|
+
File: you\_rails\_app/config/routes.rb
|
101
|
+
|
102
|
+
mount MongodbLogger::Server.new, :at => "/mongodb"
|
103
|
+
|
104
|
+
Now you can see web interface by url "http://localhost:3000/mongodb"
|
105
|
+
|
106
|
+
If you've installed Resque as a gem and want running the front end without Rails application, you can do it by this command:
|
107
|
+
|
108
|
+
mongodb_logger_web config.yml
|
109
|
+
|
110
|
+
where config.yml is config, similar to config of Rails apps, but without Rails.env. Example:
|
111
|
+
|
112
|
+
database: app_logs_dev
|
113
|
+
host: localhost
|
114
|
+
port: 27017
|
115
|
+
collection: development_log # set for see development logs
|
116
|
+
|
117
|
+
parameter "collection" should be set, if your set custom for your Rails application or start this front end not for production
|
118
|
+
enviroment (by default taken "production\_log" collection, in Rails application gem generate "#{Rails.env}\_log" collection,
|
119
|
+
if it is not defined in config).
|
120
|
+
|
121
|
+
It's a thin layer around rackup so it's configurable as well:
|
122
|
+
|
123
|
+
mongodb_logger_web config.yml -p 8282
|
124
|
+
|
125
|
+
### Passenger
|
126
|
+
|
127
|
+
Using Passenger? MongodbLogger ships with a `config.ru` you can use. See Phusion's guide:
|
128
|
+
|
129
|
+
* Apache: <http://www.modrails.com/documentation/Users%20guide%20Apache.html#_deploying_a_rack_based_ruby_application>
|
130
|
+
* Nginx: <http://www.modrails.com/documentation/Users%20guide%20Nginx.html#deploying_a_rack_app>
|
131
|
+
|
132
|
+
Don't forget setup MONGODBLOGGERCONFIG env variable, which provide information about MongodbLogger config. Example starting with unicorn:
|
133
|
+
|
134
|
+
MONGODBLOGGERCONFIG=examples/server_config.yml unicorn
|
135
|
+
|
136
|
+
## Querying via the Rails console
|
137
|
+
|
138
|
+
And now, for a couple quick examples on getting ahold of this log data...
|
139
|
+
First, here's how to get a handle on the MongoDB from within a Rails console:
|
140
|
+
|
141
|
+
>> db = Rails.logger.mongo_connection
|
142
|
+
=> #<Mongo::DB:0x007fdc7c65adc8 @name="monkey_logs_dev" ... >
|
143
|
+
|
144
|
+
>> collection = db[Rails.logger.mongo_collection_name]
|
145
|
+
=> #<Mongo::Collection:0x007fdc7a4d12b0 @name="development_log" .. >
|
146
|
+
|
147
|
+
Once you've got the collection, you can find all requests for a specific user (with id):
|
148
|
+
|
149
|
+
>> cursor = collection.find(:user_id => '12355')
|
150
|
+
=> #<Mongo::Cursor:0x1031a3e30 ... >
|
151
|
+
>> cursor.count
|
152
|
+
=> 5
|
153
|
+
|
154
|
+
Find all requests that took more that one second to complete:
|
155
|
+
|
156
|
+
>> collection.find({:runtime => {'$gt' => 1000}}).count
|
157
|
+
=> 3
|
158
|
+
|
159
|
+
Find all order#show requests with a particular order id (id=order\_id):
|
160
|
+
|
161
|
+
>> collection.find({"controller" => "order", "action"=> "show", "params.id" => order_id})
|
162
|
+
|
163
|
+
Find all requests with an exception that contains "RoutingError" in the message or stack trace:
|
164
|
+
|
165
|
+
>> collection.find({"messages.error" => /RoutingError/})
|
166
|
+
|
167
|
+
Find all requests with errors:
|
168
|
+
|
169
|
+
>> collection.find({"is_exception" => true})
|
170
|
+
|
171
|
+
Find all requests with a request\_date greater than '11/18/2010 22:59:52 GMT'
|
172
|
+
|
173
|
+
>> collection.find({:request_time => {'$gt' => Time.utc(2010, 11, 18, 22, 59, 52)}})
|
174
|
+
|
175
|
+
|
176
|
+
|
177
|
+
Copyright (c) 2009-2011 Phil Burrows, CustomInk and Leopard released under the MIT license
|
data/Rakefile
ADDED
@@ -0,0 +1,110 @@
|
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
require 'rake'
|
3
|
+
require 'rake/testtask'
|
4
|
+
begin
|
5
|
+
require 'cucumber/rake/task'
|
6
|
+
rescue LoadError
|
7
|
+
$stderr.puts "Please install cucumber: `gem install cucumber`"
|
8
|
+
exit 1
|
9
|
+
end
|
10
|
+
|
11
|
+
require "bundler/gem_tasks"
|
12
|
+
|
13
|
+
|
14
|
+
desc 'Default: run unit tests.'
|
15
|
+
task :default => [:test]
|
16
|
+
#task :default => [:test, "cucumber:rails:all"]
|
17
|
+
|
18
|
+
desc "Clean out the tmp directory"
|
19
|
+
task :clean do
|
20
|
+
exec "rm -rf tmp"
|
21
|
+
end
|
22
|
+
|
23
|
+
desc 'Test the airbrake gem.'
|
24
|
+
Rake::TestTask.new(:test) do |test|
|
25
|
+
test.libs << 'lib' << 'test'
|
26
|
+
test.pattern = 'test/unit/mongodb_logger_test.rb'
|
27
|
+
test.verbose = true
|
28
|
+
end
|
29
|
+
|
30
|
+
namespace :test do
|
31
|
+
|
32
|
+
desc "Run replica set tests (not for CI)"
|
33
|
+
Rake::TestTask.new(:replica_set) do |test|
|
34
|
+
test.libs << 'lib' << 'test'
|
35
|
+
test.pattern = 'test/unit/mongodb_logger_replica_test.rb'
|
36
|
+
test.verbose = true
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
|
42
|
+
GEM_ROOT = File.dirname(__FILE__).freeze
|
43
|
+
LOCAL_GEM_ROOT = File.join(GEM_ROOT, 'tmp', 'local_gems').freeze
|
44
|
+
RAILS_VERSIONS = IO.read('SUPPORTED_RAILS_VERSIONS').strip.split("\n")
|
45
|
+
LOCAL_GEMS = [['sqlite3', nil], ['shoulda', nil], ["rspec", nil], ["mocha", nil], ["cucumber", nil], ["bundler", "1.0.21"]] +
|
46
|
+
RAILS_VERSIONS.collect { |version| ['rails', version] }
|
47
|
+
|
48
|
+
desc "Vendor test gems: Run this once to prepare your test environment"
|
49
|
+
task :vendor_test_gems do
|
50
|
+
old_gem_path = ENV['GEM_PATH']
|
51
|
+
old_gem_home = ENV['GEM_HOME']
|
52
|
+
ENV['GEM_PATH'] = LOCAL_GEM_ROOT
|
53
|
+
ENV['GEM_HOME'] = LOCAL_GEM_ROOT
|
54
|
+
LOCAL_GEMS.each do |gem_name, version|
|
55
|
+
gem_file_pattern = [gem_name, version || '*'].compact.join('-')
|
56
|
+
version_option = version ? "-v #{version}" : ''
|
57
|
+
pattern = File.join(LOCAL_GEM_ROOT, 'gems', "#{gem_file_pattern}")
|
58
|
+
existing = Dir.glob(pattern).first
|
59
|
+
unless existing
|
60
|
+
command = "gem install -i #{LOCAL_GEM_ROOT} --no-ri --no-rdoc --backtrace #{version_option} #{gem_name}"
|
61
|
+
puts "Vendoring #{gem_file_pattern}..."
|
62
|
+
unless system("#{command} 2>&1")
|
63
|
+
puts "Command failed: #{command}"
|
64
|
+
exit(1)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
ENV['GEM_PATH'] = old_gem_path
|
69
|
+
ENV['GEM_HOME'] = old_gem_home
|
70
|
+
end
|
71
|
+
|
72
|
+
Cucumber::Rake::Task.new(:cucumber) do |t|
|
73
|
+
t.fork = true
|
74
|
+
t.cucumber_opts = ['--format', (ENV['CUCUMBER_FORMAT'] || 'progress')]
|
75
|
+
end
|
76
|
+
|
77
|
+
task :cucumber => [:vendor_test_gems]
|
78
|
+
|
79
|
+
def run_rails_cucumbr_task(version, additional_cucumber_args)
|
80
|
+
puts "Testing Rails #{version}"
|
81
|
+
if version.empty?
|
82
|
+
raise "No Rails version specified - make sure ENV['RAILS_VERSION'] is set, e.g. with `rake cucumber:rails:all`"
|
83
|
+
end
|
84
|
+
ENV['RAILS_VERSION'] = version
|
85
|
+
system("cucumber --format #{ENV['CUCUMBER_FORMAT'] || 'progress'} #{additional_cucumber_args} features/rails.feature")
|
86
|
+
end
|
87
|
+
|
88
|
+
def define_rails_cucumber_tasks(additional_cucumber_args = '')
|
89
|
+
namespace :rails do
|
90
|
+
RAILS_VERSIONS.each do |version|
|
91
|
+
desc "Test integration of the gem with Rails #{version}"
|
92
|
+
task version => [:vendor_test_gems] do
|
93
|
+
exit 1 unless run_rails_cucumbr_task(version, additional_cucumber_args)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
desc "Test integration of the gem with all Rails versions"
|
98
|
+
task :all do
|
99
|
+
results = RAILS_VERSIONS.map do |version|
|
100
|
+
run_rails_cucumbr_task(version, additional_cucumber_args)
|
101
|
+
end
|
102
|
+
|
103
|
+
exit 1 unless results.all?
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
namespace :cucumber do
|
109
|
+
define_rails_cucumber_tasks
|
110
|
+
end
|
data/TESTING.md
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
Running the suite
|
2
|
+
=================
|
3
|
+
|
4
|
+
Since the logger must run on many versions of Rails, running its test suite is slightly different than you may be used to.
|
5
|
+
|
6
|
+
First execute the following command:
|
7
|
+
|
8
|
+
rake vendor_test_gems
|
9
|
+
# NOT: bundle exec rake vendor_test_gems
|
10
|
+
|
11
|
+
This command will download the various versions of Rails that the notifier must be tested against.
|
12
|
+
|
13
|
+
Then, to start the suite, run
|
14
|
+
|
15
|
+
rake cucumber:rails:all
|
16
|
+
|
17
|
+
Note: do NOT use 'bundle exec rake cucumber:rails:all'.
|
18
|
+
|
19
|
+
For help created file test/test.sh, which run all this testing steps + unit tests. Run this file from root of gem:
|
20
|
+
|
21
|
+
./test/test.sh
|
22
|
+
|
23
|
+
Versions of testing Rails you can see in file "SUPPORTED_RAILS_VERSIONS". If some tests is faild, you can see
|
24
|
+
more information about fallen tests in file "tmp/terminal.log".
|
@@ -0,0 +1,24 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../lib')
|
4
|
+
begin
|
5
|
+
require 'vegas'
|
6
|
+
rescue LoadError
|
7
|
+
require 'rubygems'
|
8
|
+
require 'vegas'
|
9
|
+
end
|
10
|
+
require 'mongodb_logger/server'
|
11
|
+
|
12
|
+
|
13
|
+
Vegas::Runner.new(MongodbLogger::Server, 'mongodb_logger_web', {
|
14
|
+
:before_run => lambda {|v|
|
15
|
+
config_file = (ENV['MONGODBLOGGERCONFIG'] || v.args.first)
|
16
|
+
if config_file
|
17
|
+
MongodbLogger::ServerConfig.set_config(config_file)
|
18
|
+
else
|
19
|
+
raise ArgumentError, "please provide config file"
|
20
|
+
end
|
21
|
+
}
|
22
|
+
}) do |runner, opts, app|
|
23
|
+
#
|
24
|
+
end
|
data/config.ru
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'logger'
|
3
|
+
|
4
|
+
$LOAD_PATH.unshift ::File.expand_path(::File.dirname(__FILE__) + '/lib')
|
5
|
+
require 'mongodb_logger/server'
|
6
|
+
|
7
|
+
# Set the RESQUECONFIG env variable if you've a `resque.rb` or similar
|
8
|
+
# config file you want loaded on boot.
|
9
|
+
if ENV['MONGODBLOGGERCONFIG'] && ::File.exists?(::File.expand_path(ENV['MONGODBLOGGERCONFIG']))
|
10
|
+
MongodbLogger::ServerConfig.set_config(::File.expand_path(ENV['MONGODBLOGGERCONFIG']))
|
11
|
+
else
|
12
|
+
raise "Please provide config file"
|
13
|
+
end
|
14
|
+
|
15
|
+
use Rack::ShowExceptions
|
16
|
+
run MongodbLogger::Server.new
|
@@ -0,0 +1,10 @@
|
|
1
|
+
Feature: Install the Gem in a Rails application and test it
|
2
|
+
|
3
|
+
Background:
|
4
|
+
Given I have built and installed the "mongodb_logger" gem
|
5
|
+
|
6
|
+
Scenario: Use the gem without vendoring the gem in a Rails application
|
7
|
+
When I generate a new Rails application
|
8
|
+
And I configure my application to require the "mongodb_logger" gem
|
9
|
+
And I setup mongodb_logger tests
|
10
|
+
Then the tests should have run successfully
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'active_support/core_ext/string/inflections'
|
2
|
+
|
3
|
+
Given /^I have built and installed the "([^\"]*)" gem$/ do |gem_name|
|
4
|
+
@terminal.build_and_install_gem(File.join(PROJECT_ROOT, "#{gem_name}.gemspec"))
|
5
|
+
end
|
6
|
+
|
7
|
+
When /^I generate a new Rails application$/ do
|
8
|
+
@terminal.cd(TEMP_DIR)
|
9
|
+
version_string = ENV['RAILS_VERSION']
|
10
|
+
rails_create_command = 'new'
|
11
|
+
|
12
|
+
load_rails = <<-RUBY
|
13
|
+
gem "rails", "#{version_string}"; \
|
14
|
+
load Gem.bin_path("rails", "rails", "#{version_string}")
|
15
|
+
RUBY
|
16
|
+
|
17
|
+
@terminal.run(%{ruby -rrubygems -rthread -e "#{load_rails.gsub("\"", "\\\"").strip!}" #{rails_create_command} rails_root})
|
18
|
+
if rails_root_exists?
|
19
|
+
@terminal.echo("Generated a Rails #{version_string} application")
|
20
|
+
else
|
21
|
+
raise "Unable to generate a Rails application:\n#{@terminal.output}"
|
22
|
+
end
|
23
|
+
require_thread if rails30?
|
24
|
+
end
|
25
|
+
|
26
|
+
When /^I configure my application to require the "([^\"]*)" gem(?: with version "(.+)")?$/ do |gem_name, version|
|
27
|
+
bundle_gem(gem_name, version)
|
28
|
+
end
|
29
|
+
|
30
|
+
When /^I setup mongodb_logger tests$/ do
|
31
|
+
copy_tests
|
32
|
+
add_routes
|
33
|
+
end
|
34
|
+
|
35
|
+
Then /^the tests should have run successfully$/ do
|
36
|
+
bundle_gem("therubyracer", nil) if rails31?
|
37
|
+
step %{I run "bundle install"}
|
38
|
+
@terminal.status.exitstatus.should == 0
|
39
|
+
step %{I run "rake db:create db:migrate RAILS_ENV=test --trace"}
|
40
|
+
@terminal.status.exitstatus.should == 0
|
41
|
+
step %{I run "rake test RAILS_ENV=test --trace"}
|
42
|
+
@terminal.status.exitstatus.should == 0
|
43
|
+
end
|
44
|
+
|
45
|
+
When /^I run "([^\"]*)"$/ do |command|
|
46
|
+
@terminal.cd(rails_root)
|
47
|
+
@terminal.run(command)
|
48
|
+
end
|