ferry 1.1.1 → 1.2.0
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/.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
|