ardb 0.9.0 → 0.10.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.
@@ -65,7 +65,7 @@ module Ardb
65
65
  class Adapter
66
66
  include Singleton
67
67
 
68
- attr_reader :current
68
+ attr_accessor :current
69
69
 
70
70
  def init
71
71
  @current = Adapter.send(Ardb.config.db.adapter)
@@ -17,6 +17,14 @@ class Ardb::Adapter::Base
17
17
 
18
18
  def drop_tables(*args); raise NotImplementedError; end
19
19
 
20
+ def load_schema
21
+ # silence STDOUT
22
+ current_stdout = $stdout.dup
23
+ $stdout = File.new('/dev/null', 'w')
24
+ load Ardb.config.schema_path
25
+ $stdout = current_stdout
26
+ end
27
+
20
28
  def ==(other_adapter)
21
29
  self.class == other_adapter.class
22
30
  end
@@ -19,15 +19,19 @@ class Ardb::Adapter
19
19
  end
20
20
 
21
21
  def drop_db
22
- ActiveRecord::Base.establish_connection(self.public_schema_settings)
23
- ActiveRecord::Base.connection.tap do |conn|
24
- conn.execute "UPDATE pg_catalog.pg_database"\
25
- " SET datallowconn=false WHERE datname='#{self.database}'"
26
- # this SELECT actually runs a command: it terminates all the connections
27
- # http://www.postgresql.org/docs/9.2/static/functions-admin.html#FUNCTIONS-ADMIN-SIGNAL-TABLE
28
- conn.execute "SELECT pg_terminate_backend(pid)"\
29
- " FROM pg_stat_activity WHERE datname='#{self.database}'"
30
- conn.execute "DROP DATABASE IF EXISTS #{self.database}"
22
+ begin
23
+ ActiveRecord::Base.establish_connection(self.public_schema_settings)
24
+ ActiveRecord::Base.connection.tap do |conn|
25
+ conn.execute "UPDATE pg_catalog.pg_database"\
26
+ " SET datallowconn=false WHERE datname='#{self.database}'"
27
+ # this SELECT actually runs a command: it terminates all the connections
28
+ # http://www.postgresql.org/docs/9.2/static/functions-admin.html#FUNCTIONS-ADMIN-SIGNAL-TABLE
29
+ conn.execute "SELECT pg_terminate_backend(pid)"\
30
+ " FROM pg_stat_activity WHERE datname='#{self.database}'"
31
+ conn.execute "DROP DATABASE IF EXISTS #{self.database}"
32
+ end
33
+ rescue PG::Error => e
34
+ raise e unless e.message =~ /does not exist/
31
35
  end
32
36
  end
33
37
 
@@ -0,0 +1,59 @@
1
+ module Ardb
2
+
3
+ module AdapterSpy
4
+
5
+ def self.new(&block)
6
+ block ||= proc{ }
7
+ record_spy = Class.new{ include Ardb::AdapterSpy }
8
+ record_spy.class_eval(&block)
9
+ record_spy
10
+ end
11
+
12
+ def self.included(klass)
13
+ klass.class_eval do
14
+ include InstanceMethods
15
+ end
16
+ end
17
+
18
+ module InstanceMethods
19
+
20
+ attr_accessor :drop_tables_called_count, :load_schema_called_count
21
+ attr_accessor :drop_db_called_count, :create_db_called_count
22
+
23
+ def drop_tables_called_count
24
+ @drop_tables_called_count ||= 0
25
+ end
26
+
27
+ def drop_tables(*args, &block)
28
+ self.drop_tables_called_count += 1
29
+ end
30
+
31
+ def load_schema_called_count
32
+ @load_schema_called_count ||= 0
33
+ end
34
+
35
+ def load_schema(*args, &block)
36
+ self.load_schema_called_count += 1
37
+ end
38
+
39
+ def drop_db_called_count
40
+ @drop_db_called_count ||= 0
41
+ end
42
+
43
+ def drop_db(*args, &block)
44
+ self.drop_db_called_count += 1
45
+ end
46
+
47
+ def create_db_called_count
48
+ @create_db_called_count ||= 0
49
+ end
50
+
51
+ def create_db(*args, &block)
52
+ self.create_db_called_count += 1
53
+ end
54
+
55
+ end
56
+
57
+ end
58
+
59
+ end
@@ -13,12 +13,20 @@ module Ardb::TestHelpers
13
13
  end
14
14
 
15
15
  def load_schema
16
- # silence STDOUT
17
- current_stdout = $stdout.dup
18
- $stdout = File.new('/dev/null', 'w')
19
- load Ardb.config.schema_path
20
- $stdout = current_stdout
16
+ Ardb.adapter.load_schema
21
17
  end
22
18
 
23
- end
19
+ def reset_db!
20
+ Ardb.adapter.drop_db
21
+ Ardb.adapter.create_db
22
+ self.load_schema
23
+ end
24
24
 
25
+ def reset_db
26
+ @reset_db ||= begin
27
+ self.reset_db!
28
+ true
29
+ end
30
+ end
31
+
32
+ end
@@ -1,3 +1,3 @@
1
1
  module Ardb
2
- VERSION = "0.9.0"
2
+ VERSION = "0.10.0"
3
3
  end
@@ -12,7 +12,7 @@ class Ardb::Adapter::Base
12
12
 
13
13
  should have_reader :config_settings, :database
14
14
  should have_imeths :foreign_key_add_sql, :foreign_key_drop_sql
15
- should have_imeths :create_db, :drop_db
15
+ should have_imeths :create_db, :drop_db, :load_schema
16
16
 
17
17
  should "use the config's db settings " do
18
18
  assert_equal Ardb.config.db_settings, subject.config_settings
@@ -38,4 +38,32 @@ class Ardb::Adapter::Base
38
38
 
39
39
  end
40
40
 
41
+ class LoadSchemaTests < BaseTests
42
+ desc "given a schema"
43
+ setup do
44
+ ::FAKE_SCHEMA_LOAD = OpenStruct.new(:count => 0)
45
+ @orig_schema_path = Ardb.config.schema_path
46
+ Ardb.config.schema_path = 'fake_schema.rb'
47
+ end
48
+ teardown do
49
+ Ardb.config.schema_path = @orig_schema_path
50
+ end
51
+
52
+ should "load the schema suppressing $stdout" do
53
+ orig_stdout = $stdout.dup
54
+ captured_stdout = ""
55
+ $stdout = StringIO.new(captured_stdout)
56
+
57
+ assert_equal 0, FAKE_SCHEMA_LOAD.count
58
+ subject.load_schema
59
+ assert_equal 1, FAKE_SCHEMA_LOAD.count
60
+ subject.load_schema
61
+ assert_equal 2, FAKE_SCHEMA_LOAD.count
62
+ assert_empty captured_stdout
63
+
64
+ $stdout = orig_stdout
65
+ end
66
+
67
+ end
68
+
41
69
  end
@@ -0,0 +1,66 @@
1
+ require 'assert'
2
+ require 'ardb/adapter_spy'
3
+
4
+ module Ardb::AdapterSpy
5
+
6
+ class MyAdapter
7
+ include Ardb::AdapterSpy
8
+ end
9
+
10
+ class BaseTests < Assert::Context
11
+ desc "Ardb::AdapterSpy"
12
+ setup do
13
+ @adapter = MyAdapter.new
14
+ end
15
+ subject{ @adapter }
16
+
17
+ should have_accessors :drop_tables_called_count, :load_schema_called_count
18
+ should have_accessors :drop_db_called_count, :create_db_called_count
19
+ should have_imeths :drop_tables, :load_schema, :drop_db, :create_db
20
+
21
+ should "included the record spy instance methods" do
22
+ assert_includes Ardb::AdapterSpy::InstanceMethods, subject.class.included_modules
23
+ end
24
+
25
+ should "default all call counts to zero" do
26
+ assert_equal 0, subject.drop_tables_called_count
27
+ assert_equal 0, subject.load_schema_called_count
28
+ assert_equal 0, subject.drop_db_called_count
29
+ assert_equal 0, subject.create_db_called_count
30
+ end
31
+
32
+ should "add a call count when each method is called" do
33
+ subject.drop_tables
34
+ assert_equal 1, subject.drop_tables_called_count
35
+
36
+ subject.load_schema
37
+ assert_equal 1, subject.load_schema_called_count
38
+
39
+ subject.drop_db
40
+ assert_equal 1, subject.drop_db_called_count
41
+
42
+ subject.create_db
43
+ assert_equal 1, subject.create_db_called_count
44
+ end
45
+
46
+ end
47
+
48
+ class NewMethTests < BaseTests
49
+ desc "`new` method"
50
+ setup do
51
+ @adapter_spy_class = Ardb::AdapterSpy.new do
52
+ attr_accessor :name
53
+ end
54
+ @adapter = @adapter_spy_class.new
55
+ end
56
+ subject{ @adapter }
57
+
58
+ should "build a new spy class and use any custom definition" do
59
+ assert_includes Ardb::AdapterSpy, subject.class.included_modules
60
+ assert subject.respond_to? :name
61
+ assert subject.respond_to? :name=
62
+ end
63
+
64
+ end
65
+
66
+ end
@@ -7,7 +7,82 @@ module Ardb::TestHelpers
7
7
  desc "Ardb test helpers"
