acts_as_paranoid 0.1.7 → 0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +4 -0
- data/lib/acts_as_paranoid.rb +40 -25
- data/test/database.yml +18 -0
- data/test/paranoid_test.rb +13 -13
- data/test/schema.rb +19 -0
- data/test/test_helper.rb +36 -0
- metadata +6 -28
- data/test/abstract_unit.rb +0 -25
- data/test/connections/native_db2/connection.rb +0 -14
- data/test/connections/native_mysql/connection.rb +0 -14
- data/test/connections/native_oci/connection.rb +0 -15
- data/test/connections/native_postgresql/connection.rb +0 -14
- data/test/connections/native_sqlite/connection.rb +0 -34
- data/test/connections/native_sqlite3/connection.rb +0 -33
- data/test/connections/native_sqlserver/connection.rb +0 -14
- data/test/connections/native_sqlserver_odbc/connection.rb +0 -15
- data/test/fixtures/activerecord_paranoid.sqlite +0 -0
- data/test/fixtures/db_definitions/postgresql.drop.sql +0 -3
- data/test/fixtures/db_definitions/postgresql.sql +0 -19
- data/test/fixtures/db_definitions/sqlite.drop.sql +0 -3
- data/test/fixtures/db_definitions/sqlite.sql +0 -17
- data/test/tests.rb +0 -2
data/CHANGELOG
CHANGED
data/lib/acts_as_paranoid.rb
CHANGED
@@ -45,6 +45,7 @@ module ActiveRecord #:nodoc:
|
|
45
45
|
class << self
|
46
46
|
alias_method :original_find, :find
|
47
47
|
alias_method :count_with_deleted, :count
|
48
|
+
alias_method :clobbering_with_scope, :with_scope
|
48
49
|
end
|
49
50
|
end
|
50
51
|
include ParanoidMethods
|
@@ -53,9 +54,6 @@ module ActiveRecord #:nodoc:
|
|
53
54
|
|
54
55
|
module ParanoidMethods #:nodoc:
|
55
56
|
def self.included(base) # :nodoc:
|
56
|
-
class << base
|
57
|
-
alias_method :clobbering_constrain, :constrain
|
58
|
-
end
|
59
57
|
base.extend ClassMethods
|
60
58
|
end
|
61
59
|
|
@@ -65,7 +63,7 @@ module ActiveRecord #:nodoc:
|
|
65
63
|
call_original_find = lambda { original_find(*(args << options)) }
|
66
64
|
|
67
65
|
if !options[:with_deleted]
|
68
|
-
|
66
|
+
with_deleted_scope { return call_original_find.call }
|
69
67
|
end
|
70
68
|
|
71
69
|
call_original_find.call
|
@@ -76,36 +74,53 @@ module ActiveRecord #:nodoc:
|
|
76
74
|
end
|
77
75
|
|
78
76
|
def count(conditions = nil, joins = nil)
|
79
|
-
|
77
|
+
with_deleted_scope { count_with_deleted(conditions, joins) }
|
80
78
|
end
|
81
79
|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
block.call if block_given?
|
94
|
-
ensure
|
95
|
-
self.scope_constrains = nil if is_new_scope
|
80
|
+
def with_scope(method_scoping = {}, is_new_scope = true)
|
81
|
+
# Dup first and second level of hash (method and params).
|
82
|
+
method_scoping = method_scoping.inject({}) do |hash, (method, params)|
|
83
|
+
hash[method] = params.dup
|
84
|
+
hash
|
85
|
+
end
|
86
|
+
|
87
|
+
method_scoping.assert_valid_keys [:find, :create]
|
88
|
+
if f = method_scoping[:find]
|
89
|
+
f.assert_valid_keys [:conditions, :joins, :offset, :limit, :readonly]
|
90
|
+
f[:readonly] = true if !f[:joins].blank? && !f.has_key?(:readonly)
|
96
91
|
end
|
92
|
+
|
93
|
+
raise ArgumentError, "Nested scopes are not yet supported: #{scoped_methods.inspect}" unless scoped_methods.nil?
|
94
|
+
|
95
|
+
self.scoped_methods = method_scoping
|
96
|
+
yield
|
97
|
+
ensure
|
98
|
+
self.scoped_methods = nil if is_new_scope
|
97
99
|
end
|
98
100
|
|
99
101
|
protected
|
100
|
-
def
|
102
|
+
def with_deleted_scope(&block)
|
101
103
|
deleted_cond = "#{table_name}.deleted_at IS NULL"
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
104
|
+
if scoped_methods.nil?
|
105
|
+
is_new_scope = true
|
106
|
+
current_scope = {}
|
107
|
+
else
|
108
|
+
is_new_scope = false
|
109
|
+
current_scope = scoped_methods.clone
|
110
|
+
self.scoped_methods = nil
|
106
111
|
end
|
112
|
+
|
113
|
+
current_scope ||= {}
|
114
|
+
current_scope[:find] ||= {}
|
115
|
+
if not current_scope[:find][:conditions] =~ /#{deleted_cond}/
|
116
|
+
current_scope[:find][:conditions] = current_scope[:find][:conditions].nil? ?
|
117
|
+
deleted_cond :
|
118
|
+
"(#{current_scope[:find][:conditions]}) AND #{deleted_cond}"
|
119
|
+
end
|
120
|
+
|
121
|
+
with_scope(current_scope, is_new_scope, &block)
|
107
122
|
end
|
108
|
-
|
123
|
+
|
109
124
|
def validate_find_options(options)
|
110
125
|
options.assert_valid_keys [:conditions, :include, :joins, :limit, :offset, :order, :select, :readonly, :with_deleted]
|
111
126
|
end
|
data/test/database.yml
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
sqlite:
|
2
|
+
:adapter: sqlite
|
3
|
+
:dbfile: acts_as_paranoid_plugin.sqlite.db
|
4
|
+
sqlite3:
|
5
|
+
:adapter: sqlite3
|
6
|
+
:dbfile: acts_as_paranoid_plugin.sqlite3.db
|
7
|
+
postgresql:
|
8
|
+
:adapter: postgresql
|
9
|
+
:username: postgres
|
10
|
+
:password: postgres
|
11
|
+
:database: acts_as_paranoid_plugin_test
|
12
|
+
:min_messages: ERROR
|
13
|
+
mysql:
|
14
|
+
:adapter: mysql
|
15
|
+
:host: localhost
|
16
|
+
:username: rails
|
17
|
+
:password:
|
18
|
+
:database: acts_as_paranoid_plugin_test
|
data/test/paranoid_test.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require '
|
1
|
+
require File.join(File.dirname(__FILE__), 'test_helper')
|
2
2
|
|
3
3
|
class Widget < ActiveRecord::Base
|
4
4
|
acts_as_paranoid
|
@@ -78,20 +78,20 @@ class ParanoidTest < Test::Unit::TestCase
|
|
78
78
|
assert Widget.find(1)
|
79
79
|
end
|
80
80
|
|
81
|
-
def
|
82
|
-
assert_equal 1, Widget.
|
83
|
-
assert_equal 0, Widget.
|
84
|
-
assert_equal 1, Widget.
|
81
|
+
def test_should_not_override_scopes_when_counting
|
82
|
+
assert_equal 1, Widget.with_scope(:find => { :conditions => "title = 'widget 1'" }) { Widget.count }
|
83
|
+
assert_equal 0, Widget.with_scope(:find => { :conditions => "title = 'deleted widget 2'" }) { Widget.count }
|
84
|
+
assert_equal 1, Widget.with_scope(:find => { :conditions => "title = 'deleted widget 2'" }) { Widget.count_with_deleted }
|
85
85
|
end
|
86
86
|
|
87
|
-
def
|
88
|
-
assert_equal [1], Widget.
|
89
|
-
assert_equal [], Widget.
|
90
|
-
assert_equal [2], Widget.
|
87
|
+
def test_should_not_override_scopes_when_finding
|
88
|
+
assert_equal [1], Widget.with_scope(:find => { :conditions => "title = 'widget 1'" }) { Widget.find(:all) }.ids
|
89
|
+
assert_equal [], Widget.with_scope(:find => { :conditions => "title = 'deleted widget 2'" }) { Widget.find(:all) }.ids
|
90
|
+
assert_equal [2], Widget.with_scope(:find => { :conditions => "title = 'deleted widget 2'" }) { Widget.find_with_deleted(:all) }.ids
|
91
91
|
end
|
92
92
|
|
93
|
-
def
|
94
|
-
Widget.
|
93
|
+
def test_should_allow_multiple_scoped_calls_when_finding
|
94
|
+
Widget.with_scope(:find => { :conditions => "title = 'deleted widget 2'" }) do
|
95
95
|
assert_equal [2], Widget.find_with_deleted(:all).ids
|
96
96
|
assert_equal [2], Widget.find_with_deleted(:all).ids, "clobbers the constrain on the unmodified find"
|
97
97
|
assert_equal [], Widget.find(:all).ids
|
@@ -99,8 +99,8 @@ class ParanoidTest < Test::Unit::TestCase
|
|
99
99
|
end
|
100
100
|
end
|
101
101
|
|
102
|
-
def
|
103
|
-
Widget.
|
102
|
+
def test_should_allow_multiple_scoped_calls_when_counting
|
103
|
+
Widget.with_scope(:find => { :conditions => "title = 'deleted widget 2'" }) do
|
104
104
|
assert_equal 1, Widget.count_with_deleted
|
105
105
|
assert_equal 1, Widget.count_with_deleted, "clobbers the constrain on the unmodified find"
|
106
106
|
assert_equal 0, Widget.count
|
data/test/schema.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
ActiveRecord::Schema.define(:version => 1) do
|
2
|
+
|
3
|
+
create_table :widgets, :force => true do |t|
|
4
|
+
t.column :title, :string, :limit => 50
|
5
|
+
t.column :deleted_at, :timestamp
|
6
|
+
end
|
7
|
+
|
8
|
+
create_table :categories, :force => true do |t|
|
9
|
+
t.column :widget_id, :integer
|
10
|
+
t.column :title, :string, :limit => 50
|
11
|
+
t.column :deleted_at, :timestamp
|
12
|
+
end
|
13
|
+
|
14
|
+
create_table :categories_widgets, :force => true, :id => false do |t|
|
15
|
+
t.column :category_id, :integer
|
16
|
+
t.column :widget_id, :integer
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
$:.unshift(File.dirname(__FILE__) + '/../lib')
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
#require 'active_record'
|
5
|
+
#require 'active_support/binding_of_caller'
|
6
|
+
#require 'active_support/breakpoint'
|
7
|
+
require "#{File.dirname(__FILE__)}/../../../../config/environment"
|
8
|
+
require 'active_record/fixtures'
|
9
|
+
require "#{File.dirname(__FILE__)}/../init"
|
10
|
+
|
11
|
+
config = YAML::load(IO.read(File.dirname(__FILE__) + '/database.yml'))
|
12
|
+
ActiveRecord::Base.logger = Logger.new(File.dirname(__FILE__) + "/debug.log")
|
13
|
+
ActiveRecord::Base.establish_connection(config[ENV['DB'] || 'sqlite'])
|
14
|
+
|
15
|
+
load(File.dirname(__FILE__) + "/schema.rb")
|
16
|
+
|
17
|
+
Test::Unit::TestCase.fixture_path = File.dirname(__FILE__) + "/fixtures/"
|
18
|
+
$LOAD_PATH.unshift(Test::Unit::TestCase.fixture_path)
|
19
|
+
|
20
|
+
class Test::Unit::TestCase #:nodoc:
|
21
|
+
def create_fixtures(*table_names)
|
22
|
+
if block_given?
|
23
|
+
Fixtures.create_fixtures(Test::Unit::TestCase.fixture_path, table_names) { yield }
|
24
|
+
else
|
25
|
+
Fixtures.create_fixtures(Test::Unit::TestCase.fixture_path, table_names)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
# Turn off transactional fixtures if you're working with MyISAM tables in MySQL
|
30
|
+
self.use_transactional_fixtures = true
|
31
|
+
|
32
|
+
# Instantiated fixtures are slow, but give you @david where you otherwise would need people(:david)
|
33
|
+
self.use_instantiated_fixtures = false
|
34
|
+
|
35
|
+
# Add more helper methods to be used by all tests here...
|
36
|
+
end
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.10
|
|
3
3
|
specification_version: 1
|
4
4
|
name: acts_as_paranoid
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.
|
7
|
-
date: 2005-
|
6
|
+
version: "0.2"
|
7
|
+
date: 2005-11-15
|
8
8
|
summary: acts_as_paranoid keeps models from actually being deleted by setting a deleted_at field.
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -28,42 +28,20 @@ authors:
|
|
28
28
|
- Rick Olson
|
29
29
|
files:
|
30
30
|
- lib/acts_as_paranoid.rb
|
31
|
-
- test/
|
32
|
-
- test/connections
|
31
|
+
- test/database.yml
|
33
32
|
- test/fixtures
|
34
33
|
- test/paranoid_test.rb
|
35
|
-
- test/
|
36
|
-
- test/
|
37
|
-
- test/connections/native_mysql
|
38
|
-
- test/connections/native_oci
|
39
|
-
- test/connections/native_postgresql
|
40
|
-
- test/connections/native_sqlite
|
41
|
-
- test/connections/native_sqlite3
|
42
|
-
- test/connections/native_sqlserver
|
43
|
-
- test/connections/native_sqlserver_odbc
|
44
|
-
- test/connections/native_db2/connection.rb
|
45
|
-
- test/connections/native_mysql/connection.rb
|
46
|
-
- test/connections/native_oci/connection.rb
|
47
|
-
- test/connections/native_postgresql/connection.rb
|
48
|
-
- test/connections/native_sqlite/connection.rb
|
49
|
-
- test/connections/native_sqlite3/connection.rb
|
50
|
-
- test/connections/native_sqlserver/connection.rb
|
51
|
-
- test/connections/native_sqlserver_odbc/connection.rb
|
52
|
-
- test/fixtures/activerecord_paranoid.sqlite
|
34
|
+
- test/schema.rb
|
35
|
+
- test/test_helper.rb
|
53
36
|
- test/fixtures/categories.yml
|
54
37
|
- test/fixtures/categories_widgets.yml
|
55
|
-
- test/fixtures/db_definitions
|
56
38
|
- test/fixtures/widgets.yml
|
57
|
-
- test/fixtures/db_definitions/postgresql.drop.sql
|
58
|
-
- test/fixtures/db_definitions/postgresql.sql
|
59
|
-
- test/fixtures/db_definitions/sqlite.drop.sql
|
60
|
-
- test/fixtures/db_definitions/sqlite.sql
|
61
39
|
- README
|
62
40
|
- MIT-LICENSE
|
63
41
|
- CHANGELOG
|
64
42
|
- RUNNING_UNIT_TESTS
|
65
43
|
test_files:
|
66
|
-
- test/
|
44
|
+
- test/paranoid_test.rb
|
67
45
|
rdoc_options: []
|
68
46
|
extra_rdoc_files: []
|
69
47
|
executables: []
|
data/test/abstract_unit.rb
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
$:.unshift(File.dirname(__FILE__) + '/../lib')
|
2
|
-
|
3
|
-
require 'rubygems'
|
4
|
-
require 'test/unit'
|
5
|
-
require 'active_record'
|
6
|
-
require 'active_record/fixtures'
|
7
|
-
require 'active_support/binding_of_caller'
|
8
|
-
require 'active_support/breakpoint'
|
9
|
-
require 'connection'
|
10
|
-
require 'acts_as_paranoid'
|
11
|
-
|
12
|
-
class Test::Unit::TestCase #:nodoc:
|
13
|
-
def create_fixtures(*table_names)
|
14
|
-
if block_given?
|
15
|
-
Fixtures.create_fixtures(File.dirname(__FILE__) + "/fixtures/", table_names) { yield }
|
16
|
-
else
|
17
|
-
Fixtures.create_fixtures(File.dirname(__FILE__) + "/fixtures/", table_names)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
Test::Unit::TestCase.fixture_path = File.dirname(__FILE__) + "/fixtures/"
|
23
|
-
Test::Unit::TestCase.use_instantiated_fixtures = false
|
24
|
-
Test::Unit::TestCase.use_transactional_fixtures = (ENV['AR_TX_FIXTURES'] == "yes")
|
25
|
-
|
@@ -1,14 +0,0 @@
|
|
1
|
-
print "Using native DB2\n"
|
2
|
-
require 'logger'
|
3
|
-
|
4
|
-
ActiveRecord::Base.logger = Logger.new("debug.log")
|
5
|
-
|
6
|
-
db1 = 'arparanoid'
|
7
|
-
|
8
|
-
ActiveRecord::Base.establish_connection(
|
9
|
-
:adapter => "db2",
|
10
|
-
:host => "localhost",
|
11
|
-
:username => "arunit",
|
12
|
-
:password => "arunit",
|
13
|
-
:database => db1
|
14
|
-
)
|
@@ -1,14 +0,0 @@
|
|
1
|
-
print "Using native MySQL\n"
|
2
|
-
require 'logger'
|
3
|
-
|
4
|
-
ActiveRecord::Base.logger = Logger.new("debug.log")
|
5
|
-
|
6
|
-
db1 = 'activerecord_paranoid'
|
7
|
-
|
8
|
-
ActiveRecord::Base.establish_connection(
|
9
|
-
:adapter => "mysql",
|
10
|
-
:host => "localhost",
|
11
|
-
:username => "rails",
|
12
|
-
:password => "",
|
13
|
-
:database => db1
|
14
|
-
)
|
@@ -1,15 +0,0 @@
|
|
1
|
-
print "Using OCI Oracle\n"
|
2
|
-
require 'logger'
|
3
|
-
|
4
|
-
ActiveRecord::Base.logger = Logger.new STDOUT
|
5
|
-
ActiveRecord::Base.logger.level = Logger::WARN
|
6
|
-
|
7
|
-
db1 = 'activerecord_paranoid'
|
8
|
-
|
9
|
-
ActiveRecord::Base.establish_connection(
|
10
|
-
:adapter => 'oci',
|
11
|
-
:host => '', # can use an oracle SID
|
12
|
-
:username => 'arunit',
|
13
|
-
:password => 'arunit',
|
14
|
-
:database => db1
|
15
|
-
)
|
@@ -1,14 +0,0 @@
|
|
1
|
-
print "Using native PostgreSQL\n"
|
2
|
-
require 'logger'
|
3
|
-
|
4
|
-
ActiveRecord::Base.logger = Logger.new("debug.log")
|
5
|
-
|
6
|
-
db1 = 'activerecord_paranoid'
|
7
|
-
|
8
|
-
ActiveRecord::Base.establish_connection(
|
9
|
-
:adapter => "postgresql",
|
10
|
-
:host => nil,
|
11
|
-
:username => "postgres",
|
12
|
-
:password => "postgres",
|
13
|
-
:database => db1
|
14
|
-
)
|
@@ -1,34 +0,0 @@
|
|
1
|
-
print "Using native SQlite\n"
|
2
|
-
require 'logger'
|
3
|
-
ActiveRecord::Base.logger = Logger.new("debug.log")
|
4
|
-
|
5
|
-
class SqliteError < StandardError
|
6
|
-
end
|
7
|
-
|
8
|
-
BASE_DIR = File.expand_path(File.dirname(__FILE__) + '/../../fixtures')
|
9
|
-
sqlite_test_db = "#{BASE_DIR}/activerecord_paranoid.sqlite"
|
10
|
-
|
11
|
-
def make_connection(clazz, db_file, db_definitions_file)
|
12
|
-
unless File.exist?(db_file)
|
13
|
-
puts "SQLite database not found at #{db_file}. Rebuilding it."
|
14
|
-
sqlite_command = %Q{sqlite #{db_file} "create table a (a integer); drop table a;"}
|
15
|
-
puts "Executing '#{sqlite_command}'"
|
16
|
-
raise SqliteError.new("Seems that there is no sqlite executable available") unless system(sqlite_command)
|
17
|
-
clazz.establish_connection(
|
18
|
-
:adapter => "sqlite",
|
19
|
-
:dbfile => db_file)
|
20
|
-
script = File.read("#{BASE_DIR}/db_definitions/#{db_definitions_file}")
|
21
|
-
# SQLite-Ruby has problems with semi-colon separated commands, so split and execute one at a time
|
22
|
-
script.split(';').each do
|
23
|
-
|command|
|
24
|
-
clazz.connection.execute(command) unless command.strip.empty?
|
25
|
-
end
|
26
|
-
else
|
27
|
-
clazz.establish_connection(
|
28
|
-
:adapter => "sqlite",
|
29
|
-
:dbfile => db_file)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
make_connection(ActiveRecord::Base, sqlite_test_db, 'sqlite.sql')
|
34
|
-
|
@@ -1,33 +0,0 @@
|
|
1
|
-
print "Using native SQLite3\n"
|
2
|
-
require 'logger'
|
3
|
-
ActiveRecord::Base.logger = Logger.new("debug.log")
|
4
|
-
|
5
|
-
class SqliteError < StandardError
|
6
|
-
end
|
7
|
-
|
8
|
-
BASE_DIR = File.expand_path(File.dirname(__FILE__) + '/../../fixtures')
|
9
|
-
sqlite_test_db = "#{BASE_DIR}/activerecord_paranoid.sqlite3"
|
10
|
-
|
11
|
-
def make_connection(clazz, db_file, db_definitions_file)
|
12
|
-
unless File.exist?(db_file)
|
13
|
-
puts "SQLite3 database not found at #{db_file}. Rebuilding it."
|
14
|
-
sqlite_command = %Q{sqlite3 #{db_file} "create table a (a integer); drop table a;"}
|
15
|
-
puts "Executing '#{sqlite_command}'"
|
16
|
-
raise SqliteError.new("Seems that there is no sqlite3 executable available") unless system(sqlite_command)
|
17
|
-
clazz.establish_connection(
|
18
|
-
:adapter => "sqlite3",
|
19
|
-
:dbfile => db_file)
|
20
|
-
script = File.read("#{BASE_DIR}/db_definitions/#{db_definitions_file}")
|
21
|
-
# SQLite-Ruby has problems with semi-colon separated commands, so split and execute one at a time
|
22
|
-
script.split(';').each do
|
23
|
-
|command|
|
24
|
-
clazz.connection.execute(command) unless command.strip.empty?
|
25
|
-
end
|
26
|
-
else
|
27
|
-
clazz.establish_connection(
|
28
|
-
:adapter => "sqlite3",
|
29
|
-
:dbfile => db_file)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
make_connection(ActiveRecord::Base, sqlite_test_db, 'sqlite.sql')
|
@@ -1,14 +0,0 @@
|
|
1
|
-
print "Using native SQLServer\n"
|
2
|
-
require 'logger'
|
3
|
-
|
4
|
-
ActiveRecord::Base.logger = Logger.new("debug.log")
|
5
|
-
|
6
|
-
db1 = 'activerecord_paranoid'
|
7
|
-
|
8
|
-
ActiveRecord::Base.establish_connection(
|
9
|
-
:adapter => "sqlserver",
|
10
|
-
:host => "localhost",
|
11
|
-
:username => "sa",
|
12
|
-
:password => "",
|
13
|
-
:database => db1
|
14
|
-
)
|
@@ -1,15 +0,0 @@
|
|
1
|
-
print "Using native SQLServer via ODBC\n"
|
2
|
-
require 'logger'
|
3
|
-
|
4
|
-
ActiveRecord::Base.logger = Logger.new("debug.log")
|
5
|
-
|
6
|
-
dsn1 = 'activerecord_paranoid'
|
7
|
-
|
8
|
-
ActiveRecord::Base.establish_connection(
|
9
|
-
:adapter => "sqlserver",
|
10
|
-
:mode => "ODBC",
|
11
|
-
:host => "localhost",
|
12
|
-
:username => "sa",
|
13
|
-
:password => "",
|
14
|
-
:dsn => dsn1
|
15
|
-
)
|
Binary file
|
@@ -1,19 +0,0 @@
|
|
1
|
-
CREATE TABLE widgets (
|
2
|
-
id SERIAL,
|
3
|
-
title VARCHAR(50),
|
4
|
-
deleted_at TIMESTAMP
|
5
|
-
);
|
6
|
-
SELECT setval('widgets_id_seq', 100);
|
7
|
-
|
8
|
-
CREATE TABLE categories (
|
9
|
-
id SERIAL,
|
10
|
-
widget_id INT,
|
11
|
-
title VARCHAR(50),
|
12
|
-
deleted_at TIMESTAMP
|
13
|
-
);
|
14
|
-
SELECT setval('categories_id_seq', 100);
|
15
|
-
|
16
|
-
CREATE TABLE categories_widgets (
|
17
|
-
category_id INT,
|
18
|
-
widget_id INT
|
19
|
-
);
|
@@ -1,17 +0,0 @@
|
|
1
|
-
CREATE TABLE 'widgets' (
|
2
|
-
'id' INTEGER NOT NULL PRIMARY KEY,
|
3
|
-
'title' VARCHAR(50),
|
4
|
-
'deleted_at' DATETIME
|
5
|
-
);
|
6
|
-
|
7
|
-
CREATE TABLE 'categories' (
|
8
|
-
'id' INTEGER NOT NULL PRIMARY KEY,
|
9
|
-
'widget_id' INTEGER,
|
10
|
-
'title' VARCHAR(50),
|
11
|
-
'deleted_at' DATETIME
|
12
|
-
);
|
13
|
-
|
14
|
-
CREATE TABLE 'categories_widgets' (
|
15
|
-
'category_id' INTEGER,
|
16
|
-
'widget_id' INTEGER
|
17
|
-
);
|
data/test/tests.rb
DELETED