ferry 1.1.1 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -0
- data/bin/ferry +15 -18
- data/ferry.gemspec +3 -2
- data/lib/ferry/exporter.rb +90 -54
- data/lib/ferry/importer.rb +4 -0
- data/lib/ferry/version.rb +1 -1
- data/spec/tests/exporter_tests.rb +48 -22
- data/spec/tests/importer_tests.rb +18 -5
- metadata +47 -33
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 065ab8138b33c19136ad3d48fae24740f770b315
|
4
|
+
data.tar.gz: 966b8a66bf724c5956c60ca93ca15d2a77201d67
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: da24497d6f36699c0d9ffe2d94d7305605f5df133a09cf2ba68896a83b7daae2a700b0498f0d8ab67d4fa673f3ee008814139ee6d5ef543c44ea47842ded0c67
|
7
|
+
data.tar.gz: 41ac1f3daae74a4a20f6937789ccf9a39f49fc6f6e23837846174f0c816eb82bc4ed9e6158ef926550736115675bec1b658c41c342d534fa005c7416696219f1
|
data/.travis.yml
CHANGED
data/bin/ferry
CHANGED
@@ -5,24 +5,7 @@ OptionParser.new do |opts|
|
|
5
5
|
options = {}
|
6
6
|
opts.banner = "See more documentation at http://cmu-is-projects.github.io/ferry"
|
7
7
|
|
8
|
-
opts.on(
|
9
|
-
raise "too many arguments for input" unless ARGV.length <= 1
|
10
|
-
raise "please enter a field for environment and table" unless ARGV.length == 1
|
11
|
-
questionmaster = Ferry::Utilities.new
|
12
|
-
if questionmaster.continue?("Are you sure you want to switch to a #{ARGV[0]} database in your #{opt} env? It could result in installing software that impacts your project.")
|
13
|
-
switcher = Ferry::Switcher.new
|
14
|
-
switcher.to_new_db_type(opt, ARGV[0])
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
opts.on("--to_csv ENVIRONMENT TABLE", 'Exports table to csv file in db/csv/[your db environment]/[your table]') do |opt|
|
19
|
-
raise "too many arguments for input" unless ARGV.length <= 1
|
20
|
-
raise "please enter a field for environment and table" unless ARGV.length == 1
|
21
|
-
exporter = Ferry::Exporter.new
|
22
|
-
exporter.to_csv(opt, ARGV[0])
|
23
|
-
end
|
24
|
-
|
25
|
-
opts.on('--import ENVIRONMENT TABLE FILEPATH', 'Imports data from specified file into table and environment of your specification') do |opt|
|
8
|
+
opts.on("--import ENVIRONMENT TABLE FILEPATH", 'Imports data from specified file into table and environment of your specification') do |opt|
|
26
9
|
raise "too many arguments for input" unless ARGV.length <= 2
|
27
10
|
raise "please enter a field for environment and table and filename" unless ARGV.length == 2
|
28
11
|
importer = Ferry::Importer.new
|
@@ -34,6 +17,20 @@ OptionParser.new do |opts|
|
|
34
17
|
filemaker.make_starter_file
|
35
18
|
end
|
36
19
|
|
20
|
+
opts.on("--to_csv ENVIRONMENT TABLE", 'Exports table to csv file in db/csv/[your db environment]/[your table]') do |opt|
|
21
|
+
raise "too many arguments for input" unless ARGV.length <= 1
|
22
|
+
raise "please enter a field for environment and table" unless ARGV.length == 1
|
23
|
+
exporter = Ferry::Exporter.new
|
24
|
+
exporter.to_csv(opt, ARGV[0])
|
25
|
+
end
|
26
|
+
|
27
|
+
opts.on("--to_json ENVIRONMENT TABLE", 'Exports table to json file in db/json/[your db environment]/[your table]') do |opt|
|
28
|
+
raise "too many arguments for input" unless ARGV.length <= 1
|
29
|
+
raise "please enter a field for environment and table" unless ARGV.length == 1
|
30
|
+
exporter = Ferry::Exporter.new
|
31
|
+
exporter.to_json(opt, ARGV[0])
|
32
|
+
end
|
33
|
+
|
37
34
|
opts.on("--to_yaml ENVIRONMENT TABLE", 'Exports table to yaml file in db/yaml/[your db environment]/[your table]') do |opt|
|
38
35
|
raise "too many arguments for input" unless ARGV.length <= 1
|
39
36
|
raise "please enter a field for environment and table" unless ARGV.length == 1
|
data/ferry.gemspec
CHANGED
@@ -8,8 +8,8 @@ Gem::Specification.new do |spec|
|
|
8
8
|
spec.version = Ferry::VERSION
|
9
9
|
spec.authors = ["Anthony Corletti", "Logan Watanabe", "Larry Heimann"]
|
10
10
|
spec.email = ["anthcor@gmail.com", "loganwatanabe@gmail.com", "profh@cmu.edu"]
|
11
|
-
spec.summary = "Ferry is a data migration and
|
12
|
-
spec.description = "Ferry is a data migration and
|
11
|
+
spec.summary = "Ferry is a data migration and visualization command line tool rubygem"
|
12
|
+
spec.description = "Ferry is a data migration and visualization command line tool rubygem that seeks to simplify the increasingly prevalent big data problems for developers"
|
13
13
|
spec.homepage = "https://cmu-is-projects.github.io/ferry"
|
14
14
|
spec.license = "MIT"
|
15
15
|
spec.files = `git ls-files -z`.split("\x0")
|
@@ -26,6 +26,7 @@ Gem::Specification.new do |spec|
|
|
26
26
|
spec.add_development_dependency "sqlite3", "~> 1.3.10"
|
27
27
|
spec.add_development_dependency "mysql2", "~> 0.3.16"
|
28
28
|
spec.add_development_dependency "factory_girl", "~> 4.5.0"
|
29
|
+
spec.add_development_dependency "json"
|
29
30
|
spec.add_runtime_dependency "progressbar", "~> 0.21.0"
|
30
31
|
spec.add_runtime_dependency "highline", "~> 1.6.21"
|
31
32
|
end
|
data/lib/ferry/exporter.rb
CHANGED
@@ -4,11 +4,11 @@ module Ferry
|
|
4
4
|
class Exporter < Utilities
|
5
5
|
def to_csv(environment, model)
|
6
6
|
db_type = db_connect(environment)
|
7
|
-
FileUtils.mkdir "db" unless Dir["db"].present?
|
7
|
+
FileUtils.mkdir "db" unless Dir["db"].present?
|
8
8
|
FileUtils.mkdir "db/csv" unless Dir["db/csv"].present?
|
9
9
|
homedir = "db/csv/#{environment}"
|
10
10
|
FileUtils.mkdir homedir unless Dir[homedir].present?
|
11
|
-
table = ActiveRecord::Base.connection.execute("SELECT * FROM #{model};")
|
11
|
+
table = ActiveRecord::Base.connection.execute("SELECT * FROM #{model};")
|
12
12
|
CSV.open("#{homedir}/#{model}.csv", "w") do |csv|
|
13
13
|
case db_type
|
14
14
|
when 'sqlite3'
|
@@ -51,67 +51,103 @@ module Ferry
|
|
51
51
|
|
52
52
|
def to_yaml(environment, model)
|
53
53
|
db_type = db_connect(environment)
|
54
|
-
FileUtils.mkdir "db" unless Dir["db"].present?
|
54
|
+
FileUtils.mkdir "db" unless Dir["db"].present?
|
55
55
|
FileUtils.mkdir "db/yaml" unless Dir["db/yaml"].present?
|
56
56
|
homedir = "db/yaml/#{environment}"
|
57
57
|
FileUtils.mkdir homedir unless Dir[homedir].present?
|
58
|
-
table = ActiveRecord::Base.connection.execute("SELECT * FROM #{model};")
|
58
|
+
table = ActiveRecord::Base.connection.execute("SELECT * FROM #{model};")
|
59
59
|
db_object = {}
|
60
60
|
db_output = {}
|
61
61
|
case db_type
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
62
|
+
when 'sqlite3'
|
63
|
+
yaml_bar = ProgressBar.new("to_csv", table.length)
|
64
|
+
keys = table[0].keys.first(table[0].length / 2)
|
65
|
+
db_object["columns"] = keys
|
66
|
+
model_arr=[]
|
67
|
+
table.each do |row|
|
68
|
+
model_arr << row.values_at(*keys)
|
69
|
+
yaml_bar.inc
|
70
|
+
end
|
71
|
+
db_object["records"] = model_arr
|
72
|
+
db_output[model] = db_object
|
73
|
+
File.open("#{homedir}/#{model}.yml",'a') do |file|
|
74
|
+
YAML::dump(db_output, file)
|
75
|
+
end
|
76
|
+
when 'postgresql'
|
77
|
+
yaml_bar = ProgressBar.new("to_csv", table.num_tuples)
|
78
|
+
keys = table[0].keys
|
79
|
+
db_object["columns"] = keys
|
80
|
+
model_arr=[]
|
81
|
+
table.each do |row|
|
82
|
+
model_arr << row.values_at(*keys)
|
83
|
+
yaml_bar.inc
|
84
|
+
end
|
85
|
+
db_object["records"] = model_arr
|
86
|
+
db_output[model] = db_object
|
87
|
+
File.open("#{homedir}/#{model}.yml",'a') do |file|
|
88
|
+
YAML::dump(db_output, file)
|
89
|
+
end
|
90
|
+
when 'mysql2'
|
91
|
+
yaml_bar = ProgressBar.new("to_csv", table.count)
|
92
|
+
db_config = YAML::load(IO.read("config/database.yml"))
|
93
|
+
columns = ActiveRecord::Base.connection.execute("SELECT `COLUMN_NAME` FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA`= '#{db_config[environment]['database']}' AND `TABLE_NAME`='#{model}';")
|
94
|
+
col_names=[]
|
95
|
+
columns.each do |col|
|
96
|
+
col_names.append(col[0])
|
97
|
+
end
|
98
|
+
db_object["columns"] = col_names
|
99
|
+
model_arr=[]
|
100
|
+
table.each do |row|
|
101
|
+
model_arr << row
|
102
|
+
yaml_bar.inc
|
103
|
+
end
|
104
|
+
db_object["records"] = model_arr
|
105
|
+
db_output[model] = db_object
|
106
|
+
File.open("#{homedir}/#{model}.yml",'a') do |file|
|
107
|
+
YAML::dump(db_output, file)
|
108
|
+
end
|
109
|
+
else
|
110
|
+
puts "error in db type"
|
111
|
+
return false
|
112
112
|
end
|
113
113
|
puts ""
|
114
114
|
puts "exported to db/yaml/#{environment}"
|
115
115
|
end
|
116
|
+
|
117
|
+
# to_json does not implement ProgressBar
|
118
|
+
def to_json(environment, model)
|
119
|
+
db_type = db_connect(environment)
|
120
|
+
FileUtils.mkdir "db" unless Dir["db"].present?
|
121
|
+
FileUtils.mkdir "db/json" unless Dir["db/json"].present?
|
122
|
+
homedir = "db/json/#{environment}"
|
123
|
+
FileUtils.mkdir homedir unless Dir[homedir].present?
|
124
|
+
table = ActiveRecord::Base.connection.execute("SELECT * FROM #{model};")
|
125
|
+
db_config = YAML::load(IO.read("config/database.yml"))
|
126
|
+
if db_type == "mysql2"
|
127
|
+
keys = []
|
128
|
+
columns = ActiveRecord::Base.connection.execute("SELECT `COLUMN_NAME` FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA`= '#{db_config[environment]['database']}' AND `TABLE_NAME`='#{model}';")
|
129
|
+
columns.each do |col|
|
130
|
+
keys.append(col[0])
|
131
|
+
end
|
132
|
+
table_in_json = []
|
133
|
+
table.each do |record|
|
134
|
+
record_json = {}
|
135
|
+
keys.each do |key|
|
136
|
+
record_json[key] = record[keys.index(key)]
|
137
|
+
end
|
138
|
+
table_in_json << record_json
|
139
|
+
end
|
140
|
+
File.open("#{homedir}/#{model}.json",'a') do |file|
|
141
|
+
file.write(table_in_json.to_json)
|
142
|
+
end
|
143
|
+
else
|
144
|
+
File.open("#{homedir}/#{model}.json",'a') do |file|
|
145
|
+
file.write(table.to_json)
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
# TODO: export db functions, indexes, views, triggers, transactions, constraints, schemas, tests
|
151
|
+
# TODO: test!
|
116
152
|
end
|
117
153
|
end
|
data/lib/ferry/importer.rb
CHANGED
@@ -25,6 +25,7 @@ module Ferry
|
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
|
+
# TODO: Add importing .json
|
28
29
|
def import(environment, model, filename)
|
29
30
|
db_connect(environment)
|
30
31
|
adapter = YAML::load(IO.read("config/database.yml"))[environment]["adapter"]
|
@@ -53,5 +54,8 @@ module Ferry
|
|
53
54
|
puts ""
|
54
55
|
puts "csv imported to #{model} table"
|
55
56
|
end
|
57
|
+
|
58
|
+
# TODO: export db functions, indexes, views, triggers, transactions, constraints, schemas, tests
|
59
|
+
# TODO: test!
|
56
60
|
end
|
57
61
|
end
|
data/lib/ferry/version.rb
CHANGED
@@ -14,6 +14,10 @@ describe("export functionality") do
|
|
14
14
|
FileUtils.rm_rf('db')
|
15
15
|
end
|
16
16
|
|
17
|
+
it "should error if specified table does not exist" do
|
18
|
+
expect{exporter.to_csv('sqlite3', 'cart')}.to raise_error
|
19
|
+
end
|
20
|
+
|
17
21
|
describe "to_csv" do
|
18
22
|
it "call should create a populated csv file" do
|
19
23
|
exporter.to_csv('sqlite3', 'carts')
|
@@ -25,17 +29,12 @@ describe("export functionality") do
|
|
25
29
|
expect(lines[1]).to eql(["1", "abby@example.com"])
|
26
30
|
expect(lines[26]).to eql(["26", "zach@example.com"])
|
27
31
|
end
|
28
|
-
|
29
|
-
it "should error if specified table does not exist" do
|
30
|
-
expect{exporter.to_csv('sqlite3', 'cart')}.to raise_error #correct table is "carts"
|
31
|
-
end
|
32
|
-
|
33
32
|
end
|
34
33
|
|
35
34
|
describe "to_yaml" do
|
36
35
|
it "call should create a populated yaml file" do
|
37
36
|
exporter.to_yaml('sqlite3', 'carts')
|
38
|
-
file_path = File.expand_path("..",Dir.pwd) + "/spec/db/yaml/sqlite3/carts.yml"
|
37
|
+
file_path = File.expand_path("..", Dir.pwd) + "/spec/db/yaml/sqlite3/carts.yml"
|
39
38
|
expect(File).to exist(file_path)
|
40
39
|
output = YAML.load_file(file_path)
|
41
40
|
expect(output["carts"].length).to eql(2)
|
@@ -44,18 +43,25 @@ describe("export functionality") do
|
|
44
43
|
expect(output["carts"]["records"][0]).to eql([1,"abby@example.com"])
|
45
44
|
expect(output["carts"]["records"][25]).to eql([26,"zach@example.com"])
|
46
45
|
end
|
46
|
+
end
|
47
47
|
|
48
|
-
|
49
|
-
|
48
|
+
describe "to_json" do
|
49
|
+
it "should create a correctly formatted json file" do
|
50
|
+
exporter.to_json('sqlite3', 'carts')
|
51
|
+
file_path = File.expand_path("..", Dir.pwd) + "/spec/db/json/sqlite3/carts.json"
|
52
|
+
file_content = File.read(file_path)
|
53
|
+
expect(File).to exist(file_path)
|
54
|
+
output = JSON.parse(file_content)
|
55
|
+
expect(output.length).to eql(26)
|
56
|
+
expect(output[0]["email"]).to eql("abby@example.com")
|
57
|
+
expect(output[25]["email"]).to eql("zach@example.com")
|
50
58
|
end
|
51
59
|
end
|
52
|
-
|
53
60
|
end
|
54
61
|
|
55
62
|
describe "postgresql db" do
|
56
63
|
before(:all) do
|
57
64
|
connect("postgresql")
|
58
|
-
# requires you to have a ferry_test db in pg
|
59
65
|
Contexts.setup
|
60
66
|
end
|
61
67
|
after(:all) do
|
@@ -63,6 +69,10 @@ describe("export functionality") do
|
|
63
69
|
FileUtils.rm_rf('db')
|
64
70
|
end
|
65
71
|
|
72
|
+
it "should error if specified table does not exist" do
|
73
|
+
expect{exporter.to_csv('postgresql', 'cart')}.to raise_error
|
74
|
+
end
|
75
|
+
|
66
76
|
describe "to_csv" do
|
67
77
|
it "call should create a populated csv file" do
|
68
78
|
exporter.to_csv('postgresql', 'carts')
|
@@ -74,11 +84,8 @@ describe("export functionality") do
|
|
74
84
|
expect(lines[1]).to eql(["1", "abby@example.com"])
|
75
85
|
expect(lines[26]).to eql(["26", "zach@example.com"])
|
76
86
|
end
|
77
|
-
|
78
|
-
it "should error if specified table does not exist" do
|
79
|
-
expect{exporter.to_csv('postgresql', 'cart')}.to raise_error #correct table is "carts"
|
80
|
-
end
|
81
87
|
end
|
88
|
+
|
82
89
|
describe "to_yaml" do
|
83
90
|
it "call should create a populated yaml file" do
|
84
91
|
exporter.to_yaml('postgresql', 'carts')
|
@@ -91,9 +98,18 @@ describe("export functionality") do
|
|
91
98
|
expect(output["carts"]["records"][0]).to eql(["1","abby@example.com"])
|
92
99
|
expect(output["carts"]["records"][25]).to eql(["26","zach@example.com"])
|
93
100
|
end
|
101
|
+
end
|
94
102
|
|
95
|
-
|
96
|
-
|
103
|
+
describe "to_json" do
|
104
|
+
it "should create a correctly formatted json file" do
|
105
|
+
exporter.to_json('postgresql', 'carts')
|
106
|
+
file_path = File.expand_path("..", Dir.pwd) + "/spec/db/json/postgresql/carts.json"
|
107
|
+
file_content = File.read(file_path)
|
108
|
+
expect(File).to exist(file_path)
|
109
|
+
output = JSON.parse(file_content)
|
110
|
+
expect(output.length).to eql(26)
|
111
|
+
expect(output[0]["email"]).to eql("abby@example.com")
|
112
|
+
expect(output[25]["email"]).to eql("zach@example.com")
|
97
113
|
end
|
98
114
|
end
|
99
115
|
end
|
@@ -101,7 +117,6 @@ describe("export functionality") do
|
|
101
117
|
describe "mysql2 db" do
|
102
118
|
before(:all) do
|
103
119
|
connect("mysql2")
|
104
|
-
# requires you to have a ferry_test db in mysql
|
105
120
|
Contexts.setup
|
106
121
|
end
|
107
122
|
after(:all) do
|
@@ -109,6 +124,10 @@ describe("export functionality") do
|
|
109
124
|
FileUtils.rm_rf('db')
|
110
125
|
end
|
111
126
|
|
127
|
+
it "should error if specified table does not exist" do
|
128
|
+
expect{exporter.to_csv('mysql2', 'cart')}.to raise_error
|
129
|
+
end
|
130
|
+
|
112
131
|
describe "to_csv" do
|
113
132
|
it "call should create a populated csv file" do
|
114
133
|
exporter.to_csv('mysql2', 'carts')
|
@@ -120,9 +139,6 @@ describe("export functionality") do
|
|
120
139
|
expect(lines[1]).to eql(["1", "abby@example.com"])
|
121
140
|
expect(lines[26]).to eql(["26", "zach@example.com"])
|
122
141
|
end
|
123
|
-
it "should error if specified table does not exist" do
|
124
|
-
expect{exporter.to_csv('mysql2', 'cart')}.to raise_error #correct table is "carts"
|
125
|
-
end
|
126
142
|
end
|
127
143
|
|
128
144
|
describe "to_yaml" do
|
@@ -137,8 +153,18 @@ describe("export functionality") do
|
|
137
153
|
expect(output["carts"]["records"][0]).to eql([1,"abby@example.com"])
|
138
154
|
expect(output["carts"]["records"][25]).to eql([26,"zach@example.com"])
|
139
155
|
end
|
140
|
-
|
141
|
-
|
156
|
+
end
|
157
|
+
|
158
|
+
describe "to_json" do
|
159
|
+
it "should create a correctly formatted json file" do
|
160
|
+
exporter.to_json('mysql2', 'carts')
|
161
|
+
file_path = File.expand_path("..", Dir.pwd) + "/spec/db/json/mysql2/carts.json"
|
162
|
+
file_content = File.read(file_path)
|
163
|
+
expect(File).to exist(file_path)
|
164
|
+
output = JSON.parse(file_content)
|
165
|
+
expect(output.length).to eql(26)
|
166
|
+
expect(output[0]["email"]).to eql("abby@example.com")
|
167
|
+
expect(output[25]["email"]).to eql("zach@example.com")
|
142
168
|
end
|
143
169
|
end
|
144
170
|
end
|
@@ -2,13 +2,15 @@ importer = Ferry::Importer.new
|
|
2
2
|
|
3
3
|
Dir.chdir("spec") unless Dir.pwd.split('/').last == "spec"
|
4
4
|
|
5
|
-
|
6
5
|
describe "#import" do
|
6
|
+
|
7
7
|
describe "sqlite3 db" do
|
8
|
+
|
8
9
|
before(:all) do
|
9
10
|
connect("sqlite3")
|
10
11
|
Contexts.setup
|
11
12
|
end
|
13
|
+
|
12
14
|
after(:all) do
|
13
15
|
Contexts.teardown
|
14
16
|
Category.delete_all
|
@@ -26,7 +28,6 @@ describe "#import" do
|
|
26
28
|
end
|
27
29
|
|
28
30
|
#SQL INSERT tests
|
29
|
-
|
30
31
|
it "should error if given a non-csv file" do
|
31
32
|
expect{importer.import("sqlite3", "categories", File.expand_path("..",Dir.pwd) + "/spec/support/categories_import.xml")}.to raise_error
|
32
33
|
end
|
@@ -52,10 +53,12 @@ describe "#import" do
|
|
52
53
|
end
|
53
54
|
|
54
55
|
describe "mass insert tests (sqlite)" do
|
56
|
+
|
55
57
|
before(:each) do
|
56
58
|
connect("sqlite3")
|
57
59
|
Contexts.setup
|
58
60
|
end
|
61
|
+
|
59
62
|
after(:each) do
|
60
63
|
Contexts.teardown
|
61
64
|
Cart.delete_all
|
@@ -81,19 +84,21 @@ describe "#import" do
|
|
81
84
|
expect(Cart.find_by(id: 2042)).to eql(nil)
|
82
85
|
end
|
83
86
|
|
84
|
-
|
85
87
|
end
|
86
88
|
|
87
89
|
describe "postgresql db" do
|
90
|
+
|
88
91
|
before(:all) do
|
89
92
|
connect("postgresql")
|
90
93
|
# requires you to have a ferry_test db in pg
|
91
94
|
Contexts.setup
|
92
95
|
end
|
96
|
+
|
93
97
|
after(:all) do
|
94
98
|
Contexts.teardown
|
95
99
|
Category.delete_all
|
96
100
|
end
|
101
|
+
|
97
102
|
it "should import a valid csv into ActiveRecord" do
|
98
103
|
import_path = File.expand_path("..",Dir.pwd) + "/spec/support/categories_import.csv"
|
99
104
|
importer.import("postgresql", "categories", import_path)
|
@@ -104,13 +109,16 @@ describe "#import" do
|
|
104
109
|
expect(Category.find_by(id: 42).active).to eql(true)
|
105
110
|
expect(Category.find_by(id: 9).name).to eql("boys' clothing")
|
106
111
|
end
|
112
|
+
|
107
113
|
end
|
108
114
|
|
109
115
|
describe "mass insert tests (postgresql)" do
|
116
|
+
|
110
117
|
before(:each) do
|
111
118
|
connect("postgresql")
|
112
119
|
Contexts.setup
|
113
120
|
end
|
121
|
+
|
114
122
|
after(:each) do
|
115
123
|
Contexts.teardown
|
116
124
|
Cart.delete_all
|
@@ -136,19 +144,21 @@ describe "#import" do
|
|
136
144
|
expect(Cart.find_by(id: 2042)).to eql(nil)
|
137
145
|
end
|
138
146
|
|
139
|
-
|
140
147
|
end
|
141
148
|
|
142
149
|
describe "mysql2 db" do
|
150
|
+
|
143
151
|
before(:all) do
|
144
152
|
connect("mysql2")
|
145
153
|
# requires you to have a ferry_test db in pg
|
146
154
|
Contexts.setup
|
147
155
|
end
|
156
|
+
|
148
157
|
after(:all) do
|
149
158
|
Contexts.teardown
|
150
159
|
Category.delete_all
|
151
160
|
end
|
161
|
+
|
152
162
|
it "should import a valid csv values into ActiveRecord" do
|
153
163
|
import_path = File.expand_path("..",Dir.pwd) + "/spec/support/categories_import.csv"
|
154
164
|
importer.import("mysql2", "categories", import_path)
|
@@ -159,13 +169,16 @@ describe "#import" do
|
|
159
169
|
expect(Category.find_by(id: 42).active).to eql(true)
|
160
170
|
expect(Category.find_by(id: 9).name).to eql("boys' clothing")
|
161
171
|
end
|
172
|
+
|
162
173
|
end
|
163
174
|
|
164
175
|
describe "mass insert tests (mysql2)" do
|
176
|
+
|
165
177
|
before(:each) do
|
166
178
|
connect("mysql2")
|
167
179
|
Contexts.setup
|
168
180
|
end
|
181
|
+
|
169
182
|
after(:each) do
|
170
183
|
Contexts.teardown
|
171
184
|
Cart.delete_all
|
@@ -191,6 +204,6 @@ describe "#import" do
|
|
191
204
|
expect(Cart.find_by(id: 2042)).to eql(nil)
|
192
205
|
end
|
193
206
|
|
194
|
-
|
195
207
|
end
|
208
|
+
|
196
209
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ferry
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Anthony Corletti
|
@@ -10,164 +10,178 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2015-
|
13
|
+
date: 2015-03-20 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activerecord
|
17
17
|
requirement: !ruby/object:Gem::Requirement
|
18
18
|
requirements:
|
19
|
-
- - ~>
|
19
|
+
- - "~>"
|
20
20
|
- !ruby/object:Gem::Version
|
21
21
|
version: 4.1.7
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
requirements:
|
26
|
-
- - ~>
|
26
|
+
- - "~>"
|
27
27
|
- !ruby/object:Gem::Version
|
28
28
|
version: 4.1.7
|
29
29
|
- !ruby/object:Gem::Dependency
|
30
30
|
name: bundler
|
31
31
|
requirement: !ruby/object:Gem::Requirement
|
32
32
|
requirements:
|
33
|
-
- - ~>
|
33
|
+
- - "~>"
|
34
34
|
- !ruby/object:Gem::Version
|
35
35
|
version: '1.6'
|
36
36
|
type: :development
|
37
37
|
prerelease: false
|
38
38
|
version_requirements: !ruby/object:Gem::Requirement
|
39
39
|
requirements:
|
40
|
-
- - ~>
|
40
|
+
- - "~>"
|
41
41
|
- !ruby/object:Gem::Version
|
42
42
|
version: '1.6'
|
43
43
|
- !ruby/object:Gem::Dependency
|
44
44
|
name: rake
|
45
45
|
requirement: !ruby/object:Gem::Requirement
|
46
46
|
requirements:
|
47
|
-
- - ~>
|
47
|
+
- - "~>"
|
48
48
|
- !ruby/object:Gem::Version
|
49
49
|
version: 10.3.2
|
50
50
|
type: :development
|
51
51
|
prerelease: false
|
52
52
|
version_requirements: !ruby/object:Gem::Requirement
|
53
53
|
requirements:
|
54
|
-
- - ~>
|
54
|
+
- - "~>"
|
55
55
|
- !ruby/object:Gem::Version
|
56
56
|
version: 10.3.2
|
57
57
|
- !ruby/object:Gem::Dependency
|
58
58
|
name: minitest
|
59
59
|
requirement: !ruby/object:Gem::Requirement
|
60
60
|
requirements:
|
61
|
-
- - ~>
|
61
|
+
- - "~>"
|
62
62
|
- !ruby/object:Gem::Version
|
63
63
|
version: 5.4.1
|
64
64
|
type: :development
|
65
65
|
prerelease: false
|
66
66
|
version_requirements: !ruby/object:Gem::Requirement
|
67
67
|
requirements:
|
68
|
-
- - ~>
|
68
|
+
- - "~>"
|
69
69
|
- !ruby/object:Gem::Version
|
70
70
|
version: 5.4.1
|
71
71
|
- !ruby/object:Gem::Dependency
|
72
72
|
name: rspec
|
73
73
|
requirement: !ruby/object:Gem::Requirement
|
74
74
|
requirements:
|
75
|
-
- - ~>
|
75
|
+
- - "~>"
|
76
76
|
- !ruby/object:Gem::Version
|
77
77
|
version: 3.1.0
|
78
78
|
type: :development
|
79
79
|
prerelease: false
|
80
80
|
version_requirements: !ruby/object:Gem::Requirement
|
81
81
|
requirements:
|
82
|
-
- - ~>
|
82
|
+
- - "~>"
|
83
83
|
- !ruby/object:Gem::Version
|
84
84
|
version: 3.1.0
|
85
85
|
- !ruby/object:Gem::Dependency
|
86
86
|
name: pg
|
87
87
|
requirement: !ruby/object:Gem::Requirement
|
88
88
|
requirements:
|
89
|
-
- - ~>
|
89
|
+
- - "~>"
|
90
90
|
- !ruby/object:Gem::Version
|
91
91
|
version: 0.17.1
|
92
92
|
type: :development
|
93
93
|
prerelease: false
|
94
94
|
version_requirements: !ruby/object:Gem::Requirement
|
95
95
|
requirements:
|
96
|
-
- - ~>
|
96
|
+
- - "~>"
|
97
97
|
- !ruby/object:Gem::Version
|
98
98
|
version: 0.17.1
|
99
99
|
- !ruby/object:Gem::Dependency
|
100
100
|
name: sqlite3
|
101
101
|
requirement: !ruby/object:Gem::Requirement
|
102
102
|
requirements:
|
103
|
-
- - ~>
|
103
|
+
- - "~>"
|
104
104
|
- !ruby/object:Gem::Version
|
105
105
|
version: 1.3.10
|
106
106
|
type: :development
|
107
107
|
prerelease: false
|
108
108
|
version_requirements: !ruby/object:Gem::Requirement
|
109
109
|
requirements:
|
110
|
-
- - ~>
|
110
|
+
- - "~>"
|
111
111
|
- !ruby/object:Gem::Version
|
112
112
|
version: 1.3.10
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: mysql2
|
115
115
|
requirement: !ruby/object:Gem::Requirement
|
116
116
|
requirements:
|
117
|
-
- - ~>
|
117
|
+
- - "~>"
|
118
118
|
- !ruby/object:Gem::Version
|
119
119
|
version: 0.3.16
|
120
120
|
type: :development
|
121
121
|
prerelease: false
|
122
122
|
version_requirements: !ruby/object:Gem::Requirement
|
123
123
|
requirements:
|
124
|
-
- - ~>
|
124
|
+
- - "~>"
|
125
125
|
- !ruby/object:Gem::Version
|
126
126
|
version: 0.3.16
|
127
127
|
- !ruby/object:Gem::Dependency
|
128
128
|
name: factory_girl
|
129
129
|
requirement: !ruby/object:Gem::Requirement
|
130
130
|
requirements:
|
131
|
-
- - ~>
|
131
|
+
- - "~>"
|
132
132
|
- !ruby/object:Gem::Version
|
133
133
|
version: 4.5.0
|
134
134
|
type: :development
|
135
135
|
prerelease: false
|
136
136
|
version_requirements: !ruby/object:Gem::Requirement
|
137
137
|
requirements:
|
138
|
-
- - ~>
|
138
|
+
- - "~>"
|
139
139
|
- !ruby/object:Gem::Version
|
140
140
|
version: 4.5.0
|
141
|
+
- !ruby/object:Gem::Dependency
|
142
|
+
name: json
|
143
|
+
requirement: !ruby/object:Gem::Requirement
|
144
|
+
requirements:
|
145
|
+
- - ">="
|
146
|
+
- !ruby/object:Gem::Version
|
147
|
+
version: '0'
|
148
|
+
type: :development
|
149
|
+
prerelease: false
|
150
|
+
version_requirements: !ruby/object:Gem::Requirement
|
151
|
+
requirements:
|
152
|
+
- - ">="
|
153
|
+
- !ruby/object:Gem::Version
|
154
|
+
version: '0'
|
141
155
|
- !ruby/object:Gem::Dependency
|
142
156
|
name: progressbar
|
143
157
|
requirement: !ruby/object:Gem::Requirement
|
144
158
|
requirements:
|
145
|
-
- - ~>
|
159
|
+
- - "~>"
|
146
160
|
- !ruby/object:Gem::Version
|
147
161
|
version: 0.21.0
|
148
162
|
type: :runtime
|
149
163
|
prerelease: false
|
150
164
|
version_requirements: !ruby/object:Gem::Requirement
|
151
165
|
requirements:
|
152
|
-
- - ~>
|
166
|
+
- - "~>"
|
153
167
|
- !ruby/object:Gem::Version
|
154
168
|
version: 0.21.0
|
155
169
|
- !ruby/object:Gem::Dependency
|
156
170
|
name: highline
|
157
171
|
requirement: !ruby/object:Gem::Requirement
|
158
172
|
requirements:
|
159
|
-
- - ~>
|
173
|
+
- - "~>"
|
160
174
|
- !ruby/object:Gem::Version
|
161
175
|
version: 1.6.21
|
162
176
|
type: :runtime
|
163
177
|
prerelease: false
|
164
178
|
version_requirements: !ruby/object:Gem::Requirement
|
165
179
|
requirements:
|
166
|
-
- - ~>
|
180
|
+
- - "~>"
|
167
181
|
- !ruby/object:Gem::Version
|
168
182
|
version: 1.6.21
|
169
|
-
description: Ferry is a data migration and
|
170
|
-
the increasingly prevalent big data problems for developers
|
183
|
+
description: Ferry is a data migration and visualization command line tool rubygem
|
184
|
+
that seeks to simplify the increasingly prevalent big data problems for developers
|
171
185
|
email:
|
172
186
|
- anthcor@gmail.com
|
173
187
|
- loganwatanabe@gmail.com
|
@@ -177,9 +191,9 @@ executables:
|
|
177
191
|
extensions: []
|
178
192
|
extra_rdoc_files: []
|
179
193
|
files:
|
180
|
-
- .gitignore
|
181
|
-
- .rspec
|
182
|
-
- .travis.yml
|
194
|
+
- ".gitignore"
|
195
|
+
- ".rspec"
|
196
|
+
- ".travis.yml"
|
183
197
|
- Gemfile
|
184
198
|
- LICENSE.txt
|
185
199
|
- README.md
|
@@ -229,20 +243,20 @@ require_paths:
|
|
229
243
|
- lib
|
230
244
|
required_ruby_version: !ruby/object:Gem::Requirement
|
231
245
|
requirements:
|
232
|
-
- -
|
246
|
+
- - ">="
|
233
247
|
- !ruby/object:Gem::Version
|
234
248
|
version: '0'
|
235
249
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
236
250
|
requirements:
|
237
|
-
- -
|
251
|
+
- - ">="
|
238
252
|
- !ruby/object:Gem::Version
|
239
253
|
version: '0'
|
240
254
|
requirements: []
|
241
255
|
rubyforge_project:
|
242
|
-
rubygems_version: 2.
|
256
|
+
rubygems_version: 2.4.5
|
243
257
|
signing_key:
|
244
258
|
specification_version: 4
|
245
|
-
summary: Ferry is a data migration and
|
259
|
+
summary: Ferry is a data migration and visualization command line tool rubygem
|
246
260
|
test_files:
|
247
261
|
- spec/config/database.yml
|
248
262
|
- spec/contexts.rb
|