diff --git a/Gemfile.lock b/Gemfile.lock index f78655c..6fc0563 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - resque-async-method (1.0.1) + resque-async-method (1.1) activesupport resque diff --git a/README.md b/README.md index 26ce0ff..8b0437d 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,13 @@ Usage # do stuff end async_method :send_a_very_long_email, queue: 'emails' + + # And for class methods + def User.send_all_emails + # do stuff + end + + async_class_method :send_all_emails, queue: "emails" end u = User.find(1) diff --git a/lib/resque-async-method.rb b/lib/resque-async-method.rb index dd3095b..2e5a312 100644 --- a/lib/resque-async-method.rb +++ b/lib/resque-async-method.rb @@ -5,6 +5,7 @@ module Plugins module Async autoload :Method, 'resque/plugins/async/method' autoload :Worker, 'resque/plugins/async/worker' + autoload :ClassWorker, 'resque/plugins/async/class_worker' end end end diff --git a/lib/resque/plugins/async/class_worker.rb b/lib/resque/plugins/async/class_worker.rb new file mode 100644 index 0000000..c3dbdd7 --- /dev/null +++ b/lib/resque/plugins/async/class_worker.rb @@ -0,0 +1,22 @@ +class Resque::Plugins::Async::ClassWorker + @queue = :async_class_methods + + def self.queue=(name) + @queue = name + end + + def self.queue + @queue + end + + def self.perform(klass, *args) + arguments = args.map { |arg| + if arg.is_a?(Hash) && arg.has_key?("_obj_class_name") && arg.has_key?("_obj_id") + arg["_obj_class_name"].constantize.find(arg["_obj_id"]) + else + arg + end + } + klass.constantize.send(arguments.shift, *arguments) + end +end \ No newline at end of file diff --git a/lib/resque/plugins/async/method.rb b/lib/resque/plugins/async/method.rb index e5eb63e..c58e68d 100644 --- a/lib/resque/plugins/async/method.rb +++ b/lib/resque/plugins/async/method.rb @@ -6,6 +6,41 @@ module Resque::Plugins::Async::Method class NotPersistedError < StandardError; end module ClassMethods + + def async_class_method(method_name, opts={}) + # Allow tests to call sync_ methods ... + + eval(%Q{ + class << self + alias_method :sync_#{method_name}, :#{method_name} + end}) + + # ... but don't actually make them asynchronous + # return if Rails.env.test? + define_singleton_method "#{method_name}" do |*args| + + my_klass = Resque::Plugins::Async::ClassWorker + my_klass.queue = opts[:queue] || + send(:class).name.underscore.pluralize + + # Convert AR::Base params to hash directive, restored in Worker and ClassWorker + *args = *args.map do |arg| + if arg.kind_of?(ActiveRecord::Base) + {"_obj_class_name" => arg.class.name, "_obj_id" => arg.id} + else + arg + end + end + + Resque.enqueue( + my_klass, + self.name, + :"sync_#{method_name}", + *args + ) + end + end + def async_method(method_name, opts={}) # Allow tests to call sync_ methods ... alias_method :"sync_#{method_name}", method_name @@ -20,6 +55,14 @@ def async_method(method_name, opts={}) my_klass.queue = opts[:queue] || send(:class).name.underscore.pluralize + *args = *args.map do |arg| + if arg.kind_of?(ActiveRecord::Base) + {"_obj_class_name" => arg.class.name, "_obj_id" => arg.id} + else + arg + end + end + Resque.enqueue( my_klass, send(:class).name, diff --git a/lib/resque/plugins/async/worker.rb b/lib/resque/plugins/async/worker.rb index 9f1fc38..45e6f47 100644 --- a/lib/resque/plugins/async/worker.rb +++ b/lib/resque/plugins/async/worker.rb @@ -10,6 +10,13 @@ def self.queue end def self.perform(klass, *args) - klass.constantize.find(args.shift).send(args.shift, *args) + arguments = args.map { |arg| + if arg.is_a?(Hash) && arg.has_key?("_obj_class_name") && arg.has_key?("_obj_id") + arg["_obj_class_name"].constantize.find(arg["_obj_id"]) + else + arg + end + } + klass.constantize.find(arguments.shift).send(arguments.shift, *arguments) end end \ No newline at end of file diff --git a/test/async_method_test.rb b/test/async_method_test.rb index c7a5a48..a25277f 100644 --- a/test/async_method_test.rb +++ b/test/async_method_test.rb @@ -16,6 +16,24 @@ class AsyncMethodTest < ActiveSupport::TestCase assert_equal 'success!', user.sync_long_method end + test "enqueue class jobs" do + assert_equal true, User.class_method_is_awesome + assert_equal "success!", User.sync_class_method_is_awesome + end + + test "enqueue class jobs with params" do + assert_equal true, User.class_methods_with_awesome_vars(1,2) + assert_equal 3, User.sync_class_methods_with_awesome_vars(1,2) + end + + test "enqueue method with object parameters" do + user1 = User.first + user2 = User.last + + assert_equal true, user1.kiss(user2) + assert_equal "#{user1.name} kissed #{user2.name}", user1.sync_kiss(user2) + end + test "raise error if not persisted" do user = User.new diff --git a/test/dummy/app/models/user.rb b/test/dummy/app/models/user.rb index e9462cc..d8b340b 100644 --- a/test/dummy/app/models/user.rb +++ b/test/dummy/app/models/user.rb @@ -1,9 +1,23 @@ class User < ActiveRecord::Base + + def User.class_method_is_awesome + return "success!" + end + + async_class_method :class_method_is_awesome + + def User.class_methods_with_awesome_vars(num1, num2) + return num1.to_i + num2.to_i + end + + async_class_method :class_methods_with_awesome_vars + def long_method sleep 2 return "success!" end + async_method :long_method, queue: 'long-methods' def another_long_method @@ -12,4 +26,10 @@ def another_long_method return "success!" end async_method :another_long_method + + def kiss(other_user) + return "#{self.name} kissed #{other_user.name}" + end + + async_method :kiss end diff --git a/test/dummy/db/test.sqlite3 b/test/dummy/db/test.sqlite3 index 7a4b3f0..6773515 100644 Binary files a/test/dummy/db/test.sqlite3 and b/test/dummy/db/test.sqlite3 differ diff --git a/test/dummy/log/async_testing.log b/test/dummy/log/async_testing.log index ee9a5e7..9aff562 100644 --- a/test/dummy/log/async_testing.log +++ b/test/dummy/log/async_testing.log @@ -76,3 +76,376 @@  (0.1ms) rollback transaction  (0.0ms) begin transaction  (0.1ms) rollback transaction +  (0.5ms) begin transaction + Fixture Delete (0.7ms) DELETE FROM "users" + Fixture Insert (0.2ms) INSERT INTO "users" ("name", "email", "born_on", "locked_at", "created_at", "updated_at", "id") VALUES ('John Doe', 'john.doe@johndoe.com', '1984-09-17', '2011-06-13 22:01:13.000000', '2012-12-25 11:11:41', '2012-12-25 11:11:41', 980190962) +  (1.8ms) commit transaction +  (0.1ms) begin transaction +  (0.1ms) rollback transaction +  (0.0ms) begin transaction +  (0.0ms) rollback transaction +  (0.0ms) begin transaction + User Load (0.3ms) SELECT "users".* FROM "users" LIMIT 1 + User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 980190962]] +  (0.3ms) rollback transaction +  (0.0ms) begin transaction +  (0.0ms) rollback transaction +  (0.0ms) begin transaction +  (0.0ms) rollback transaction +  (0.5ms) begin transaction + Fixture Delete (0.3ms) DELETE FROM "users" + Fixture Insert (0.1ms) INSERT INTO "users" ("name", "email", "born_on", "locked_at", "created_at", "updated_at", "id") VALUES ('John Doe', 'john.doe@johndoe.com', '1984-09-17', '2011-06-13 22:01:13.000000', '2012-12-25 11:11:57', '2012-12-25 11:11:57', 980190962) +  (2.7ms) commit transaction +  (0.1ms) begin transaction +  (0.1ms) rollback transaction +  (0.1ms) begin transaction +  (0.0ms) rollback transaction +  (0.0ms) begin transaction + User Load (0.2ms) SELECT "users".* FROM "users" LIMIT 1 + User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 980190962]] +  (0.1ms) rollback transaction +  (0.1ms) begin transaction +  (0.0ms) rollback transaction +  (0.0ms) begin transaction +  (0.0ms) rollback transaction +  (0.4ms) begin transaction + Fixture Delete (0.4ms) DELETE FROM "users" + Fixture Insert (0.2ms) INSERT INTO "users" ("name", "email", "born_on", "locked_at", "created_at", "updated_at", "id") VALUES ('John Doe', 'john.doe@johndoe.com', '1984-09-17', '2011-06-13 22:01:13.000000', '2012-12-25 11:32:56', '2012-12-25 11:32:56', 980190962) +  (2.8ms) commit transaction +  (0.1ms) begin transaction +  (0.1ms) rollback transaction +  (0.1ms) begin transaction +  (0.0ms) rollback transaction +  (0.1ms) begin transaction + User Load (0.2ms) SELECT "users".* FROM "users" LIMIT 1 + User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 980190962]] +  (0.1ms) rollback transaction +  (0.1ms) begin transaction +  (0.0ms) rollback transaction +  (0.1ms) begin transaction +  (0.0ms) rollback transaction +  (0.4ms) begin transaction + Fixture Delete (0.3ms) DELETE FROM "users" + Fixture Insert (0.1ms) INSERT INTO "users" ("name", "email", "born_on", "locked_at", "created_at", "updated_at", "id") VALUES ('John Doe', 'john.doe@johndoe.com', '1984-09-17', '2011-06-13 22:01:13.000000', '2012-12-25 11:33:51', '2012-12-25 11:33:51', 980190962) +  (3.4ms) commit transaction +  (0.1ms) begin transaction +  (0.1ms) rollback transaction +  (0.0ms) begin transaction +  (0.0ms) rollback transaction +  (0.0ms) begin transaction + User Load (0.2ms) SELECT "users".* FROM "users" LIMIT 1 + User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 980190962]] +  (0.3ms) rollback transaction +  (0.0ms) begin transaction +  (0.0ms) rollback transaction +  (0.1ms) begin transaction +  (0.0ms) rollback transaction +  (0.4ms) begin transaction + Fixture Delete (0.3ms) DELETE FROM "users" + Fixture Insert (0.1ms) INSERT INTO "users" ("name", "email", "born_on", "locked_at", "created_at", "updated_at", "id") VALUES ('John Doe', 'john.doe@johndoe.com', '1984-09-17', '2011-06-13 22:01:13.000000', '2012-12-25 11:34:10', '2012-12-25 11:34:10', 980190962) +  (1.9ms) commit transaction +  (0.1ms) begin transaction +  (0.1ms) rollback transaction +  (0.0ms) begin transaction +  (0.0ms) rollback transaction +  (0.0ms) begin transaction + User Load (0.2ms) SELECT "users".* FROM "users" LIMIT 1 + User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 980190962]] +  (0.3ms) rollback transaction +  (0.0ms) begin transaction +  (0.0ms) rollback transaction +  (0.0ms) begin transaction +  (0.0ms) rollback transaction +  (0.5ms) begin transaction + Fixture Delete (0.3ms) DELETE FROM "users" + Fixture Insert (0.2ms) INSERT INTO "users" ("name", "email", "born_on", "locked_at", "created_at", "updated_at", "id") VALUES ('John Doe', 'john.doe@johndoe.com', '1984-09-17', '2011-06-13 22:01:13.000000', '2012-12-25 11:39:04', '2012-12-25 11:39:04', 980190962) +  (3.3ms) commit transaction +  (0.1ms) begin transaction +  (0.1ms) rollback transaction +  (0.2ms) begin transaction +  (0.0ms) rollback transaction +  (0.1ms) begin transaction + User Load (0.2ms) SELECT "users".* FROM "users" LIMIT 1 + User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 980190962]] +  (0.3ms) rollback transaction +  (0.1ms) begin transaction +  (0.0ms) rollback transaction +  (0.0ms) begin transaction +  (0.0ms) rollback transaction +  (0.4ms) begin transaction + Fixture Delete (0.3ms) DELETE FROM "users" + Fixture Insert (0.2ms) INSERT INTO "users" ("name", "email", "born_on", "locked_at", "created_at", "updated_at", "id") VALUES ('John Doe', 'john.doe@johndoe.com', '1984-09-17', '2011-06-13 22:01:13.000000', '2012-12-25 11:39:29', '2012-12-25 11:39:29', 980190962) +  (3.4ms) commit transaction +  (0.0ms) begin transaction +  (0.1ms) rollback transaction +  (0.0ms) begin transaction +  (0.0ms) rollback transaction +  (0.0ms) begin transaction + User Load (0.2ms) SELECT "users".* FROM "users" LIMIT 1 + User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 980190962]] +  (0.2ms) rollback transaction +  (0.1ms) begin transaction +  (0.0ms) rollback transaction +  (0.0ms) begin transaction +  (0.0ms) rollback transaction +  (0.4ms) begin transaction + Fixture Delete (0.4ms) DELETE FROM "users" + Fixture Insert (0.2ms) INSERT INTO "users" ("name", "email", "born_on", "locked_at", "created_at", "updated_at", "id") VALUES ('John Doe', 'john.doe@johndoe.com', '1984-09-17', '2011-06-13 22:01:13.000000', '2012-12-25 11:40:18', '2012-12-25 11:40:18', 980190962) +  (3.2ms) commit transaction +  (0.0ms) begin transaction +  (0.1ms) rollback transaction +  (0.2ms) begin transaction +  (0.0ms) rollback transaction +  (0.0ms) begin transaction + User Load (0.2ms) SELECT "users".* FROM "users" LIMIT 1 + User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 980190962]] +  (0.1ms) rollback transaction +  (0.0ms) begin transaction +  (0.0ms) rollback transaction +  (0.0ms) begin transaction +  (0.0ms) rollback transaction +  (0.4ms) begin transaction + Fixture Delete (0.3ms) DELETE FROM "users" + Fixture Insert (0.2ms) INSERT INTO "users" ("name", "email", "born_on", "locked_at", "created_at", "updated_at", "id") VALUES ('John Doe', 'john.doe@johndoe.com', '1984-09-17', '2011-06-13 22:01:13.000000', '2012-12-25 11:40:52', '2012-12-25 11:40:52', 980190962) +  (3.5ms) commit transaction +  (0.1ms) begin transaction +  (0.1ms) rollback transaction +  (0.1ms) begin transaction +  (0.0ms) rollback transaction +  (0.0ms) begin transaction + User Load (0.2ms) SELECT "users".* FROM "users" LIMIT 1 + User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 980190962]] +  (0.3ms) rollback transaction +  (0.1ms) begin transaction +  (0.0ms) rollback transaction +  (0.0ms) begin transaction +  (0.0ms) rollback transaction +  (0.4ms) begin transaction + Fixture Delete (0.3ms) DELETE FROM "users" + Fixture Insert (0.1ms) INSERT INTO "users" ("name", "email", "born_on", "locked_at", "created_at", "updated_at", "id") VALUES ('John Doe', 'john.doe@johndoe.com', '1984-09-17', '2011-06-13 22:01:13.000000', '2012-12-25 11:42:59', '2012-12-25 11:42:59', 980190962) +  (3.3ms) commit transaction +  (0.0ms) begin transaction +  (0.1ms) rollback transaction +  (0.1ms) begin transaction +  (0.0ms) rollback transaction +  (0.1ms) begin transaction + User Load (0.2ms) SELECT "users".* FROM "users" LIMIT 1 + User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 980190962]] +  (0.3ms) rollback transaction +  (0.1ms) begin transaction +  (0.0ms) rollback transaction +  (0.0ms) begin transaction +  (0.0ms) rollback transaction +  (0.5ms) begin transaction + Fixture Delete (0.3ms) DELETE FROM "users" + Fixture Insert (0.1ms) INSERT INTO "users" ("name", "email", "born_on", "locked_at", "created_at", "updated_at", "id") VALUES ('John Doe', 'john.doe@johndoe.com', '1984-09-17', '2011-06-13 22:01:13.000000', '2012-12-25 11:43:16', '2012-12-25 11:43:16', 980190962) +  (3.4ms) commit transaction +  (0.0ms) begin transaction +  (0.1ms) rollback transaction +  (0.0ms) begin transaction +  (0.0ms) rollback transaction +  (0.0ms) begin transaction + User Load (0.2ms) SELECT "users".* FROM "users" LIMIT 1 + User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 980190962]] +  (0.1ms) rollback transaction +  (0.0ms) begin transaction +  (0.0ms) rollback transaction +  (0.0ms) begin transaction +  (0.0ms) rollback transaction +  (0.4ms) begin transaction + Fixture Delete (0.3ms) DELETE FROM "users" + Fixture Insert (0.1ms) INSERT INTO "users" ("name", "email", "born_on", "locked_at", "created_at", "updated_at", "id") VALUES ('John Doe', 'john.doe@johndoe.com', '1984-09-17', '2011-06-13 22:01:13.000000', '2012-12-25 11:43:54', '2012-12-25 11:43:54', 980190962) +  (3.6ms) commit transaction +  (0.1ms) begin transaction +  (0.1ms) rollback transaction +  (0.1ms) begin transaction +  (0.0ms) rollback transaction +  (0.0ms) begin transaction + User Load (0.2ms) SELECT "users".* FROM "users" LIMIT 1 + User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 980190962]] +  (0.3ms) rollback transaction +  (0.1ms) begin transaction +  (0.0ms) rollback transaction +  (0.0ms) begin transaction +  (0.0ms) rollback transaction +  (0.4ms) begin transaction + Fixture Delete (0.3ms) DELETE FROM "users" + Fixture Insert (0.1ms) INSERT INTO "users" ("name", "email", "born_on", "locked_at", "created_at", "updated_at", "id") VALUES ('John Doe', 'john.doe@johndoe.com', '1984-09-17', '2011-06-13 22:01:13.000000', '2012-12-25 11:49:50', '2012-12-25 11:49:50', 980190962) +  (2.5ms) commit transaction +  (0.0ms) begin transaction +  (0.1ms) rollback transaction +  (0.0ms) begin transaction +  (0.0ms) rollback transaction +  (0.0ms) begin transaction +  (0.0ms) rollback transaction +  (0.0ms) begin transaction + User Load (0.2ms) SELECT "users".* FROM "users" LIMIT 1 + User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 980190962]] +  (0.2ms) rollback transaction +  (0.0ms) begin transaction +  (0.0ms) rollback transaction +  (0.1ms) begin transaction +  (0.0ms) rollback transaction +  (0.5ms) begin transaction + Fixture Delete (0.3ms) DELETE FROM "users" + Fixture Insert (0.2ms) INSERT INTO "users" ("name", "email", "born_on", "locked_at", "created_at", "updated_at", "id") VALUES ('John Doe', 'john.doe@johndoe.com', '1984-09-17', '2011-06-13 22:01:13.000000', '2012-12-25 14:08:16', '2012-12-25 14:08:16', 980190962) +  (2.4ms) commit transaction +  (0.0ms) begin transaction +  (0.1ms) rollback transaction +  (0.0ms) begin transaction +  (0.0ms) rollback transaction +  (0.0ms) begin transaction +  (0.0ms) rollback transaction +  (0.0ms) begin transaction + User Load (0.2ms) SELECT "users".* FROM "users" LIMIT 1 + User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 980190962]] +  (0.3ms) rollback transaction +  (0.1ms) begin transaction + User Load (0.2ms) SELECT "users".* FROM "users" LIMIT 1 + User Load (0.1ms) SELECT "users".* FROM "users" ORDER BY "users"."id" DESC LIMIT 1 + User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 980190962]] +  (0.1ms) rollback transaction +  (0.0ms) begin transaction +  (0.0ms) rollback transaction +  (0.0ms) begin transaction +  (0.0ms) rollback transaction +  (0.4ms) begin transaction + Fixture Delete (0.3ms) DELETE FROM "users" + Fixture Insert (0.1ms) INSERT INTO "users" ("name", "email", "born_on", "locked_at", "created_at", "updated_at", "id") VALUES ('John Doe', 'john.doe@johndoe.com', '1984-09-17', '2011-06-13 22:01:13.000000', '2012-12-25 14:09:03', '2012-12-25 14:09:03', 980190962) +  (3.5ms) commit transaction +  (0.1ms) begin transaction +  (0.1ms) rollback transaction +  (0.0ms) begin transaction +  (0.0ms) rollback transaction +  (0.0ms) begin transaction +  (0.0ms) rollback transaction +  (0.0ms) begin transaction + User Load (0.2ms) SELECT "users".* FROM "users" LIMIT 1 + User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 980190962]] +  (0.3ms) rollback transaction +  (0.1ms) begin transaction + User Load (0.2ms) SELECT "users".* FROM "users" LIMIT 1 + User Load (0.1ms) SELECT "users".* FROM "users" ORDER BY "users"."id" DESC LIMIT 1 + User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 980190962]] +  (0.1ms) rollback transaction +  (0.2ms) begin transaction +  (0.0ms) rollback transaction +  (0.1ms) begin transaction +  (0.0ms) rollback transaction +  (0.4ms) begin transaction + Fixture Delete (0.3ms) DELETE FROM "users" + Fixture Insert (0.2ms) INSERT INTO "users" ("name", "email", "born_on", "locked_at", "created_at", "updated_at", "id") VALUES ('John Doe', 'john.doe@johndoe.com', '1984-09-17', '2011-06-13 22:01:13.000000', '2012-12-25 14:09:44', '2012-12-25 14:09:44', 980190962) +  (2.4ms) commit transaction +  (0.0ms) begin transaction +  (0.1ms) rollback transaction +  (0.1ms) begin transaction +  (0.0ms) rollback transaction +  (0.1ms) begin transaction +  (0.0ms) rollback transaction +  (0.1ms) begin transaction + User Load (0.2ms) SELECT "users".* FROM "users" LIMIT 1 + User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 980190962]] +  (0.2ms) rollback transaction +  (0.0ms) begin transaction + User Load (0.2ms) SELECT "users".* FROM "users" LIMIT 1 + User Load (0.1ms) SELECT "users".* FROM "users" ORDER BY "users"."id" DESC LIMIT 1 + User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 980190962]] +  (0.1ms) rollback transaction +  (0.0ms) begin transaction +  (0.0ms) rollback transaction +  (0.0ms) begin transaction +  (0.0ms) rollback transaction +  (0.4ms) begin transaction + Fixture Delete (0.3ms) DELETE FROM "users" + Fixture Insert (0.2ms) INSERT INTO "users" ("name", "email", "born_on", "locked_at", "created_at", "updated_at", "id") VALUES ('John Doe', 'john.doe@johndoe.com', '1984-09-17', '2011-06-13 22:01:13.000000', '2012-12-25 14:10:17', '2012-12-25 14:10:17', 980190962) +  (3.4ms) commit transaction +  (0.0ms) begin transaction +  (0.1ms) rollback transaction +  (0.4ms) begin transaction +  (0.1ms) rollback transaction +  (0.1ms) begin transaction +  (0.0ms) rollback transaction +  (0.1ms) begin transaction + User Load (0.2ms) SELECT "users".* FROM "users" LIMIT 1 + User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 980190962]] +  (0.2ms) rollback transaction +  (0.1ms) begin transaction + User Load (0.2ms) SELECT "users".* FROM "users" LIMIT 1 + User Load (0.1ms) SELECT "users".* FROM "users" ORDER BY "users"."id" DESC LIMIT 1 + User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 980190962]] +  (0.1ms) rollback transaction +  (0.1ms) begin transaction +  (0.0ms) rollback transaction +  (0.0ms) begin transaction +  (0.0ms) rollback transaction +  (0.5ms) begin transaction + Fixture Delete (0.3ms) DELETE FROM "users" + Fixture Insert (0.4ms) INSERT INTO "users" ("name", "email", "born_on", "locked_at", "created_at", "updated_at", "id") VALUES ('John Doe', 'john.doe@johndoe.com', '1984-09-17', '2011-06-13 22:01:13.000000', '2012-12-25 14:10:32', '2012-12-25 14:10:32', 980190962) +  (3.5ms) commit transaction +  (0.1ms) begin transaction +  (0.1ms) rollback transaction +  (0.1ms) begin transaction +  (0.0ms) rollback transaction +  (0.1ms) begin transaction +  (0.0ms) rollback transaction +  (0.1ms) begin transaction + User Load (0.2ms) SELECT "users".* FROM "users" LIMIT 1 + User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 980190962]] +  (0.2ms) rollback transaction +  (0.1ms) begin transaction + User Load (0.2ms) SELECT "users".* FROM "users" LIMIT 1 + User Load (0.1ms) SELECT "users".* FROM "users" ORDER BY "users"."id" DESC LIMIT 1 + User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 980190962]] +  (0.1ms) rollback transaction +  (0.1ms) begin transaction +  (0.0ms) rollback transaction +  (0.0ms) begin transaction +  (0.0ms) rollback transaction +  (0.4ms) begin transaction + Fixture Delete (0.3ms) DELETE FROM "users" + Fixture Insert (0.1ms) INSERT INTO "users" ("name", "email", "born_on", "locked_at", "created_at", "updated_at", "id") VALUES ('John Doe', 'john.doe@johndoe.com', '1984-09-17', '2011-06-13 22:01:13.000000', '2012-12-25 14:11:07', '2012-12-25 14:11:07', 980190962) +  (2.4ms) commit transaction +  (0.0ms) begin transaction +  (0.1ms) rollback transaction +  (0.1ms) begin transaction +  (0.0ms) rollback transaction +  (0.0ms) begin transaction +  (0.0ms) rollback transaction +  (0.0ms) begin transaction + User Load (0.2ms) SELECT "users".* FROM "users" LIMIT 1 + User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 980190962]] +  (0.1ms) rollback transaction +  (0.1ms) begin transaction + User Load (0.2ms) SELECT "users".* FROM "users" LIMIT 1 + User Load (0.1ms) SELECT "users".* FROM "users" ORDER BY "users"."id" DESC LIMIT 1 + User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 980190962]] + User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 980190962]] +  (0.1ms) rollback transaction +  (0.0ms) begin transaction +  (0.0ms) rollback transaction +  (0.1ms) begin transaction +  (0.0ms) rollback transaction +  (0.4ms) begin transaction + Fixture Delete (0.3ms) DELETE FROM "users" + Fixture Insert (0.1ms) INSERT INTO "users" ("name", "email", "born_on", "locked_at", "created_at", "updated_at", "id") VALUES ('John Doe', 'john.doe@johndoe.com', '1984-09-17', '2011-06-13 22:01:13.000000', '2012-12-25 14:11:41', '2012-12-25 14:11:41', 980190962) +  (2.6ms) commit transaction +  (0.0ms) begin transaction +  (0.1ms) rollback transaction +  (0.0ms) begin transaction +  (0.0ms) rollback transaction +  (0.0ms) begin transaction +  (0.0ms) rollback transaction +  (0.0ms) begin transaction + User Load (0.3ms) SELECT "users".* FROM "users" LIMIT 1 + User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 980190962]] +  (0.2ms) rollback transaction +  (0.1ms) begin transaction + User Load (0.2ms) SELECT "users".* FROM "users" LIMIT 1 + User Load (0.1ms) SELECT "users".* FROM "users" ORDER BY "users"."id" DESC LIMIT 1 + User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 980190962]] + User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 980190962]] +  (0.1ms) rollback transaction +  (0.1ms) begin transaction +  (0.0ms) rollback transaction +  (0.1ms) begin transaction +  (0.0ms) rollback transaction