flextures 0.9.0 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.rdoc CHANGED
@@ -19,9 +19,12 @@ Rails標準のfixtureの不満点を解消するために作成しました
19
19
 
20
20
  == インストール方法
21
21
 
22
- RailsのPlug-inとして実装されていますので
23
- ダウンロードしたファイルを
24
- vendor/plugin 以下に設置してください
22
+ RailsのPlug-inとして使われることを想定しています
23
+ gem化されているので、bundlerで次のように記述して、普通にbundle install してください
24
+
25
+ gem "flextures"
26
+
27
+ ちなみに開発環境はruby1.9.2、rails3環境を想定しています
25
28
 
26
29
  == 使い方
27
30
 
@@ -47,12 +50,12 @@ Usersモデルのfixture(users.csvか users.yml)をロードする
47
50
  その他オプションは以下のとおりな感じです:
48
51
 
49
52
  TABLE : テーブル名を指定してロード。テーブル名はカンマ切りで複数指定が可能
50
- T : TABLEのエイリアス
51
53
  MODEL : モデル名を指定してロード。モデル名はカンマ区切りで複数指定が可能
52
- M : モデル名指定のエイリアス
53
54
  DIR : フィクスチャをロード&ダンプするディレクトリを指定する
54
- D : ディレクトリ指定のエイリアス
55
55
  FILE : ロード、ダンプをするファイル名をRails標準以外のもので直接指定(Userモデルのusers.csv以外を指定)
56
+ T : TABLEのエイリアス
57
+ M : モデル名指定のエイリアス
58
+ D : ディレクトリ指定のエイリアス
56
59
  F : ファイル名指定のエイリアス
57
60
 
58
61
  yamlのファイルはロードしたいけどcsvはロードをしたくない
data/Rakefile CHANGED
@@ -53,4 +53,3 @@ Rake::RDocTask.new do |rdoc|
53
53
  rdoc.options = ["--charset", "utf-8", "--line-numbers"]
54
54
  end
55
55
 
56
-
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.9.0
1
+ 0.9.1
data/flextures.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{flextures}
8
- s.version = "0.9.0"
8
+ s.version = "0.9.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["baban"]
12
- s.date = %q{2011-11-03}
12
+ s.date = %q{2011-11-06}
13
13
  s.description = %q{load and dump fixtures}
14
14
  s.email = %q{babanba.n@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -27,13 +27,14 @@ Gem::Specification.new do |s|
27
27
  "Rakefile",
28
28
  "VERSION",
29
29
  "flextures.gemspec",
30
- "init.rb",
31
30
  "lib/flextures.rb",
32
- "lib/flextures_base_config.rb",
33
- "lib/flextures_extension_modules.rb",
34
- "lib/flextures_factory.rb",
35
- "lib/rspec_flextures_support.rb",
36
- "lib/tasks/flextures.rake",
31
+ "lib/flextures/flextures.rake",
32
+ "lib/flextures/flextures.rb",
33
+ "lib/flextures/flextures_base_config.rb",
34
+ "lib/flextures/flextures_extension_modules.rb",
35
+ "lib/flextures/flextures_factory.rb",
36
+ "lib/flextures/flextures_railtie.rb",
37
+ "lib/flextures/rspec_flextures_support.rb",
37
38
  "test/helper.rb",
38
39
  "test/test_flextures.rb"
39
40
  ]
