flextures 4.2.7 → 4.3.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9ec25de01a43e9290997564492a3d9e7130bdab30d9fc3d336fb217e43e9a832
4
- data.tar.gz: b69afe1a47cefcc14e34e7bfa0bc1b388cf5215bcfb490dd111fb03a1f5a9a04
3
+ metadata.gz: 5a90f13f3dcd22f411ae7cd083c447f519c4e83f7bc12d668f66b332d00743bf
4
+ data.tar.gz: 10841a7d58ab0315c64e79cffb8747d4aac6ca831b18f509a54ded94a5630047
5
5
  SHA512:
6
- metadata.gz: 43add46684a60b6214936b9fe40824db473bccd44984940ba02b0769074e027eb28ef927f46c7621584a0532d48c2ed8be93fb633ee5ea7f45935905f9dff476
7
- data.tar.gz: 6033adcd80cd7bc9ed63c4f045c9a5893b849a58722d633c2158bf7983416dd1300019d84e5dcbcc9e0e681ef48fd0443d1a2bae603ec978ad134461ad0c57b4
6
+ metadata.gz: b975ba3a7c920dd434dc452d4a58984b2073cf56b99156223ece80bb147a9e248986d6f3b0a6c558bf5931db828ae5b51c0d6003660cebcd32a1092626671dea
7
+ data.tar.gz: 7de4861baec635cb9f4a736c59d7d7bb23d66a9067796687f1eb5e689a24b52b6f54a268b4934dc4857846d95bd9c2479924575e2407c7148b010d3fde32dbbc
data/Gemfile CHANGED
@@ -1,15 +1,12 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- ruby ">= 2.1.0"
3
+ ruby ">= 2.3.0"
4
4
 
5
5
  # Specify your gem's dependencies in flextures.gemspec
6
6
  gemspec
7
7
 
8
- gem "minitest", "5.4.0"
8
+ gem "minitest"
9
+ gem "smarter_csv"
9
10
 
10
11
  group :test do
11
- gem "minitest-line", "0.6.2"
12
- gem "minitest-bang", "0.1.1" # let文を使えるようにする
13
- gem "minitest-implicit-subject", "1.4.0" # subject関数を追加する
14
- gem "minitest-power_assert", "0.0.3" # power assertを有効にする
15
12
  end
data/Gemfile.lock CHANGED
@@ -1,59 +1,45 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- flextures (4.2.7)
4
+ flextures (4.3.1)
5
5
  activerecord
6
6
  activesupport
7
+ smarter_csv
7
8
 
8
9
  GEM
9
10
  remote: https://rubygems.org/
10
11
  specs:
11
- activemodel (5.2.0)
12
- activesupport (= 5.2.0)
13
- activerecord (5.2.0)
14
- activemodel (= 5.2.0)
15
- activesupport (= 5.2.0)
16
- arel (>= 9.0)
17
- activesupport (5.2.0)
12
+ activemodel (7.0.3.1)
13
+ activesupport (= 7.0.3.1)
14
+ activerecord (7.0.3.1)
15
+ activemodel (= 7.0.3.1)
16
+ activesupport (= 7.0.3.1)
17
+ activesupport (7.0.3.1)
18
18
  concurrent-ruby (~> 1.0, >= 1.0.2)
19
- i18n (>= 0.7, < 2)
20
- minitest (~> 5.1)
21
- tzinfo (~> 1.1)
22
- arel (9.0.0)
23
- concurrent-ruby (1.0.5)
24
- i18n (1.0.1)
19
+ i18n (>= 1.6, < 2)
20
+ minitest (>= 5.1)
21
+ tzinfo (~> 2.0)
22
+ concurrent-ruby (1.1.10)
23
+ i18n (1.12.0)
25
24
  concurrent-ruby (~> 1.0)
26
25
  minitest (5.4.0)
27
- minitest-bang (0.1.1)
28
- minitest (>= 4.7.5, <= 5.4.0)
29
- minitest-implicit-subject (1.4.0)
30
- minitest
31
- minitest-line (0.6.2)
32
- minitest (~> 5.0)
33
- minitest-power_assert (0.0.3)
34
- minitest
35
- power_assert
36
- power_assert (0.2.2)
37
- rake (0.9.2.2)
38
- thread_safe (0.3.6)
39
- tzinfo (1.2.5)
40
- thread_safe (~> 0.1)
26
+ rake (13.0.1)
27
+ smarter_csv (1.2.6)
28
+ tzinfo (2.0.5)
29
+ concurrent-ruby (~> 1.0)
41
30
 
42
31
  PLATFORMS
43
32
  ruby
44
33
 
45
34
  DEPENDENCIES
46
- bundler (~> 1.6)
35
+ bundler (> 1.6)
47
36
  flextures!
48
- minitest (= 5.4.0)
49
- minitest-bang (= 0.1.1)
50
- minitest-implicit-subject (= 1.4.0)
51
- minitest-line (= 0.6.2)
52
- minitest-power_assert (= 0.0.3)
37
+ minitest
53
38
  rake
39
+ smarter_csv
54
40
 
55
41
  RUBY VERSION
56
- ruby 2.2.3p173
42
+ ruby 2.6.0p-1
57
43
 
58
44
  BUNDLED WITH
59
- 1.16.2
45
+ 1.17.2
data/flextures.gemspec CHANGED
@@ -11,6 +11,7 @@ Gem::Specification.new do |spec|
11
11
  spec.description = %q{load and dump fixtures.}
12
12
  spec.homepage = "http://github.com/baban/flextures"
13
13
  spec.license = "MIT"
14
+ spec.required_ruby_version = '>= 2.4.0'
14
15
 
15
16
  spec.files = `git ls-files -z`.split("\x0")
16
17
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
@@ -19,7 +20,8 @@ Gem::Specification.new do |spec|
19
20
 
20
21
  spec.add_dependency "activerecord"
21
22
  spec.add_dependency "activesupport"
23
+ spec.add_dependency "smarter_csv"
22
24
 
23
- spec.add_development_dependency "bundler", "~> 1.6"
25
+ spec.add_development_dependency "bundler", "> 1.6"
24
26
  spec.add_development_dependency "rake"
25
27
  end
@@ -146,6 +146,12 @@ module Flextures
146
146
  [proc { |d| d.to_s }]
147
147
  self.translate_creater d, procs
148
148
  },
149
+ enum:->( d, format ){
150
+ procs = (format == :yml) ?
151
+ [:blankstr, :nullstr, :ymlspecialstr] :
152
+ [:null, proc{ |s| s.to_s.gsub(/\r\n/,"\n").gsub(/\r/,"\n") } ]
153
+ self.translate_creater d, procs
154
+ },
149
155
  # use null only value
