sequel_migration_builder 0.1.3 → 0.1.4

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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.3
1
+ 0.1.4
@@ -101,7 +101,7 @@ module Sequel
101
101
  def alter_table_statement(table_name, operations, direction)
102
102
  add_line "alter_table #{table_name.inspect} do"
103
103
  indent do
104
- operations.each {|op| add_line op.__send__(direction) }
104
+ operations.map {|op| op.__send__(direction) }.compact.each {|op| add_line op }
105
105
  end
106
106
  add_line "end"
107
107
  end
@@ -26,18 +26,26 @@ module Sequel
26
26
  db_indexes = db_table[:indexes] || {}
27
27
  new_indexes = new_table[:indexes] || {}
28
28
 
29
- operations += (db_indexes.keys - new_indexes.keys).reject do |index_name|
30
- db_indexes[index_name][:columns].size == 1 && dropped_columns.include?(db_indexes[index_name][:columns].first)
31
- end.map do |index_name|
29
+ operations += (db_indexes.keys - new_indexes.keys).map do |index_name|
30
+ dropped_column = db_indexes[index_name][:columns].size == 1 && dropped_columns.include?(db_indexes[index_name][:columns].first)
31
+
32
32
  DropIndex.new(index_name,
33
33
  db_indexes[index_name][:columns],
34
- db_indexes[index_name][:unique])
34
+ db_indexes[index_name][:unique],
35
+ ! dropped_column)
35
36
  end
36
37
 
37
38
  operations += (new_indexes.keys - db_indexes.keys).map do |index_name|
39
+ if new_indexes[index_name][:columns].kind_of?(Symbol)
40
+ dropped_column = dropped_columns.include?(new_indexes[index_name][:columns])
41
+ else
42
+ dropped_column = new_indexes[index_name][:columns].size == 1 && dropped_columns.include?(new_indexes[index_name][:columns].first)
43
+ end
44
+
38
45
  AddIndex.new(index_name,
39
46
  new_indexes[index_name][:columns],
40
- new_indexes[index_name][:unique])
47
+ new_indexes[index_name][:unique],
48
+ ! dropped_column)
41
49
  end
42
50
 
43
51
  operations
@@ -94,17 +102,21 @@ module Sequel
94
102
 
95
103
  # Adds an index.
96
104
  class AddIndex < Operation
97
- def initialize(name, columns, unique)
105
+ def initialize(name, columns, unique, include_drop_index=true)
98
106
  @up = "add_index #{columns.inspect}, :name => #{name.inspect}"
99
107
  @up << ", :unique => true" if unique
100
- @down = "drop_index #{columns.inspect}, :name => #{name.inspect}"
108
+ if include_drop_index
109
+ @down = "drop_index #{columns.inspect}, :name => #{name.inspect}"
110
+ end
101
111
  end
102
112
  end
103
113
 
104
114
  # Drops an index.
105
115
  class DropIndex < Operation
106
- def initialize(name, columns, unique)
107
- @up = "drop_index #{columns.inspect}, :name => #{name.inspect}"
116
+ def initialize(name, columns, unique, include_drop_index=true)
117
+ if include_drop_index
118
+ @up = "drop_index #{columns.inspect}, :name => #{name.inspect}"
119
+ end
108
120
  @down = "add_index #{columns.inspect}, :name => #{name.inspect}"
109
121
  @down << ", :unique => true" if unique
110
122
  end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{sequel_migration_builder}
8
- s.version = "0.1.3"
8
+ s.version = "0.1.4"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Roland Swingler"]
12
- s.date = %q{2010-08-09}
12
+ s.date = %q{2010-08-13}
13
13
  s.description = %q{Build Sequel Migrations based on the differences between two schemas}
14
14
  s.email = %q{roland.swingler@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -114,15 +114,28 @@ describe "Sequel::Schema::AlterTableOperations.build" do
114
114
  ops.first.should be_kind_of(Sequel::Schema::AlterTableOperations::ChangeColumn)
115
115
  end
116
116
 
117
- it "should not output a drop index if the index's column is also removed" do
117
+ it "should not output a drop index statement in #up if the index's column is also removed" do
118
118
  table_a = {:name => :example_table,
119
119
  :indexes => {:foo_idx => {:columns => [:foo]}},
120
120
  :columns => [build_column(:name => :foo, :column_type => :integer)]}
121
121
  table_b = {:name => :example_table, :indexes => {}, :columns => []}
122
122
  ops = Sequel::Schema::AlterTableOperations.build(table_a,table_b)
123
123
 
124
- ops.size.should == 1
125
- ops.first.should be_kind_of(Sequel::Schema::AlterTableOperations::DropColumn)
124
+ ops.last.should be_kind_of(Sequel::Schema::AlterTableOperations::DropIndex)
125
+ ops.last.up.should be_nil
126
+ ops.last.down.should == "add_index [:foo], :name => :foo_idx"
127
+ end
128
+
129
+ it "should not output a drop index statement in #down if the index's column is also added" do
130
+ table_a = {:name => :example_table,
131
+ :indexes => {},
132
+ :columns => [build_column(:name => :foo, :column_type => :integer)]}
133
+ table_b = {:name => :example_table, :indexes => {:foo_idx => {:columns => [:foo]}}, :columns => []}
134
+ ops = Sequel::Schema::AlterTableOperations.build(table_a,table_b)
135
+
136
+ ops.last.should be_kind_of(Sequel::Schema::AlterTableOperations::AddIndex)
137
+ ops.last.up.should == "add_index [:foo], :name => :foo_idx"
138
+ ops.last.down.should be_nil
126
139
  end
127
140
  end
128
141
 
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
- - 3
9
- version: 0.1.3
8
+ - 4
9
+ version: 0.1.4
10
10
  platform: ruby
11
11
  authors:
12
12
  - Roland Swingler
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-08-09 00:00:00 +01:00
17
+ date: 2010-08-13 00:00:00 +01:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency