Class: Arxutils::Migrate::Migratex
- Inherits:
-
Object
- Object
- Arxutils::Migrate::Migratex
- Defined in:
- lib/arxutils/migrate.rb
Overview
migrate用のスクリプトの内容をテンプレートから作成し、ファイルに出力し、migrateを実行する
Instance Attribute Summary collapse
-
#dbinit ⇒ Object
readonly
DB接続までの初期化を行うDbinitクラスのインスタンス.
Instance Method Summary collapse
-
#convert(data, src_dir, src_fname) ⇒ Object
テンプレートファイルからスクリプトの内容に変換.
-
#convert_count_class_relation(data, src_fname) ⇒ Object
Countクラス用のrelationのスクリプトの内容に変換.
-
#initialize(db_dir, migrate_base_dir, src_config_dir, dbconfig, env, log_fname, opts) ⇒ Migratex
constructor
migrate用のスクリプトの生成、migrateの実行を行うmigratexの生成.
-
#make_dbconfig(data) ⇒ Object
データベース構成ファイルをテンプレートから生成する.
-
#make_relation(data, count_classname_downcase) ⇒ Object
英子文字で表現したクラス名が、countを表していなければ、relationを 英子文字で表現したクラス名が、countを表していれが、空のハッシュを返す スキーマでbase, noitem以外のフィールドが指定されていれば、そのフィールドに対するrelationの設定の内容を返す.
-
#make_script_group(data) ⇒ Object
スキーマ設定からmigarte用スクリプトの内容を生成.
-
#migrate ⇒ Object
migrateを実行する.
-
#output_relation_script(content_array, opts) ⇒ Object
relationのスクリプトをファイル出力する.
-
#output_script(idy, kind, content, classname_downcase) ⇒ Object
migrationのスクリプトをファイル出力する.
Constructor Details
#initialize(db_dir, migrate_base_dir, src_config_dir, dbconfig, env, log_fname, opts) ⇒ Migratex
migrate用のスクリプトの生成、migrateの実行を行うmigratexの生成
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/arxutils/migrate.rb', line 65 def initialize( db_dir , migrate_base_dir , src_config_dir , dbconfig, env, log_fname, opts ) # DB接続までの初期化を行うDbinitクラスのインスタンス @dbinit = Dbutil::Dbinit.new( db_dir , migrate_base_dir , src_config_dir , dbconfig, env, log_fname, opts ) # 生成するDB構成情報ファイルパス @dbconfig_dest_path = @dbinit.dbconfig_dest_path # 参照用DB構成情報ファイル名 @dbconfig_src_fname = @dbinit.dbconfig_src_fname # migrate用スクリプトの出力先ディレクトリ名 @migrate_dir = @dbinit.migrate_dir # テンプレートファイル格納ディレクトリ名 @src_path = Arxutils.templatedir # 構成ファイル格納ディレクトリ @src_config_path = Arxutils.configdir end |
Instance Attribute Details
#dbinit ⇒ Object (readonly)
DB接続までの初期化を行うDbinitクラスのインスタンス
62 63 64 |
# File 'lib/arxutils/migrate.rb', line 62 def dbinit @dbinit end |
Instance Method Details
#convert(data, src_dir, src_fname) ⇒ Object
テンプレートファイルからスクリプトの内容に変換
87 88 89 90 91 |
# File 'lib/arxutils/migrate.rb', line 87 def convert( data , src_dir , src_fname ) arx = Arx.new( data , File.join( src_dir, src_fname ) ) # 指定テンプレートファイルからスクリプトの内容に作成 arx.create end |
#convert_count_class_relation(data, src_fname) ⇒ Object
Countクラス用のrelationのスクリプトの内容に変換
82 83 84 |
# File 'lib/arxutils/migrate.rb', line 82 def convert_count_class_relation( data , src_fname ) convert( data , @src_path , src_fname ) end |
#make_dbconfig(data) ⇒ Object
データベース構成ファイルをテンプレートから生成する
94 95 96 97 98 99 |
# File 'lib/arxutils/migrate.rb', line 94 def make_dbconfig( data ) content = convert( data , @src_config_path , @dbconfig_src_fname ) File.open( @dbconfig_dest_path , 'w' , {:encoding => Encoding::UTF_8}){ |f| f.puts( content ) } end |
#make_relation(data, count_classname_downcase) ⇒ Object
英子文字で表現したクラス名が、countを表していなければ、relationを英子文字で表現したクラス名が、countを表していれが、空のハッシュを返すスキーマでbase, noitem以外のフィールドが指定されていれば、そのフィールドに対するrelationの設定の内容を返す
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
# File 'lib/arxutils/migrate.rb', line 104 def make_relation( data , count_classname_downcase ) if data[:classname_downcase] != count_classname_downcase # 指定フィールドのフィールド名に対応したテンプレートファイルを用いて、relation設定を作成 data[:flist].reduce( { content: [], need_count_class: nil } ){ |s, field_name| case field_name when "base" , "noitem" name_base = "relation" # data[:relation]がnilに設定されていたら改めて空の配列を設定 data[:relation] = [] unless data[:relation] else data[:count_classname_downcase] = count_classname_downcase name_base = "relation_#{field_name}" s[:need_count_class_plural] ||= data[:plural] end # テンプレートファイルからスクリプトの内容を作成 content = convert( data , @src_path , "#{name_base}.tmpl" ) s[:content] << content s } else {} end end |
#make_script_group(data) ⇒ Object
スキーマ設定からmigarte用スクリプトの内容を生成
129 130 131 |
# File 'lib/arxutils/migrate.rb', line 129 def make_script_group( data ) data[:flist].map{ |kind| [kind, convert( data , @src_path , "#{kind}.tmpl" ), data[:classname_downcase]]} end |
#migrate ⇒ Object
migrateを実行する
163 164 165 |
# File 'lib/arxutils/migrate.rb', line 163 def migrate ActiveRecord::Migrator.migrate(@migrate_dir , ENV["VERSION"] ? ENV["VERSION"].to_i : nil ) end |
#output_relation_script(content_array, opts) ⇒ Object
relationのスクリプトをファイル出力する
148 149 150 151 152 153 154 155 156 157 158 159 160 |
# File 'lib/arxutils/migrate.rb', line 148 def output_relation_script( content_array , opts ) dir = opts[:dir] fname = opts[:filename] fpath = File.join( dir , fname ) File.open( fpath , "w" ){ |file| opts[:module].map{|mod| file.puts("module #{mod}")} content_array.map{|x| file.puts x file.puts "" } opts[:module].map{|mod| file.puts("end")} } end |
#output_script(idy, kind, content, classname_downcase) ⇒ Object
migrationのスクリプトをファイル出力する
134 135 136 137 138 139 140 141 142 143 144 145 |
# File 'lib/arxutils/migrate.rb', line 134 def output_script( idy, kind , content , classname_downcase ) case kind when "base" , "noitem" additional = "" else additional = kind end fname = File.join( @migrate_dir , sprintf("%03d_create_%s%s.rb" , idy , additional , classname_downcase) ) File.open( fname , 'w' , **{:encoding => Encoding::UTF_8}){ |f| f.puts( content ) } end |