flextures 4.2.7 → 4.3.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.
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.