activerecord 1.11.1 → 1.12.1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of activerecord might be problematic. Click here for more details.
- data/CHANGELOG +198 -0
- data/lib/active_record.rb +19 -14
- data/lib/active_record/acts/list.rb +8 -6
- data/lib/active_record/acts/tree.rb +33 -10
- data/lib/active_record/aggregations.rb +1 -7
- data/lib/active_record/associations.rb +151 -82
- data/lib/active_record/associations/association_collection.rb +25 -0
- data/lib/active_record/associations/association_proxy.rb +9 -8
- data/lib/active_record/associations/belongs_to_association.rb +19 -5
- data/lib/active_record/associations/has_and_belongs_to_many_association.rb +44 -69
- data/lib/active_record/associations/has_many_association.rb +6 -14
- data/lib/active_record/associations/has_one_association.rb +5 -3
- data/lib/active_record/base.rb +344 -130
- data/lib/active_record/callbacks.rb +2 -2
- data/lib/active_record/connection_adapters/abstract/connection_specification.rb +128 -0
- data/lib/active_record/connection_adapters/abstract/database_statements.rb +104 -0
- data/lib/active_record/connection_adapters/abstract/quoting.rb +51 -0
- data/lib/active_record/connection_adapters/abstract/schema_definitions.rb +249 -0
- data/lib/active_record/connection_adapters/abstract/schema_statements.rb +245 -0
- data/lib/active_record/connection_adapters/abstract_adapter.rb +29 -464
- data/lib/active_record/connection_adapters/db2_adapter.rb +40 -10
- data/lib/active_record/connection_adapters/mysql_adapter.rb +131 -60
- data/lib/active_record/connection_adapters/oci_adapter.rb +106 -26
- data/lib/active_record/connection_adapters/postgresql_adapter.rb +211 -62
- data/lib/active_record/connection_adapters/sqlite_adapter.rb +193 -44
- data/lib/active_record/connection_adapters/sqlserver_adapter.rb +24 -15
- data/lib/active_record/fixtures.rb +47 -24
- data/lib/active_record/migration.rb +34 -5
- data/lib/active_record/observer.rb +32 -2
- data/lib/active_record/query_cache.rb +12 -11
- data/lib/active_record/schema.rb +58 -0
- data/lib/active_record/schema_dumper.rb +84 -0
- data/lib/active_record/transactions.rb +1 -3
- data/lib/active_record/validations.rb +40 -26
- data/lib/active_record/vendor/mysql.rb +6 -0
- data/lib/active_record/version.rb +9 -0
- data/rakefile +5 -16
- data/test/abstract_unit.rb +6 -11
- data/test/adapter_test.rb +58 -0
- data/test/ar_schema_test.rb +33 -0
- data/test/association_callbacks_test.rb +14 -0
- data/test/associations_go_eager_test.rb +56 -14
- data/test/associations_test.rb +245 -25
- data/test/base_test.rb +205 -34
- data/test/binary_test.rb +25 -42
- data/test/callbacks_test.rb +75 -0
- data/test/conditions_scoping_test.rb +136 -0
- data/test/connections/native_mysql/connection.rb +0 -4
- data/test/connections/native_sqlite3/in_memory_connection.rb +17 -0
- data/test/copy_table_sqlite.rb +64 -0
- data/test/deprecated_associations_test.rb +7 -6
- data/test/deprecated_finder_test.rb +3 -3
- data/test/finder_test.rb +33 -3
- data/test/fixtures/accounts.yml +5 -0
- data/test/fixtures/categories_ordered.yml +7 -0
- data/test/fixtures/category.rb +11 -1
- data/test/fixtures/comment.rb +22 -2
- data/test/fixtures/comments.yml +6 -0
- data/test/fixtures/companies.yml +15 -0
- data/test/fixtures/company.rb +24 -1
- data/test/fixtures/db_definitions/db2.drop.sql +5 -1
- data/test/fixtures/db_definitions/db2.sql +15 -1
- data/test/fixtures/db_definitions/mysql.drop.sql +2 -0
- data/test/fixtures/db_definitions/mysql.sql +17 -2
- data/test/fixtures/db_definitions/oci.drop.sql +37 -5
- data/test/fixtures/db_definitions/oci.sql +47 -4
- data/test/fixtures/db_definitions/oci2.drop.sql +1 -1
- data/test/fixtures/db_definitions/oci2.sql +2 -2
- data/test/fixtures/db_definitions/postgresql.drop.sql +4 -0
- data/test/fixtures/db_definitions/postgresql.sql +33 -4
- data/test/fixtures/db_definitions/sqlite.drop.sql +2 -0
- data/test/fixtures/db_definitions/sqlite.sql +16 -2
- data/test/fixtures/db_definitions/sqlserver.drop.sql +2 -0
- data/test/fixtures/db_definitions/sqlserver.sql +16 -2
- data/test/fixtures/developer.rb +1 -1
- data/test/fixtures/flowers.jpg +0 -0
- data/test/fixtures/keyboard.rb +3 -0
- data/test/fixtures/mixins.yml +11 -1
- data/test/fixtures/order.rb +4 -0
- data/test/fixtures/post.rb +4 -0
- data/test/fixtures/posts.yml +7 -0
- data/test/fixtures/project.rb +1 -0
- data/test/fixtures/subject.rb +4 -0
- data/test/fixtures/subscriber.rb +2 -4
- data/test/fixtures/topics.yml +2 -2
- data/test/fixtures_test.rb +79 -7
- data/test/inheritance_test.rb +2 -2
- data/test/lifecycle_test.rb +14 -6
- data/test/migration_test.rb +164 -6
- data/test/mixin_test.rb +78 -2
- data/test/pk_test.rb +25 -1
- data/test/readonly_test.rb +31 -0
- data/test/reflection_test.rb +4 -1
- data/test/schema_dumper_test.rb +19 -0
- data/test/schema_test_postgresql.rb +3 -2
- data/test/synonym_test_oci.rb +17 -0
- data/test/threaded_connections_test.rb +2 -1
- data/test/transactions_test.rb +109 -10
- data/test/validations_test.rb +70 -42
- metadata +25 -5
- data/test/fixtures/associations.png +0 -0
- data/test/thread_safety_test.rb +0 -36
data/test/reflection_test.rb
CHANGED
@@ -28,7 +28,10 @@ class ReflectionTest < Test::Unit::TestCase
|
|
28
28
|
end
|
29
29
|
|
30
30
|
def test_content_columns
|
31
|
-
|
31
|
+
content_columns = Topic.content_columns
|
32
|
+
content_column_names = content_columns.map {|column| column.name}
|
33
|
+
assert_equal 8, content_columns.length
|
34
|
+
assert_equal %w(title author_name author_email_address written_on bonus_time last_read content approved).sort, content_column_names.sort
|
32
35
|
end
|
33
36
|
|
34
37
|
def test_column_string_type_and_limit
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'abstract_unit'
|
2
|
+
require "#{File.dirname(__FILE__)}/../lib/active_record/schema_dumper"
|
3
|
+
require 'stringio'
|
4
|
+
|
5
|
+
if ActiveRecord::Base.connection.respond_to?(:tables)
|
6
|
+
|
7
|
+
class SchemaDumperTest < Test::Unit::TestCase
|
8
|
+
def test_schema_dump
|
9
|
+
stream = StringIO.new
|
10
|
+
ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, stream)
|
11
|
+
output = stream.string
|
12
|
+
|
13
|
+
assert_match %r{create_table "accounts"}, output
|
14
|
+
assert_match %r{create_table "authors"}, output
|
15
|
+
assert_no_match %r{create_table "schema_info"}, output
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'abstract_unit'
|
2
2
|
|
3
3
|
class SchemaTest < Test::Unit::TestCase
|
4
|
+
self.use_transactional_fixtures = false
|
5
|
+
|
4
6
|
SCHEMA_NAME = 'test_schema'
|
5
7
|
TABLE_NAME = 'things'
|
6
8
|
COLUMNS = [
|
@@ -15,8 +17,7 @@ class SchemaTest < Test::Unit::TestCase
|
|
15
17
|
end
|
16
18
|
|
17
19
|
def teardown
|
18
|
-
@connection.execute "DROP
|
19
|
-
@connection.execute "DROP SCHEMA #{SCHEMA_NAME}"
|
20
|
+
@connection.execute "DROP SCHEMA #{SCHEMA_NAME} CASCADE"
|
20
21
|
end
|
21
22
|
|
22
23
|
def test_with_schema_prefixed_table_name
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'abstract_unit'
|
2
|
+
require 'fixtures/topic'
|
3
|
+
require 'fixtures/subject'
|
4
|
+
|
5
|
+
# confirm that synonyms work just like tables; in this case
|
6
|
+
# the "subjects" table in Oracle (defined in oci.sql) is just
|
7
|
+
# a synonym to the "topics" table
|
8
|
+
|
9
|
+
class TestOracleSynonym < Test::Unit::TestCase
|
10
|
+
|
11
|
+
def test_oracle_synonym
|
12
|
+
topic = Topic.new
|
13
|
+
subject = Subject.new
|
14
|
+
assert_equal(topic.attributes, subject.attributes)
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'abstract_unit'
|
2
|
+
require 'fixtures/topic'
|
2
3
|
|
3
4
|
class ThreadedConnectionsTest < Test::Unit::TestCase
|
4
5
|
self.use_transactional_fixtures = false
|
@@ -11,7 +12,7 @@ class ThreadedConnectionsTest < Test::Unit::TestCase
|
|
11
12
|
end
|
12
13
|
|
13
14
|
def gather_connections(use_threaded_connections)
|
14
|
-
ActiveRecord::Base.
|
15
|
+
ActiveRecord::Base.allow_concurrency = use_threaded_connections
|
15
16
|
ActiveRecord::Base.establish_connection(@connection)
|
16
17
|
|
17
18
|
5.times do
|
data/test/transactions_test.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
require 'abstract_unit'
|
2
2
|
require 'fixtures/topic'
|
3
|
-
|
3
|
+
require 'fixtures/developer'
|
4
4
|
|
5
5
|
class TransactionTest < Test::Unit::TestCase
|
6
6
|
self.use_transactional_fixtures = false
|
7
7
|
|
8
|
-
fixtures :topics
|
8
|
+
fixtures :topics, :developers
|
9
9
|
|
10
10
|
def setup
|
11
11
|
# sqlite does not seem to return these in the right order, so we sort them
|
@@ -15,20 +15,51 @@ class TransactionTest < Test::Unit::TestCase
|
|
15
15
|
|
16
16
|
def test_successful
|
17
17
|
Topic.transaction do
|
18
|
-
@first.approved =
|
19
|
-
@second.approved =
|
18
|
+
@first.approved = true
|
19
|
+
@second.approved = false
|
20
|
+
@first.save
|
21
|
+
@second.save
|
22
|
+
end
|
23
|
+
|
24
|
+
assert Topic.find(1).approved?, "First should have been approved"
|
25
|
+
assert !Topic.find(2).approved?, "Second should have been unapproved"
|
26
|
+
end
|
27
|
+
|
28
|
+
def transaction_with_return
|
29
|
+
Topic.transaction do
|
30
|
+
@first.approved = true
|
31
|
+
@second.approved = false
|
20
32
|
@first.save
|
21
33
|
@second.save
|
34
|
+
return
|
22
35
|
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_successful_with_return
|
39
|
+
class << Topic.connection
|
40
|
+
alias :real_commit_db_transaction :commit_db_transaction
|
41
|
+
def commit_db_transaction
|
42
|
+
$committed = true
|
43
|
+
real_commit_db_transaction
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
$committed = false
|
48
|
+
transaction_with_return
|
49
|
+
assert $committed
|
23
50
|
|
24
51
|
assert Topic.find(1).approved?, "First should have been approved"
|
25
52
|
assert !Topic.find(2).approved?, "Second should have been unapproved"
|
53
|
+
ensure
|
54
|
+
class << Topic.connection
|
55
|
+
alias :commit_db_transaction :real_commit_db_transaction rescue nil
|
56
|
+
end
|
26
57
|
end
|
27
58
|
|
28
59
|
def test_successful_with_instance_method
|
29
60
|
@first.transaction do
|
30
|
-
@first.approved =
|
31
|
-
@second.approved =
|
61
|
+
@first.approved = true
|
62
|
+
@second.approved = false
|
32
63
|
@first.save
|
33
64
|
@second.save
|
34
65
|
end
|
@@ -36,7 +67,7 @@ class TransactionTest < Test::Unit::TestCase
|
|
36
67
|
assert Topic.find(1).approved?, "First should have been approved"
|
37
68
|
assert !Topic.find(2).approved?, "Second should have been unapproved"
|
38
69
|
end
|
39
|
-
|
70
|
+
|
40
71
|
def test_failing_on_exception
|
41
72
|
begin
|
42
73
|
Topic.transaction do
|
@@ -94,8 +125,8 @@ class TransactionTest < Test::Unit::TestCase
|
|
94
125
|
def test_nested_explicit_transactions
|
95
126
|
Topic.transaction do
|
96
127
|
Topic.transaction do
|
97
|
-
@first.approved =
|
98
|
-
@second.approved =
|
128
|
+
@first.approved = true
|
129
|
+
@second.approved = false
|
99
130
|
@first.save
|
100
131
|
@second.save
|
101
132
|
end
|
@@ -104,7 +135,75 @@ class TransactionTest < Test::Unit::TestCase
|
|
104
135
|
assert Topic.find(1).approved?, "First should have been approved"
|
105
136
|
assert !Topic.find(2).approved?, "Second should have been unapproved"
|
106
137
|
end
|
107
|
-
|
138
|
+
|
139
|
+
# This will cause transactions to overlap and fail unless they are
|
140
|
+
# performed on separate database connections.
|
141
|
+
def test_transaction_per_thread
|
142
|
+
assert_nothing_raised do
|
143
|
+
threads = (1..20).map do
|
144
|
+
Thread.new do
|
145
|
+
Topic.transaction do
|
146
|
+
topic = Topic.find(:first)
|
147
|
+
topic.approved = !topic.approved?
|
148
|
+
topic.save!
|
149
|
+
topic.approved = !topic.approved?
|
150
|
+
topic.save!
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
threads.each { |t| t.join }
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
# Test for dirty reads among simultaneous transactions.
|
160
|
+
def test_transaction_isolation__read_committed
|
161
|
+
# Should be invariant.
|
162
|
+
original_salary = Developer.find(1).salary
|
163
|
+
temporary_salary = 200000
|
164
|
+
|
165
|
+
assert_nothing_raised do
|
166
|
+
threads = (1..20).map do
|
167
|
+
Thread.new do
|
168
|
+
Developer.transaction do
|
169
|
+
# Expect original salary.
|
170
|
+
dev = Developer.find(1)
|
171
|
+
assert_equal original_salary, dev.salary
|
172
|
+
|
173
|
+
dev.salary = temporary_salary
|
174
|
+
dev.save!
|
175
|
+
|
176
|
+
# Expect temporary salary.
|
177
|
+
dev = Developer.find(1)
|
178
|
+
assert_equal temporary_salary, dev.salary
|
179
|
+
|
180
|
+
dev.salary = original_salary
|
181
|
+
dev.save!
|
182
|
+
|
183
|
+
# Expect original salary.
|
184
|
+
dev = Developer.find(1)
|
185
|
+
assert_equal original_salary, dev.salary
|
186
|
+
end
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
190
|
+
# Keep our eyes peeled.
|
191
|
+
threads << Thread.new do
|
192
|
+
10.times do
|
193
|
+
sleep 0.05
|
194
|
+
Developer.transaction do
|
195
|
+
# Always expect original salary.
|
196
|
+
assert_equal original_salary, Developer.find(1).salary
|
197
|
+
end
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
201
|
+
threads.each { |t| t.join }
|
202
|
+
end
|
203
|
+
|
204
|
+
assert_equal original_salary, Developer.find(1).salary
|
205
|
+
end
|
206
|
+
|
108
207
|
|
109
208
|
private
|
110
209
|
def add_exception_raising_after_save_callback_to_topic
|
data/test/validations_test.rb
CHANGED
@@ -396,15 +396,20 @@ class ValidationsTest < Test::Unit::TestCase
|
|
396
396
|
def test_validates_length_of_using_within
|
397
397
|
Topic.validates_length_of(:title, :content, :within => 3..5)
|
398
398
|
|
399
|
-
t = Topic.
|
400
|
-
assert !t.
|
401
|
-
|
399
|
+
t = Topic.new("title" => "a!", "content" => "I'm ooooooooh so very long")
|
400
|
+
assert !t.valid?
|
402
401
|
assert_equal "is too short (min is 3 characters)", t.errors.on(:title)
|
403
402
|
assert_equal "is too long (max is 5 characters)", t.errors.on(:content)
|
404
403
|
|
404
|
+
t.title = nil
|
405
|
+
t.content = nil
|
406
|
+
assert !t.valid?
|
407
|
+
assert_equal "is too short (min is 3 characters)", t.errors.on(:title)
|
408
|
+
assert_equal "is too short (min is 3 characters)", t.errors.on(:content)
|
409
|
+
|
405
410
|
t.title = "abe"
|
406
411
|
t.content = "mad"
|
407
|
-
assert t.
|
412
|
+
assert t.valid?
|
408
413
|
end
|
409
414
|
|
410
415
|
def test_optionally_validates_length_of_using_within
|
@@ -702,43 +707,6 @@ class ValidationsTest < Test::Unit::TestCase
|
|
702
707
|
assert_equal r.errors.on(:topic).first, "This string contains 'single' and \"double\" quotes"
|
703
708
|
end
|
704
709
|
|
705
|
-
def test_validates_numericality_of_with_string
|
706
|
-
Topic.validates_numericality_of( :approved )
|
707
|
-
["not a number","42 not a number","0xdeadbeef","00-1","-+019.0","12.12.13.12",nil].each do |v|
|
708
|
-
t = Topic.create("title" => "numeric test", "content" => "whatever", "approved" => "not a number")
|
709
|
-
assert !t.valid?, "#{v} not rejected as a number"
|
710
|
-
assert t.errors.on(:approved)
|
711
|
-
end
|
712
|
-
end
|
713
|
-
|
714
|
-
def test_validates_numericality_of
|
715
|
-
Topic.validates_numericality_of( :approved, :allow_nil => true )
|
716
|
-
["10", "10.0", "10.5", "-10.5", "-0.0001","0090","-090","-090.1",nil,""].each do |v|
|
717
|
-
t = Topic.new("title" => "numeric test", "content" => "whatever", "approved" => v)
|
718
|
-
assert t.valid?, "#{v} not recognized as a number"
|
719
|
-
# we cannot check this as approved is actually an integer field
|
720
|
-
#assert_in_delta v.to_f, t.approved, 0.0000001
|
721
|
-
end
|
722
|
-
end
|
723
|
-
|
724
|
-
def test_validates_numericality_of_int_with_string
|
725
|
-
Topic.validates_numericality_of( :approved, :only_integer => true )
|
726
|
-
["not a number","42 not a number","0xdeadbeef","0-1","--3","+-3","+3-1",nil].each do |v|
|
727
|
-
t = Topic.create("title" => "numeric test", "content" => "whatever", "approved" => v)
|
728
|
-
assert !t.valid?, "#{v} not rejected as integer"
|
729
|
-
assert t.errors.on(:approved)
|
730
|
-
end
|
731
|
-
end
|
732
|
-
|
733
|
-
def test_validates_numericality_of_int
|
734
|
-
Topic.validates_numericality_of( :approved, :only_integer => true, :allow_nil => true )
|
735
|
-
["42", "+42", "-42", "042", "0042", "-042", 42, nil,""].each do |v|
|
736
|
-
t = Topic.new("title" => "numeric test", "content" => "whatever", "approved" => v)
|
737
|
-
assert t.valid?, "#{v} not recognized as integer"
|
738
|
-
assert_equal((v.nil? or v == "")? nil : v.to_i, t.approved)
|
739
|
-
end
|
740
|
-
end
|
741
|
-
|
742
710
|
def test_conditional_validation_using_method_true
|
743
711
|
# When the method returns true
|
744
712
|
Topic.validates_length_of( :title, :maximum=>5, :too_long=>"hoo %d", :if => :condition_is_true )
|
@@ -801,4 +769,64 @@ class ValidationsTest < Test::Unit::TestCase
|
|
801
769
|
r.topic = Topic.find :first
|
802
770
|
assert r.valid?
|
803
771
|
end
|
804
|
-
end
|
772
|
+
end
|
773
|
+
|
774
|
+
|
775
|
+
class ValidatesNumericalityTest
|
776
|
+
NIL = [nil, "", " ", " \t \r \n"]
|
777
|
+
FLOAT_STRINGS = %w(0.0 +0.0 -0.0 10.0 10.5 -10.5 -0.0001 -090.1)
|
778
|
+
INTEGER_STRINGS = %w(0 +0 -0 10 +10 -10 0090 -090)
|
779
|
+
FLOATS = [0.0, 10.0, 10.5, -10.5, -0.0001] + FLOAT_STRINGS
|
780
|
+
INTEGERS = [0, 10, -10] + INTEGER_STRINGS
|
781
|
+
JUNK = ["not a number", "42 not a number", "0xdeadbeef", "00-1", "--3", "+-3", "+3-1", "-+019.0", "12.12.13.12"]
|
782
|
+
|
783
|
+
def setup
|
784
|
+
Topic.write_inheritable_attribute(:validate, nil)
|
785
|
+
Topic.write_inheritable_attribute(:validate_on_create, nil)
|
786
|
+
Topic.write_inheritable_attribute(:validate_on_update, nil)
|
787
|
+
end
|
788
|
+
|
789
|
+
def test_default_validates_numericality_of
|
790
|
+
Topic.validates_numericality_of :approved
|
791
|
+
|
792
|
+
invalid!(NIL + JUNK)
|
793
|
+
valid!(FLOATS + INTEGERS)
|
794
|
+
end
|
795
|
+
|
796
|
+
def test_validates_numericality_of_with_nil_allowed
|
797
|
+
Topic.validates_numericality_of :approved, :allow_nil => true
|
798
|
+
|
799
|
+
invalid!(JUNK)
|
800
|
+
valid!(NIL + FLOATS + INTEGERS)
|
801
|
+
end
|
802
|
+
|
803
|
+
def test_validates_numericality_of_with_integer_only
|
804
|
+
Topic.validates_numericality_of :approved, :only_integer => true
|
805
|
+
|
806
|
+
invalid!(NIL + JUNK + FLOATS)
|
807
|
+
valid!(INTEGERS)
|
808
|
+
end
|
809
|
+
|
810
|
+
def test_validates_numericality_of_with_integer_only_and_nil_allowed
|
811
|
+
Topic.validates_numericality_of :approved, :only_integer => true, :allow_nil => true
|
812
|
+
|
813
|
+
invalid!(JUNK + FLOATS)
|
814
|
+
valid!(NIL + INTEGERS)
|
815
|
+
end
|
816
|
+
|
817
|
+
private
|
818
|
+
def invalid!(values)
|
819
|
+
values.each do |value|
|
820
|
+
topic = Topic.create("title" => "numeric test", "content" => "whatever", "approved" => value)
|
821
|
+
assert !topic.valid?, "#{value} not rejected as a number"
|
822
|
+
assert topic.errors.on(:approved)
|
823
|
+
end
|
824
|
+
end
|
825
|
+
|
826
|
+
def valid!(values)
|
827
|
+
values.each do |value|
|
828
|
+
topic = Topic.create("title" => "numeric test", "content" => "whatever", "approved" => value)
|
829
|
+
assert topic.valid?, "#{value} not accepted as a number"
|
830
|
+
end
|
831
|
+
end
|
832
|
+
end
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.10
|
|
3
3
|
specification_version: 1
|
4
4
|
name: activerecord
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 1.
|
7
|
-
date: 2005-
|
6
|
+
version: 1.12.1
|
7
|
+
date: 2005-10-19
|
8
8
|
summary: Implements the ActiveRecord pattern for ORM.
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -51,10 +51,13 @@ files:
|
|
51
51
|
- lib/active_record/observer.rb
|
52
52
|
- lib/active_record/query_cache.rb
|
53
53
|
- lib/active_record/reflection.rb
|
54
|
+
- lib/active_record/schema.rb
|
55
|
+
- lib/active_record/schema_dumper.rb
|
54
56
|
- lib/active_record/timestamp.rb
|
55
57
|
- lib/active_record/transactions.rb
|
56
58
|
- lib/active_record/validations.rb
|
57
59
|
- lib/active_record/vendor
|
60
|
+
- lib/active_record/version.rb
|
58
61
|
- lib/active_record/wrappers
|
59
62
|
- lib/active_record/wrappings.rb
|
60
63
|
- lib/active_record/acts/list.rb
|
@@ -66,6 +69,7 @@ files:
|
|
66
69
|
- lib/active_record/associations/has_and_belongs_to_many_association.rb
|
67
70
|
- lib/active_record/associations/has_many_association.rb
|
68
71
|
- lib/active_record/associations/has_one_association.rb
|
72
|
+
- lib/active_record/connection_adapters/abstract
|
69
73
|
- lib/active_record/connection_adapters/abstract_adapter.rb
|
70
74
|
- lib/active_record/connection_adapters/db2_adapter.rb
|
71
75
|
- lib/active_record/connection_adapters/mysql_adapter.rb
|
@@ -73,6 +77,11 @@ files:
|
|
73
77
|
- lib/active_record/connection_adapters/postgresql_adapter.rb
|
74
78
|
- lib/active_record/connection_adapters/sqlite_adapter.rb
|
75
79
|
- lib/active_record/connection_adapters/sqlserver_adapter.rb
|
80
|
+
- lib/active_record/connection_adapters/abstract/connection_specification.rb
|
81
|
+
- lib/active_record/connection_adapters/abstract/database_statements.rb
|
82
|
+
- lib/active_record/connection_adapters/abstract/quoting.rb
|
83
|
+
- lib/active_record/connection_adapters/abstract/schema_definitions.rb
|
84
|
+
- lib/active_record/connection_adapters/abstract/schema_statements.rb
|
76
85
|
- lib/active_record/vendor/db2.rb
|
77
86
|
- lib/active_record/vendor/mysql.rb
|
78
87
|
- lib/active_record/vendor/mysql411.rb
|
@@ -81,8 +90,10 @@ files:
|
|
81
90
|
- test/aaa_create_tables_test.rb
|
82
91
|
- test/abstract_unit.rb
|
83
92
|
- test/active_schema_mysql.rb
|
93
|
+
- test/adapter_test.rb
|
84
94
|
- test/aggregations_test.rb
|
85
95
|
- test/all.sh
|
96
|
+
- test/ar_schema_test.rb
|
86
97
|
- test/association_callbacks_test.rb
|
87
98
|
- test/association_inheritance_reload.rb
|
88
99
|
- test/associations_go_eager_test.rb
|
@@ -92,7 +103,9 @@ files:
|
|
92
103
|
- test/callbacks_test.rb
|
93
104
|
- test/class_inheritable_attributes_test.rb
|
94
105
|
- test/column_alias_test.rb
|
106
|
+
- test/conditions_scoping_test.rb
|
95
107
|
- test/connections
|
108
|
+
- test/copy_table_sqlite.rb
|
96
109
|
- test/deprecated_associations_test.rb
|
97
110
|
- test/deprecated_finder_test.rb
|
98
111
|
- test/finder_test.rb
|
@@ -107,9 +120,11 @@ files:
|
|
107
120
|
- test/modules_test.rb
|
108
121
|
- test/multiple_db_test.rb
|
109
122
|
- test/pk_test.rb
|
123
|
+
- test/readonly_test.rb
|
110
124
|
- test/reflection_test.rb
|
125
|
+
- test/schema_dumper_test.rb
|
111
126
|
- test/schema_test_postgresql.rb
|
112
|
-
- test/
|
127
|
+
- test/synonym_test_oci.rb
|
113
128
|
- test/threaded_connections_test.rb
|
114
129
|
- test/transactions_test.rb
|
115
130
|
- test/unconnected_test.rb
|
@@ -128,16 +143,17 @@ files:
|
|
128
143
|
- test/connections/native_postgresql/connection.rb
|
129
144
|
- test/connections/native_sqlite/connection.rb
|
130
145
|
- test/connections/native_sqlite3/connection.rb
|
146
|
+
- test/connections/native_sqlite3/in_memory_connection.rb
|
131
147
|
- test/connections/native_sqlserver/connection.rb
|
132
148
|
- test/connections/native_sqlserver_odbc/connection.rb
|
133
149
|
- test/fixtures/accounts.yml
|
134
|
-
- test/fixtures/associations.png
|
135
150
|
- test/fixtures/author.rb
|
136
151
|
- test/fixtures/authors.yml
|
137
152
|
- test/fixtures/auto_id.rb
|
138
153
|
- test/fixtures/bad_fixtures
|
139
154
|
- test/fixtures/binary.rb
|
140
155
|
- test/fixtures/categories.yml
|
156
|
+
- test/fixtures/categories_ordered.yml
|
141
157
|
- test/fixtures/categories_posts.yml
|
142
158
|
- test/fixtures/category.rb
|
143
159
|
- test/fixtures/column_name.rb
|
@@ -162,12 +178,15 @@ files:
|
|
162
178
|
- test/fixtures/entrants.yml
|
163
179
|
- test/fixtures/fk_test_has_fk.yml
|
164
180
|
- test/fixtures/fk_test_has_pk.yml
|
181
|
+
- test/fixtures/flowers.jpg
|
182
|
+
- test/fixtures/keyboard.rb
|
165
183
|
- test/fixtures/migrations
|
166
184
|
- test/fixtures/mixin.rb
|
167
185
|
- test/fixtures/mixins.yml
|
168
186
|
- test/fixtures/movie.rb
|
169
187
|
- test/fixtures/movies.yml
|
170
188
|
- test/fixtures/naked
|
189
|
+
- test/fixtures/order.rb
|
171
190
|
- test/fixtures/people.yml
|
172
191
|
- test/fixtures/person.rb
|
173
192
|
- test/fixtures/post.rb
|
@@ -175,6 +194,7 @@ files:
|
|
175
194
|
- test/fixtures/project.rb
|
176
195
|
- test/fixtures/projects.yml
|
177
196
|
- test/fixtures/reply.rb
|
197
|
+
- test/fixtures/subject.rb
|
178
198
|
- test/fixtures/subscriber.rb
|
179
199
|
- test/fixtures/subscribers
|
180
200
|
- test/fixtures/task.rb
|
@@ -248,5 +268,5 @@ dependencies:
|
|
248
268
|
-
|
249
269
|
- "="
|
250
270
|
- !ruby/object:Gem::Version
|
251
|
-
version: 1.
|
271
|
+
version: 1.2.1
|
252
272
|
version:
|