data/lib/flextures.rb CHANGED
@@ -1,209 +1,8 @@
1
- # encoding: utf-8
2
-
3
- module Flextures
4
- LOAD_DIR = Config.fixture_load_directory
5
- DUMP_DIR = Config.fixture_dump_directory
6
- # �������
7
- module ARGS
8
- # �����o���E�ǂݍ��� ���ׂ��t�@�C���ƃI�v�V��������������
9
- def self.parse option={}
10
- table_names = ""
11
- table_names = ENV["TABLE"].split(",") if ENV["TABLE"]
12
- table_names = ENV["T"].split(",") if ENV["T"]
13
- table_names = ENV["MODEL"].constantize.table_name.split(",") if ENV["MODEL"]
14
- table_names = ENV["M"].constantize.table_name.split(",") if ENV["M"]
15
- table_names = ActiveRecord::Base.connection.tables if ""==table_names
16
- table_names = table_names.map{ |name| { table: name } }
17
- table_names = table_names.map{ |option| option.merge dir: ENV["DIR"] } if ENV["DIR"]
18
- table_names.first[:file]= ENV["FILE"] if ENV["FILE"] # �t�@�C�����͍ŏ��̂��̂����w��ł��Ȃ�
19
- table_names.first[:file]= ENV["F"] if ENV["F"]
20
- # read mode ����csv��yaml���݂��Ȃ��t�@�C���͕Ԃ��Ȃ�
21
- table_names.select! &exist if option[:mode] && option[:mode].to_sym == :read
22
- table_names
23
- end
24
-
25
- # ���݂��Ă���t�@�C���ōi�荞�ށ@
26
- def self.exist
27
- return->(name){ File.exists?("#{LOAD_DIR}#{name}.csv") or File.exists?("#{LOAD_DIR}#{name}.yml") }
28
- end
29
- end
30
-
31
- # �e�[�u�����f���̍쐬
32
- def self.create_model table_name
33
- klass = Class.new ActiveRecord::Base
34
- klass.table_name=table_name
35
- klass
36
- end
37
-
38
- module Dumper
39
- PARENT = Flextures
40
-
41
- # �K�؂Ȍ^�ɕϊ�
42
- def self.trans v
43
- case v
44
- when true; 1
45
- when false; 0
46
- else; v
47
- end
48
- end
49
-
50
- # csv �� fixtures �� dump
51
- def self.csv format
52
- table_name = format[:table]
53
- file_name = format[:file] || table_name
54
- dir_name = format[:dir] || DUMP_DIR
55
- outfile = "#{dir_name}#{file_name}.csv"
56
- klass = PARENT.create_model(table_name)
57
- attributes = klass.columns.map { |colum| colum.name }
58
-
59
- CSV.open(outfile,'w') do |csv|
60
- csv<< attributes
61
- klass.all.each do |row|
62
- csv<< attributes.map { |column| trans(row.send(column))}
63
- end
64
- end
65
- end
66
-
67
- # yaml �� fixtures �� dump
68
- def self.yml format
69
- table_name = format[:table]
70
- file_name = format[:file] || table_name
71
- dir_name = format[:dir] || DUMP_DIR
72
- outfile = "#{dir_name}#{file_name}.yml"
73
- klass = PARENT::create_model(table_name)
74
- attributes = klass.columns.map { |colum| colum.name }
75
-
76
- File.open(outfile,"w") do |f|
77
- klass.all.each_with_index do |row,idx|
78
- f<< "#{table_name}_#{idx}:\n" +
79
- attributes.map { |column|
80
- v = trans row.send(column)
81
- " #{column}: #{v}\n"
82
- }.join
83
- end
84
- end
85
- end
86
- end
87
-
88
- module Loader
89
- PARENT = Flextures
90
-
91
- # �^�ɉ����ď����default�l��ݒ肷��
92
- COMPLETER = {
93
- binary:->{ 0 },
94
- boolean:->{ false },
95
- date:->{ DateTime.now },
96
- datetime:->{ DateTime.now },
97
- decimal:->{ 0 },
98
- float:->{ 0.0 },
99
- integer:->{ 0 },
100
- string:->{ "" },
101
- text:->{ "" },
102
- time:->{ DateTime.now },
103
- timestamp:->{ DateTime.now },
104
- }
105
- # �^�̕ϊ����s��
106
- TRANSLATER = {
107
- binary:->(d){ d.to_i },
108
- boolean:->(d){ (0==d || ""==d || !d) ? false : true },
109
- date:->(d){ Date.parse(d.to_s) },
110
- datetime:->(d){ DateTime.parse(d.to_s) },
111
- decimal:->(d){ d.to_i },
112
- float:->(d){ d.to_f },
113
- integer:->(d){ d.to_i },
114
- string:->(d){ d.to_s },
115
- text:->(d){ d.to_s },
116
- time:->(d){ DateTime.parse(d.to_s) },
117
- timestamp:->(d){ DateTime.parse(d.to_s) },
118
- }
119
-
120
- # csv �D��ő��݂��Ă��� fixtures �����[�h
121
- def self.load format
122
- file_name = format[:file] || format[:table]
123
- dir_name = format[:dir] || LOAD_DIR
124
- method = nil
125
- method = :csv if File.exist? "#{dir_name}#{file_name}.csv"
126
- method = :yml if File.exist? "#{dir_name}#{file_name}.yml"
127
- self::send(method, format) if method
128
- end
129
-
130
- # fixtures���܂Ƃ߂ă��[�h�A��Ƀe�X�gtest/unit, rspec �Ŏg�p����
131
- def self.flextures *fixtures
132
- # :all�ł��ׂĂ�fixture�𔽉f
133
- fixtures = ActiveRecord::Base.connection.tables if fixtures.size== 1 and :all == fixtures.first
134
-
135
- fixtures_hash = fixtures.pop if fixtures.last and fixtures.last.is_a? Hash # �n�b�V�����o��
136
- fixtures.each{ |table_name| Flextures::Loader::load table: table_name }
137
- fixtures_hash.each{ |k,v| Flextures::Loader::load table: k, file: v } if fixtures_hash
138
- fixtures
139
- end
140
-
141
- # CSV�̃f�[�^�����[�h����
142
- def self.csv format
143
- table_name = format[:table].to_s
144
- file_name = format[:file] || table_name
145
- dir_name = format[:dir] || LOAD_DIR
146
- inpfile = "#{dir_name}#{file_name}.csv"
147
-
148
- klass = PARENT::create_model table_name
149
- attributes = klass.columns.map &:name
150
- filter = create_filter klass.columns, Factory[table_name]
151
- #filter2 = create_filter2 klass.columns, Factory[table_name]
152
- klass.delete_all
153
- CSV.open( inpfile ) do |csv|
154
- keys = csv.shift # key�̐ݒ�
155
- warning "CSV", attributes, keys
156
- csv.each do |values|
157
- klass.create filter.call values.extend(Extensions::Array).to_hash(keys)
158
- end
159
- end
160
- end
161
-
162
- # YAML�`���Ńf�[�^�����[�h����
163
- def self.yml format
164
- table_name = format[:table].to_s
165
- file_name = format[:file] || table_name
166
- dir_name = format[:dir] || LOAD_DIR
167
- inpfile = "#{dir_name}#{file_name}.yml"
168
-
169
- klass = PARENT::create_model table_name
170
- attributes = klass.columns.map &:name
171
- filter = create_filter klass.columns, Factory[table_name]
172
- klass.delete_all
173
- YAML.load(File.open(inpfile)).each do |k,h|
174
- warning "YAML", attributes, h.keys
175
- klass.create filter.call h
176
- end
177
- end
178
-
179
- # �������J���������m����b�Z�[�W���o������
180
- def self.warning format, attributes, keys
181
- (attributes-keys).each { |name| print "Warning: #{format} colum is missing! [#{name}]\n" }
182
- (keys-attributes).each { |name| print "Warning: #{format} colum is left over! [#{name}]\n" }
183
- end
184
-
185
- # �t�B�N�X�`��������o�����l���A���H���ė~�����f�[�^�ɂ���t�B���^���쐬���ĕԂ�
186
- def self.create_filter columns, factory=nil
187
- # �e�[�u������J�����������o��
188
- column_hash = {}
189
- columns.each { |col| column_hash[col.name] = col }
190
- # �����⊮���K�v�Ȃ͂��̃J����
191
- lack_columns = columns.select { |c| !c.null and !c.default }.map &:name
192
- # �n�b�V�����󂯎���āA�K�v�Ȓl�ɉ��H���Ă���n�b�V���ŕԂ�
193
- ->(h){
194
- h.select! { |k,v| column_hash[k] } # �e�[�u���ɑ��݂��Ȃ��L�[����`����Ă���Ƃ��͍폜
195
- # �l��nil�łȂ��Ȃ�^��DB�œK�؂Ȃ��̂ɕύX
196
- h.each{ |k,v| nil==v || h[k] = TRANSLATER[column_hash[k].type].call(v) }
197
- # FactoryFilter�𓮍삳����
198
- st = OpenStruct.new(h)
199
- factory.call(st) if factory
200
- h = st.to_hash
201
- # �l��nil�̗�Ƀf�t�H���g�l����
202
- lack_columns.each { |k| nil==h[k] && h[k] = COMPLETER[column_hash[k].type].call }
203
- h
204
- }
205
- end
206
-
207
- end
208
- end
209
-
1
+ # encoding: utf-8
2
+
3
+ require 'flextures/flextures_base_config'
4
+ require 'flextures/flextures_extension_modules'
5
+ require 'flextures/flextures'
6
+ require 'flextures/flextures_factory'
7
+ require 'flextures/flextures_railtie' if defined? Rails
8
+ require 'flextures/rspec_flextures_support'
@@ -0,0 +1,44 @@
1
+ # encoding: utf-8
2
+
3
+ require 'ostruct'
4
+ require 'csv'
5
+
6
+ require 'flextures/flextures_base_config'
7
+ require 'flextures/flextures'
8
+ require 'flextures/flextures_extension_modules'
9
+ require 'flextures/flextures_factory'
10
+ #require 'flextures/rspec_flextures_support'
11
+
12
+ namespace :db do
13
+ namespace :flextures do
14
+ desc "Dump data to the test/fixtures/ directory. Use TABLE=table_name"
15
+ task :dump => :environment do
16
+ Flextures::ARGS.parse.each { |fmt| Flextures::Dumper::csv(fmt) }
17
+ end
18
+
19
+ desc "Dump data to the test/fixtures/ directory. Use TABLE=table_name"
20
+ task :csvdump => :environment do
21
+ #Flextures::ARGS.parse.each { |fmt| Flextures::Dumper::csv(fmt) }
22
+ end
23
+
24
+ desc "Dump data to the test/fixtures/ directory. Use TABLE=table_name"
25
+ task :ymldump => :environment do
26
+ #Flextures::ARGS.parse.each { |fmt| Flextures::Dumper::yml(fmt) }
27
+ end
28
+
29
+ desc "Dump data to the test/fixtures/ directory. Use TABLE=table_name"
30
+ task :load => :environment do
31
+ #Flextures::ARGS.parse.each { |fmt| Flextures::Loader::load(fmt) }
32
+ end
33
+
34
+ desc "Dump data to the test/fixtures/ directory. Use TABLE=table_name"
35
+ task :csvload => :environment do
36
+ #Flextures::ARGS.parse.each { |fmt| Flextures::Loader::csv(fmt) }
37
+ end
38
+
39
+ desc "Dump data to the test/fixtures/ directory. Use TABLE=table_name"
40
+ task :ymlload => :environment do
41
+ #Flextures::ARGS::parse.each { |fmt| Flextures::Loader::yml(fmt) }
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,220 @@
1
+ # encoding: utf-8
2
+
3
+ require 'ostruct'
4
+ require 'csv'
5
+
6
+ require 'flextures/flextures_base_config'
7
+ require 'flextures/flextures_extension_modules'
8
+ require 'flextures/flextures_factory'
9
+ require 'flextures/rspec_flextures_support.rb' if defined?(RSpec)
10
+ load "#{Rails.root.to_path}/config/flextures.config.rb" if defined?(Rails) and Rails.root
11
+ load "#{Rails.root.to_path}/config/flextures.factory.rb" if defined?(Rails) and Rails.root
12
+
13
+ module Flextures
14
+ LOAD_DIR = Config.fixture_load_directory
15
+ DUMP_DIR = Config.fixture_dump_directory
16
+
17
+ # 引数解析
18
+ module ARGS
19
+ # 書き出し・読み込み すべきファイルとオプションを書きだす
20
+ def self.parse option={}
21
+ table_names = ""
22
+ table_names = ENV["TABLE"].split(",") if ENV["TABLE"]
23
+ table_names = ENV["T"].split(",") if ENV["T"]
24
+ table_names = ENV["MODEL"].constantize.table_name.split(",") if ENV["MODEL"]
25
+ table_names = ENV["M"].constantize.table_name.split(",") if ENV["M"]
26
+ table_names = ActiveRecord::Base.connection.tables if ""==table_names
27
+ table_names = table_names.map{ |name| { table: name } }
28
+ table_names = table_names.map{ |option| option.merge dir: ENV["DIR"] } if ENV["DIR"]
29
+ table_names.first[:file]= ENV["FILE"] if ENV["FILE"] # ファイル名は最初のものしか指定できない
30
+ table_names.first[:file]= ENV["F"] if ENV["F"]
31
+ # read mode だとcsvもyaml存在しないファイルは返さない
32
+ table_names.select! &exist if option[:mode] && option[:mode].to_sym == :read
33
+ table_names
34
+ end
35
+
36
+ # 存在しているファイルで絞り込む 
37
+ def self.exist
38
+ return->(name){ File.exists?("#{LOAD_DIR}#{name}.csv") or File.exists?("#{LOAD_DIR}#{name}.yml") }
39
+ end
40
+ end
41
+
42
+ # テーブルモデルの作成
43
+ def self.create_model table_name
44
+ klass = Class.new ActiveRecord::Base
45
+ klass.table_name=table_name
46
+ klass
47
+ end
48
+
49
+ module Dumper
50
+ PARENT = Flextures
51
+
52
+ # 適切な型に変換
53
+ def self.trans v
54
+ case v
55
+ when true; 1
56
+ when false; 0
57
+ else; v
58
+ end
59
+ end
60
+
61
+ # csv で fixtures を dump
62
+ def self.csv format
63
+ table_name = format[:table]
64
+ file_name = format[:file] || table_name
65
+ dir_name = format[:dir] || DUMP_DIR
66
+ outfile = "#{dir_name}#{file_name}.csv"
67
+ klass = PARENT.create_model(table_name)
68
+ attributes = klass.columns.map { |colum| colum.name }
69
+
70
+ CSV.open(outfile,'w') do |csv|
71
+ csv<< attributes
72
+ klass.all.each do |row|
73
+ csv<< attributes.map { |column| trans(row.send(column))}
74
+ end
75
+ end
76
+ end
77
+
78
+ # yaml で fixtures を dump
79
+ def self.yml format
80
+ table_name = format[:table]
81
+ file_name = format[:file] || table_name
82
+ dir_name = format[:dir] || DUMP_DIR
83
+ outfile = "#{dir_name}#{file_name}.yml"
84
+ klass = PARENT::create_model(table_name)
85
+ attributes = klass.columns.map { |colum| colum.name }
86
+
87
+ File.open(outfile,"w") do |f|
88
+ klass.all.each_with_index do |row,idx|
89
+ f<< "#{table_name}_#{idx}:¥n" +
90
+ attributes.map { |column|
91
+ v = trans row.send(column)
92
+ " #{column}: #{v}¥n"
93
+ }.join
94
+ end
95
+ end
96
+ end
97
+ end
98
+
99
+ module Loader
100
+ PARENT = Flextures
101
+
102
+ # 型に応じて勝手にdefault値を設定する
103
+ COMPLETER = {
104
+ binary:->{ 0 },
105
+ boolean:->{ false },
106
+ date:->{ DateTime.now },
107
+ datetime:->{ DateTime.now },
108
+ decimal:->{ 0 },
109
+ float:->{ 0.0 },
110
+ integer:->{ 0 },
111
+ string:->{ "" },
112
+ text:->{ "" },
113
+ time:->{ DateTime.now },
114
+ timestamp:->{ DateTime.now },
115
+ }
116
+ # 型の変換を行う
117
+ TRANSLATER = {
118
+ binary:->(d){ d.to_i },
119
+ boolean:->(d){ (0==d || ""==d || !d) ? false : true },
120
+ date:->(d){ Date.parse(d.to_s) },
121
+ datetime:->(d){ DateTime.parse(d.to_s) },
122
+ decimal:->(d){ d.to_i },
123
+ float:->(d){ d.to_f },
124
+ integer:->(d){ d.to_i },
125
+ string:->(d){ d.to_s },
126
+ text:->(d){ d.to_s },
127
+ time:->(d){ DateTime.parse(d.to_s) },
128
+ timestamp:->(d){ DateTime.parse(d.to_s) },
129
+ }
130
+
131
+ # csv 優先で存在している fixtures をロード
132
+ def self.load format
133
+ file_name = format[:file] || format[:table]
134
+ dir_name = format[:dir] || LOAD_DIR
135
+ method = nil
136
+ method = :csv if File.exist? "#{dir_name}#{file_name}.csv"
137
+ method = :yml if File.exist? "#{dir_name}#{file_name}.yml"
138
+ self::send(method, format) if method
139
+ end
140
+
141
+ # fixturesをまとめてロード、主にテストtest/unit, rspec で使用する
142
+ def self.flextures *fixtures
143
+ # :allですべてのfixtureを反映
144
+ fixtures = ActiveRecord::Base.connection.tables if fixtures.size== 1 and :all == fixtures.first
145
+
146
+ fixtures_hash = fixtures.pop if fixtures.last and fixtures.last.is_a? Hash # ハッシュ取り出し
147
+ fixtures.each{ |table_name| Flextures::Loader::load table: table_name }
148
+ fixtures_hash.each{ |k,v| Flextures::Loader::load table: k, file: v } if fixtures_hash
149
+ fixtures
150
+ end
151
+
152
+ # CSVのデータをロードする
153
+ def self.csv format
154
+ table_name = format[:table].to_s
155
+ file_name = format[:file] || table_name
156
+ dir_name = format[:dir] || LOAD_DIR
157
+ inpfile = "#{dir_name}#{file_name}.csv"
158
+
159
+ klass = PARENT::create_model table_name
160
+ attributes = klass.columns.map &:name
161
+ filter = create_filter klass.columns, Factory[table_name]
162
+ #filter2 = create_filter2 klass.columns, Factory[table_name]
163
+ klass.delete_all
164
+ CSV.open( inpfile ) do |csv|
165
+ keys = csv.shift # keyの設定
166
+ warning "CSV", attributes, keys
167
+ csv.each do |values|
168
+ klass.create filter.call values.extend(Extensions::Array).to_hash(keys)
169
+ end
170
+ end
171
+ end
172
+
173
+ # YAML形式でデータをロードする
174
+ def self.yml format
175
+ table_name = format[:table].to_s
176
+ file_name = format[:file] || table_name
177
+ dir_name = format[:dir] || LOAD_DIR
178
+ inpfile = "#{dir_name}#{file_name}.yml"
179
+
180
+ klass = PARENT::create_model table_name
181
+ attributes = klass.columns.map &:name
182
+ filter = create_filter klass.columns, Factory[table_name]
183
+ klass.delete_all
184
+ YAML.load(File.open(inpfile)).each do |k,h|
185
+ warning "YAML", attributes, h.keys
186
+ klass.create filter.call h
187
+ end
188
+ end
189
+
190
+ # 欠けたカラムを検知してメッセージを出しておく
191
+ def self.warning format, attributes, keys
192
+ (attributes-keys).each { |name| print "Warning: #{format} colum is missing! [#{name}]¥n" }
193
+ (keys-attributes).each { |name| print "Warning: #{format} colum is left over! [#{name}]¥n" }
194
+ end
195
+
196
+ # フィクスチャから取り出した値を、加工して欲しいデータにするフィルタを作成して返す
197
+ def self.create_filter columns, factory=nil
198
+ # テーブルからカラム情報を取り出し
199
+ column_hash = {}
200
+ columns.each { |col| column_hash[col.name] = col }
201
+ # 自動補完が必要なはずのカラム
202
+ lack_columns = columns.select { |c| !c.null and !c.default }.map &:name
203
+ # ハッシュを受け取って、必要な値に加工してからハッシュで返す
204
+ return->(h){
205
+ h.select! { |k,v| column_hash[k] } # テーブルに存在しないキーが定義されているときは削除
206
+ # 値がnilでないなら型をDBで適切なものに変更
207
+ h.each{ |k,v| nil==v || h[k] = TRANSLATER[column_hash[k].type].call(v) }
208
+ # FactoryFilterを動作させる
209
+ st = OpenStruct.new(h)
210
+ factory.call(st) if factory
211
+ h = st.to_hash
212
+ # 値がnilの列にデフォルト値を補間
213
+ lack_columns.each { |k| nil==h[k] && h[k] = COMPLETER[column_hash[k].type].call }
214
+ h
215
+ }
216
+ end
217
+
218
+ end
219
+ end
220
+
@@ -1,20 +1,20 @@
1
- # encoding: utf-8
2
-
3
- # ��{�ݒ���L�q����
4
- module Flextures
5
- module Config
6
- @@configs={
7
- fixture_load_directory: "spec/fixtures/",
8
- fixture_dump_directory: "spec/fixtures/",
9
- }
10
- # �n�b�V����setter�Agetter�ɕϊ�
11
- class<< self
12
- @@configs.each do |setting_key, setting_value|
13
- define_method setting_key do @@configs[setting_key] end
14
- define_method "#{setting_key}=" do |arg| @@configs[setting_key]=arg end
15
- end
16
- end
17
- end
18
- end
19
-
20
-
1
+ # encoding: utf-8
2
+
3
+ # 基本設定を記述する
4
+ module Flextures
5
+ module Config
6
+ @@configs={
7
+ fixture_load_directory: "spec/fixtures/",
8
+ fixture_dump_directory: "spec/fixtures/",
9
+ }
10
+ # ハッシュをsetter、getterに変換
11
+ class<< self
12
+ @@configs.each do |setting_key, setting_value|
13
+ define_method setting_key do @@configs[setting_key] end
14
+ define_method "#{setting_key}=" do |arg| @@configs[setting_key]=arg end
15
+ end
16
+ end
17
+ end
18
+ end
19
+
20
+
@@ -1,28 +1,31 @@
1
- # encoding: utf-8
2
-
3
- module Flextures
4
- # Plug-in �����g��
5
- class OpenStruct < ::OpenStruct
6
- # hash�ɕω�������
7
- def to_hash
8
- h={}
9
- (self.methods - OpenStruct.new.methods)
10
- .select{ |name| name.match(/\w+=/) }
11
- .map{ |name| name.to_s.gsub(/=/,'').to_sym }
12
- .each{ |k| h[k]=self.send(k) }
13
- h
14
- end
15
- end
16
-
17
- module Extensions
18
- module Array
19
- def to_hash keys
20
- h = {}
21
- [keys,self].transpose.each{ |k,v| h[k]=v }
22
- h
23
- end
24
- end
25
- end
26
- end
27
-
28
-
1
+ # encoding: utf-8
2
+
3
+ require 'ostruct'
4
+ require 'csv'
5
+
6
+ module Flextures
7
+ # Plug-in 内部拡張
8
+ class OpenStruct < ::OpenStruct
9
+ # hashに変化させる
10
+ def to_hash
11
+ h={}
12
+ (self.methods - OpenStruct.new.methods)
13
+ .select{ |name| name.match(/¥w+=/) }
14
+ .map{ |name| name.to_s.gsub(/=/,'').to_sym }
15
+ .each{ |k| h[k]=self.send(k) }
16
+ h
17
+ end
18
+ end
19
+
20
+ module Extensions
21
+ module Array
22
+ def to_hash keys
23
+ h = {}
24
+ [keys,self].transpose.each{ |k,v| h[k]=v }
25
+ h
26
+ end
27
+ end
28
+ end
29
+ end
30
+
31
+
@@ -0,0 +1,27 @@
1
+ # encoding: utf-8
2
+
3
+ require 'ostruct'
4
+ require 'csv'
5
+
6
+ require 'flextures/flextures_base_config'
7
+ require 'flextures/flextures_extension_modules'
8
+ require 'flextures/flextures'
9
+ require 'flextures/flextures_factory'
10
+
11
+ module Flextures
12
+ # ロードするデータを必要に応じて加工する
13
+ class Factory
14
+ FACTORIES={}
15
+ # Factory を定義
16
+ def self.define table_name, &block
17
+ FACTORIES[table_name.to_sym]=block
18
+ end
19
+
20
+ # Factoryを取得
21
+ def self.get table_name
22
+ FACTORIES[table_name.to_sym]
23
+ end
24
+ def self.[](table_name); self.get(table_name); end
25
+ end
26
+ end
27
+
@@ -0,0 +1,9 @@
1
+ # encoding: utf-8
2
+
3
+ module Flextures
4
+ class Railtie < Rails::Railtie
5
+ rake_tasks do
6
+ load "flextures/flextures.rake"
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,13 @@
1
+ # encoding: utf-8
2
+
3
+ # Rspecの内部でflextures関数を使える様にする
4
+ module RSpec
5
+ module Core
6
+ module Hooks
7
+ def flextures *args
8
+ Flextures::Loader::flextures *args
9
+ end
10
+ end
11
+ end
12
+ end
13
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flextures
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.9.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,12 +9,12 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-11-03 00:00:00.000000000 +09:00
12
+ date: 2011-11-06 00:00:00.000000000 +09:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: shoulda
17
- requirement: &77603060 !ruby/object:Gem::Requirement
17
+ requirement: &87123700 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: '0'
23
23
  type: :development
