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 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