lib/flextures/flextures.rb in flextures-0.9.1 vs lib/flextures/flextures.rb in flextures-0.9.4

- old
+ new

@@ -4,22 +4,22 @@ require 'csv' require 'flextures/flextures_base_config' require 'flextures/flextures_extension_modules' require 'flextures/flextures_factory' -require 'flextures/rspec_flextures_support.rb' if defined?(RSpec) -load "#{Rails.root.to_path}/config/flextures.config.rb" if defined?(Rails) and Rails.root -load "#{Rails.root.to_path}/config/flextures.factory.rb" if defined?(Rails) and Rails.root module Flextures LOAD_DIR = Config.fixture_load_directory DUMP_DIR = Config.fixture_dump_directory # 引数解析 module ARGS - # 書き出し・読み込み すべきファイルとオプションを書きだす + # 書き出し 、読み込み すべきファイルとオプションを書きだす def self.parse option={} + load "#{Rails.root.to_path}/config/flextures.config.rb" if defined?(Rails) and Rails.root + load "#{Rails.root.to_path}/config/flextures.factory.rb" if defined?(Rails) and Rails.root + table_names = "" table_names = ENV["TABLE"].split(",") if ENV["TABLE"] table_names = ENV["T"].split(",") if ENV["T"] table_names = ENV["MODEL"].constantize.table_name.split(",") if ENV["MODEL"] table_names = ENV["M"].constantize.table_name.split(",") if ENV["M"] @@ -84,14 +84,14 @@ klass = PARENT::create_model(table_name) attributes = klass.columns.map { |colum| colum.name } File.open(outfile,"w") do |f| klass.all.each_with_index do |row,idx| - f<< "#{table_name}_#{idx}:¥n" + + f<< "#{table_name}_#{idx}:\n" + attributes.map { |column| v = trans row.send(column) - " #{column}: #{v}¥n" + " #{column}: #{v}\n" }.join end end end end @@ -111,10 +111,11 @@ string:->{ "" }, text:->{ "" }, time:->{ DateTime.now }, timestamp:->{ DateTime.now }, } + # 型の変換を行う TRANSLATER = { binary:->(d){ d.to_i }, boolean:->(d){ (0==d || ""==d || !d) ? false : true }, date:->(d){ Date.parse(d.to_s) }, @@ -157,11 +158,10 @@ inpfile = "#{dir_name}#{file_name}.csv" klass = PARENT::create_model table_name attributes = klass.columns.map &:name filter = create_filter klass.columns, Factory[table_name] - #filter2 = create_filter2 klass.columns, Factory[table_name] klass.delete_all CSV.open( inpfile ) do |csv| keys = csv.shift # keyの設定 warning "CSV", attributes, keys csv.each do |values| @@ -187,21 +187,21 @@ end end # 欠けたカラムを検知してメッセージを出しておく def self.warning format, attributes, keys - (attributes-keys).each { |name| print "Warning: #{format} colum is missing! [#{name}]¥n" } - (keys-attributes).each { |name| print "Warning: #{format} colum is left over! [#{name}]¥n" } + (attributes-keys).each { |name| print "Warning: #{format} colum is missing! [#{name}]\n" } + (keys-attributes).each { |name| print "Warning: #{format} colum is left over! [#{name}]\n" } end # フィクスチャから取り出した値を、加工して欲しいデータにするフィルタを作成して返す def self.create_filter columns, factory=nil # テーブルからカラム情報を取り出し column_hash = {} columns.each { |col| column_hash[col.name] = col } # 自動補完が必要なはずのカラム lack_columns = columns.select { |c| !c.null and !c.default }.map &:name - # ハッシュを受け取って、必要な値に加工してからハッシュで返す + # ハッシュを受け取って、必要な値に加工してからハッシュで返すラムダを返す return->(h){ h.select! { |k,v| column_hash[k] } # テーブルに存在しないキーが定義されているときは削除 # 値がnilでないなら型をDBで適切なものに変更 h.each{ |k,v| nil==v || h[k] = TRANSLATER[column_hash[k].type].call(v) } # FactoryFilterを動作させる