24
24
  prerelease: false
25
- version_requirements: *77603060
25
+ version_requirements: *87123700
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: bundler
28
- requirement: &77602820 !ruby/object:Gem::Requirement
28
+ requirement: &87123460 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ~>
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: 1.0.0
34
34
  type: :development
35
35
  prerelease: false
36
- version_requirements: *77602820
36
+ version_requirements: *87123460
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: jeweler
39
- requirement: &77602580 !ruby/object:Gem::Requirement
39
+ requirement: &87123220 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ~>
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: 1.6.4
45
45
  type: :development
46
46
  prerelease: false
47
- version_requirements: *77602580
47
+ version_requirements: *87123220
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: rcov
50
- requirement: &77602340 !ruby/object:Gem::Requirement
50
+ requirement: &87122980 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ! '>='
@@ -55,7 +55,7 @@ dependencies:
55
55
  version: '0'
56
56
  type: :development
57
57
  prerelease: false
58
- version_requirements: *77602340
58
+ version_requirements: *87122980
59
59
  description: load and dump fixtures
60
60
  email: babanba.n@gmail.com
61
61
  executables: []
@@ -74,13 +74,14 @@ files:
74
74
  - Rakefile
75
75
  - VERSION
76
76
  - flextures.gemspec
77
- - init.rb
78
77
  - lib/flextures.rb
79
- - lib/flextures_base_config.rb
80
- - lib/flextures_extension_modules.rb
81
- - lib/flextures_factory.rb
82
- - lib/rspec_flextures_support.rb
83
- - lib/tasks/flextures.rake
78
+ - lib/flextures/flextures.rake
79
+ - lib/flextures/flextures.rb
80
+ - lib/flextures/flextures_base_config.rb
81
+ - lib/flextures/flextures_extension_modules.rb
82
+ - lib/flextures/flextures_factory.rb
83
+ - lib/flextures/flextures_railtie.rb
84
+ - lib/flextures/rspec_flextures_support.rb
84
85
  - test/helper.rb
85
86
  - test/test_flextures.rb
86
87
  has_rdoc: true
@@ -99,7 +100,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
99
100
  version: '0'
100
101
  segments:
101
102
  - 0
102
- hash: 804855759
103
+ hash: -599778417
103
104
  required_rubygems_version: !ruby/object:Gem::Requirement
104
105
  none: false
105
106
  requirements:
data/init.rb DELETED
@@ -1,16 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'ostruct'
4
- require 'csv'
5
-
6
- # ��������
7
- require 'flextures_base_config'
8
- # �������ե�������ɤ߽Ф�
9
- require "#{Rails.root.to_path}/config/flextures.config.rb" if File.exist? "#{Rails.root.to_path}/config/flextures.config.rb"
10
- require 'flextures'
11
- require 'flextures_extension_modules'
12
- require 'flextures_factory'
13
- require 'rspec_flextures_support.rb'
14
- # factory����
15
- require "#{Rails.root.to_path}/config/flextures.factory.rb" if File.exist? "#{Rails.root.to_path}/config/flextures.factory.rb"
16
-
@@ -1,19 +0,0 @@
1
- # encoding: utf-8
2
-
3
- module Flextures
4
- # �����ɤ���ǡ�����ɬ�פ˱����Ʋù�����
5
- class Factory
6
- FACTORIES={}
7
- # Factory �����
8
- def self.define table_name, &block
9
- FACTORIES[table_name.to_sym]=block
10
- end
11
-
12
- # Factory�����
13
- def self.get table_name
14
- FACTORIES[table_name.to_sym]
15
- end
16
- def self.[](table_name); self.get(table_name); end
17
- end
18
- end
19
-
@@ -1,9 +0,0 @@
1
- # encoding: utf-8
2
-
3
- # Rspec��������flextures�ؿ���Ȥ����ͤˤ���
4
- module RSpec::Core::Hooks
5
- def flextures *args
6
- Flextures::Loader::flextures *args
7
- end
8
- end
9
-
@@ -1,32 +0,0 @@
1
- # encoding: utf-8
2
-
3
- namespace :db do
4
- namespace :flextures do
5
- #desc "Dump data to the test/fixtures/ directory. Use TABLE=table_name"
6
- task :dump => :environment do
7
- Flextures::ARGS.parse.each { |fmt| Flextures::Dumper::csv(fmt) }
8
- end
9
-
10
- #desc "Dump data to the test/fixtures/ directory. Use TABLE=table_name"
11
- task :csvdump => :environment do
12
- Flextures::ARGS.parse.each { |fmt| Flextures::Dumper::csv(fmt) }
13
- end
14
-
15
- #desc "Dump data to the test/fixtures/ directory. Use TABLE=table_name"
16
- task :ymldump => :environment do
17
- Flextures::ARGS.parse.each { |fmt| Flextures::Dumper::yml(fmt) }
18
- end
19
-
20
- task :load => :environment do
21
- Flextures::ARGS.parse.each { |fmt| Flextures::Loader::load(fmt) }
22
- end
23
-
24
- task :csvload => :environment do
25
- Flextures::ARGS.parse.each { |fmt| Flextures::Loader::csv(fmt) }
26
- end
27
-
28
- task :ymlload => :environment do
29
- Flextures::ARGS::parse.each { |fmt| Flextures::Loader::yml(fmt) }
30
- end
31
- end
32
- end