ferry 0.0.8 → 0.1.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 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