schema_plus 2.0.0.pre12 → 2.0.0.pre13

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6212de06ef0629d376189de1d623b4ad52969b56
4
- data.tar.gz: e7440ee39d1624b786e39da1245312f7ca61497f
3
+ metadata.gz: 097dc1df079f835526329efab67628e6b5c80998
4
+ data.tar.gz: 7953ae4520025b892c725a0821246c734ef685ce
5
5
  SHA512:
6
- metadata.gz: 58105ec47fdea7b6460c2a5f1dad67f5e0fa16f0fc615d6a9e42def7cc83600b2ce334c76f043cb667d13f9defa27cdfdff94bf277399b99611ad30a5f98c45e
7
- data.tar.gz: 88d0d8a42cfc9a95697816490acb3471e8ebdaa7f14dd956e18306ee67df90f4ec3d387696e488d669d2e1fa84415c8dd6bedcb9cf8725f26d50d6b32021fbed
6
+ metadata.gz: 19cfecf2e4ad25081836fd1fcb976cb111a4c0163254d65e29b4325e4a366c482423bc7657aa97b3c3d6588e6086cccdf910341dc610ca4fa8961b5456aca664
7
+ data.tar.gz: c1d32ccfff88705ace650204505aec9887930e0ed0df7e8f623be1e04c2d6c5142f6709b2f1eb5fb9537bed9c89abe32f6d11864b072833dfdcdd768a132ae65
@@ -15,7 +15,7 @@ gemfile:
15
15
  - gemfiles/activerecord-4.2.1/Gemfile.sqlite3
16
16
  env: POSTGRESQL_DB_USER=postgres MYSQL_DB_USER=travis
17
17
  addons:
18
- postgresql: '9.3'
18
+ postgresql: '9.4'
19
19
  before_script: bundle exec rake create_databases
20
20
  after_script: bundle exec rake drop_databases
21
21
  script: bundle exec rake travis
