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を動作させる