schema_plus 2.0.0.pre5 → 2.0.0.pre6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +41 -51
- data/lib/schema_plus.rb +10 -10
- data/lib/schema_plus/db_default.rb +7 -0
- data/lib/{schema_plus_db_default → schema_plus/db_default}/active_record/attribute.rb +1 -1
- data/lib/{schema_plus_db_default → schema_plus/db_default}/db_default.rb +2 -2
- data/lib/{schema_plus_db_default → schema_plus/db_default}/middleware.rb +1 -1
- data/lib/{schema_plus_default_expr.rb → schema_plus/default_expr.rb} +8 -8
- data/lib/{schema_plus_default_expr → schema_plus/default_expr}/active_record/connection_adapters/column.rb +1 -1
- data/lib/{schema_plus_default_expr → schema_plus/default_expr}/active_record/connection_adapters/mysql2_adapter.rb +1 -1
- data/lib/{schema_plus_default_expr → schema_plus/default_expr}/active_record/connection_adapters/postgresql_adapter.rb +1 -1
- data/lib/{schema_plus_default_expr → schema_plus/default_expr}/active_record/connection_adapters/sqlite3_adapter.rb +1 -1
- data/lib/{schema_plus_default_expr → schema_plus/default_expr}/middleware.rb +1 -1
- data/lib/schema_plus/enums.rb +6 -0
- data/lib/{schema_plus_enums → schema_plus/enums}/active_record.rb +1 -1
- data/lib/{schema_plus_enums → schema_plus/enums}/middleware.rb +1 -1
- data/lib/{schema_plus_foreign_keys.rb → schema_plus/foreign_keys.rb} +21 -21
- data/lib/{schema_plus_foreign_keys → schema_plus/foreign_keys}/active_record/base.rb +2 -2
- data/lib/{schema_plus_foreign_keys → schema_plus/foreign_keys}/active_record/connection_adapters/abstract_adapter.rb +5 -5
- data/lib/{schema_plus_foreign_keys → schema_plus/foreign_keys}/active_record/connection_adapters/foreign_key_definition.rb +2 -2
- data/lib/{schema_plus_foreign_keys → schema_plus/foreign_keys}/active_record/connection_adapters/mysql2_adapter.rb +2 -2
- data/lib/{schema_plus_foreign_keys → schema_plus/foreign_keys}/active_record/connection_adapters/postgresql_adapter.rb +2 -2
- data/lib/{schema_plus_foreign_keys → schema_plus/foreign_keys}/active_record/connection_adapters/sqlite3_adapter.rb +2 -2
- data/lib/{schema_plus_foreign_keys → schema_plus/foreign_keys}/active_record/connection_adapters/table_definition.rb +8 -8
- data/lib/{schema_plus_foreign_keys → schema_plus/foreign_keys}/active_record/migration/command_recorder.rb +1 -1
- data/lib/{schema_plus_foreign_keys → schema_plus/foreign_keys}/active_record/schema.rb +4 -4
- data/lib/{schema_plus_foreign_keys → schema_plus/foreign_keys}/middleware/dumper.rb +2 -2
- data/lib/{schema_plus_foreign_keys → schema_plus/foreign_keys}/middleware/migration.rb +2 -2
- data/lib/{schema_plus_foreign_keys → schema_plus/foreign_keys}/middleware/model.rb +1 -1
- data/lib/{schema_plus_foreign_keys → schema_plus/foreign_keys}/middleware/sql.rb +1 -1
- data/lib/schema_plus/foreign_keys/version.rb +3 -0
- data/lib/schema_plus/tables.rb +15 -0
- data/lib/{schema_plus_tables → schema_plus/tables}/active_record/connection_adapters/abstract_adapter.rb +2 -2
- data/lib/{schema_plus_tables → schema_plus/tables}/active_record/connection_adapters/mysql2_adapter.rb +2 -2
- data/lib/{schema_plus_tables → schema_plus/tables}/active_record/connection_adapters/postgresql_adapter.rb +2 -2
- data/lib/{schema_plus_tables → schema_plus/tables}/active_record/connection_adapters/sqlite3_adapter.rb +1 -1
- data/lib/schema_plus/version.rb +1 -1
- data/schema_plus.gemspec +2 -1
- data/spec/schema_plus_db_default/column_spec.rb +1 -1
- data/spec/schema_plus_default_expr/schema_dumper_spec.rb +1 -1
- data/spec/schema_plus_foreign_keys/migration_spec.rb +13 -13
- data/spec/schema_plus_foreign_keys/schema_dumper_spec.rb +78 -11
- data/spec/schema_plus_foreign_keys/schema_spec.rb +6 -6
- data/spec/spec_helper.rb +5 -5
- data/spec/support/helpers.rb +1 -1
- data/spec/support/matchers/have_index.rb +1 -1
- data/spec/support/matchers/reference.rb +1 -1
- metadata +51 -42
- data/lib/schema_plus_columns.rb +0 -7
- data/lib/schema_plus_columns/active_record/connection_adapters/column.rb +0 -65
- data/lib/schema_plus_columns/middleware/model.rb +0 -16
- data/lib/schema_plus_db_default.rb +0 -7
- data/lib/schema_plus_enums.rb +0 -6
- data/lib/schema_plus_foreign_keys/version.rb +0 -3
- data/lib/schema_plus_tables.rb +0 -15
- data/spec/schema_plus_columns/column_spec.rb +0 -156
data/spec/spec_helper.rb
CHANGED
@@ -18,18 +18,18 @@ SchemaDev::Rspec.setup
|
|
18
18
|
Dir[File.dirname(__FILE__) + "/support/**/*.rb"].each {|f| require f}
|
19
19
|
|
20
20
|
RSpec.configure do |config|
|
21
|
-
config.include(
|
22
|
-
config.include(
|
21
|
+
config.include(SchemaPlus::Matchers)
|
22
|
+
config.include(SchemaPlus::Helpers)
|
23
23
|
config.warnings = true
|
24
24
|
end
|
25
25
|
|
26
26
|
def with_fk_config(opts, &block)
|
27
|
-
save = Hash[opts.keys.collect{|key| [key,
|
27
|
+
save = Hash[opts.keys.collect{|key| [key, SchemaPlus::ForeignKeys.config.send(key)]}]
|
28
28
|
begin
|
29
|
-
|
29
|
+
SchemaPlus::ForeignKeys.config.update_attributes(opts)
|
30
30
|
yield
|
31
31
|
ensure
|
32
|
-
|
32
|
+
SchemaPlus::ForeignKeys.config.update_attributes(save)
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
data/spec/support/helpers.rb
CHANGED
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.
|
4
|
+
version: 2.0.0.pre6
|
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-02-
|
12
|
+
date: 2015-02-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activerecord
|
@@ -73,6 +73,20 @@ dependencies:
|
|
73
73
|
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: 0.1.2
|
76
|
+
- !ruby/object:Gem::Dependency
|
77
|
+
name: schema_plus_columns
|
78
|
+
requirement: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0.1'
|
83
|
+
type: :runtime
|
84
|
+
prerelease: false
|
85
|
+
version_requirements: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0.1'
|
76
90
|
- !ruby/object:Gem::Dependency
|
77
91
|
name: schema_plus_indexes
|
78
92
|
requirement: !ruby/object:Gem::Requirement
|
@@ -82,7 +96,7 @@ dependencies:
|
|
82
96
|
version: '0.1'
|
83
97
|
- - ">="
|
84
98
|
- !ruby/object:Gem::Version
|
85
|
-
version: 0.1.
|
99
|
+
version: 0.1.3
|
86
100
|
type: :runtime
|
87
101
|
prerelease: false
|
88
102
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -92,7 +106,7 @@ dependencies:
|
|
92
106
|
version: '0.1'
|
93
107
|
- - ">="
|
94
108
|
- !ruby/object:Gem::Version
|
95
|
-
version: 0.1.
|
109
|
+
version: 0.1.3
|
96
110
|
- !ruby/object:Gem::Dependency
|
97
111
|
name: schema_plus_pg_indexes
|
98
112
|
requirement: !ruby/object:Gem::Requirement
|
@@ -236,48 +250,44 @@ files:
|
|
236
250
|
- gemfiles/activerecord-4.2/Gemfile.postgresql
|
237
251
|
- gemfiles/activerecord-4.2/Gemfile.sqlite3
|
238
252
|
- lib/schema_plus.rb
|
253
|
+
- lib/schema_plus/db_default.rb
|
254
|
+
- lib/schema_plus/db_default/active_record/attribute.rb
|
255
|
+
- lib/schema_plus/db_default/db_default.rb
|
256
|
+
- lib/schema_plus/db_default/middleware.rb
|
257
|
+
- lib/schema_plus/default_expr.rb
|
258
|
+
- lib/schema_plus/default_expr/active_record/connection_adapters/column.rb
|
259
|
+
- lib/schema_plus/default_expr/active_record/connection_adapters/mysql2_adapter.rb
|
260
|
+
- lib/schema_plus/default_expr/active_record/connection_adapters/postgresql_adapter.rb
|
261
|
+
- lib/schema_plus/default_expr/active_record/connection_adapters/sqlite3_adapter.rb
|
262
|
+
- lib/schema_plus/default_expr/middleware.rb
|
263
|
+
- lib/schema_plus/enums.rb
|
264
|
+
- lib/schema_plus/enums/active_record.rb
|
265
|
+
- lib/schema_plus/enums/middleware.rb
|
266
|
+
- lib/schema_plus/foreign_keys.rb
|
267
|
+
- lib/schema_plus/foreign_keys/active_record/base.rb
|
268
|
+
- lib/schema_plus/foreign_keys/active_record/connection_adapters/abstract_adapter.rb
|
269
|
+
- lib/schema_plus/foreign_keys/active_record/connection_adapters/foreign_key_definition.rb
|
270
|
+
- lib/schema_plus/foreign_keys/active_record/connection_adapters/mysql2_adapter.rb
|
271
|
+
- lib/schema_plus/foreign_keys/active_record/connection_adapters/postgresql_adapter.rb
|
272
|
+
- lib/schema_plus/foreign_keys/active_record/connection_adapters/sqlite3_adapter.rb
|
273
|
+
- lib/schema_plus/foreign_keys/active_record/connection_adapters/table_definition.rb
|
274
|
+
- lib/schema_plus/foreign_keys/active_record/migration/command_recorder.rb
|
275
|
+
- lib/schema_plus/foreign_keys/active_record/schema.rb
|
276
|
+
- lib/schema_plus/foreign_keys/middleware/dumper.rb
|
277
|
+
- lib/schema_plus/foreign_keys/middleware/migration.rb
|
278
|
+
- lib/schema_plus/foreign_keys/middleware/model.rb
|
279
|
+
- lib/schema_plus/foreign_keys/middleware/sql.rb
|
280
|
+
- lib/schema_plus/foreign_keys/version.rb
|
281
|
+
- lib/schema_plus/tables.rb
|
282
|
+
- lib/schema_plus/tables/active_record/connection_adapters/abstract_adapter.rb
|
283
|
+
- lib/schema_plus/tables/active_record/connection_adapters/mysql2_adapter.rb
|
284
|
+
- lib/schema_plus/tables/active_record/connection_adapters/postgresql_adapter.rb
|
285
|
+
- lib/schema_plus/tables/active_record/connection_adapters/sqlite3_adapter.rb
|
239
286
|
- lib/schema_plus/version.rb
|
240
|
-
- lib/schema_plus_columns.rb
|
241
|
-
- lib/schema_plus_columns/active_record/connection_adapters/column.rb
|
242
|
-
- lib/schema_plus_columns/middleware/model.rb
|
243
|
-
- lib/schema_plus_db_default.rb
|
244
|
-
- lib/schema_plus_db_default/active_record/attribute.rb
|
245
|
-
- lib/schema_plus_db_default/db_default.rb
|
246
|
-
- lib/schema_plus_db_default/middleware.rb
|
247
|
-
- lib/schema_plus_default_expr.rb
|
248
|
-
- lib/schema_plus_default_expr/active_record/connection_adapters/column.rb
|
249
|
-
- lib/schema_plus_default_expr/active_record/connection_adapters/mysql2_adapter.rb
|
250
|
-
- lib/schema_plus_default_expr/active_record/connection_adapters/postgresql_adapter.rb
|
251
|
-
- lib/schema_plus_default_expr/active_record/connection_adapters/sqlite3_adapter.rb
|
252
|
-
- lib/schema_plus_default_expr/middleware.rb
|
253
|
-
- lib/schema_plus_enums.rb
|
254
|
-
- lib/schema_plus_enums/active_record.rb
|
255
|
-
- lib/schema_plus_enums/middleware.rb
|
256
|
-
- lib/schema_plus_foreign_keys.rb
|
257
|
-
- lib/schema_plus_foreign_keys/active_record/base.rb
|
258
|
-
- lib/schema_plus_foreign_keys/active_record/connection_adapters/abstract_adapter.rb
|
259
|
-
- lib/schema_plus_foreign_keys/active_record/connection_adapters/foreign_key_definition.rb
|
260
|
-
- lib/schema_plus_foreign_keys/active_record/connection_adapters/mysql2_adapter.rb
|
261
|
-
- lib/schema_plus_foreign_keys/active_record/connection_adapters/postgresql_adapter.rb
|
262
|
-
- lib/schema_plus_foreign_keys/active_record/connection_adapters/sqlite3_adapter.rb
|
263
|
-
- lib/schema_plus_foreign_keys/active_record/connection_adapters/table_definition.rb
|
264
|
-
- lib/schema_plus_foreign_keys/active_record/migration/command_recorder.rb
|
265
|
-
- lib/schema_plus_foreign_keys/active_record/schema.rb
|
266
|
-
- lib/schema_plus_foreign_keys/middleware/dumper.rb
|
267
|
-
- lib/schema_plus_foreign_keys/middleware/migration.rb
|
268
|
-
- lib/schema_plus_foreign_keys/middleware/model.rb
|
269
|
-
- lib/schema_plus_foreign_keys/middleware/sql.rb
|
270
|
-
- lib/schema_plus_foreign_keys/version.rb
|
271
|
-
- lib/schema_plus_tables.rb
|
272
|
-
- lib/schema_plus_tables/active_record/connection_adapters/abstract_adapter.rb
|
273
|
-
- lib/schema_plus_tables/active_record/connection_adapters/mysql2_adapter.rb
|
274
|
-
- lib/schema_plus_tables/active_record/connection_adapters/postgresql_adapter.rb
|
275
|
-
- lib/schema_plus_tables/active_record/connection_adapters/sqlite3_adapter.rb
|
276
287
|
- schema_dev.yml
|
277
288
|
- schema_plus.gemspec
|
278
289
|
- spec/schema/auto_schema.rb
|
279
290
|
- spec/schema/core_schema.rb
|
280
|
-
- spec/schema_plus_columns/column_spec.rb
|
281
291
|
- spec/schema_plus_db_default/column_spec.rb
|
282
292
|
- spec/schema_plus_default_expr/column_default_spec.rb
|
283
293
|
- spec/schema_plus_default_expr/migration_spec.rb
|
@@ -323,7 +333,6 @@ summary: Enhances ActiveRecord schema mechanism, including more DRY index creati
|
|
323
333
|
test_files:
|
324
334
|
- spec/schema/auto_schema.rb
|
325
335
|
- spec/schema/core_schema.rb
|
326
|
-
- spec/schema_plus_columns/column_spec.rb
|
327
336
|
- spec/schema_plus_db_default/column_spec.rb
|
328
337
|
- spec/schema_plus_default_expr/column_default_spec.rb
|
329
338
|
- spec/schema_plus_default_expr/migration_spec.rb
|
data/lib/schema_plus_columns.rb
DELETED
@@ -1,65 +0,0 @@
|
|
1
|
-
module SchemaPlusColumns
|
2
|
-
module ActiveRecord
|
3
|
-
module ConnectionAdapters
|
4
|
-
|
5
|
-
#
|
6
|
-
# SchemaPlusIndex adds several methods to Column
|
7
|
-
#
|
8
|
-
module Column
|
9
|
-
|
10
|
-
attr_writer :model # model assigned set by Middleware::Model::Columns
|
11
|
-
|
12
|
-
# Returns the list of IndexDefinition instances for each index that
|
13
|
-
# refers to this column. Returns an empty list if there are no
|
14
|
-
# such indexes.
|
15
|
-
def indexes
|
16
|
-
@indexes ||= @model.indexes.select{|index| index.columns.include? self.name}
|
17
|
-
end
|
18
|
-
|
19
|
-
# If the column is in a unique index, returns a list of names of other columns in
|
20
|
-
# the index. Returns an empty list if it's a single-column index.
|
21
|
-
# Returns nil if the column is not in a unique index.
|
22
|
-
def unique_scope
|
23
|
-
if index = indexes.select{|i| i.unique}.sort_by{|i| i.columns.size}.first
|
24
|
-
index.columns.reject{|name| name == self.name}
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
# Returns true if the column is in a unique index. See also
|
29
|
-
# unique_scope
|
30
|
-
def unique?
|
31
|
-
indexes.any?{|i| i.unique}
|
32
|
-
end
|
33
|
-
|
34
|
-
# Returns true if the column is in one or more indexes that are
|
35
|
-
# case sensitive. Will raise exception if
|
36
|
-
# IndexDefinition#case_sensitive? isn't defined, i.e. if
|
37
|
-
# schema_plus_pg_indexes hasn't been loaded.
|
38
|
-
def case_sensitive?
|
39
|
-
indexes.any?{|i| i.case_sensitive?}
|
40
|
-
end
|
41
|
-
|
42
|
-
# The default as_jon includes all instance variables. but
|
43
|
-
# @model can't be dumped (it contains circular references)
|
44
|
-
def as_json(options=nil)
|
45
|
-
instance_values.except "model", "adapter"
|
46
|
-
end
|
47
|
-
|
48
|
-
# Returns the circumstance in which the column must have a value:
|
49
|
-
# nil if the column may be null
|
50
|
-
# :save if the column has no default value
|
51
|
-
# :update otherwise
|
52
|
-
def required_on
|
53
|
-
if null
|
54
|
-
nil
|
55
|
-
elsif default.nil?
|
56
|
-
:save
|
57
|
-
else
|
58
|
-
:update
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
data/lib/schema_plus_enums.rb
DELETED
data/lib/schema_plus_tables.rb
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
require 'schema_monkey'
|
2
|
-
|
3
|
-
require_relative 'schema_plus_tables/active_record/connection_adapters/abstract_adapter'
|
4
|
-
|
5
|
-
module SchemaPlusTables
|
6
|
-
module ActiveRecord
|
7
|
-
module ConnectionAdapters
|
8
|
-
autoload :Mysql2Adapter, 'schema_plus_tables/active_record/connection_adapters/mysql2_adapter'
|
9
|
-
autoload :PostgresqlAdapter, 'schema_plus_tables/active_record/connection_adapters/postgresql_adapter'
|
10
|
-
autoload :Sqlite3Adapter, 'schema_plus_tables/active_record/connection_adapters/sqlite3_adapter'
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
SchemaMonkey.register(SchemaPlusTables)
|
@@ -1,156 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe "Column" do
|
4
|
-
|
5
|
-
before(:all) do
|
6
|
-
class User < ::ActiveRecord::Base ; end
|
7
|
-
end
|
8
|
-
|
9
|
-
let(:migration) { ::ActiveRecord::Migration }
|
10
|
-
|
11
|
-
context "JSON serialization" do
|
12
|
-
before(:each) do
|
13
|
-
create_table(User, :login => { :index => true})
|
14
|
-
@login = User.columns.find{|column| column.name == "login"}
|
15
|
-
end
|
16
|
-
it "works properly" do
|
17
|
-
type = case
|
18
|
-
when SchemaDev::Rspec::Helpers.mysql?
|
19
|
-
{ "sql_type" => "varchar(255)" }
|
20
|
-
when SchemaDev::Rspec::Helpers.postgresql?
|
21
|
-
{ "sql_type" => "character varying" }
|
22
|
-
when SchemaDev::Rspec::Helpers.sqlite3?
|
23
|
-
{ "sql_type" => "varchar" }
|
24
|
-
end
|
25
|
-
expect(JSON.parse(@login.to_json)).to include(type.merge("name" => "login"))
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
context "regarding indexes" do
|
30
|
-
|
31
|
-
context "if not unique" do
|
32
|
-
|
33
|
-
before(:each) do
|
34
|
-
create_table(User, :login => { :index => true})
|
35
|
-
@login = User.columns.find{|column| column.name == "login"}
|
36
|
-
end
|
37
|
-
|
38
|
-
it "should report not unique" do
|
39
|
-
expect(@login).not_to be_unique
|
40
|
-
end
|
41
|
-
|
42
|
-
it "should report nil unique scope" do
|
43
|
-
create_table(User, :login => { :index => true})
|
44
|
-
expect(@login.unique_scope).to be_nil
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
context "if unique single column" do
|
49
|
-
before(:each) do
|
50
|
-
create_table(User, :login => { :index => :unique})
|
51
|
-
@login = User.columns.find{|column| column.name == "login"}
|
52
|
-
end
|
53
|
-
|
54
|
-
it "should report unique" do
|
55
|
-
expect(@login).to be_unique
|
56
|
-
end
|
57
|
-
|
58
|
-
it "should report an empty unique scope" do
|
59
|
-
expect(@login.unique_scope).to eq([])
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
context "if unique multicolumn" do
|
64
|
-
|
65
|
-
before(:each) do
|
66
|
-
create_table(User, :first => {}, :middle => {}, :last => { :index => {:with => [:first, :middle], :unique => true}})
|
67
|
-
@first = User.columns.find{|column| column.name == "first"}
|
68
|
-
@middle = User.columns.find{|column| column.name == "middle"}
|
69
|
-
@last = User.columns.find{|column| column.name == "last"}
|
70
|
-
end
|
71
|
-
|
72
|
-
it "should report unique for each" do
|
73
|
-
expect(@first).to be_unique
|
74
|
-
expect(@middle).to be_unique
|
75
|
-
expect(@last).to be_unique
|
76
|
-
end
|
77
|
-
|
78
|
-
it "should report unique scope for each" do
|
79
|
-
expect(@first.unique_scope).to match_array(%W[middle last])
|
80
|
-
expect(@middle.unique_scope).to match_array(%W[first last])
|
81
|
-
expect(@last.unique_scope).to match_array(%W[first middle])
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
context "with case insensitive" do
|
86
|
-
before(:each) do
|
87
|
-
create_table(User, :login => { :index => {}})
|
88
|
-
User.reset_column_information
|
89
|
-
@column = User.columns.find(&its.name == "login")
|
90
|
-
end
|
91
|
-
|
92
|
-
context "index", :mysql => :skip do
|
93
|
-
|
94
|
-
it "reports column as case insensitive" do
|
95
|
-
allow(User.indexes.first).to receive(:case_sensitive?).and_return(false);
|
96
|
-
expect(@column).not_to be_case_sensitive
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
context "database", :mysql => :only do
|
101
|
-
|
102
|
-
# make sure we haven't broken mysql's method
|
103
|
-
it "reports column as case insensitive" do
|
104
|
-
allow(migration).to receive(:collation).and_return("utf8_unicode_ci") # mysql determines case insensitivity its own way
|
105
|
-
expect(@column).not_to be_case_sensitive
|
106
|
-
end
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
end
|
111
|
-
|
112
|
-
context "regarding when it requires a value" do
|
113
|
-
|
114
|
-
it "not required if the column can be null" do
|
115
|
-
create_table(User, :login => { :null => true})
|
116
|
-
expect(User.columns.find{|column| column.name == "login"}.required_on).to be_nil
|
117
|
-
end
|
118
|
-
|
119
|
-
it "must have a value on :save if there's no default" do
|
120
|
-
create_table(User, :login => { :null => false })
|
121
|
-
expect(User.columns.find{|column| column.name == "login"}.required_on).to eq(:save)
|
122
|
-
end
|
123
|
-
|
124
|
-
it "must have a value on :update if there's default" do
|
125
|
-
create_table(User, :login => { :null => false, :default => "foo" })
|
126
|
-
expect(User.columns.find{|column| column.name == "login"}.required_on).to eq(:update)
|
127
|
-
end
|
128
|
-
|
129
|
-
end
|
130
|
-
|
131
|
-
context "Postgresql array", :postgresql => :only do
|
132
|
-
|
133
|
-
before(:each) do
|
134
|
-
create_table(User, :alpha => { :default => [], :array => true })
|
135
|
-
end
|
136
|
-
|
137
|
-
it "respects array: true" do
|
138
|
-
column = User.columns.find(&its.name == "alpha")
|
139
|
-
expect(column.array).to be_truthy
|
140
|
-
end
|
141
|
-
end
|
142
|
-
|
143
|
-
protected
|
144
|
-
|
145
|
-
def create_table(model, columns_with_options)
|
146
|
-
migration.suppress_messages do
|
147
|
-
migration.create_table model.table_name, :force => true do |t|
|
148
|
-
columns_with_options.each_pair do |column, options|
|
149
|
-
t.send :string, column, options
|
150
|
-
end
|
151
|
-
end
|
152
|
-
model.reset_column_information
|
153
|
-
end
|
154
|
-
end
|
155
|
-
|
156
|
-
end
|