Kouhei Sutou
null+****@clear*****
Wed Mar 1 21:15:50 JST 2017
Kouhei Sutou 2017-03-01 21:15:50 +0900 (Wed, 01 Mar 2017) New Revision: 1c82582ce2e65ebe43538d2eda095b94bf3c6057 https://github.com/ranguba/groonga-client-model/commit/1c82582ce2e65ebe43538d2eda095b94bf3c6057 Message: Support recording schema version Modified files: lib/groonga_client_model/migrator.rb Modified: lib/groonga_client_model/migrator.rb (+52 -6) =================================================================== --- lib/groonga_client_model/migrator.rb 2017-03-01 16:57:15 +0900 (be31462) +++ lib/groonga_client_model/migrator.rb 2017-03-01 21:15:50 +0900 (278a39e) @@ -21,6 +21,8 @@ module GroongaClientModel def initialize(search_paths, target_version) @search_paths = Array(search_paths) @target_version = target_version + ensure_versions + @current_version =****@versi***** || 0 end def migrate @@ -30,15 +32,17 @@ module GroongaClientModel report(definition) do if forward? migration.up + add_version(client, definition.version) else migration.down + delete_version(client, definition.version) end end end end end - def each(&block) + def each paths = [] @search_paths.each do |search_path| paths |= Dir.glob("#{search_path}/**/[0-9]*_*.rb").collect do |path| @@ -53,20 +57,62 @@ module GroongaClientModel sorted_definitions = definitions.sort_by(&:version) if forward? - sorted_definitions.each(&block) + sorted_definitions.each do |definition| + yield(definition) if definition.version > @current_version + end else - sorted_definitions.reverse_each(&block) + sorted_definitions.reverse_each do |definition| + yield(definition) if definition.version <= @current_version + end end end private + def version_table_name + "schema_versions" + end + + def ensure_versions + Client.open do |client| + table_name = version_table_name + exist = client.object_exist(name: table_name).body + if exist + @versions = client.request(:select). + parameter(:table, table_name). + sort_keys([:_key]). + limit(-1). + output_columns(["_key"]). + response. + records. + collect(&:_key) + else + client.request(:table_create). + parameter(:name, table_name). + flags_parameter(:flags, ["TABLE_PAT_KEY"]). + parameter(:key_type, "UInt64"). + response + @versions = [] + end + end + end + def forward? @target_version.nil? or - (@target_version > current_version) + (@target_version > @current_version) + end + + def add_version(client, version) + client.request(:load). + parameter(:table, version_table_name). + parameter(:values, [{"_key" => version}].to_json). + response end - def current_version - 0 # TODO + def delete_version(client, version) + client.request(:delete). + parameter(:table, version_table_name). + parameter(:key, version). + response end def report(definition) -------------- next part -------------- HTML����������������������������...Download