Class: Arxutils_Sqlite3::Migrate
- Inherits:
-
Object
- Object
- Arxutils_Sqlite3::Migrate
- Defined in:
- lib/arxutils_sqlite3/migrate.rb
Overview
migrateに必要なファイルをテンプレートから作成し、migarteを実行する
Constant Summary collapse
- FILENAME_COUNTER_STEP =
migrate用スクリプトファイル名の先頭の番号の間隔
10
Instance Attribute Summary collapse
-
#migrate_dir ⇒ Object
readonly
Returns the value of attribute migrate_dir.
Instance Method Summary collapse
-
#convert(data, src_dir, src_fname) ⇒ Object
テンプレートファイルからスクリプトの内容に変換.
-
#convert_count_class_acrecord(data, src_fname) ⇒ Object
Countクラス用のacrecordのスクリプトの内容に変換.
-
#delete_db ⇒ Object
DBファイルの削除.
-
#delete_migrate ⇒ Object
マイグレート用スクリプトの削除.
-
#delete_migrate_and_config_and_db ⇒ Object
マイグレート用スクリプト、DB構成情報ファイル、DBファイルの削除.
-
#delete_migrate_and_db ⇒ Object
マイグレート用スクリプト、DBファイルの削除.
-
#initialize(config, dbconfig_dest_path, dbconfig_src_fname, db_scheme_ary, acrecord_config, migrate_dir) ⇒ Migrate
constructor
migrate用のスクリプトの生成、migrateの実行を行うmigratexの生成.
-
#make_acrecord(data, count_classname_downcase) ⇒ Object
英子文字で表現したクラス名が、countを表していなければ、acrecordを 英子文字で表現したクラス名が、countを表していれが、空のハッシュを返す スキーマでbase, noitem以外のフィールドが指定されていれば、そのフィールドに対するacrecordの設定の内容を返す.
-
#make_content_array ⇒ Object
acrecordを表すクラス定義のファイルの内容を生成.
-
#make_dbconfig(data) ⇒ Object
データベース構成ファイルをテンプレートから生成する.
-
#make_script_group(data) ⇒ Object
スキーマ設定からmigarte用スクリプトの内容を生成.
-
#output ⇒ Object
マイグレーション用スクリプトの生成、acrecordのクラス定義ファイルの生成.
-
#output_acrecord_script(content_array, acrecord_config) ⇒ Object
acrecordのスクリプトをファイル出力する.
-
#output_all_script ⇒ Object
migrationのスクリプトをファイル出力する.
-
#output_script(idy, kind, content, classname_downcase) ⇒ Object
migrationのスクリプトをファイル出力する.
Constructor Details
#initialize(config, dbconfig_dest_path, dbconfig_src_fname, db_scheme_ary, acrecord_config, migrate_dir) ⇒ Migrate
migrate用のスクリプトの生成、migrateの実行を行うmigratexの生成
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/arxutils_sqlite3/migrate.rb', line 24 def initialize( config, dbconfig_dest_path, dbconfig_src_fname, db_scheme_ary, acrecord_config, migrate_dir ) # アプリ構成情報 @config = config # DB格納ディレクトリ名 @db_dir = config.db_dir # DB構成ファイルの出力先ディレクトリ @dest_config_dir = config.config_dir # 生成するDB構成情報ファイルパス @dbconfig_dest_path = dbconfig_dest_path # 参照用DB構成情報ファイル名 @dbconfig_src_fname = dbconfig_src_fname # テンプレートファイル格納ディレクトリ名 @src_path = config.template_acrecord_dir # 構成ファイル格納ディレクトリ @src_config_path = config.template_config_dir # @src_config_path = Arxutils_Sqlite3::TEMPLATE_CONFIG_DIR # データベーススキーマ定義配列 @db_scheme_ary = db_scheme_ary # リレーション指定 @acrecord_config = acrecord_config @migrate_dir = migrate_dir FileUtils.mkdir_p(@db_dir) if @db_dir FileUtils.mkdir_p(@migrate_dir) if @migrate_dir FileUtils.mkdir_p(@dest_config_dir) end |
Instance Attribute Details
#migrate_dir ⇒ Object (readonly)
Returns the value of attribute migrate_dir.
16 17 18 |
# File 'lib/arxutils_sqlite3/migrate.rb', line 16 def migrate_dir @migrate_dir end |
Instance Method Details
#convert(data, src_dir, src_fname) ⇒ Object
テンプレートファイルからスクリプトの内容に変換
148 149 150 151 152 |
# File 'lib/arxutils_sqlite3/migrate.rb', line 148 def convert(data, src_dir, src_fname) arx = Arx.new(data, File.join(src_dir, src_fname)) # 指定テンプレートファイルからスクリプトの内容に作成 arx.create end |
#convert_count_class_acrecord(data, src_fname) ⇒ Object
Countクラス用のacrecordのスクリプトの内容に変換
143 144 145 |
# File 'lib/arxutils_sqlite3/migrate.rb', line 143 def convert_count_class_acrecord(data, src_fname) convert(data, @src_path, src_fname) end |
#delete_db ⇒ Object
DBファイルの削除
88 89 90 91 92 |
# File 'lib/arxutils_sqlite3/migrate.rb', line 88 def delete_db Dir.glob(File.join(@db_dir, "*")).each do |x| FileUtils.rm(x) if File.file?(x) end end |
#delete_migrate ⇒ Object
マイグレート用スクリプトの削除
79 80 81 82 83 84 85 |
# File 'lib/arxutils_sqlite3/migrate.rb', line 79 def delete_migrate return unless @migrate_dir Dir.glob(File.join(@migrate_dir, "*")).each do |x| FileUtils.rm(x) if File.file?(x) end end |
#delete_migrate_and_config_and_db ⇒ Object
マイグレート用スクリプト、DB構成情報ファイル、DBファイルの削除
60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/arxutils_sqlite3/migrate.rb', line 60 def delete_migrate_and_config_and_db # def delete_migrate_and_config delete_migrate Dir.glob(File.join(@dest_config_dir, "*")).each do |x| basename = File.basename(x) ret = !@config.exclude_file?(basename) ret_file = File.file?(x) FileUtils.rm(x) if ret_file && ret end delete_db end |
#delete_migrate_and_db ⇒ Object
マイグレート用スクリプト、DBファイルの削除
73 74 75 76 |
# File 'lib/arxutils_sqlite3/migrate.rb', line 73 def delete_migrate_and_db delete_migrate delete_db end |
#make_acrecord(data, count_classname_downcase) ⇒ Object
英子文字で表現したクラス名が、countを表していなければ、acrecordを 英子文字で表現したクラス名が、countを表していれが、空のハッシュを返す スキーマでbase, noitem以外のフィールドが指定されていれば、そのフィールドに対するacrecordの設定の内容を返す
167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 |
# File 'lib/arxutils_sqlite3/migrate.rb', line 167 def make_acrecord(data, count_classname_downcase) if data[:classname_downcase] == count_classname_downcase {} else # 指定フィールドのフィールド名に対応したテンプレートファイルを用いて、acrecord設定を作成 data[:flist].each_with_object({ content: [], need_count_class: nil }) do |field_name, s| case field_name when "base", "noitem" name_base = "acrecord" # data[:acrecord]がnilに設定されていたら改めて空の配列を設定 data[:acrecord] = [] unless data[:acrecord] else data[:count_classname_downcase] = count_classname_downcase name_base = "acrecord_#{field_name}" s[:need_count_class_plural] ||= data[:plural] end # テンプレートファイルからスクリプトの内容を作成 content = convert(data, @src_path, "#{name_base}.tmpl") s[:content] << content end end end |
#make_content_array ⇒ Object
acrecordを表すクラス定義のファイルの内容を生成
134 135 136 137 138 139 140 |
# File 'lib/arxutils_sqlite3/migrate.rb', line 134 def make_content_array # スキーマ設定配列から、acrecordのmigrate用のスクリプトの内容(ハッシュ形式)の配列を作成する acrecords = @db_scheme_ary.map do |x| make_acrecord(x, "count") end acrecords.select { |x| x.size.positive? } end |
#make_dbconfig(data) ⇒ Object
データベース構成ファイルをテンプレートから生成する
155 156 157 158 159 160 161 162 |
# File 'lib/arxutils_sqlite3/migrate.rb', line 155 def make_dbconfig(data) content = convert(data, @src_config_path, @dbconfig_src_fname) File.open( @dbconfig_dest_path, "w:utf-8" ) do |f| f.puts(content) end end |
#make_script_group(data) ⇒ Object
スキーマ設定からmigarte用スクリプトの内容を生成
191 192 193 194 195 196 197 198 |
# File 'lib/arxutils_sqlite3/migrate.rb', line 191 def make_script_group(data) # p data data[:flist].map do |kind| [kind, convert(data, @src_path, "#{kind}.tmpl"), data[:classname_downcase]] end end |
#output ⇒ Object
マイグレーション用スクリプトの生成、acrecordのクラス定義ファイルの生成
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
# File 'lib/arxutils_sqlite3/migrate.rb', line 95 def output # migrationのスクリプトをファイル出力する output_all_script # acrecordを表すクラス定義のファイルの内容を生成 content_array = make_content_array # p "content_array=#{content_array}" # 複数形のクラス名を集める count_class_plurals = content_array.reject do |x| x[:need_count_class_plural].nil? end need_count_class_plural = count_class_plurals.map { |x| x[:need_count_class_plural] } # acrecordのmigrateが必要であれば、それをテンプレートファイルから作成して、スクリプトの内容として追加する if content_array.find { |x| !x.nil? } # p "####### 1" data_count = { count_classname: "Count", need_count_class_plural: need_count_class_plural, } # p "data_count=#{data_count}" ary = content_array.collect { |x| x[:content] }.flatten count_content = convert_count_class_acrecord(data_count, "acrecord_count.tmpl") ary.unshift(count_content) content_array = ary end # acrecordのスクリプトを作成 output_acrecord_script(content_array, @acrecord_config) end |
#output_acrecord_script(content_array, acrecord_config) ⇒ Object
acrecordのスクリプトをファイル出力する
215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 |
# File 'lib/arxutils_sqlite3/migrate.rb', line 215 def output_acrecord_script(content_array, acrecord_config) dir = acrecord_config[:dir] fname = acrecord_config[:filename] fpath = File.join(dir, fname) ret = :SUCCESS begin File.open(fpath, "w") do |file| acrecord_config[:module].map { |mod| file.puts("module #{mod}") } content_array.map do |x| file.puts x file.puts "" end acrecord_config[:module].map { |_mod| file.puts("end") } end rescue StandardError ret = :StandardError end ret end |
#output_all_script ⇒ Object
migrationのスクリプトをファイル出力する
125 126 127 128 129 130 131 |
# File 'lib/arxutils_sqlite3/migrate.rb', line 125 def output_all_script # スキーマ設定配列から、migrate用のスクリプトを作成する @db_scheme_ary.map { |x| make_script_group(x) }.flatten(1).each_with_index do |data, index| idy = (index + 1) * FILENAME_COUNTER_STEP output_script(idy, *data) end end |
#output_script(idy, kind, content, classname_downcase) ⇒ Object
migrationのスクリプトをファイル出力する
201 202 203 204 205 206 207 208 209 210 211 212 |
# File 'lib/arxutils_sqlite3/migrate.rb', line 201 def output_script(idy, kind, content, classname_downcase) additional = case kind when "base", "noitem" "" else kind end fname = File.join(@migrate_dir, format("%03d_create_%s%s.rb", idy, additional, classname_downcase)) File.open(fname, "w", **{ encoding: Encoding::UTF_8 }) do |f| f.puts(content) end end |