lib/flextures/flextures.rb in flextures-1.9.8 vs lib/flextures/flextures.rb in flextures-1.9.9

- old
+ new

@@ -41,32 +41,44 @@ "#{Rails.root.to_path}/config/flextures.factory.rb", ].each { |fn| load(fn) if File.exist?(fn) } end end - # テーブル情報の初期化 - def self.init_tables(ignore_tables=[]) + # 前テーブル削除のときにほんとうに消去して良いテーブル一覧を返す + def self.deletable_tables tables = ActiveRecord::Base.connection.tables tables.delete "schema_migrations" - tables.delete ignore_tables + tables + end + + # テーブル情報の初期化 + def self.init_tables + tables = Flextures::deletable_tables tables.each do |name| # テーブルではなくviewを拾って止まる場合があるのでrescueしてしまう begin - klass = Class.new(ActiveRecord::Base){ |o| o.table_name= name } - klass.delete_all + Class.new(ActiveRecord::Base){ |o| o.table_name= name }.delete_all rescue => e - p :init_table_error - p klass.table_name end end end + # テーブル情報の初期化 + def self.delete_tables *tables + tables.each do |name| + # テーブルではなくviewを拾って止まる場合があるのでrescueしてしまう + begin + Class.new(ActiveRecord::Base){ |o| o.table_name= name }.delete_all + rescue => e + end + end + end + # デバッグ用のメソッド、渡されたブロックを実行する # 主にテーブルの今の中身を覗きたい時に使う def self.table_tap &dumper - tables = ActiveRecord::Base.connection.tables - tables.delete "schema_migrations" + tables = Flextures::deletable_tables tables.each do |name| # テーブルではなくviewを拾って止まる場合があるのでrescueしてしまう begin klass = Class.new(ActiveRecord::Base){ |o| o.table_name= name; } dumper.call klass @@ -85,11 +97,11 @@ end if ENV["M"] or ENV["MODEL"] table_names = (ENV["M"] or ENV["MODEL"]).split(',').map{ |name| { table: name.constantize.table_name } } end if table_names.empty? - table_names = ActiveRecord::Base.connection.tables.map{ |name| { table: name } } + table_names = Flextures::deletable_tables.map{ |table| { table: table } } end # ENV["FIXTURES"]の中身を解析 fixtures_args_parser =->(s){ names = s.split(',') ( names.size==1 and ENV.values_at("M", "MODEL", "T", "TABLE").first ) ? @@ -98,10 +110,10 @@ } table_names = fixtures_args_parser.call ENV["FIXTURES"] if ENV["FIXTURES"] table_names = fixtures_args_parser.call ENV["F"] if ENV["F"] table_names = table_names.map{ |option| option.merge dir: ENV["DIR"] } if ENV["DIR"] # read mode だとcsvもyaml存在しないファイルは返さない - table_names.select! &exist if option[:mode] && option[:mode].to_sym == :read + table_names.select! &exist if option[:mode] && option[:mode] == 'read' table_names end # 存在しているファイルで絞り込む def self.exist