taps 0.2.16 → 0.2.17

Sign up to get free protection for your applications and to get access to all the features.
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', '~> 0.9.0'
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', '~> 2.11.0'
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"
@@ -1,4 +1,4 @@
1
1
  ---
2
- :patch: 16
2
+ :patch: 17
3
3
  :major: 0
4
4
  :minor: 2
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', '~> 0.9.0'
8
- gem 'sequel', '~> 2.11.0'
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'
@@ -90,14 +90,14 @@ class ClientSession
90
90
  def cmd_send_indexes
91
91
  puts "Sending indexes"
92
92
 
93
- index_data = `#{File.dirname(__FILE__)}/../../bin/schema indexes #{database_url}`
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 = `#{File.dirname(__FILE__)}/../../bin/schema dump #{database_url}`
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.multi_insert(rows[:header], rows[:data])
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 = `#{File.dirname(__FILE__)}/../../bin/schema reset_db_sequences #{database_url}`
277
+ output = Taps::Utils.schema_bin(:reset_db_sequences, database_url)
278
278
  puts output if output
279
279
  end
280
280
 
@@ -3,6 +3,7 @@ require 'thread'
3
3
  Sequel::Model.db = Sequel.connect(Taps::Config.taps_database_url)
4
4
 
5
5
  class DbSession < Sequel::Model
6
+ plugin :schema
6
7
  set_schema do
7
8
  primary_key :id
8
9
  text :key
@@ -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.multi_insert(rows[:header], rows[:data])
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
- `#{schema_app} reset_db_sequences #{session.database_url}`
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
- `#{schema_app} dump #{session.database_url}`
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
- `#{schema_app} indexes #{session.database_url}`
90
+ Taps::Utils.schema_bin(:indexes, session.database_url)
91
91
  end
92
92
 
93
93
  get '/sessions/:key/tables' do
@@ -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[table].each do |data|
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
- `#{File.dirname(__FILE__)}/../../bin/schema load #{database_url} #{tmp.path}`
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
- `#{File.dirname(__FILE__)}/../../bin/schema load_indexes #{database_url} #{tmp.path}`
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[table].select { |c| c[1][:primary_key] }.map { |c| c.first }.shift
129
+ db.schema(table).select { |c| c[1][:primary_key] }.map { |c| c.first }.shift
117
130
  end
118
131
  end
119
132
 
@@ -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(:multi_insert).with([:x, :y], [[1, 2], [3, 4]])
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
@@ -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
- Taps::Utils.format_data([ { :x => 1, :y => 1 }, { :x => 2, :y => 2 } ], []).should == { :header => [ :x, :y ], :data => [ [1, 1], [2, 2] ] }
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(mock("schema"))
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.16
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-04-28 00:00:00 -07:00
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.0
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: 2.11.0
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