lib/groonga_client_model/railties/groonga.rake in groonga-client-model-1.0.0 vs lib/groonga_client_model/railties/groonga.rake in groonga-client-model-1.0.1
- old
+ new
@@ -1,8 +1,8 @@
# -*- ruby -*-
#
-# Copyright (C) 2016 Kouhei Sutou <kou@clear-code.com>
+# Copyright (C) 2016-2017 Kouhei Sutou <kou@clear-code.com>
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
@@ -14,22 +14,75 @@
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+require "groonga_client_model/migrator"
+
namespace :groonga do
namespace :config do
desc "Load config/groonga.rb"
task load: [:environment] do
config = Rails.application.config_for(:groonga)
GroongaClientModel::Client.url = config["url"]
end
end
namespace :schema do
- desc "Loads db/schema.grn info Groonga"
+ desc "Loads db/schema.grn into the Groonga database"
task load: ["config:load"] do
schema_loader = GroongaClientModel::SchemaLoader.new(Rails.root)
schema_loader.load
end
+ end
+
+ namespace :migrate do
+ task setup: ["config:load"] do
+ Rails.application.paths["db/groonga/migrate"] ||=
+ GroongaClientModel::Migrator.default_search_path
+ end
+
+ desc "Rollbacks the Groonga database one version and re-migrates"
+ task redo: ["setup"] do
+ migration_paths = Rails.application.paths["db/groonga/migrate"].to_a
+ migrator = GroongaClientModel::Migrator.new(migration_paths)
+ current_version = migrator.current_version
+ if ENV["VERSION"]
+ migrator.target_version = Integer(ENV["VERSION"])
+ migrator.migrate
+ migrator.target_version = current_version
+ migrator.migrate
+ elsif current_version
+ if ENV["STEP"]
+ step = Integer(ENV["STEP"])
+ else
+ step = 1
+ end
+ migrator.step = -step
+ migrator.migrate
+ migrator.target_version = current_version
+ migrator.migrate
+ end
+ end
+
+ desc "Rolls the Groonga database back to the previous version"
+ task rollback: ["setup"] do
+ migration_paths = Rails.application.paths["db/groonga/migrate"].to_a
+ migrator = GroongaClientModel::Migrator.new(migration_paths)
+ if ENV["STEP"]
+ step = Integer(ENV["STEP"])
+ else
+ step = 1
+ end
+ migrator.step = -step
+ migrator.migrate
+ end
+ end
+
+ desc "Migrates the Groonga database"
+ task migrate: ["migrate:setup"] do
+ migration_paths = Rails.application.paths["db/groonga/migrate"].to_a
+ migrator = GroongaClientModel::Migrator.new(migration_paths)
+ migrator.target_version = Integer(ENV["VERSION"]) if ENV["VERSION"]
+ migrator.migrate
end
end