150
156
  null:->( d, format ){
151
157
  format==:yml ? "null" : ""
@@ -158,8 +164,8 @@ module Flextures
158
164
  # @params [Symbol] format data type (:yml or :csv)
159
165
  # @return translated value
160
166
  def self.trans(v, type, format)
161
- trans = TRANSLATER[type]
162
- return trans.call(v, format) if trans
167
+ translater = TRANSLATER[type]
168
+ return translater.call(v, format) if translater
163
169
  v
164
170
  end
165
171
 
@@ -168,7 +174,10 @@ module Flextures
168
174
  # @params [Hash] options dump options
169
175
  # @return [Array] columns format information
170
176
  def self.dump_attributes(klass, options)
171
- columns = klass.columns.map { |column| { name: column.name, type: column.type } }
177
+ columns = klass.columns.map do |column|
178
+ type_name = klass.defined_enums[column.name.to_s] ? :enum : column.type
179
+ { name: column.name, type: type_name }
180
+ end
172
181
  # option[:minus] colum is delete columns
173
182
  columns.reject! { |column| options[:minus].include?(column[:name]) } if options[:minus]
174
183
  # option[:plus] colum is new columns
@@ -183,10 +192,10 @@ module Flextures
183
192
  # @params [Hash] options options
184
193
  # @params [Symbol] type format type (:yml or :csv)
185
194
  # @return [Proc] filter function
186
- def self.create_filter(attr_type, format, type)
195
+ def self.create_filter(attr_types, format, type)
187
196
  filter = DumpFilter[format[:table].to_s.to_sym] || {}
188
197
  ->(row) {
189
- attr_type.map do |h|
198
+ attr_types.map do |h|
190
199
  v = filter[h[:name].to_sym] ? filter[h[:name].to_sym].call(row[h[:name]]) : trans(row[h[:name]], h[:type], type)
191
200
  [h[:name],v]
192
201
  end
@@ -198,13 +207,13 @@ module Flextures
198
207
  # @params [Hash] options dump format options
199
208
  def self.csv(format)
200
209
  klass = PARENT.create_model(format[:table])
201
- attr_type = self.dump_attributes klass, format
202
- filter = self.create_filter attr_type, format, :csv
203
- self.dump_csv klass, attr_type, filter, format
210
+ attr_types = self.dump_attributes klass, format
211
+ filter = self.create_filter attr_types, format, :csv
212
+ self.dump_csv klass, attr_types, filter, format
204
213
  end
205
214
 
206
215
  # dump csv format data
207
- def self.dump_csv(klass, attr_type, values_filter, format)
216
+ def self.dump_csv(klass, attr_types, values_filter, format)
208
217
  # TODO: 拡張子は指定してもしなくても良いようにする
209
218
  file_name = format[:file] || format[:table]
210
219
  dir_name = File.join(Flextures::Configuration.dump_directory, format[:dir].to_s)
@@ -212,7 +221,7 @@ module Flextures
212
221
  outfile = File.join(dir_name, "#{file_name}.csv")
213
222
  CSV.open(outfile,'w') do |csv|
214
223
  # dump column names
215
- csv<< attr_type.map { |h| h[:name].to_s }
224
+ csv<< attr_types.map { |h| h[:name].to_s }
216
225
  # dump column datas
217
226
  klass.all.each do |row|
218
227
  csv<< values_filter.call(row).map(&:last)
@@ -226,8 +235,8 @@ module Flextures
226
235
  # @params [Hash] options dump format options
227
236
  def self.yml(format)
228
237
  klass = PARENT::create_model(format[:table])
229
- attr_type = self.dump_attributes klass, format
230
- filter = self.create_filter attr_type, format, :yml
238
+ attr_types = self.dump_attributes klass, format
239
+ filter = self.create_filter attr_types, format, :yml
231
240
  self.dump_yml(klass, filter, format)
232
241
  end
233
242
 
@@ -1,6 +1,7 @@
1
1
  require 'ostruct'
2
2
  require 'csv'
3
3
  require 'erb'
4
+ require 'smarter_csv'
4
5
 
5
6
  require 'active_record'
6
7
 
@@ -240,25 +241,18 @@ module Flextures
240
241
 
241
242
  def self.load_csv(format, klass, filter, file_name)
242
243
  file = self.load_file(format, file_name)
243
- CSV.open(file) do |csv|
244
- self.load_csv_row(csv, format, klass, filter, file_name)
245
- end
246
- file_name
247
- end
248
-
249
- def self.load_csv_row(csv, format, klass, filter, file_name)
250
244
  attributes = klass.columns.map(&:name)
251
- keys = csv.shift # active record column names
252
-
253
- warning("CSV", attributes, keys) unless format[:silent]
254
-
255
245
  ActiveRecord::Base.transaction do
256
- csv.each do |values|
257
- h = values.to_hash(keys)
246
+ csv = SmarterCSV.process(file.path)
247
+ keys = csv.first.keys.map(&:to_s)
248
+ warning("CSV", attributes, keys) unless format[:silent]
249
+ csv.each do |row|
250
+ h = row.reduce({}){ |h,(k,v)| h[k.to_s]=v; h }
258
251
  o = filter.call(h)
259
252
  o.save(validate: false)
260
253
  end
261
254
  end
255
+ file_name
262
256
  end
263
257
 
264
258
  def self.load_yml(format, klass, filter, file_name)
@@ -377,7 +371,7 @@ module Flextures
377
371
  translaters = column_hash.reduce({}){ |h,(k,col)| h[k] = col.translater(klass); h }
378
372
  strict_filter = ->(o,h){
379
373
  # if value is not 'nil', value translate suitable form
380
- h.each{ |k,v| v.nil? || o[k] = translaters[k]&.call(v) }
374
+ h.each { |k,v| v.nil? || o[k] = translaters[k]&.call(v) }
381
375
  # call FactoryFilter
382
376
  factory.call(*[o, filename, ext][0, factory.arity]) if factory and !options[:unfilter]
383
377
  o
@@ -1,3 +1,3 @@
1
1
  module Flextures
2
- VERSION="4.2.7".freeze
2
+ VERSION="4.3.1".freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flextures
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.2.7
4
+ version: 4.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - baban
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-07-10 00:00:00.000000000 Z
11
+ date: 2022-08-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -38,18 +38,32 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: smarter_csv
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: bundler
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
- - - "~>"
59
+ - - ">"
46
60
  - !ruby/object:Gem::Version
47
61
  version: '1.6'
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
- - - "~>"
66
+ - - ">"
53
67
  - !ruby/object:Gem::Version
54
68
  version: '1.6'
55
69
  - !ruby/object:Gem::Dependency
@@ -116,15 +130,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
116
130
  requirements:
117
131
  - - ">="
118
132
  - !ruby/object:Gem::Version
119
- version: '0'
133
+ version: 2.4.0
120
134
  required_rubygems_version: !ruby/object:Gem::Requirement
121
135
  requirements:
122
136
  - - ">="
123
137
  - !ruby/object:Gem::Version
124
138
  version: '0'
125
139
  requirements: []
126
- rubyforge_project:
127
- rubygems_version: 2.7.6
140
+ rubygems_version: 3.3.7
128
141
  signing_key:
129
142
  specification_version: 4
130
143
  summary: load and dump fixtures.