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 +4 -4
- data/Gemfile +3 -6
- data/Gemfile.lock +22 -36
- data/flextures.gemspec +3 -1
- data/lib/flextures/flextures_dumper.rb +21 -12
- data/lib/flextures/flextures_loader.rb +8 -14
- data/lib/flextures/version.rb +1 -1
- metadata +20 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5a90f13f3dcd22f411ae7cd083c447f519c4e83f7bc12d668f66b332d00743bf
|
4
|
+
data.tar.gz: 10841a7d58ab0315c64e79cffb8747d4aac6ca831b18f509a54ded94a5630047
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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.
|
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"
|
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.
|
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 (
|
12
|
-
activesupport (=
|
13
|
-
activerecord (
|
14
|
-
activemodel (=
|
15
|
-
activesupport (=
|
16
|
-
|
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 (>=
|
20
|
-
minitest (
|
21
|
-
tzinfo (~>
|
22
|
-
|
23
|
-
|
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
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
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 (
|
35
|
+
bundler (> 1.6)
|
47
36
|
flextures!
|
48
|
-
minitest
|
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.
|
42
|
+
ruby 2.6.0p-1
|
57
43
|
|
58
44
|
BUNDLED WITH
|
59
|
-
1.
|
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", "
|
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
|
-
|
162
|
-
return
|
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
|
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(
|
195
|
+
def self.create_filter(attr_types, format, type)
|
187
196
|
filter = DumpFilter[format[:table].to_s.to_sym] || {}
|
188
197
|
->(row) {
|
189
|
-
|
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
|
-
|
202
|
-
filter = self.create_filter
|
203
|
-
self.dump_csv klass,
|
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,
|
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<<
|
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
|
-
|
230
|
-
filter = self.create_filter
|
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
|
257
|
-
|
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
|
data/lib/flextures/version.rb
CHANGED
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.
|
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:
|
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:
|
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
|
-
|
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.
|