data/README.md CHANGED
@@ -35,13 +35,15 @@ See detailed documentation in each gem's README.
35
35
  [![Dependency Status](https://gemnasium.com/lomba/schema_plus.svg)](https://gemnasium.com/SchemaPlus/schema_plus)
36
36
 
37
37
 
38
- > ## This is the README for schema_plus 2.0.0 (prelease)
39
- > which is under development in the master branch, and which supports Rails >= 4.2. For info about the stable 1.x releases which support Rails 3.1, 4.0, 4.1, and 4.2.0, see the [schema_plus 1.x](https://github.com/SchemaPlus/schema_plus/tree/1.x) branch
38
+ > ## This is the README for schema_plus 2.0.0.pre13
39
+ > which supports Rails >= 4.2.0. This prerelease is completely usable. It's still officially a prerelease rather than formal release because some features have yet to be migrated into their own gems.
40
+ >
41
+ > For info about the 1.x releases which support Rails 3.1, 4.0, 4.1, and 4.2.0, see the [schema_plus 1.x](https://github.com/SchemaPlus/schema_plus/tree/1.x) branch
40
42
 
41
43
  ---
42
44
 
43
45
 
44
- The `schema_plus` gem is a wrapper that pulls in a common collection of gems from the SchemaPlus family. But you can feel free to mix and match to get just the gems you want.
46
+ The `schema_plus` gem is a wrapper that pulls in a common collection of gems from the SchemaPlus family. But you can feel free to ignore this gem and mix and match to get just the gems you want.
45
47
 
46
48
  Note: Prior to version 2.0, `schema_plus` was a single monolothic gem that implemented in itself all the features that are now included by the wrapper.
47
49
 
@@ -82,7 +82,7 @@ module SchemaPlus::ForeignKeys
82
82
  val_or_array = -> val { val.is_a?(Array) ? "[#{val.map(&:inspect).join(', ')}]" : val.inspect }
83
83
 
84
84
  dump << ", column: #{val_or_array.call self.column}" unless column
85
- dump << ", primary_key: #{val_or_array.call self.column}" if custom_primary_key?
85
+ dump << ", primary_key: #{val_or_array.call self.primary_key}" if custom_primary_key?
86
86
  dump << ", name: #{name.inspect}" if name
87
87
  dump << ", on_update: #{on_update.inspect}" if on_update
88
88
  dump << ", on_delete: #{on_delete.inspect}" if on_delete
@@ -18,6 +18,17 @@ module SchemaPlus::ForeignKeys
18
18
  rename_foreign_keys(oldname, newname)
19
19
  end
20
20
 
21
+ def copy_table(*args, &block)
22
+ fk_override = { :auto_create => false, :auto_index => false }
23
+ save = Hash[fk_override.keys.collect{|key| [key, SchemaPlus::ForeignKeys.config.send(key)]}]
24
+ begin
25
+ SchemaPlus::ForeignKeys.config.update_attributes(fk_override)
26
+ super
27
+ ensure
28
+ SchemaPlus::ForeignKeys.config.update_attributes(save)
29
+ end
30
+ end
31
+
21
32
  def add_foreign_key(table_name, to_table, options = {})
22
33
  raise NotImplementedError, "Sqlite3 does not support altering a table to add foreign key constraints (table #{table_name.inspect} to #{to_table.inspect})"
23
34
  end
@@ -1,3 +1,3 @@
1
1
  module SchemaPlus
2
- VERSION = "2.0.0.pre12"
2
+ VERSION = "2.0.0.pre13"
3
3
  end
@@ -567,78 +567,96 @@ describe ActiveRecord::Migration do
567
567
  end
568
568
 
569
569
 
570
- context "when column is changed", :sqlite3 => :skip do
570
+ context "when column is changed" do
571
571
 
572
572
  before(:each) do
573
573
  @model = Comment
574
574
  end
575
575
 
576
- it "should create foreign key" do
577
- change_column :user, :string, :foreign_key => { :references => [:users, :login] }
578
- expect(@model).to reference(:users, :login).on(:user)
579
- end
580
-
581
- context "and initially references to users table" do
576
+ context "with foreign keys", :sqlite3 => :skip do
582
577
 
583
- before(:each) do
584
- recreate_table @model do |t|
585
- t.integer :user_id
586
- end
578
+ it "should create foreign key" do
579
+ change_column :user, :string, :foreign_key => { :references => [:users, :login] }
580
+ expect(@model).to reference(:users, :login).on(:user)
587
581
  end
588
582
 
589
- it "should have foreign key" do
590
- expect(@model).to reference(:users)
591
- end
583
+ context "and initially references to users table" do
592
584
 
593
- it "should drop foreign key if it is no longer valid" do
594
- change_column :user_id, :integer, :foreign_key => { :references => :members }
595
- expect(@model).not_to reference(:users)
596
- end
585
+ before(:each) do
586
+ recreate_table @model do |t|
587
+ t.integer :user_id
588
+ end
589
+ end
597
590
 
598
- it "should drop foreign key if requested to do so" do
599
- change_column :user_id, :integer, :foreign_key => { :references => nil }
600
- expect(@model).not_to reference(:users)
601
- end
591
+ it "should have foreign key" do
592
+ expect(@model).to reference(:users)
593
+ end
602
594
 
603
- it "should remove auto-created index if foreign key is removed" do
604
- expect(@model).to have_index.on(:user_id) # sanity check that index was auto-created
605
- change_column :user_id, :integer, :foreign_key => { :references => nil }
606
- expect(@model).not_to have_index.on(:user_id)
607
- end
595
+ it "should drop foreign key if it is no longer valid" do
596
+ change_column :user_id, :integer, :foreign_key => { :references => :members }
597
+ expect(@model).not_to reference(:users)
598
+ end
608
599
 
609
- it "should reference pointed table afterwards if new one is created" do
610
- change_column :user_id, :integer, :foreign_key => { :references => :members }
611
- expect(@model).to reference(:members)
612
- end
600
+ it "should drop foreign key if requested to do so" do
601
+ change_column :user_id, :integer, :foreign_key => { :references => nil }
602
+ expect(@model).not_to reference(:users)
603
+ end
613
604
 
614
- it "should maintain foreign key if it's unaffected by change" do
615
- change_column :user_id, :integer, :default => 0
616
- expect(@model).to reference(:users)
617
- end
605
+ it "should remove auto-created index if foreign key is removed" do
606
+ expect(@model).to have_index.on(:user_id) # sanity check that index was auto-created
607
+ change_column :user_id, :integer, :foreign_key => { :references => nil }
608
+ expect(@model).not_to have_index.on(:user_id)
609
+ end
618
610
 
619
- it "should maintain foreign key if it's unaffected by change, even if auto_index is off" do
620
- with_fk_config(:auto_create => false) do
611
+ it "should reference pointed table afterwards if new one is created" do
612
+ change_column :user_id, :integer, :foreign_key => { :references => :members }
613
+ expect(@model).to reference(:members)
614
+ end
615
+
616
+ it "should maintain foreign key if it's unaffected by change" do
621
617
  change_column :user_id, :integer, :default => 0
622
618
  expect(@model).to reference(:users)
623
619
  end
620
+
621
+ it "should maintain foreign key if it's unaffected by change, even if auto_index is off" do
622
+ with_fk_config(:auto_create => false) do
623
+ change_column :user_id, :integer, :default => 0
624
+ expect(@model).to reference(:users)
625
+ end
626
+ end
627
+
624
628
  end
625
629
 
626
- end
630
+ context "if column defined without foreign key but with index" do
631
+ before(:each) do
632
+ recreate_table @model do |t|
633
+ t.integer :user_id, :foreign_key => false, :index => true
634
+ end
635
+ end
627
636
 
628
- context "if column defined without foreign key but with index" do
629
- before(:each) do
630
- recreate_table @model do |t|
631
- t.integer :user_id, :foreign_key => false, :index => true
637
+ it "should create the index" do
638
+ expect(@model).to have_index.on(:user_id)
632
639
  end
633
- end
634
640
 
635
- it "should create the index" do
636
- expect(@model).to have_index.on(:user_id)
641
+ it "adding foreign key should not fail due to attempt to auto-create existing index" do
642
+ expect { change_column :user_id, :integer, :foreign_key => true }.to_not raise_error
643
+ end
637
644
  end
645
+ end
638
646
 
639
- it "adding foreign key should not fail due to attempt to auto-create existing index" do
640
- expect { change_column :user_id, :integer, :foreign_key => true }.to_not raise_error
647
+ context "without foreign keys" do
648
+
649
+ it "doesn't auto-add foreign keys" do
650
+ recreate_table @model do |t|
651
+ t.integer :user_id, :foreign_key => false
652
+ t.string :other_column
653
+ end
654
+ with_fk_auto_create do
655
+ change_column :other_column, :text
656
+ end
657
+ expect(@model).to_not reference(:users)
641
658
  end
659
+
642
660
  end
643
661
 
644
662
  protected
@@ -14,7 +14,7 @@ describe "Schema dump" do
14
14
  create_table :users, :force => true do |t|
15
15
  t.string :login
16
16
  t.datetime :deleted_at
17
- t.integer :first_post_id
17
+ t.integer :first_post_id, index: { unique: true }
18
18
  end
19
19
 
20
20
  create_table :posts, :force => true do |t|
@@ -59,6 +59,13 @@ describe "Schema dump" do
59
59
  end
60
60
  end
61
61
 
62
+ it "should respect foreign key's primary key" do
63
+ with_foreign_key Post, :user_id, :users, :first_post_id do
64
+ expect(dump_posts).to match(%r{t.integer\s+"user_id".*foreign_key.*primary_key: "first_post_id"})
65
+ end
66
+ end
67
+
68
+
62
69
  it "should include foreign_key exactly once" do
63
70
  with_foreign_key Post, :user_id, :users, :id, :name => "yippee" do
64
71
  expect(dump_posts.scan(/foreign_key.*yippee"/).length).to eq 1
@@ -212,7 +219,7 @@ describe "Schema dump" do
212
219
  t.column column.name, column.type
213
220
  end
214
221
  columnsets.each do |columns, referenced_table_name, referenced_columns, options|
215
- t.foreign_key columns, referenced_table_name, (options||{}).merge(column: referenced_columns)
222
+ t.foreign_key columns, referenced_table_name, (options||{}).merge(primary_key: referenced_columns)
216
223
  end
217
224
  end
218
225
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: schema_plus
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.pre12
4
+ version: 2.0.0.pre13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ronen Barzel
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-04-01 00:00:00.000000000 Z
12
+ date: 2015-04-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord