ferry 0.0.8 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 725496d9f272e4289334f35cd5f29dfb877fa77e
4
- data.tar.gz: 62516d8f0982f15ebc85c52ea784b4e9e768b7d1
3
+ metadata.gz: 634ec552fec9ef82ef5cb4b7b73f11c1155c9377
4
+ data.tar.gz: 6fd552539d14caed7f34924511f7dfa9c75eeb4e
5
5
  SHA512:
6
- metadata.gz: 2170274c90daecbb1874cb4a498aaf7cbe7beb9a9342f5efdb088527aac875bc77960cb71855a40bb94bbbe9ae7c4166d5f134cba1ee930ceaa68f0ca5d30248
7
- data.tar.gz: d0b93db1a4a7f403ab6beb891f2b8bf53711b2c2672d1ff198a9d683326107dbb8e75438ca0a4aafa0b32e067fb3bf9d853ff07d478cec509493080fa99ce45f
6
+ metadata.gz: 453943fab59526c5b1a36f7704a5f6a1f54df57b324558c766c2416e42baa3fcb300c03628a1d84e014b1e23dfceb9a6f4b576fe23151162ab6ca70b9d4d81ad
7
+ data.tar.gz: 786dbff062dacd6ce0a9366458c7933378d026237b84973319f789deee0b54cd2914a972d239827196f05da1c81136b4e7af95b9cdc9b2fe5f006f9c24072fe8
data/.gitignore CHANGED
@@ -7,7 +7,6 @@ Gemfile.lock
7
7
  InstalledFiles
8
8
  _yardoc
9
9
  coverage
10
- doc/
11
10
  lib/bundler/man
12
11
  pkg
13
12
  rdoc
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Ferry
1
+ ![ferry](doc/ferry_readme_icon.png)
2
2
 
3
3
  ## What is Ferry?
4
4
  Ferry is a data migration and data manipulation tool that seeks to quickly and easily reduce overhead when dealing with big data problems.
@@ -15,32 +15,38 @@ Migration
15
15
  - Migrating data to third party hosts (Amazon S3, Oracle)
16
16
  - Migrating data to a different database
17
17
 
18
+ ### Datebase to CSV
19
+ Currently, Ferry supports SQLite, PosgreSQL, and MySQL database connections ...
20
+ Making a simple call like ```ferry to_csv yourdbenvironment``` in any Rails app and Ferry will place a folder in your lib directory with a folder titled ferry_to_csv_yourdbenvironment.
21
+
18
22
  ## TO-DOs
19
- - [ ] Refactoring before public release
20
- - [x] Define action-items for refactor
21
- - [x] Provide working example(s) of using ferry (ferry_demo app)
23
+ - [ ] Refactoring before public release October 17th!!!
24
+ - [ ] TEST!!! EVERYTHING!!!
25
+ - [ ] Provide working example(s) of using ferry (see [ferry_demo](http://github.com/cmu-is-projects/ferry_demo.com) app)
26
+ - [ ] ferry --help
22
27
  - [ ] CLI tool
23
28
  - [ ] Simple CSV export
24
- - [ ] using sqlite3
25
- - [ ] using psql
29
+ - [x] using sqlite3
30
+ - [x] using psql
31
+ - [x] using MySQL
32
+ - [ ] using other dbs ...
33
+ - [ ] Simple CSV import
34
+ - [ ] Simple YAML export
35
+ - [ ] Simple CSV import
26
36
  - [ ] RESTful column interaction
27
37
  - [ ] Understanding relationships between generating migrations and migration files in place
28
- - [ ] Tests
29
38
  - [ ] Rolling back on errors / mishaps during migrations and manipulations
30
- - [ ] Host documentation site via GitHub pages
39
+ - [ ] Host documentation site via GitHub pages (ferry.github.io)
31
40
 
32
41
  ## Installation
33
42
  Add this line to your application's Gemfile:
34
-
35
- gem 'ferry'
43
+ ```gem 'ferry'```
36
44
 
37
45
  And then execute:
38
-
39
- $ bundle
46
+ ```bundle```
40
47
 
41
48
  Or install it yourself as:
42
-
43
- $ gem install ferry
49
+ ```gem install ferry```
44
50
 
45
51
  ## Contributing
46
52
 
data/Rakefile CHANGED
@@ -1,4 +1 @@
1
-
2
1
  require "bundler/gem_tasks"
3
- # Bundler::GemHelper.install_tasks
4
-
Binary file
data/ferry.gemspec CHANGED
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_development_dependency "activerecord"
22
22
  spec.add_development_dependency "bundler", "~> 1.6"
23
- # spec.add_development_dependency "progressbar"
23
+ spec.add_development_dependency "progressbar"
24
24
  spec.add_development_dependency "rake"
25
25
  spec.add_development_dependency "minitest"
26
26
  spec.add_development_dependency "rspec"
data/lib/ferry.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  require 'active_record'
2
2
  require 'csv'
3
3
  require 'ferry/version'
4
- # require 'progressbar'
4
+ require 'progressbar'
5
5
  require 'yaml'
6
6
 
7
7
  module Ferry
@@ -17,221 +17,78 @@ module Ferry
17
17
 
18
18
  def to_csv
19
19
  info = YAML::load(IO.read("config/database.yml"))
20
- db_type = info[which_db_env||"production"]["adapter"]
21
-
22
-
23
-
24
- #issues:
25
- # csv placement in directory: do we want it in the lib?
26
- # the case where dev/test dbs are different from production db (sqlite for dev/test, pg for prod??)
27
- # empty ARGs
28
- # ARGs with invalid values
29
-
30
-
20
+ db_type = info[which_db_env]["adapter"]
31
21
  case db_type
32
22
  when "sqlite3"
33
23
  puts "operating with sqlite3"
34
-
35
- if(which_db_env)
36
- homedir = "lib/ferry_to_csv_#{which_db_env}"
37
- ActiveRecord::Base.establish_connection(adapter: db_type, database: info[which_db_env]['database'])
38
- puts "connected to #{which_db_env} env db"
39
- FileUtils.mkdir homedir unless Dir[homedir].present?
40
- puts "exporting tables to #{homedir}"
41
- # sqlite_pbar = ProgressBar.new("sqlite_to_csv", 100)
42
- ActiveRecord::Base.connection.tables.each do |model|
43
- full_table = ActiveRecord::Base.connection.execute("SELECT * FROM #{model};")
44
- # do not create a csv for an empty table
45
- if !full_table[0].nil?
46
- CSV.open("#{homedir}/#{model}.csv", "w") do |csv|
47
- size = full_table[0].length / 2
48
- keys = full_table[0].keys.first(size)
49
- #first row contains column names
50
- csv << keys
51
- full_table.each do |row|
52
- csv << row.values_at(*keys)
53
- # sqlite_pbar.inc
54
- end
55
- end
56
- end
57
- end
58
- else #no db_env is specified
59
- info.keys.each do |environment|
60
-
61
- if(environment == 'default') #in Rails 4.1+ environments inherit from default, which does not have database so we will not include it
62
- next
63
- end
64
-
65
- homedir = "lib/ferry_to_csv_#{environment}"
66
- ActiveRecord::Base.establish_connection(adapter: db_type, database: info[environment]['database']) #connect to sqlite3 file
67
- puts "connected to #{environment} env db"
68
- FileUtils.mkdir homedir unless Dir[homedir].present?
69
- puts "exporting tables to #{homedir}"
70
- # sqlite_pbar = ProgressBar.new("sqlite_to_csv", 100)
71
- ActiveRecord::Base.connection.tables.each do |model| #for each model in the db
72
- full_table = ActiveRecord::Base.connection.execute("SELECT * FROM #{model};") #get all the records
73
- if !full_table[0].nil?
74
- CSV.open("#{homedir}/#{model}.csv", "w") do |csv|
75
- size = full_table[0].length / 2
76
- keys = full_table[0].keys.first(size)
77
- #first row contains column names
78
- csv << keys
79
- full_table.each do |row|
80
- csv << row.values_at(*keys)
81
- # sqlite_pbar.inc
82
- end
83
- end
24
+ homedir = "lib/ferry_to_csv_#{which_db_env}"
25
+ ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: info[which_db_env]['database'])
26
+ puts "connected to #{which_db_env} env db"
27
+ FileUtils.mkdir homedir unless Dir[homedir].present?
28
+ puts "exporting tables to #{homedir}"
29
+ sqlite_pbar = ProgressBar.new("sqlite_to_csv", 100)
30
+ ActiveRecord::Base.connection.tables.each do |model|
31
+ full_table = ActiveRecord::Base.connection.execute("SELECT * FROM #{model};")
32
+ if !full_table[0].nil?
33
+ CSV.open("#{homedir}/#{model}.csv", "w") do |csv|
34
+ size = full_table[0].length / 2
35
+ keys = full_table[0].keys.first(size)
36
+ csv << keys
37
+ full_table.each do |row|
38
+ csv << row.values_at(*keys)
39
+ sqlite_pbar.inc
84
40
  end
85
41
  end
86
42
  end
87
43
  end
88
-
89
44
  when "postgresql"
90
45
  puts "operating with postgres"
91
-
92
- if(which_db_env)
93
- homedir = "lib/ferry_to_csv_#{which_db_env}"
94
- ActiveRecord::Base.establish_connection(
95
- adapter: 'postgresql',
96
- host: info[which_db_env]['host'] || 'localhost',
97
- username: info[which_db_env]['username'],
98
- password: info[which_db_env]['password'],
99
- database: info[which_db_env]['database'],
100
- encoding: info[which_db_env]['encoding']
101
- )
102
- puts "connected to #{which_db_env} env db"
103
- FileUtils.mkdir homedir unless Dir[homedir].present?
104
- puts "exporting tables to #{homedir}"
105
- # psql_pbar = ProgressBar.new("psql_to_csv", 100)
106
- ActiveRecord::Base.connection.tables.each do |model|
107
- full_table = ActiveRecord::Base.connection.execute("SELECT * FROM #{model};")
108
- # do not create a csv for an empty table
109
- if full_table.num_tuples > 0
110
- CSV.open("#{homedir}/#{model}.csv", "w") do |csv|
111
- size = full_table[0].length / 2
112
- keys = full_table[0].keys.first(size)
113
- #first row contains column names
114
- csv << keys
115
- full_table.each do |row|
116
- csv << row.values_at(*keys)
117
- # psql_pbar.inc
118
- end
119
- end
120
- end
121
- end
122
- else
123
- info.keys.each do |environment|
124
-
125
- if(environment == 'default') #in Rails 4.1+ environments inherit from default, which does not have database so we will not include it
126
- next
127
- end
128
- homedir = "lib/ferry_to_csv_#{environment}"
129
-
130
- ActiveRecord::Base.establish_connection(
131
- adapter: 'postgresql',
132
- host: info[environment]['host'] || 'localhost',
133
- username: info[environment]['username'],
134
- password: info[environment]['password'],
135
- database: info[environment]['database'],
136
- encoding: info[environment]['encoding']
137
- )
138
- puts "connected to #{environment} env db"
139
- FileUtils.mkdir homedir unless Dir[homedir].present?
140
- puts "exporting tables to #{homedir}"
141
- # psql_pbar = ProgressBar.new("psql_to_csv", 100)
142
- ActiveRecord::Base.connection.tables.each do |model|
143
- full_table = ActiveRecord::Base.connection.execute("SELECT * FROM #{model};")
144
- # do not create a csv for an empty table
145
- if full_table.num_tuples > 0
146
- CSV.open("#{homedir}/#{model}.csv", "w") do |csv|
147
- size = full_table[0].length / 2
148
- keys = full_table[0].keys.first(size)
149
- #first row contains column names
150
- csv << keys
151
- full_table.each do |row|
152
- csv << row.values_at(*keys)
153
- # psql_pbar.inc
154
- end
155
- end
46
+ homedir = "lib/ferry_to_csv_#{which_db_env}"
47
+ ActiveRecord::Base.establish_connection(adapter: db_type, database: info[which_db_env]['database'])
48
+ puts "connected to #{which_db_env} env db"
49
+ FileUtils.mkdir homedir unless Dir[homedir].present?
50
+ puts "exporting tables to #{homedir}"
51
+ psql_pbar = ProgressBar.new("psql_to_csv", 100)
52
+ ActiveRecord::Base.connection.tables.each do |model|
53
+ full_table = ActiveRecord::Base.connection.execute("SELECT * FROM #{model};")
54
+ if full_table.num_tuples > 0
55
+ CSV.open("#{homedir}/#{model}.csv", "w") do |csv|
56
+ size = full_table[0].length / 2
57
+ keys = full_table[0].keys.first(size)
58
+ csv << keys
59
+ full_table.each do |row|
60
+ csv << row.values_at(*keys)
61
+ psql_pbar.inc
156
62
  end
157
63
  end
158
64
  end
159
65
  end
160
66
  when "mysql2"
161
67
  puts "operating with mysql2"
162
-
163
- if(which_db_env)
164
- homedir = "lib/ferry_to_csv_#{which_db_env}"
165
-
166
- ActiveRecord::Base.establish_connection( #this may not work on default rails if production db is not created (must run rake db:create:all)
167
- adapter: 'mysql2',
168
- host: info[which_db_env]['host'] || 'localhost',
169
- username: info[which_db_env]['username'],
170
- password: info[which_db_env]['password'],
171
- database: info[which_db_env]['database']
172
- )
173
- puts "connected to #{which_db_env} env db"
174
- FileUtils.mkdir homedir unless Dir[homedir].present?
175
- puts "exporting tables to #{homedir}"
176
- # psql_pbar = ProgressBar.new("psql_to_csv", 100)
177
-
178
- ActiveRecord::Base.connection.tables.each do |model| #for each model in the db
179
- columns = ActiveRecord::Base.connection.execute("SELECT `COLUMN_NAME` FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA`= '#{info[which_db_env]['database']}' AND `TABLE_NAME`='#{model}';")
180
- CSV.open("#{homedir}/#{model}.csv", "w") do |csv|
181
-
182
- col_names=[]
183
- columns.each do |col|
184
- col_names.append(col[0]) #append the column names to an array, makes for good formatting
185
- end
186
- csv << col_names #first csv row is of column names
187
-
188
- full_table = ActiveRecord::Base.connection.execute("SELECT * FROM #{model};")
189
- full_table.each do |row|
190
- csv << row #not sure if this will hold, but no 'values_at' method exists
191
- # psql_pbar.inc
192
- end
193
- end
194
- end
195
- else
196
- info.keys.each do |environment|
197
-
198
- if(environment == 'default') #in Rails 4.1+ environments inherit from default, which does not have database so we will not include it
199
- next
68
+ homedir = "lib/ferry_to_csv_#{environment}"
69
+ puts "connected to #{which_db_env} env db"
70
+ ActiveRecord::Base.establish_connection(adapter: db_type, database: info[which_db_env]['database'])
71
+ puts "connected to #{environment} env db"
72
+ FileUtils.mkdir homedir unless Dir[homedir].present?
73
+ puts "exporting tables to #{homedir}"
74
+ mysql_bar = ProgressBar.new("psql_to_csv", 100)
75
+ ActiveRecord::Base.connection.tables.each do |model|
76
+ columns = ActiveRecord::Base.connection.execute(
77
+ "SELECT `COLUMN_NAME` FROM `INFORMATION_SCHEMA`.`COLUMNS`
78
+ WHERE `TABLE_SCHEMA`= '#{info[environment]['database']}' AND `TABLE_NAME`='#{model}';")
79
+ CSV.open("#{homedir}/#{model}.csv", "w") do |csv|
80
+ col_names=[]
81
+ columns.each do |col|
82
+ col_names.append(col[0])
200
83
  end
201
-
202
- homedir = "lib/ferry_to_csv_#{environment}"
203
-
204
- ActiveRecord::Base.establish_connection( #this may not work on default rails if production db is not created (must run rake db:create:all)
205
- adapter: 'mysql2',
206
- host: info[environment]['host'] || 'localhost',
207
- username: info[environment]['username'],
208
- password: info[environment]['password'],
209
- database: info[environment]['database']
210
- )
211
- puts "connected to #{environment} env db"
212
- FileUtils.mkdir homedir unless Dir[homedir].present?
213
- puts "exporting tables to #{homedir}"
214
- # psql_pbar = ProgressBar.new("psql_to_csv", 100)
215
-
216
- ActiveRecord::Base.connection.tables.each do |model| #for each model in the db
217
- columns = ActiveRecord::Base.connection.execute("SELECT `COLUMN_NAME` FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA`= '#{info[environment]['database']}' AND `TABLE_NAME`='#{model}';")
218
- CSV.open("#{homedir}/#{model}.csv", "w") do |csv|
219
-
220
- col_names=[]
221
- columns.each do |col|
222
- col_names.append(col[0]) #append the column names to an array, makes for good formatting
223
- end
224
- csv << col_names #first csv row is of column names
225
-
226
- full_table = ActiveRecord::Base.connection.execute("SELECT * FROM #{model};")
227
- full_table.each do |row|
228
- csv << row #not sure if this will hold, but no 'values_at' method exists
229
- # psql_pbar.inc
230
- end
231
- end
84
+ csv << col_names
85
+ full_table = ActiveRecord::Base.connection.execute("SELECT * FROM #{model};")
86
+ full_table.each do |row|
87
+ csv << row
88
+ mysql_bar.inc
232
89
  end
233
90
  end
234
- end
91
+ end
235
92
  when "mongo"
236
93
  puts "mongo is currently not supported"
237
94
  else
@@ -247,13 +104,17 @@ module Ferry
247
104
  puts "to_new_db_type: #{switch_to_db_type}"
248
105
 
249
106
  # check for dependencies
250
- # if dependencies exist - install them
251
- # create new connection
107
+ # if dependencies exist - install them?
108
+ # how to go about installation ... just let the user fend for themselves?
109
+ # create new connection if necessary dependencies exist!
252
110
  # transfer old db into new connection
253
- # drop old connection
111
+ # remove the old connection? what to do with it? hmm
112
+ # possibly keep it / have a method to remove it on user specification
113
+ # what would the user think
114
+ # "why would it be any other way?"
254
115
  # update the config file
255
- # profit
256
- end
116
+ # profit from your new db!
257
117
 
118
+ end
258
119
  end
259
120
  end
data/lib/ferry/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Ferry
2
- VERSION = "0.0.8"
2
+ VERSION = "0.1.0"
3
3
  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: 0.0.8
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anthony Corletti
@@ -40,6 +40,20 @@ dependencies:
40
40
  - - "~>"
41
41
  - !ruby/object:Gem::Version
42
42
  version: '1.6'
43
+ - !ruby/object:Gem::Dependency
44
+ name: progressbar
45
+ requirement: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: '0'
50
+ type: :development
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
43
57
  - !ruby/object:Gem::Dependency
44
58
  name: rake
45
59
  requirement: !ruby/object:Gem::Requirement
@@ -128,6 +142,7 @@ files:
128
142
  - README.md
129
143
  - Rakefile
130
144
  - bin/ferry
145
+ - doc/ferry_readme_icon.png
131
146
  - ferry.gemspec
132
147
  - lib/ferry.rb
133
148
  - lib/ferry/version.rb