active_record_inline_schema 0.5.7 → 0.5.9

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,23 @@
1
+ 0.5.9 / 2012-07-26
2
+
3
+ * Bug fixes
4
+
5
+ * Don't try to use ActiveRecord::Base.checkout with SQLite - it causes "Could not find table" errors
6
+
7
+ 0.5.8 / 2012-07-26
8
+
9
+ * Breaking changes
10
+
11
+ * No longer automatically adds inheritance columns - you should specify them like "col :type"
12
+
13
+ * Enhancements
14
+
15
+ * A bit more testing of how primary keys work.
16
+
17
+ * Notes
18
+
19
+ * Something is going horribly wrong with SQLite support - lots of "Could not find table" errors. Hoping we can revisit this when sqlite3 gem 1.3.7 comes out.
20
+
1
21
  0.5.7 / 2012-06-22
2
22
 
3
23
  * Bug fix
@@ -28,50 +28,44 @@ class ActiveRecordInlineSchema::Config
28
28
  primary_key_column.type != :primary_key
29
29
  end
30
30
 
31
- unless non_standard_primary_key
31
+ if non_standard_primary_key
32
+ if postgresql? or sqlite?
33
+ primary_key_column.options[:null] = false
34
+ end
35
+ else
32
36
  add_ideal_column :id, :type => :primary_key
33
37
  end
34
38
 
39
+ table_definition = ActiveRecord::ConnectionAdapters::TableDefinition.new connection
40
+ ideal_columns.each do |ideal_column|
41
+ ideal_column.inject table_definition
42
+ end
43
+
35
44
  # Table doesn't exist, create it
36
45
  unless connection.table_exists? model.table_name
46
+ create_table_options ||= DEFAULT_CREATE_TABLE_OPTIONS[database_type]
37
47
 
38
- if mysql?
39
- create_table_options ||= DEFAULT_CREATE_TABLE_OPTIONS[database_type]
40
- end
48
+ statements = []
49
+ statements << "CREATE TABLE #{model.quoted_table_name} (#{table_definition.to_sql}) #{create_table_options}"
41
50
 
42
- table_definition = ::ActiveRecord::ConnectionAdapters::TableDefinition.new connection
43
- ideal_columns.each do |ideal_column|
44
- ideal_column.inject table_definition
51
+ if non_standard_primary_key
52
+ if postgresql?
53
+ statements << %{ALTER TABLE #{model.quoted_table_name} ADD PRIMARY KEY (#{model.quoted_primary_key})}
54
+ elsif mysql?
55
+ k = model.quoted_primary_key
56
+ statements.first.sub! /#{k}([^\)]+)\)([^\),]*)/, "#{k}\\1) PRIMARY KEY"
57
+ end
45
58
  end
46
59
 
47
- # avoid using connection.create_table because in 3.0.x it ignores table_definition
48
- # and it also is too eager about adding a primary key column
49
- create_sql = "CREATE TABLE #{model.quoted_table_name} (#{table_definition.to_sql}) #{create_table_options}"
50
-
51
- if sqlite?
52
- connection.execute create_sql
53
- if non_standard_primary_key
54
- add_ideal_index model.primary_key, :unique => true
55
- end
56
- elsif postgresql?
57
- connection.execute create_sql
58
- if non_standard_primary_key
59
- # can't use add_index method because it won't let you do "PRIMARY KEY"
60
- connection.execute "ALTER TABLE #{model.quoted_table_name} ADD PRIMARY KEY (#{model.quoted_primary_key})"
61
- end
62
- elsif mysql?
63
- if non_standard_primary_key
64
- k = connection.quote_column_name(model.primary_key)
65
- create_sql.sub! /#{k}([^\)]+)\)([^\),]*)/, "#{k}\\1) PRIMARY KEY"
66
- end
67
- connection.execute create_sql
60
+ statements.each do |sql|
61
+ connection.execute sql
68
62
  end
69
63
  safe_reset_column_information
70
64
  end
71
65
 
72
- # Add to schema inheritance column if necessary
73
- if model.descendants.any? and not find_ideal_column(model.inheritance_column)
74
- add_ideal_column model.inheritance_column, :type => :string
66
+ if non_standard_primary_key and sqlite?
67
+ # make sure this doesn't get deleted later
68
+ add_ideal_index model.primary_key, :unique => true
75
69
  end
76
70
 
77
71
  # Remove fields from db no longer in schema
@@ -128,11 +122,6 @@ class ActiveRecordInlineSchema::Config
128
122
  safe_reset_column_information
129
123
  end
130
124
 
131
- def clear
132
- @ideal_columns = ::Set.new
133
- @ideal_indexes = ::Set.new
134
- end
135
-
136
125
  private
137
126
 
138
127
  def find_ideal_column(name)
@@ -177,14 +166,11 @@ class ActiveRecordInlineSchema::Config
177
166
  end
178
167
 
179
168
  def connection
180
- unless model.connection.active?
181
- raise ::RuntimeError, %{[active_record_inline_schema] Must connect to database before running ActiveRecord::Base.auto_upgrade!}
182
- end
183
169
  model.connection
184
170
  end
185
171
 
186
172
  def database_type
187
- if mysql?
173
+ @database_type ||= if mysql?
188
174
  :mysql
189
175
  elsif postgresql?
190
176
  :postgresql
@@ -1,3 +1,3 @@
1
1
  module ActiveRecordInlineSchema
2
- VERSION = "0.5.7"
2
+ VERSION = "0.5.9"
3
3
  end
@@ -34,6 +34,7 @@ class Pet < ActiveRecord::Base
34
34
  include SpecHelper
35
35
 
36
36
  col :name
37
+ col :type
37
38
  add_index :name
38
39
  end
39
40
  class Dog < Pet; end
@@ -103,6 +104,11 @@ class Pet5 < ActiveRecord::Base
103
104
  col :id, :type => :integer
104
105
  end
105
106
 
107
+ class Pet6 < ActiveRecord::Base
108
+ include SpecHelper
109
+ col :yesno, :type => :boolean
110
+ end
111
+
106
112
  case ENV['DB_ADAPTER']
107
113
  when 'mysql'
108
114
  class CustomMysql < ActiveRecord::Base
@@ -42,6 +42,11 @@ describe ActiveRecordInlineSchema do
42
42
  end
43
43
  end
44
44
 
45
+ it "supports boolean columns" do
46
+ Pet6.auto_upgrade!
47
+ Pet6.columns_hash['yesno'].type.must_equal :boolean
48
+ end
49
+
45
50
  it 'has #key,col,property,attribute inside model' do
46
51
  (!!ActiveRecord::Base.connection.table_exists?(Post.table_name)).must_equal false
47
52
  (!!ActiveRecord::Base.connection.table_exists?(Category.table_name)).must_equal false
@@ -56,19 +61,6 @@ describe ActiveRecordInlineSchema do
56
61
  post.title.must_equal 'foo'
57
62
  post.body.must_equal 'bar'
58
63
  post.category.must_equal category
59
-
60
-
61
- # Remove a column
62
- Post.inline_schema_config.clear
63
- Post.class_eval do
64
- col :name
65
- col :category_id, :type => :integer
66
- end
67
- Post.auto_upgrade!
68
- post = Post.first
69
- post.name.must_be_nil
70
- post.category.must_equal category
71
- post.wont_respond_to :title
72
64
  end
73
65
 
74
66
  it 'has indexes inside model' do
@@ -1,6 +1,6 @@
1
1
  require File.expand_path('../spec_helper.rb', __FILE__)
2
2
 
3
- ActiveRecord::Base.establish_connection(:adapter => 'sqlite3', :database => ':memory:')
3
+ ActiveRecord::Base.establish_connection(:adapter => 'sqlite3', :database => ':memory:', :pool => 32)
4
4
 
5
5
  # require 'logger'
6
6
  # ActiveRecord::Base.logger = ActiveSupport::BufferedLogger.new($stdout)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_record_inline_schema
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.7
4
+ version: 0.5.9
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-06-23 00:00:00.000000000 Z
13
+ date: 2012-07-26 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activesupport