taps 0.2.16 → 0.2.17
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.
- data/Rakefile +2 -2
- data/VERSION.yml +1 -1
- data/bin/taps +2 -2
- data/lib/taps/client_session.rb +4 -4
- data/lib/taps/db_session.rb +1 -0
- data/lib/taps/server.rb +4 -4
- data/lib/taps/utils.rb +17 -4
- data/spec/client_session_spec.rb +1 -1
- data/spec/utils_spec.rb +4 -3
- metadata +13 -10
data/Rakefile
CHANGED
@@ -8,11 +8,11 @@ begin
|
|
8
8
|
s.description = "A simple database agnostic import/export app to transfer data to/from a remote database."
|
9
9
|
s.authors = ["Ricardo Chimal, Jr.", "Adam Wiggins"]
|
10
10
|
|
11
|
-
s.add_dependency 'sinatra', '
|
11
|
+
s.add_dependency 'sinatra', '= 0.9.2'
|
12
12
|
s.add_dependency 'activerecord', '= 2.2.2'
|
13
13
|
s.add_dependency 'thor', '= 0.9.9'
|
14
14
|
s.add_dependency 'rest-client', '~> 0.9.0'
|
15
|
-
s.add_dependency 'sequel', '
|
15
|
+
s.add_dependency 'sequel', '>= 3.0.0', '< 3.1.0'
|
16
16
|
s.add_dependency 'sqlite3-ruby', '~> 1.2.0'
|
17
17
|
|
18
18
|
s.rubyforge_project = "taps"
|
data/VERSION.yml
CHANGED
data/bin/taps
CHANGED
@@ -4,8 +4,8 @@ require 'rubygems'
|
|
4
4
|
gem 'activerecord', '= 2.2.2'
|
5
5
|
gem 'thor', '= 0.9.9'
|
6
6
|
gem 'rest-client', '~> 0.9.0'
|
7
|
-
gem 'sinatra', '
|
8
|
-
gem 'sequel', '
|
7
|
+
gem 'sinatra', '= 0.9.2'
|
8
|
+
gem 'sequel', '>= 3.0.0', '< 3.1.0'
|
9
9
|
gem 'sqlite3-ruby', '~> 1.2.0'
|
10
10
|
|
11
11
|
require File.dirname(__FILE__) + '/../lib/taps/cli'
|
data/lib/taps/client_session.rb
CHANGED
@@ -90,14 +90,14 @@ class ClientSession
|
|
90
90
|
def cmd_send_indexes
|
91
91
|
puts "Sending indexes"
|
92
92
|
|
93
|
-
index_data =
|
93
|
+
index_data = Taps::Utils.schema_bin(:indexes, database_url)
|
94
94
|
session_resource['indexes'].post(index_data, http_headers)
|
95
95
|
end
|
96
96
|
|
97
97
|
def cmd_send_schema
|
98
98
|
puts "Sending schema"
|
99
99
|
|
100
|
-
schema_data =
|
100
|
+
schema_data = Taps::Utils.schema_bin(:dump, database_url)
|
101
101
|
session_resource['schema'].post(schema_data, http_headers)
|
102
102
|
end
|
103
103
|
|
@@ -209,7 +209,7 @@ class ClientSession
|
|
209
209
|
end
|
210
210
|
break if rows == { }
|
211
211
|
|
212
|
-
table.
|
212
|
+
table.import(rows[:header], rows[:data])
|
213
213
|
|
214
214
|
progress.inc(rows[:data].size)
|
215
215
|
offset += rows[:data].size
|
@@ -274,7 +274,7 @@ class ClientSession
|
|
274
274
|
def cmd_reset_sequences
|
275
275
|
puts "Resetting sequences"
|
276
276
|
|
277
|
-
output =
|
277
|
+
output = Taps::Utils.schema_bin(:reset_db_sequences, database_url)
|
278
278
|
puts output if output
|
279
279
|
end
|
280
280
|
|
data/lib/taps/db_session.rb
CHANGED
data/lib/taps/server.rb
CHANGED
@@ -45,7 +45,7 @@ class Server < Sinatra::Default
|
|
45
45
|
|
46
46
|
db = session.connection
|
47
47
|
table = db[params[:table].to_sym]
|
48
|
-
table.
|
48
|
+
table.import(rows[:header], rows[:data])
|
49
49
|
|
50
50
|
"#{rows[:data].size}"
|
51
51
|
end
|
@@ -55,7 +55,7 @@ class Server < Sinatra::Default
|
|
55
55
|
halt 404 unless session
|
56
56
|
|
57
57
|
schema_app = File.dirname(__FILE__) + '/../../bin/schema'
|
58
|
-
|
58
|
+
Taps::Utils.schema_bin(:reset_db_sequences, session.database_url)
|
59
59
|
end
|
60
60
|
|
61
61
|
post '/sessions/:key/schema' do
|
@@ -79,7 +79,7 @@ class Server < Sinatra::Default
|
|
79
79
|
halt 404 unless session
|
80
80
|
|
81
81
|
schema_app = File.dirname(__FILE__) + '/../../bin/schema'
|
82
|
-
|
82
|
+
Taps::Utils.schema_bin(:dump, session.database_url)
|
83
83
|
end
|
84
84
|
|
85
85
|
get '/sessions/:key/indexes' do
|
@@ -87,7 +87,7 @@ class Server < Sinatra::Default
|
|
87
87
|
halt 404 unless session
|
88
88
|
|
89
89
|
schema_app = File.dirname(__FILE__) + '/../../bin/schema'
|
90
|
-
|
90
|
+
Taps::Utils.schema_bin(:indexes, session.database_url)
|
91
91
|
end
|
92
92
|
|
93
93
|
get '/sessions/:key/tables' do
|
data/lib/taps/utils.rb
CHANGED
@@ -7,6 +7,15 @@ module Taps
|
|
7
7
|
module Utils
|
8
8
|
extend self
|
9
9
|
|
10
|
+
def windows?
|
11
|
+
RUBY_PLATFORM =~ /mswin32/
|
12
|
+
end
|
13
|
+
|
14
|
+
def bin(cmd)
|
15
|
+
cmd = "#{cmd}.cmd" if windows?
|
16
|
+
cmd
|
17
|
+
end
|
18
|
+
|
10
19
|
def checksum(data)
|
11
20
|
Zlib.crc32(data)
|
12
21
|
end
|
@@ -48,7 +57,7 @@ module Utils
|
|
48
57
|
return [] unless db.class.to_s == "Sequel::MySQL::Database"
|
49
58
|
|
50
59
|
columns = []
|
51
|
-
db.schema
|
60
|
+
db.schema(table).each do |data|
|
52
61
|
column, cdata = data
|
53
62
|
columns << column if cdata[:db_type] =~ /text/
|
54
63
|
end
|
@@ -98,22 +107,26 @@ module Utils
|
|
98
107
|
def load_schema(database_url, schema_data)
|
99
108
|
Tempfile.open('taps') do |tmp|
|
100
109
|
File.open(tmp.path, 'w') { |f| f.write(schema_data) }
|
101
|
-
|
110
|
+
schema_bin(:load, database_url, tmp.path)
|
102
111
|
end
|
103
112
|
end
|
104
113
|
|
105
114
|
def load_indexes(database_url, index_data)
|
106
115
|
Tempfile.open('taps') do |tmp|
|
107
116
|
File.open(tmp.path, 'w') { |f| f.write(index_data) }
|
108
|
-
|
117
|
+
schema_bin(:load_indexes, database_url, tmp.path)
|
109
118
|
end
|
110
119
|
end
|
111
120
|
|
121
|
+
def schema_bin(*args)
|
122
|
+
`#{File.dirname(__FILE__)}/../../bin/#{bin('schema')} #{args.join(' ')}`
|
123
|
+
end
|
124
|
+
|
112
125
|
def primary_key(db, table)
|
113
126
|
if db.respond_to?(:primary_key)
|
114
127
|
db.primary_key(table)
|
115
128
|
else
|
116
|
-
db.schema
|
129
|
+
db.schema(table).select { |c| c[1][:primary_key] }.map { |c| c.first }.shift
|
117
130
|
end
|
118
131
|
end
|
119
132
|
|
data/spec/client_session_spec.rb
CHANGED
@@ -54,7 +54,7 @@ describe Taps::ClientSession do
|
|
54
54
|
@client.db.stubs(:[]).with(:mytable).returns(@mytable)
|
55
55
|
@client.expects(:fetch_table_rows).with(:mytable, 1000, 0).returns([ 1000, { :header => [:x, :y], :data => [[1, 2], [3, 4]] } ])
|
56
56
|
@client.expects(:fetch_table_rows).with(:mytable, 1000, 2).returns([ 1000, { }])
|
57
|
-
@mytable.expects(:
|
57
|
+
@mytable.expects(:import).with([:x, :y], [[1, 2], [3, 4]])
|
58
58
|
|
59
59
|
lambda { @client.cmd_receive_data }.should.not.raise
|
60
60
|
end
|
data/spec/utils_spec.rb
CHANGED
@@ -16,7 +16,9 @@ describe Taps::Utils do
|
|
16
16
|
end
|
17
17
|
|
18
18
|
it "formats a data hash into one hash that contains an array of headers and an array of array of data" do
|
19
|
-
|
19
|
+
first_row = { :x => 1, :y => 1 }
|
20
|
+
first_row.stubs(:keys).returns([:x, :y])
|
21
|
+
Taps::Utils.format_data([ first_row, { :x => 2, :y => 2 } ], []).should == { :header => [ :x, :y ], :data => [ [1, 1], [2, 2] ] }
|
20
22
|
end
|
21
23
|
|
22
24
|
it "scales chunksize down slowly when the time delta of the block is just over a second" do
|
@@ -49,8 +51,7 @@ describe Taps::Utils do
|
|
49
51
|
it "returns a list of columns that are text fields if the database is mysql" do
|
50
52
|
@db = mock("db")
|
51
53
|
@db.class.stubs(:to_s).returns("Sequel::MySQL::Database")
|
52
|
-
@db.stubs(:schema).returns(
|
53
|
-
@db.schema.stubs(:[]).with(:mytable).returns([
|
54
|
+
@db.stubs(:schema).with(:mytable).returns([
|
54
55
|
[:id, { :db_type => "int" }],
|
55
56
|
[:mytext, { :db_type => "text" }]
|
56
57
|
])
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: taps
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.17
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ricardo Chimal, Jr.
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2009-
|
13
|
+
date: 2009-05-19 00:00:00 -07:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -19,9 +19,9 @@ dependencies:
|
|
19
19
|
version_requirement:
|
20
20
|
version_requirements: !ruby/object:Gem::Requirement
|
21
21
|
requirements:
|
22
|
-
- -
|
22
|
+
- - "="
|
23
23
|
- !ruby/object:Gem::Version
|
24
|
-
version: 0.9.
|
24
|
+
version: 0.9.2
|
25
25
|
version:
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: activerecord
|
@@ -59,9 +59,12 @@ dependencies:
|
|
59
59
|
version_requirement:
|
60
60
|
version_requirements: !ruby/object:Gem::Requirement
|
61
61
|
requirements:
|
62
|
-
- -
|
62
|
+
- - ">="
|
63
63
|
- !ruby/object:Gem::Version
|
64
|
-
version:
|
64
|
+
version: 3.0.0
|
65
|
+
- - <
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: 3.1.0
|
65
68
|
version:
|
66
69
|
- !ruby/object:Gem::Dependency
|
67
70
|
name: sqlite3-ruby
|
@@ -94,13 +97,13 @@ files:
|
|
94
97
|
- lib/taps/adapter_hacks/invalid_text_limit.rb
|
95
98
|
- lib/taps/adapter_hacks/mysql_invalid_primary_key.rb
|
96
99
|
- lib/taps/adapter_hacks/invalid_binary_limit.rb
|
97
|
-
- lib/taps/utils.rb
|
98
|
-
- lib/taps/server.rb
|
99
|
-
- lib/taps/config.rb
|
100
100
|
- lib/taps/cli.rb
|
101
|
-
- lib/taps/schema.rb
|
102
101
|
- lib/taps/db_session.rb
|
102
|
+
- lib/taps/utils.rb
|
103
|
+
- lib/taps/schema.rb
|
103
104
|
- lib/taps/client_session.rb
|
105
|
+
- lib/taps/config.rb
|
106
|
+
- lib/taps/server.rb
|
104
107
|
- README.rdoc
|
105
108
|
- LICENSE
|
106
109
|
- VERSION.yml
|