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 +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.
|