8
8
  subject{ Ardb::TestHelpers }
9
9
 
10
- should have_imeths :drop_tables, :load_schema
10
+ should have_imeths :drop_tables, :load_schema, :reset_db, :reset_db!
11
+
12
+ end
13
+
14
+ class UsageTests < BaseTests
15
+ setup do
16
+ @adapter_spy_class = Ardb::AdapterSpy.new
17
+ @orig_ardb_adapter = Ardb.adapter
18
+ Ardb::Adapter.current = @adapter_spy = @adapter_spy_class.new
19
+ end
20
+ teardown do
21
+ Ardb::Adapter.current = @orig_ardb_adapter
22
+ end
23
+
24
+ end
25
+
26
+ class DropTablesTests < UsageTests
27
+ desc "`drop_tables` method"
28
+
29
+ should "tell the adapter to drop the tables" do
30
+ assert_equal 0, @adapter_spy.drop_tables_called_count
31
+ subject.drop_tables
32
+ assert_equal 1, @adapter_spy.drop_tables_called_count
33
+ end
34
+
35
+ end
36
+
37
+ class LoadSchemaTests < UsageTests
38
+ desc "`load_schema` method"
39
+
40
+ should "tell the adapter to load the schema" do
41
+ assert_equal 0, @adapter_spy.load_schema_called_count
42
+ subject.load_schema
43
+ assert_equal 1, @adapter_spy.load_schema_called_count
44
+ end
45
+
46
+ end
47
+
48
+ class ResetDbTests < UsageTests
49
+ desc "reset db methods"
50
+
51
+ should "tell the adapter to drop/create the db and load the schema only once" do
52
+ assert_equal 0, @adapter_spy.drop_db_called_count
53
+ assert_equal 0, @adapter_spy.create_db_called_count
54
+ assert_equal 0, @adapter_spy.load_schema_called_count
55
+
56
+ subject.reset_db
57
+
58
+ assert_equal 1, @adapter_spy.drop_db_called_count
59
+ assert_equal 1, @adapter_spy.create_db_called_count
60
+ assert_equal 1, @adapter_spy.load_schema_called_count
61
+
62
+ subject.reset_db
63
+
64
+ assert_equal 1, @adapter_spy.drop_db_called_count
65
+ assert_equal 1, @adapter_spy.create_db_called_count
66
+ assert_equal 1, @adapter_spy.load_schema_called_count
67
+ end
68
+
69
+ should "force the adapter to drop/create the db and load the schema" do
70
+ assert_equal 0, @adapter_spy.drop_db_called_count
71
+ assert_equal 0, @adapter_spy.create_db_called_count
72
+ assert_equal 0, @adapter_spy.load_schema_called_count
73
+
74
+ subject.reset_db!
75
+
76
+ assert_equal 1, @adapter_spy.drop_db_called_count
77
+ assert_equal 1, @adapter_spy.create_db_called_count
78
+ assert_equal 1, @adapter_spy.load_schema_called_count
79
+
80
+ subject.reset_db!
81
+
82
+ assert_equal 2, @adapter_spy.drop_db_called_count
83
+ assert_equal 2, @adapter_spy.create_db_called_count
84
+ assert_equal 2, @adapter_spy.load_schema_called_count
85
+ end
11
86
 
12
87
  end
13
88
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ardb
3
3
  version: !ruby/object:Gem::Version
4
- hash: 59
4
+ hash: 55
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 9
8
+ - 10
9
9
  - 0
10
- version: 0.9.0
10
+ version: 0.10.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Kelly Redding
@@ -16,11 +16,12 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2013-06-20 00:00:00 Z
19
+ date: 2013-06-24 00:00:00 Z
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
+ name: assert
22
23
  prerelease: false
23
- version_requirements: &id001 !ruby/object:Gem::Requirement
24
+ requirement: &id001 !ruby/object:Gem::Requirement
24
25
  none: false
25
26
  requirements:
26
27
  - - ~>
@@ -30,12 +31,12 @@ dependencies:
30
31
  - 2
31
32
  - 0
32
33
  version: "2.0"
33
- requirement: *id001
34
- name: assert
35
34
  type: :development
35
+ version_requirements: *id001
36
36
  - !ruby/object:Gem::Dependency
37
+ name: activerecord
37
38
  prerelease: false
38
- version_requirements: &id002 !ruby/object:Gem::Requirement
39
+ requirement: &id002 !ruby/object:Gem::Requirement
39
40
  none: false
40
41
  requirements:
41
42
  - - ~>
@@ -45,12 +46,12 @@ dependencies:
45
46
  - 3
46
47
  - 2
47
48
  version: "3.2"
48
- requirement: *id002
49
- name: activerecord
50
49
  type: :runtime
50
+ version_requirements: *id002
51
51
  - !ruby/object:Gem::Dependency
52
+ name: activesupport
52
53
  prerelease: false
53
- version_requirements: &id003 !ruby/object:Gem::Requirement
54
+ requirement: &id003 !ruby/object:Gem::Requirement
54
55
  none: false
55
56
  requirements:
56
57
  - - ~>
@@ -60,12 +61,12 @@ dependencies:
60
61
  - 3
61
62
  - 2
62
63
  version: "3.2"
63
- requirement: *id003
64
- name: activesupport
65
64
  type: :runtime
65
+ version_requirements: *id003
66
66
  - !ruby/object:Gem::Dependency
67
+ name: ns-options
67
68
  prerelease: false
68
- version_requirements: &id004 !ruby/object:Gem::Requirement
69
+ requirement: &id004 !ruby/object:Gem::Requirement
69
70
  none: false
70
71
  requirements:
71
72
  - - ~>
@@ -75,9 +76,8 @@ dependencies:
75
76
  - 1
76
77
  - 1
77
78
  version: "1.1"
78
- requirement: *id004
79
- name: ns-options
80
79
  type: :runtime
80
+ version_requirements: *id004
81
81
  description: Activerecord database tools.
82
82
  email:
83
83
  - kelly@kellyredding.com
@@ -101,6 +101,7 @@ files:
101
101
  - lib/ardb/adapter/mysql.rb
102
102
  - lib/ardb/adapter/postgresql.rb
103
103
  - lib/ardb/adapter/sqlite.rb
104
+ - lib/ardb/adapter_spy.rb
104
105
  - lib/ardb/cli.rb
105
106
  - lib/ardb/migration_helpers.rb
106
107
  - lib/ardb/record_spy.rb
@@ -119,6 +120,7 @@ files:
119
120
  - test/unit/adapter/mysql_tests.rb
120
121
  - test/unit/adapter/postgresql_tests.rb
121
122
  - test/unit/adapter/sqlite_tests.rb
123
+ - test/unit/adapter_spy_tests.rb
122
124
  - test/unit/ardb_tests.rb
123
125
  - test/unit/config_tests.rb
124
126
  - test/unit/migration_helpers_tests.rb
@@ -142,6 +144,7 @@ files:
142
144
  - tmp/sqlitetest/config/.gitkeep
143
145
  - tmp/testdb/config/.gitkeep
144
146
  - tmp/testdb/config/db.rb
147
+ - tmp/testdb/fake_schema.rb
145
148
  homepage: http://github.com/redding/ardb
146
149
  licenses: []
147
150
 
@@ -171,7 +174,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
171
174
  requirements: []
172
175
 
173
176
  rubyforge_project:
174
- rubygems_version: 1.8.15
177
+ rubygems_version: 1.8.24
175
178
  signing_key:
176
179
  specification_version: 3
177
180
  summary: Activerecord database tools.
@@ -181,6 +184,7 @@ test_files:
181
184
  - test/unit/adapter/mysql_tests.rb
182
185
  - test/unit/adapter/postgresql_tests.rb
183
186
  - test/unit/adapter/sqlite_tests.rb
187
+ - test/unit/adapter_spy_tests.rb
184
188
  - test/unit/ardb_tests.rb
185
189
  - test/unit/config_tests.rb
186
190
  - test/unit/migration_helpers_tests.rb