flextures 4.0.1 → 4.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +17 -4
- data/flextures.gemspec +4 -3
- data/lib/flextures.rb +2 -1
- data/lib/flextures/flextures.rb +29 -32
- data/lib/flextures/flextures_command.rb +3 -4
- data/lib/flextures/flextures_loader.rb +78 -46
- data/lib/flextures/rspec_flextures_support.rb +9 -2
- data/lib/flextures/version.rb +1 -1
- metadata +39 -13
- data/lib/flextures/flextures_extension_modules.rb +0 -19
- data/test/unit/flextures_extention_modules_test.rb +0 -42
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2712b12b0de4f85effbdb3be89c88fc0217397ef
|
4
|
+
data.tar.gz: 348adf4807760f5155eaa8d3b3e9b0d3a702aff2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bbc454cc0aa60de6d9562dced99c7a5c13bf2eb2a3dc4ccb83c92b5015bf254269a45650c11224d19265be01f94a9b216930e8a729d85db6c27cc1805199b0b2
|
7
|
+
data.tar.gz: 487d9167c8150ff3e416ef02db0d2147526694c7004205cc386d0061b4f9c4a81b70b6e7e4067f2c6a00da3417aaf0b12d3addb1c5a83513c481ceff55d83aba
|
data/Gemfile.lock
CHANGED
@@ -1,17 +1,31 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
flextures (4.0
|
4
|
+
flextures (4.1.0)
|
5
|
+
activerecord
|
6
|
+
activerecord-import
|
7
|
+
activesupport
|
5
8
|
|
6
9
|
GEM
|
7
10
|
remote: https://rubygems.org/
|
8
11
|
specs:
|
9
|
-
|
12
|
+
activemodel (4.2.6)
|
13
|
+
activesupport (= 4.2.6)
|
14
|
+
builder (~> 3.1)
|
15
|
+
activerecord (4.2.6)
|
16
|
+
activemodel (= 4.2.6)
|
17
|
+
activesupport (= 4.2.6)
|
18
|
+
arel (~> 6.0)
|
19
|
+
activerecord-import (0.13.0)
|
20
|
+
activerecord (>= 3.0)
|
21
|
+
activesupport (4.2.6)
|
10
22
|
i18n (~> 0.7)
|
11
23
|
json (~> 1.7, >= 1.7.7)
|
12
24
|
minitest (~> 5.1)
|
13
25
|
thread_safe (~> 0.3, >= 0.3.4)
|
14
26
|
tzinfo (~> 1.1)
|
27
|
+
arel (6.0.3)
|
28
|
+
builder (3.2.2)
|
15
29
|
i18n (0.7.0)
|
16
30
|
json (1.8.3)
|
17
31
|
minitest (5.4.0)
|
@@ -34,7 +48,6 @@ PLATFORMS
|
|
34
48
|
ruby
|
35
49
|
|
36
50
|
DEPENDENCIES
|
37
|
-
activesupport
|
38
51
|
bundler (~> 1.6)
|
39
52
|
flextures!
|
40
53
|
minitest (= 5.4.0)
|
@@ -45,4 +58,4 @@ DEPENDENCIES
|
|
45
58
|
rake
|
46
59
|
|
47
60
|
BUNDLED WITH
|
48
|
-
1.
|
61
|
+
1.11.2
|
data/flextures.gemspec
CHANGED
@@ -15,12 +15,13 @@ Gem::Specification.new do |spec|
|
|
15
15
|
|
16
16
|
spec.files = `git ls-files -z`.split("\x0")
|
17
17
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
-
#spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
18
|
spec.test_files = ["test/unit/flextures_args_test.rb"]
|
20
19
|
spec.require_paths = ["lib"]
|
21
20
|
|
21
|
+
spec.add_dependency "activerecord"
|
22
|
+
spec.add_dependency "activesupport"
|
23
|
+
spec.add_dependency "activerecord-import"
|
24
|
+
|
22
25
|
spec.add_development_dependency "bundler", "~> 1.6"
|
23
26
|
spec.add_development_dependency "rake"
|
24
|
-
spec.add_development_dependency "activesupport"
|
25
|
-
#spec.add_development_dependency "minitest", "5.4.0"
|
26
27
|
end
|
data/lib/flextures.rb
CHANGED
data/lib/flextures/flextures.rb
CHANGED
@@ -1,31 +1,28 @@
|
|
1
|
-
require 'ostruct'
|
2
|
-
require 'csv'
|
3
1
|
require "flextures/flextures_base_config"
|
4
|
-
require "flextures/flextures_extension_modules"
|
5
2
|
require "flextures/flextures_factory"
|
6
3
|
|
7
4
|
module Flextures
|
8
5
|
# guessing ActiveRecord Model name by table_name and create
|
9
6
|
# @params [String|Symbol] table_name
|
10
7
|
# @params [ActiveRecord::Base] model class
|
11
|
-
def self.create_model(
|
8
|
+
def self.create_model(table_name)
|
12
9
|
# when Model is defined in FactoryFilter
|
13
|
-
a = ->
|
10
|
+
a = -> do
|
14
11
|
f = Factory::FACTORIES[table_name.to_sym]
|
15
12
|
f && f[:model]
|
16
|
-
|
13
|
+
end
|
17
14
|
# when program can guess Model name by table_name
|
18
|
-
b = ->
|
15
|
+
b = -> do
|
19
16
|
begin
|
20
17
|
table_name.singularize.camelize.constantize
|
21
18
|
rescue => e
|
22
19
|
nil
|
23
20
|
end
|
24
|
-
|
21
|
+
end
|
25
22
|
# when cannot guess Model name
|
26
|
-
c = ->
|
23
|
+
c = -> do
|
27
24
|
Class.new(ActiveRecord::Base){ |o| o.table_name=table_name }
|
28
|
-
|
25
|
+
end
|
29
26
|
a.call || b.call || c.call
|
30
27
|
end
|
31
28
|
|
@@ -57,7 +54,7 @@ module Flextures
|
|
57
54
|
end
|
58
55
|
end
|
59
56
|
|
60
|
-
def self.delete_tables(
|
57
|
+
def self.delete_tables(*tables)
|
61
58
|
tables.each do |name|
|
62
59
|
# if 'name' variable is 'database view', raise error
|
63
60
|
begin
|
@@ -69,7 +66,7 @@ module Flextures
|
|
69
66
|
|
70
67
|
# It is debug method to use like 'tab' method
|
71
68
|
# @params [Proc] dumper write dump information
|
72
|
-
def self.table_tap(
|
69
|
+
def self.table_tap(&dumper)
|
73
70
|
tables = Flextures::deletable_tables
|
74
71
|
tables.each do |name|
|
75
72
|
# if 'name' variable is 'database view', raise error
|
@@ -84,12 +81,12 @@ module Flextures
|
|
84
81
|
# parse arguments functions.
|
85
82
|
module ARGS
|
86
83
|
# parse rake ENV parameters
|
87
|
-
def self.parse( option={}
|
84
|
+
def self.parse(env={}, option={})
|
88
85
|
table_names = []
|
89
|
-
if v = (
|
86
|
+
if v = (env["T"] or env["TABLE"])
|
90
87
|
table_names = v.split(',').map{ |name| { table: name, file: name } }
|
91
88
|
end
|
92
|
-
if v = (
|
89
|
+
if v = (env["M"] or env["MODEL"])
|
93
90
|
table_names = v.split(',').map do |name|
|
94
91
|
name = name.constantize.table_name
|
95
92
|
{ table: name, file: name }
|
@@ -98,30 +95,30 @@ module Flextures
|
|
98
95
|
|
99
96
|
table_names = Flextures::deletable_tables.map{ |name| { table: name, file: name } } if table_names.empty?
|
100
97
|
|
101
|
-
# parse
|
102
|
-
fixtures_args_parser
|
98
|
+
# parse env["FIXTURES"] paameter
|
99
|
+
fixtures_args_parser = ->(s){
|
103
100
|
names = s.split(',')
|
104
|
-
if
|
105
|
-
[ table_names.first.merge(
|
101
|
+
if env["TABLE"] or env["T"] or env["MODEL"] or env["M"]
|
102
|
+
[ table_names.first.merge(file: names.first) ]
|
106
103
|
else
|
107
104
|
names.map{ |name| { table: name, file: name } }
|
108
105
|
end
|
109
106
|
}
|
110
107
|
# parse filename and define parameters.
|
111
|
-
table_names = fixtures_args_parser.call
|
112
|
-
table_names = fixtures_args_parser.call
|
113
|
-
table_names = fixtures_args_parser.call
|
108
|
+
table_names = fixtures_args_parser.call env["FIXTURES"] if env["FIXTURES"]
|
109
|
+
table_names = fixtures_args_parser.call env["FILE"] if env["FILE"]
|
110
|
+
table_names = fixtures_args_parser.call env["F"] if env["F"]
|
114
111
|
|
115
|
-
table_names = table_names.map{ |option| option.merge(
|
116
|
-
table_names = table_names.map{ |option| option.merge(
|
112
|
+
table_names = table_names.map{ |option| option.merge(dir: env["DIR"]) } if env["DIR"]
|
113
|
+
table_names = table_names.map{ |option| option.merge(dir: env["D"]) } if env["D"]
|
117
114
|
|
118
|
-
table_names = table_names.map{ |option| option.merge(
|
119
|
-
table_names = table_names.map{ |option| option.merge(
|
115
|
+
table_names = table_names.map{ |option| option.merge(minus: env["MINUS"].to_s.split(",")) } if env["MINUS"]
|
116
|
+
table_names = table_names.map{ |option| option.merge(plus: env["PLUS"].to_s.split(",")) } if env["PLUS"]
|
120
117
|
|
121
|
-
table_names = table_names.map{ |option| option.merge(
|
122
|
-
table_names = table_names.map{ |option| option.merge(
|
123
|
-
table_names = table_names.map{ |option| option.merge(
|
124
|
-
table_names = table_names.map{ |option| option.merge(
|
118
|
+
table_names = table_names.map{ |option| option.merge(silent: true) } if env["OPTION"].to_s.split(",").include?("silent")
|
119
|
+
table_names = table_names.map{ |option| option.merge(unfilter: true) } if env["OPTION"].to_s.split(",").include?("unfilter")
|
120
|
+
table_names = table_names.map{ |option| option.merge(strict: true) } if env["OPTION"].to_s.split(",").include?("strict")
|
121
|
+
table_names = table_names.map{ |option| option.merge(stair: true) } if env["OPTION"].to_s.split(",").include?("stair")
|
125
122
|
|
126
123
|
# if mode is 'read mode' and file is not exist, value is not return.
|
127
124
|
table_names.select!(&exist) if option[:mode] && option[:mode] == 'read'
|
@@ -130,8 +127,8 @@ module Flextures
|
|
130
127
|
|
131
128
|
# check exist filename block
|
132
129
|
def self.exist
|
133
|
-
return->(name){ File.exists?(
|
134
|
-
File.exists?(
|
130
|
+
return->(name){ File.exists?(File.join(Flextures::Configuration.load_directory, "#{name}.csv")) or
|
131
|
+
File.exists?(File.join(Flextures::Configuration.load_directory, "#{name}.yml")) }
|
135
132
|
end
|
136
133
|
end
|
137
134
|
end
|
@@ -2,7 +2,6 @@ require 'ostruct'
|
|
2
2
|
require 'csv'
|
3
3
|
|
4
4
|
require 'flextures/flextures_base_config'
|
5
|
-
require 'flextures/flextures_extension_modules'
|
6
5
|
require 'flextures/flextures'
|
7
6
|
require 'flextures/flextures_factory'
|
8
7
|
|
@@ -11,7 +10,7 @@ module Flextures
|
|
11
10
|
module Command
|
12
11
|
def self.dump
|
13
12
|
Flextures::load_configurations
|
14
|
-
table_names = Flextures::ARGS.parse
|
13
|
+
table_names = Flextures::ARGS.parse(ENV)
|
15
14
|
puts "dumping..."
|
16
15
|
case ENV["FORMAT"].to_s.to_sym
|
17
16
|
when :yml,:yaml
|
@@ -25,7 +24,7 @@ module Flextures
|
|
25
24
|
|
26
25
|
def self.load
|
27
26
|
Flextures::load_configurations
|
28
|
-
table_names = Flextures::ARGS.parse
|
27
|
+
table_names = Flextures::ARGS.parse(ENV)
|
29
28
|
Flextures::init_tables unless ENV["T"] or ENV["TABLE"] or ENV["M"] or ENV["MODEL"] or ENV["F"] or ENV["FIXTUES"]
|
30
29
|
file_format = ENV["FORMAT"]
|
31
30
|
puts "loading..."
|
@@ -42,7 +41,7 @@ module Flextures
|
|
42
41
|
# load and dump data
|
43
42
|
def self.generate
|
44
43
|
Flextures::load_configurations
|
45
|
-
table_names = Flextures::ARGS.parse
|
44
|
+
table_names = Flextures::ARGS.parse(ENV)
|
46
45
|
Flextures::init_tables unless ENV["T"] or ENV["TABLE"] or ENV["M"] or ENV["MODEL"] or ENV["F"] or ENV["FIXTUES"]
|
47
46
|
file_format = ENV["FORMAT"]
|
48
47
|
puts "generating..."
|
@@ -1,15 +1,33 @@
|
|
1
1
|
require 'ostruct'
|
2
2
|
require 'csv'
|
3
|
+
require 'erb'
|
4
|
+
|
5
|
+
require 'active_record'
|
6
|
+
require 'activerecord-import'
|
3
7
|
|
4
8
|
require 'flextures/flextures_base_config'
|
5
|
-
require 'flextures/flextures_extension_modules'
|
6
9
|
require 'flextures/flextures'
|
7
10
|
require 'flextures/flextures_factory'
|
8
11
|
|
9
12
|
module Flextures
|
10
13
|
# data loader
|
11
14
|
class Loader
|
15
|
+
module ArrayEx
|
16
|
+
refine Array do
|
17
|
+
# @params [Array] keys hash keys
|
18
|
+
# @return [Hash] tanslated Hash data
|
19
|
+
def to_hash(keys)
|
20
|
+
values = self
|
21
|
+
values = values[0..keys.size-1] if keys.size < values.size
|
22
|
+
values = values+[nil]*(keys.size-values.size) if keys.size > values.size
|
23
|
+
[keys,values].transpose.reduce({}){ |h,pair| k,v=pair; h[k]=v; h }
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
using ArrayEx
|
28
|
+
|
12
29
|
PARENT = Flextures
|
30
|
+
FORMATS = [ %i[csv erb], %i[erb csv], %i[csv], %i[yml erb], %i[erb yml], %i[yml] ]
|
13
31
|
|
14
32
|
# column set default value
|
15
33
|
COMPLETER = {
|
@@ -97,19 +115,17 @@ module Flextures
|
|
97
115
|
end
|
98
116
|
|
99
117
|
def self.cache?(params)
|
100
|
-
|
101
|
-
param = params.first
|
102
|
-
param[:cache] == true
|
103
|
-
end
|
104
|
-
end
|
118
|
+
return unless params.first.is_a?(Hash)
|
105
119
|
|
106
|
-
|
120
|
+
param = params.first
|
121
|
+
param[:cache] == true
|
107
122
|
end
|
108
123
|
|
109
124
|
# compare
|
110
125
|
def equal_table_data?(src, dst)
|
111
126
|
return false unless src.is_a?(Hash)
|
112
127
|
return false unless dst.is_a?(Hash)
|
128
|
+
|
113
129
|
(src.to_a - dst.to_a).empty?
|
114
130
|
end
|
115
131
|
|
@@ -165,67 +181,82 @@ module Flextures
|
|
165
181
|
|
166
182
|
# @return [Proc] order rule block (user Array#sort methd)
|
167
183
|
def self.loading_order
|
168
|
-
->(a,b)
|
184
|
+
->(a,b) do
|
169
185
|
a = Flextures::Configuration.table_load_order.index(a) || -1
|
170
186
|
b = Flextures::Configuration.table_load_order.index(b) || -1
|
171
187
|
b <=> a
|
172
|
-
|
188
|
+
end
|
173
189
|
end
|
174
190
|
|
175
191
|
# load fixture data
|
176
192
|
# fixture file prefer YAML to CSV
|
177
193
|
# @params [Hash] format file load format(table name, file name, options...)
|
178
194
|
def self.load(format)
|
179
|
-
file_name,
|
180
|
-
|
181
|
-
|
195
|
+
file_name, *exts = file_exist(format)
|
196
|
+
format[:erb] = exts.include?(:erb)
|
197
|
+
method = exts.detect { |k| [:csv, :yml].include?(k) }
|
198
|
+
|
199
|
+
return unless self.file_loadable?(format, file_name)
|
200
|
+
|
201
|
+
klass, filter = self.create_model_filter(format, file_name, method)
|
202
|
+
|
203
|
+
case method
|
204
|
+
when :csv
|
205
|
+
self.load_csv(format, klass, filter, file_name)
|
206
|
+
when :yml
|
207
|
+
self.load_yml(format, klass, filter, file_name)
|
182
208
|
else
|
183
209
|
puts "Warning: #{file_name} is not exist!" unless format[:silent]
|
184
210
|
end
|
185
211
|
end
|
186
212
|
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
213
|
+
def self.load_file(format, file_name)
|
214
|
+
file = nil
|
215
|
+
if format[:erb]
|
216
|
+
str = File.open(file_name){ |f| f.read }
|
217
|
+
file = ERB.new(str).result
|
218
|
+
else
|
219
|
+
file = File.open(file_name)
|
220
|
+
end
|
195
221
|
end
|
196
222
|
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
return unless self.file_loadable?(format, file_name)
|
204
|
-
|
205
|
-
klass, filter = self.create_model_filter(format, file_name, type)
|
206
|
-
self.load_yml(format, klass, filter, file_name)
|
223
|
+
def self.load_csv(format, klass, filter, file_name)
|
224
|
+
file = self.load_file(format, file_name)
|
225
|
+
CSV.open(file) do |csv|
|
226
|
+
self.load_csv_row(csv, format, klass, filter, file_name)
|
227
|
+
end
|
228
|
+
file_name
|
207
229
|
end
|
208
230
|
|
209
|
-
def self.
|
231
|
+
def self.load_csv_row(csv, format, klass, filter, file_name)
|
210
232
|
attributes = klass.columns.map(&:name)
|
211
|
-
|
212
|
-
|
213
|
-
|
233
|
+
keys = csv.shift # active record column names
|
234
|
+
|
235
|
+
warning("CSV", attributes, keys) unless format[:silent]
|
236
|
+
|
237
|
+
ActiveRecord::Base.transaction do
|
214
238
|
csv.each do |values|
|
215
|
-
h = values.
|
216
|
-
filter.call(h)
|
239
|
+
h = values.to_hash(keys)
|
240
|
+
o = filter.call(h)
|
241
|
+
o.save(validation: false)
|
217
242
|
end
|
218
243
|
end
|
219
|
-
file_name
|
220
244
|
end
|
221
245
|
|
222
246
|
def self.load_yml(format, klass, filter, file_name)
|
223
|
-
|
247
|
+
file = self.load_file(format, file_name)
|
248
|
+
yaml = YAML.load(file)
|
249
|
+
|
224
250
|
return false unless yaml # if file is empty
|
251
|
+
|
225
252
|
attributes = klass.columns.map(&:name)
|
226
|
-
|
227
|
-
|
228
|
-
|
253
|
+
ActiveRecord::Base.transaction do
|
254
|
+
yaml.each do |k,h|
|
255
|
+
warning("YAML", attributes, h.keys) unless format[:silent]
|
256
|
+
|
257
|
+
o = filter.call(h)
|
258
|
+
o.save(validation: false)
|
259
|
+
end
|
229
260
|
end
|
230
261
|
file_name
|
231
262
|
end
|
@@ -257,6 +288,7 @@ module Flextures
|
|
257
288
|
# return ["foo/bar/baz","foo/bar","foo",""]
|
258
289
|
def self.stair_list(dir, stair=true)
|
259
290
|
return [dir.to_s] unless stair
|
291
|
+
|
260
292
|
l = []
|
261
293
|
dir.to_s.split("/").reduce([]){ |a,d| a<< d; l.unshift(a.join("/")); a }
|
262
294
|
l<< ""
|
@@ -272,10 +304,12 @@ module Flextures
|
|
272
304
|
base_dir_name = Flextures::Configuration.load_directory
|
273
305
|
self.stair_list(format[:dir], format[:stair]).each do |dir|
|
274
306
|
file_path = File.join(base_dir_name, dir, file_name)
|
275
|
-
|
276
|
-
|
307
|
+
formats = FORMATS.select { |fmt| (type & fmt).present? }
|
308
|
+
formats.each do |fmt|
|
309
|
+
return ["#{file_path}.#{fmt.join('.')}", *fmt] if File.exist?("#{file_path}.#{fmt.join('.')}")
|
310
|
+
end
|
277
311
|
end
|
278
|
-
[
|
312
|
+
["#{File.join(base_dir_name, file_name)}.csv", nil]
|
279
313
|
end
|
280
314
|
|
281
315
|
# file load check
|
@@ -296,7 +330,6 @@ module Flextures
|
|
296
330
|
def self.create_model_filter(format, file_name, type)
|
297
331
|
table_name = format[:table].to_s
|
298
332
|
klass = PARENT::create_model(table_name)
|
299
|
-
# binding.pry
|
300
333
|
# if you use 'rails3_acts_as_paranoid' gem, that is not delete data 'delete_all' method
|
301
334
|
klass.send(klass.respond_to?(:delete_all!) ? :delete_all! : :delete_all)
|
302
335
|
|
@@ -304,7 +337,6 @@ module Flextures
|
|
304
337
|
filter = create_filter(klass, LoadFilter[table_name.to_sym], file_name, type, format)
|
305
338
|
o = klass.new
|
306
339
|
o = filter.call(o, h)
|
307
|
-
o.save(validate: false)
|
308
340
|
o
|
309
341
|
}
|
310
342
|
[klass, filter]
|
@@ -146,8 +146,15 @@ module ActiveRecord
|
|
146
146
|
end
|
147
147
|
|
148
148
|
def flextures_set_options(options)
|
149
|
-
|
150
|
-
|
149
|
+
get_or_initialize_flextures_loader_options.merge!(options)
|
150
|
+
end
|
151
|
+
|
152
|
+
def flextures_instance
|
153
|
+
self
|
154
|
+
end
|
155
|
+
|
156
|
+
def flextures_options
|
157
|
+
@flextures_loader_options
|
151
158
|
end
|
152
159
|
end
|
153
160
|
end
|
data/lib/flextures/version.rb
CHANGED
metadata
CHANGED
@@ -1,37 +1,37 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: flextures
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.0
|
4
|
+
version: 4.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- baban
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-05-
|
11
|
+
date: 2016-05-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: activerecord
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
20
|
-
type: :
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: activesupport
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
|
-
type: :
|
34
|
+
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
@@ -39,7 +39,35 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: activerecord-import
|
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'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: bundler
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.6'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.6'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rake
|
43
71
|
requirement: !ruby/object:Gem::Requirement
|
44
72
|
requirements:
|
45
73
|
- - ">="
|
@@ -75,7 +103,6 @@ files:
|
|
75
103
|
- lib/flextures/flextures_base_config.rb
|
76
104
|
- lib/flextures/flextures_command.rb
|
77
105
|
- lib/flextures/flextures_dumper.rb
|
78
|
-
- lib/flextures/flextures_extension_modules.rb
|
79
106
|
- lib/flextures/flextures_factory.rb
|
80
107
|
- lib/flextures/flextures_loader.rb
|
81
108
|
- lib/flextures/flextures_railtie.rb
|
@@ -85,7 +112,6 @@ files:
|
|
85
112
|
- test/test_helper.rb
|
86
113
|
- test/unit/flextures_args_test.rb
|
87
114
|
- test/unit/flextures_dumper_test.rb
|
88
|
-
- test/unit/flextures_extention_modules_test.rb
|
89
115
|
- test/unit/flextures_hooks_test.rb
|
90
116
|
- test/unit/flextures_loader_test.rb
|
91
117
|
homepage: http://github.com/baban/flextures
|
@@ -1,19 +0,0 @@
|
|
1
|
-
require 'ostruct'
|
2
|
-
|
3
|
-
module Flextures
|
4
|
-
module Extensions
|
5
|
-
module Array
|
6
|
-
# use Object#extend
|
7
|
-
# @params [Array] keys hash keys
|
8
|
-
# @return [Hash] tanslated Hash data
|
9
|
-
# example:
|
10
|
-
# hash = array.extend(Extensions::Array).to_hash(keys)
|
11
|
-
def to_hash(keys)
|
12
|
-
values = self
|
13
|
-
values = values[0..keys.size-1] if keys.size < values.size
|
14
|
-
values = values+[nil]*(keys.size-values.size) if keys.size > values.size
|
15
|
-
[keys,values].transpose.reduce({}){ |h,pair| k,v=pair; h[k]=v; h }
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
@@ -1,42 +0,0 @@
|
|
1
|
-
$:.push( File.join(File.dirname(File.expand_path(__FILE__)), '../') )
|
2
|
-
require 'test_helper'
|
3
|
-
|
4
|
-
describe :Extention do
|
5
|
-
describe "Array#to_hash" do
|
6
|
-
describe "when column size is equal data size" do
|
7
|
-
before do
|
8
|
-
@keys = %W[id name hp]
|
9
|
-
@values = %W[1 hoge 100]
|
10
|
-
@h = @values.extend(Flextures::Extensions::Array).to_hash(@keys)
|
11
|
-
end
|
12
|
-
|
13
|
-
it "return hash" do
|
14
|
-
assert_equal @h, { "id"=>"1", "name"=>"hoge", "hp"=>"100" }
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
describe "when column size is bigger than data size" do
|
19
|
-
before do
|
20
|
-
@keys = %W[id name hp]
|
21
|
-
@values = %W[1 hoge]
|
22
|
-
@h = @values.extend(Flextures::Extensions::Array).to_hash(@keys)
|
23
|
-
end
|
24
|
-
|
25
|
-
it "return hash, overflow key is filled 'nil'" do
|
26
|
-
assert_equal @h, { "id"=>"1", "name"=>"hoge", "hp"=> nil }
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
describe "when column size is smaller than data size" do
|
31
|
-
before do
|
32
|
-
@keys = %W[id name]
|
33
|
-
@values = %W[1 hoge 200]
|
34
|
-
@h = @values.extend(Flextures::Extensions::Array).to_hash(@keys)
|
35
|
-
end
|
36
|
-
|
37
|
-
it "return hash, overflow value is cut offed" do
|
38
|
-
assert_equal @h, { "id"=>"1", "name"=>"hoge" }
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|