flextures 1.0.8 → 1.9.0

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/Gemfile CHANGED
@@ -6,7 +6,7 @@ source "http://rubygems.org"
6
6
  # Add dependencies to develop your gem here.
7
7
  # Include everything needed to run rake, tests, features, etc.
8
8
  group :development do
9
- gem "shoulda", ">= 0"
9
+ #gem "shoulda", ">= 0"
10
10
  gem "bundler", "~> 1.0.0"
11
11
  gem "jeweler", "~> 1.6.4"
12
12
  gem "rcov", ">= 0"
data/Gemfile.lock CHANGED
@@ -8,7 +8,6 @@ GEM
8
8
  rake
9
9
  rake (0.9.2)
10
10
  rcov (0.9.11)
11
- shoulda (2.11.3)
12
11
 
13
12
  PLATFORMS
14
13
  ruby
@@ -17,4 +16,3 @@ DEPENDENCIES
17
16
  bundler (~> 1.0.0)
18
17
  jeweler (~> 1.6.4)
19
18
  rcov
20
- shoulda
data/README.ja.rdoc CHANGED
@@ -53,6 +53,7 @@ Usersモデルのfixture(users.csvか users.yml)をロードする
53
53
  MODEL : モデル名を指定してロード。モデル名はカンマ区切りで複数指定が可能
54
54
  DIR : フィクスチャをロード&ダンプするディレクトリを指定する
55
55
  FIXTURES : ロード、ダンプをするファイル名をRails標準以外のもので直接指定(Userモデルのusers.csv以外を指定)
56
+ FORMAT : yml,yaml 等の文字列を指定するとロード、ダンプをするフォーマットを変更できる(ymlload,ymldumpと同じ)
56
57
  T : TABLEのエイリアス
57
58
  M : モデル名指定のエイリアス
58
59
  D : ディレクトリ指定のエイリアス
data/README.rdoc CHANGED
@@ -54,6 +54,7 @@ Other options...
54
54
  MODEL : set model name
55
55
  DIR : set directory name
56
56
  FIXTURES : set fixture file name
57
+ FORMAT : dumping format change csv to yaml (aka. ymlload, ymldump command)
57
58
  T : alias TABLE option
58
59
  M : alias MODEL option
59
60
  D : alias DIR option
data/VERSION CHANGED
@@ -1,2 +1,2 @@
1
- 1.0.8
1
+ 1.9.0
2
2
 
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 = "1.0.8"
8
+ s.version = "1.9.0"
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{2012-01-26}
12
+ s.date = %q{2012-02-14}
13
13
  s.description = %q{load and dump fixtures}
14
14
  s.email = %q{babanba.n@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -49,18 +49,15 @@ Gem::Specification.new do |s|
49
49
  s.specification_version = 3
50
50
 
51
51
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
52
- s.add_development_dependency(%q<shoulda>, [">= 0"])
53
52
  s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
54
53
  s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
55
54
  s.add_development_dependency(%q<rcov>, [">= 0"])
56
55
  else
57
- s.add_dependency(%q<shoulda>, [">= 0"])
58
56
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
59
57
  s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
60
58
  s.add_dependency(%q<rcov>, [">= 0"])
61
59
  end
62
60
  else
63
- s.add_dependency(%q<shoulda>, [">= 0"])
64
61
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
65
62
  s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
66
63
  s.add_dependency(%q<rcov>, [">= 0"])
@@ -6,32 +6,57 @@ namespace :db do
6
6
  namespace :flextures do
7
7
  desc "Dump data to csv format"
8
8
  task :dump => :environment do
9
- Flextures::ARGS.parse.each { |fmt| Flextures::Dumper::csv(fmt) }
9
+ table_names = Flextures::ARGS.parse
10
+ Flextures::init_load
11
+ puts "dumping..."
12
+ if ["yml","yaml"].include? ENV["FORMAT"]
13
+ table_names.each { |fmt| Flextures::Dumper::yml(fmt) }
14
+ else
15
+ table_names.each { |fmt| Flextures::Dumper::csv(fmt) }
16
+ end
10
17
  end
11
18
 
12
19
  desc "Dump data to prefer csv format"
13
20
  task :csvdump => :environment do
14
- Flextures::ARGS.parse.each { |fmt| Flextures::Dumper::csv(fmt) }
21
+ table_names = Flextures::ARGS.parse
22
+ Flextures::init_load
23
+ table_names.each { |fmt| Flextures::Dumper::csv(fmt) }
15
24
  end
16
25
 
17
26
  desc "Dump data to yaml format"
18
27
  task :ymldump => :environment do
19
- Flextures::ARGS.parse.each { |fmt| Flextures::Dumper::yml(fmt) }
28
+ table_names = Flextures::ARGS.parse
29
+ Flextures::init_load
30
+ table_names.each { |fmt| Flextures::Dumper::yml(fmt) }
20
31
  end
21
32
 
22
33
  desc "load fixture data csv format"
23
34
  task :load => :environment do
24
- Flextures::ARGS.parse.each { |fmt| Flextures::Loader::load(fmt) }
35
+ table_names = Flextures::ARGS.parse
36
+ Flextures::init_load
37
+ Flextures::init_tables
38
+ puts "loading..."
39
+ if ["yml","yaml"].include? ENV["FORMAT"]
40
+ table_names.each { |fmt| Flextures::Loader::yml(fmt) }
41
+ else
42
+ table_names.each { |fmt| Flextures::Loader::csv(fmt) }
43
+ end
25
44
  end
26
45
 
27
46
  desc "load fixture data only csv format files"
28
47
  task :csvload => :environment do
29
- Flextures::ARGS.parse.each { |fmt| Flextures::Loader::csv(fmt) }
48
+ table_names = Flextures::ARGS.parse
49
+ Flextures::init_load
50
+ Flextures::init_tables
51
+ table_names.each { |fmt| Flextures::Loader::csv(fmt) }
30
52
  end
31
53
 
32
54
  desc "load fixture files only yaml format"
33
55
  task :ymlload => :environment do
34
- Flextures::ARGS::parse.each { |fmt| Flextures::Loader::yml(fmt) }
56
+ table_names = Flextures::ARGS::parse
57
+ Flextures::init_load
58
+ Flextures::init_tables
59
+ table_names.each { |fmt| Flextures::Loader::yml(fmt) }
35
60
  end
36
61
  end
37
62
  end
@@ -36,18 +36,27 @@ module Flextures
36
36
  end
37
37
  end
38
38
 
39
+ # テーブル情報の初期化
40
+ def self.init_tables
41
+ tables = ActiveRecord::Base.connection.tables
42
+ tables.delete "schema_migrations"
43
+ tables.each{ |name| Class.new(ActiveRecord::Base){ |o| o.table_name=name }.delete_all }
44
+ end
45
+
39
46
  # 引数解析
40
47
  module ARGS
41
48
  # 書き出し 、読み込み すべきファイルとオプションを書きだす
42
49
  def self.parse option={}
43
- Flextures::init_load
44
- table_names = ""
45
- table_names = ENV["TABLE"].split(",") if ENV["TABLE"]
46
- table_names = ENV["T"].split(",") if ENV["T"]
47
- table_names = ENV["MODEL"].constantize.table_name.split(",") if ENV["MODEL"]
48
- table_names = ENV["M"].constantize.table_name.split(",") if ENV["M"]
49
- table_names = ActiveRecord::Base.connection.tables if ""==table_names
50
- table_names = table_names.map{ |name| { table: name } }
50
+ table_names = []
51
+ if ENV["T"] or ENV["TABLE"]
52
+ table_names = (ENV["T"] or ENV["TABLE"]).split(',').map{ |name| { table: name } }
53
+ end
54
+ if ENV["M"] or ENV["MODEL"]
55
+ table_names = (ENV["M"] or ENV["MODEL"]).split(',').map{ |name| { table: name.constantize.table_name } }
56
+ end
57
+ if table_names.empty?
58
+ table_names = ActiveRecord::Base.connection.tables.map{ |name| { table: name } }
59
+ end
51
60
  # ENV["FIXTURES"]の中身を解析
52
61
  fixtures_args_parser =->(s){
53
62
  names = s.split(',')
@@ -84,27 +93,26 @@ module Flextures
84
93
 
85
94
  # csv で fixtures を dump
86
95
  def self.csv format
87
- table_name = format[:table]
88
- file_name = format[:file] || table_name
96
+ file_name = format[:file] || format[:table]
89
97
  dir_name = format[:dir] || DUMP_DIR
90
98
  outfile = "#{dir_name}#{file_name}.csv"
99
+ table_name = format[:table]
91
100
  klass = PARENT.create_model(table_name)
92
101
  attributes = klass.columns.map { |colum| colum.name }
93
-
94
102
  CSV.open(outfile,'w') do |csv|
95
103
  csv<< attributes
96
104
  klass.all.each do |row|
97
- csv<< attributes.map { |column| trans(row.send(column))}
105
+ csv<< attributes.map { |column| trans(row.send(column)) }
98
106
  end
99
107
  end
100
108
  end
101
109
 
102
110
  # yaml で fixtures を dump
103
111
  def self.yml format
104
- table_name = format[:table]
105
- file_name = format[:file] || table_name
112
+ file_name = format[:file] || format[:table]
106
113
  dir_name = format[:dir] || DUMP_DIR
107
114
  outfile = "#{dir_name}#{file_name}.yml"
115
+ table_name = format[:table]
108
116
  klass = PARENT::create_model(table_name)
109
117
  attributes = klass.columns.map { |colum| colum.name }
110
118
  File.open(outfile,"w") do |f|
@@ -164,8 +172,14 @@ module Flextures
164
172
  end
165
173
 
166
174
  # fixturesをまとめてロード、主にテストtest/unit, rspec で使用する
175
+ #
176
+ # 全テーブルが対象
177
+ # fixtures :all
178
+ # テーブル名で一覧する
179
+ # fixtures :users, :items
180
+ # ハッシュで指定
181
+ # fixtures :users => :users2
167
182
  def self.flextures *fixtures
168
- PARENT::init_load
169
183
  # :allですべてのfixtureを反映
170
184
  fixtures = ActiveRecord::Base.connection.tables if fixtures.size== 1 and :all == fixtures.first
171
185
 
@@ -184,13 +198,13 @@ module Flextures
184
198
  klass = PARENT::create_model table_name
185
199
  attributes = klass.columns.map &:name
186
200
  filter = create_filter klass, Factory[table_name]
187
- klass.delete_all
188
201
  CSV.open( inpfile ) do |csv|
189
202
  keys = csv.shift # keyの設定
190
203
  warning "CSV", attributes, keys
191
204
  csv.each do |values|
192
205
  h = values.extend(Extensions::Array).to_hash(keys)
193
- o = filter.call h
206
+ args = [h, file_name]
207
+ o = filter.call *args[0,filter.arity]
194
208
  o.save
195
209
  end
196
210
  end
@@ -208,7 +222,8 @@ module Flextures
208
222
  klass.delete_all
209
223
  YAML.load(File.open(inpfile)).each do |k,h|
210
224
  warning "YAML", attributes, h.keys
211
- o = filter.call h
225
+ args = [h, file_name]
226
+ o = filter.call *args[0,filter.arity]
212
227
  o.save
213
228
  end
214
229
  end
@@ -4,10 +4,25 @@
4
4
  module RSpec
5
5
  module Core
6
6
  module Hooks
7
- def flextures *args
8
- Flextures::Loader::flextures *args
7
+ def flextures *_
8
+ before { Flextures::Loader::flextures *_ }
9
9
  end
10
10
  end
11
11
  end
12
+
13
+ module Rails
14
+ module FlextureSupport
15
+ @@configs={ load_count: 0 }
16
+ def self.included(m)
17
+ # 一番外側のdescribeにだけ追加
18
+ m.before { Flextures::init_load } if @@configs[:load_count]==0
19
+ @@configs[:load_count] += 1
20
+ end
21
+ end
22
+ end
23
+
24
+ RSpec.configure do |c|
25
+ c.include RSpec::Rails::FlextureSupport
26
+ end
12
27
  end
13
28
 
@@ -2,8 +2,8 @@
2
2
 
3
3
  # shouda等へのfixture拡張
4
4
  class Test::Unit::TestCase
5
- def self.flextures *args
6
- setup{ Flextures::Loader::flextures *args }
5
+ def self.flextures *_
6
+ setup{ Flextures::Loader::flextures *_ }
7
7
  end
8
8
  end
9
9
 
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: 1.0.8
4
+ version: 1.9.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,23 +9,12 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-01-26 00:00:00.000000000 +09:00
12
+ date: 2012-02-14 00:00:00.000000000 +09:00
13
13
  default_executable:
14
14
  dependencies:
15
- - !ruby/object:Gem::Dependency
16
- name: shoulda
17
- requirement: &80302920 !ruby/object:Gem::Requirement
18
- none: false
19
- requirements:
20
- - - ! '>='
21
- - !ruby/object:Gem::Version
22
- version: '0'
23
- type: :development
24
- prerelease: false
25
- version_requirements: *80302920
26
15
  - !ruby/object:Gem::Dependency
27
16
  name: bundler
28
- requirement: &80302680 !ruby/object:Gem::Requirement
17
+ requirement: &86821870 !ruby/object:Gem::Requirement
29
18
  none: false
30
19
  requirements:
31
20
  - - ~>
@@ -33,10 +22,10 @@ dependencies:
33
22
  version: 1.0.0
34
23
  type: :development
35
24
  prerelease: false
36
- version_requirements: *80302680
25
+ version_requirements: *86821870
37
26
  - !ruby/object:Gem::Dependency
38
27
  name: jeweler
39
- requirement: &80302410 !ruby/object:Gem::Requirement
28
+ requirement: &86821630 !ruby/object:Gem::Requirement
40
29
  none: false
41
30
  requirements:
42
31
  - - ~>
@@ -44,10 +33,10 @@ dependencies:
44
33
  version: 1.6.4
45
34
  type: :development
46
35
  prerelease: false
47
- version_requirements: *80302410
36
+ version_requirements: *86821630
48
37
  - !ruby/object:Gem::Dependency
49
38
  name: rcov
50
- requirement: &80302150 !ruby/object:Gem::Requirement
39
+ requirement: &86821330 !ruby/object:Gem::Requirement
51
40
  none: false
52
41
  requirements:
53
42
  - - ! '>='
@@ -55,7 +44,7 @@ dependencies:
55
44
  version: '0'
56
45
  type: :development
57
46
  prerelease: false
58
- version_requirements: *80302150
47
+ version_requirements: *86821330
59
48
  description: load and dump fixtures
60
49
  email: babanba.n@gmail.com
61
50
  executables: []
@@ -101,7 +90,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
101
90
  version: '0'
102
91
  segments:
103
92
  - 0
104
- hash: -723323507
93
+ hash: -236599985
105
94
  required_rubygems_version: !ruby/object:Gem::Requirement
106
95
  none: false
107
96
  requirements: