schema_plus 1.8.9 → 2.0.0.pre1
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.
- checksums.yaml +4 -4
- data/.gitignore +4 -4
- data/.travis.yml +1 -47
- data/CHANGELOG.md +0 -35
- data/README.md +73 -107
- data/Rakefile +7 -10
- data/TODO.md +51 -0
- data/gemfiles/Gemfile.base +2 -0
- data/lib/schema_column_plus.rb +7 -0
- data/lib/{schema_plus → schema_column_plus}/active_record/connection_adapters/column.rb +13 -11
- data/lib/schema_column_plus/middleware/model.rb +22 -0
- data/lib/schema_db_default.rb +13 -0
- data/lib/{schema_plus → schema_db_default}/active_record/attribute.rb +4 -4
- data/lib/schema_db_default/db_default.rb +17 -0
- data/lib/schema_db_default/middleware.rb +30 -0
- data/lib/schema_default_expr.rb +32 -0
- data/lib/schema_default_expr/active_record/connection_adapters/mysql_adapter.rb +17 -0
- data/lib/schema_default_expr/active_record/connection_adapters/postgresql_adapter.rb +18 -0
- data/lib/schema_default_expr/active_record/connection_adapters/sqlite3_adapter.rb +35 -0
- data/lib/schema_default_expr/middleware.rb +54 -0
- data/lib/schema_pg_enums.rb +6 -0
- data/lib/schema_pg_enums/active_record.rb +69 -0
- data/lib/schema_pg_enums/middleware.rb +23 -0
- data/lib/schema_plus.rb +17 -45
- data/lib/schema_plus/active_record/base.rb +6 -23
- data/lib/schema_plus/active_record/connection_adapters/abstract_adapter.rb +80 -181
- data/lib/schema_plus/active_record/connection_adapters/foreign_key_definition.rb +78 -99
- data/lib/schema_plus/active_record/connection_adapters/mysql_adapter.rb +34 -114
- data/lib/schema_plus/active_record/connection_adapters/postgresql_adapter.rb +16 -370
- data/lib/schema_plus/active_record/connection_adapters/schema_statements.rb +1 -67
- data/lib/schema_plus/active_record/connection_adapters/sqlite3_adapter.rb +18 -112
- data/lib/schema_plus/active_record/connection_adapters/table_definition.rb +14 -116
- data/lib/schema_plus/active_record/migration/command_recorder.rb +8 -59
- data/lib/schema_plus/middleware/dumper.rb +94 -0
- data/lib/schema_plus/middleware/migration.rb +167 -0
- data/lib/schema_plus/middleware/model.rb +17 -0
- data/lib/schema_plus/version.rb +1 -1
- data/lib/schema_plus_tables.rb +15 -0
- data/lib/schema_plus_tables/active_record/connection_adapters/abstract_adapter.rb +20 -0
- data/lib/schema_plus_tables/active_record/connection_adapters/mysql_adapter.rb +25 -0
- data/lib/schema_plus_tables/active_record/connection_adapters/postgresql_adapter.rb +13 -0
- data/lib/schema_plus_tables/active_record/connection_adapters/sqlite3_adapter.rb +12 -0
- data/lib/schema_views.rb +16 -0
- data/lib/schema_views/active_record/connection_adapters/abstract_adapter.rb +41 -0
- data/lib/schema_views/active_record/connection_adapters/mysql_adapter.rb +30 -0
- data/lib/schema_views/active_record/connection_adapters/postgresql_adapter.rb +31 -0
- data/lib/schema_views/active_record/connection_adapters/sqlite3_adapter.rb +18 -0
- data/lib/schema_views/middleware.rb +47 -0
- data/schema_dev.yml +1 -31
- data/schema_plus.gemspec +11 -9
- data/spec/foreign_key_definition_spec.rb +7 -7
- data/spec/foreign_key_spec.rb +63 -48
- data/spec/migration_spec.rb +58 -203
- data/spec/named_schemas_spec.rb +5 -88
- data/spec/{column_spec.rb → schema_column_plus/column_spec.rb} +26 -48
- data/spec/schema_db_default/column_spec.rb +58 -0
- data/spec/{column_default_spec.rb → schema_default_expr/column_default_spec.rb} +1 -2
- data/spec/schema_default_expr/schema_dumper_spec.rb +116 -0
- data/spec/schema_dumper_spec.rb +22 -327
- data/spec/{enum_spec.rb → schema_pg_enums/enum_spec.rb} +1 -1
- data/spec/schema_pg_enums/schema_dumper_spec.rb +37 -0
- data/spec/schema_views/named_schemas_spec.rb +97 -0
- data/spec/{views_spec.rb → schema_views/views_spec.rb} +1 -1
- data/spec/spec_helper.rb +2 -1
- data/spec/support/matchers/reference.rb +11 -12
- metadata +104 -57
- data/gemfiles/rails-3.2/Gemfile.base +0 -3
- data/gemfiles/rails-3.2/Gemfile.mysql +0 -10
- data/gemfiles/rails-3.2/Gemfile.mysql2 +0 -10
- data/gemfiles/rails-3.2/Gemfile.postgresql +0 -10
- data/gemfiles/rails-3.2/Gemfile.sqlite3 +0 -10
- data/gemfiles/rails-4.0/Gemfile.base +0 -3
- data/gemfiles/rails-4.0/Gemfile.mysql2 +0 -10
- data/gemfiles/rails-4.0/Gemfile.postgresql +0 -10
- data/gemfiles/rails-4.0/Gemfile.sqlite3 +0 -10
- data/gemfiles/rails-4.1/Gemfile.base +0 -3
- data/gemfiles/rails-4.1/Gemfile.mysql2 +0 -10
- data/gemfiles/rails-4.1/Gemfile.postgresql +0 -10
- data/gemfiles/rails-4.1/Gemfile.sqlite3 +0 -10
- data/lib/schema_plus/active_record/column_options_handler.rb +0 -117
- data/lib/schema_plus/active_record/connection_adapters/index_definition.rb +0 -70
- data/lib/schema_plus/active_record/db_default.rb +0 -19
- data/lib/schema_plus/active_record/foreign_keys.rb +0 -137
- data/lib/schema_plus/active_record/schema_dumper.rb +0 -171
- data/lib/schema_plus/railtie.rb +0 -20
- data/spec/index_definition_spec.rb +0 -211
- data/spec/index_spec.rb +0 -249
@@ -1,14 +1,13 @@
|
|
1
|
-
module
|
1
|
+
module SchemaColumnPlus
|
2
2
|
module ActiveRecord
|
3
3
|
module ConnectionAdapters
|
4
4
|
|
5
5
|
#
|
6
|
-
#
|
6
|
+
# SchemaPlusIndex adds several methods to Column
|
7
7
|
#
|
8
8
|
module Column
|
9
9
|
|
10
|
-
|
11
|
-
attr_writer :model # model gets set by SchemaPlus::ActiveRecord::Base::columns_with_schema_plus
|
10
|
+
attr_writer :model # model assigned set by Middleware::Model::Columns
|
12
11
|
|
13
12
|
# Returns the list of IndexDefinition instances for each index that
|
14
13
|
# refers to this column. Returns an empty list if there are no
|
@@ -33,11 +32,19 @@ module SchemaPlus
|
|
33
32
|
end
|
34
33
|
|
35
34
|
# Returns true if the column is in one or more indexes that are
|
36
|
-
# case sensitive
|
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.
|
37
38
|
def case_sensitive?
|
38
39
|
indexes.any?{|i| i.case_sensitive?}
|
39
40
|
end
|
40
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
|
+
|
41
48
|
# Returns the circumstance in which the column must have a value:
|
42
49
|
# nil if the column may be null
|
43
50
|
# :save if the column has no default value
|
@@ -51,13 +58,8 @@ module SchemaPlus
|
|
51
58
|
:update
|
52
59
|
end
|
53
60
|
end
|
54
|
-
|
55
|
-
# The default as_jon includes all instance variables. but
|
56
|
-
# @model can't be dumped (it contains circular references)
|
57
|
-
def as_json(options=nil)
|
58
|
-
instance_values.except "model", "adapter"
|
59
|
-
end
|
60
61
|
end
|
61
62
|
end
|
62
63
|
end
|
63
64
|
end
|
65
|
+
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module SchemaColumnPlus
|
2
|
+
module Middleware
|
3
|
+
module Model
|
4
|
+
|
5
|
+
def self.insert
|
6
|
+
SchemaMonkey::Middleware::Model::Columns.append AddModels
|
7
|
+
end
|
8
|
+
|
9
|
+
class AddModels < SchemaMonkey::Middleware::Base
|
10
|
+
def call(env)
|
11
|
+
continue env
|
12
|
+
|
13
|
+
env.columns.each do |column|
|
14
|
+
column.model = env.model
|
15
|
+
end
|
16
|
+
|
17
|
+
env.columns
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'schema_monkey'
|
2
|
+
|
3
|
+
require_relative 'schema_db_default/active_record/attribute'
|
4
|
+
require_relative 'schema_db_default/db_default'
|
5
|
+
require_relative 'schema_db_default/middleware'
|
6
|
+
|
7
|
+
module SchemaDbDefault
|
8
|
+
def self.insert
|
9
|
+
::ActiveRecord.const_set(:DB_DEFAULT, SchemaDbDefault::DB_DEFAULT)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
SchemaMonkey.register(SchemaDbDefault)
|
@@ -1,16 +1,16 @@
|
|
1
|
-
module
|
1
|
+
module SchemaDbDefault
|
2
2
|
module ActiveRecord
|
3
3
|
module Attribute
|
4
4
|
def self.included(base)
|
5
|
-
base.alias_method_chain :original_value, :
|
5
|
+
base.alias_method_chain :original_value, :schema_db_default
|
6
6
|
end
|
7
7
|
|
8
|
-
def
|
8
|
+
def original_value_with_schema_db_default
|
9
9
|
# prevent attempts to cast DB_DEFAULT to the attributes type.
|
10
10
|
# We want to keep it as DB_DEFAULT so that we can handle it when
|
11
11
|
# generating the sql.
|
12
12
|
return DB_DEFAULT if value_before_type_cast.equal? DB_DEFAULT
|
13
|
-
|
13
|
+
original_value_without_schema_db_default
|
14
14
|
end
|
15
15
|
|
16
16
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module SchemaDbDefault
|
2
|
+
module Middleware
|
3
|
+
module PostgresqlAdapter
|
4
|
+
def self.insert
|
5
|
+
SchemaMonkey::Middleware::Query::ExecCache.prepend BindDbDefault
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
# Middleware to replace each ActiveRecord::DB_DEFAULT with a literal
|
10
|
+
# DEFAULT in the sql string, for postgresql. The underlying pg gem provides no
|
11
|
+
# way to bind a value that will replace $n with DEFAULT.
|
12
|
+
class BindDbDefault < SchemaMonkey::Middleware::Base
|
13
|
+
def call(env)
|
14
|
+
if env.binds.any?{ |col, val| val.equal? ::ActiveRecord::DB_DEFAULT}
|
15
|
+
j = 0
|
16
|
+
env.binds.each_with_index do |(col, val), i|
|
17
|
+
if val.equal? ::ActiveRecord::DB_DEFAULT
|
18
|
+
env.sql = env.sql.sub(/\$#{i+1}/, 'DEFAULT')
|
19
|
+
else
|
20
|
+
env.sql = env.sql.sub(/\$#{i+1}/, "$#{j+1}") if i != j
|
21
|
+
j += 1
|
22
|
+
end
|
23
|
+
end
|
24
|
+
env.binds = env.binds.reject{|col, val| val.equal? ::ActiveRecord::DB_DEFAULT}
|
25
|
+
end
|
26
|
+
continue env
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'schema_monkey'
|
2
|
+
|
3
|
+
require_relative 'schema_default_expr/middleware'
|
4
|
+
|
5
|
+
module SchemaDefaultExpr
|
6
|
+
module ActiveRecord
|
7
|
+
module ConnectionAdapters
|
8
|
+
#
|
9
|
+
# Each adapter needs to define these two functions:
|
10
|
+
#
|
11
|
+
# default_expr_valid?(expr)
|
12
|
+
#
|
13
|
+
# Return true if the passed expression can be used as a column
|
14
|
+
# default value. (For most databases the specific expression
|
15
|
+
# doesn't matter, and the adapter's function would return a
|
16
|
+
# constant true if default expressions are supported or false if
|
17
|
+
# they're not.)
|
18
|
+
#
|
19
|
+
# sql_for_function(function_name)
|
20
|
+
#
|
21
|
+
# Return SQL definition for a given canonical function_name symbol.
|
22
|
+
# Currently, the only function to support is :now, which should
|
23
|
+
# return a DATETIME object for the current time.
|
24
|
+
#
|
25
|
+
autoload :MysqlAdapter, 'schema_default_expr/active_record/connection_adapters/mysql_adapter'
|
26
|
+
autoload :PostgresqlAdapter, 'schema_default_expr/active_record/connection_adapters/postgresql_adapter'
|
27
|
+
autoload :Sqlite3Adapter, 'schema_default_expr/active_record/connection_adapters/sqlite3_adapter'
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
SchemaMonkey.register(SchemaDefaultExpr)
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module SchemaDefaultExpr
|
2
|
+
module ActiveRecord
|
3
|
+
module ConnectionAdapters
|
4
|
+
module MysqlAdapter
|
5
|
+
def default_expr_valid?(expr)
|
6
|
+
false # only the TIMESTAMP column accepts SQL column defaults and rails uses DATETIME
|
7
|
+
end
|
8
|
+
|
9
|
+
def sql_for_function(function)
|
10
|
+
case function
|
11
|
+
when :now then 'CURRENT_TIMESTAMP'
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module SchemaDefaultExpr
|
2
|
+
module ActiveRecord
|
3
|
+
module ConnectionAdapters
|
4
|
+
module PostgresqlAdapter
|
5
|
+
def default_expr_valid?(expr)
|
6
|
+
true # arbitrary sql is okay in PostgreSQL
|
7
|
+
end
|
8
|
+
|
9
|
+
def sql_for_function(function)
|
10
|
+
case function
|
11
|
+
when :now
|
12
|
+
"NOW()"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module SchemaDefaultExpr
|
2
|
+
module ActiveRecord
|
3
|
+
module ConnectionAdapters
|
4
|
+
|
5
|
+
module Sqlite3Adapter
|
6
|
+
def self.included(base)
|
7
|
+
SchemaMonkey.include_once ::ActiveRecord::ConnectionAdapters::Column, SQLiteColumn
|
8
|
+
end
|
9
|
+
|
10
|
+
def default_expr_valid?(expr)
|
11
|
+
true # arbitrary sql is okay
|
12
|
+
end
|
13
|
+
|
14
|
+
def sql_for_function(function)
|
15
|
+
case function
|
16
|
+
when :now
|
17
|
+
"(DATETIME('now'))"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
module SQLiteColumn
|
23
|
+
|
24
|
+
def self.included(base)
|
25
|
+
base.alias_method_chain :default_function, :sqlite3 if base.instance_methods.include? :default_function
|
26
|
+
end
|
27
|
+
|
28
|
+
def default_function_with_sqlite3
|
29
|
+
@default_function ||= "(#{default})" if default =~ /DATETIME/
|
30
|
+
default_function_without_sqlite3
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module SchemaDefaultExpr
|
2
|
+
module Middleware
|
3
|
+
def self.insert
|
4
|
+
SchemaMonkey::Middleware::Migration::ColumnOptionsSql.prepend DefaultExprOptions
|
5
|
+
SchemaMonkey::Middleware::Dumper::Table.append DumpDefaultExpressions
|
6
|
+
end
|
7
|
+
|
8
|
+
class DefaultExprOptions < ::SchemaMonkey::Middleware::Base
|
9
|
+
def call(env)
|
10
|
+
options = env.options
|
11
|
+
if env.caller.options_include_default?(options)
|
12
|
+
default = options[:default]
|
13
|
+
|
14
|
+
if default.is_a? Hash and [[:expr], [:value]].include?(default.keys)
|
15
|
+
value = default[:value]
|
16
|
+
expr = env.connection.sql_for_function(default[:expr]) || default[:expr] if default[:expr]
|
17
|
+
else
|
18
|
+
value = default
|
19
|
+
expr = env.connection.sql_for_function(default)
|
20
|
+
end
|
21
|
+
|
22
|
+
if expr
|
23
|
+
raise ArgumentError, "Invalid default expression" unless env.connection.default_expr_valid?(expr)
|
24
|
+
env.sql << " DEFAULT #{expr}"
|
25
|
+
# must explicitly check for :null to allow change_column to work on migrations
|
26
|
+
if options[:null] == false
|
27
|
+
env.sql << " NOT NULL"
|
28
|
+
end
|
29
|
+
options.delete(:default)
|
30
|
+
options.delete(:null)
|
31
|
+
else
|
32
|
+
options[:default] = value
|
33
|
+
end
|
34
|
+
end
|
35
|
+
continue env
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
class DumpDefaultExpressions < SchemaMonkey::Middleware::Base
|
40
|
+
def call(env)
|
41
|
+
continue env
|
42
|
+
env.connection.columns(env.table.name).each do |column|
|
43
|
+
if !column.default_function.nil?
|
44
|
+
if col = env.table.columns.find{|col| col.name == column.name}
|
45
|
+
options = "default: { expr: #{column.default_function.inspect} }"
|
46
|
+
options += ", #{col.options}" unless col.options.blank?
|
47
|
+
col.options = options
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
module SchemaPgEnums
|
2
|
+
module ActiveRecord
|
3
|
+
module ConnectionAdapters
|
4
|
+
module PostgresqlAdapter
|
5
|
+
|
6
|
+
def enums
|
7
|
+
result = query(<<-SQL)
|
8
|
+
SELECT
|
9
|
+
N.nspname AS schema_name,
|
10
|
+
T.typname AS enum_name,
|
11
|
+
E.enumlabel AS enum_label,
|
12
|
+
E.enumsortorder AS enum_sort_order
|
13
|
+
--array_agg(E.enumlabel ORDER BY enumsortorder) AS labels
|
14
|
+
FROM pg_type T
|
15
|
+
JOIN pg_enum E ON E.enumtypid = T.oid
|
16
|
+
JOIN pg_namespace N ON N.oid = T.typnamespace
|
17
|
+
ORDER BY 1, 2, 4
|
18
|
+
SQL
|
19
|
+
|
20
|
+
result.reduce([]) do |res, row|
|
21
|
+
last = res.last
|
22
|
+
if last && last[0] == row[0] && last[1] == row[1]
|
23
|
+
last[2] << row[2]
|
24
|
+
else
|
25
|
+
res << (row[0..1] << [row[2]])
|
26
|
+
end
|
27
|
+
res
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def create_enum(name, *values)
|
32
|
+
options = values.extract_options!
|
33
|
+
list = values.map { |value| escape_enum_value(value) }
|
34
|
+
execute "CREATE TYPE #{enum_name(name, options[:schema])} AS ENUM (#{list.join(',')})"
|
35
|
+
end
|
36
|
+
|
37
|
+
def alter_enum(name, value, options = {})
|
38
|
+
opts = case
|
39
|
+
when options[:before] then "BEFORE #{escape_enum_value(options[:before])}"
|
40
|
+
when options[:after] then "AFTER #{escape_enum_value(options[:after])}"
|
41
|
+
else
|
42
|
+
''
|
43
|
+
end
|
44
|
+
execute "ALTER TYPE #{enum_name(name, options[:schema])} ADD VALUE #{escape_enum_value(value)} #{opts}"
|
45
|
+
end
|
46
|
+
|
47
|
+
def drop_enum(name, options = {})
|
48
|
+
execute "DROP TYPE #{enum_name(name, options[:schema])}"
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def enum_name(name, schema)
|
54
|
+
[schema || 'public', name].map { |s|
|
55
|
+
%Q{"#{s}"}
|
56
|
+
}.join('.')
|
57
|
+
end
|
58
|
+
|
59
|
+
def escape_enum_value(value)
|
60
|
+
escaped_value = value.sub("'", "''")
|
61
|
+
"'#{escaped_value}'"
|
62
|
+
end
|
63
|
+
|
64
|
+
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module SchemaPgEnums
|
2
|
+
module Middleware
|
3
|
+
module Postgresql
|
4
|
+
def self.insert
|
5
|
+
SchemaMonkey::Middleware::Dumper::Extensions.append CreateEnums
|
6
|
+
end
|
7
|
+
|
8
|
+
class CreateEnums < SchemaMonkey::Middleware::Base
|
9
|
+
def call(env)
|
10
|
+
continue env
|
11
|
+
|
12
|
+
env.connection.enums.each do |schema, name, values|
|
13
|
+
params = [name.inspect]
|
14
|
+
params << values.map(&:inspect).join(', ')
|
15
|
+
params << ":schema => #{schema.inspect}" if schema != 'public'
|
16
|
+
|
17
|
+
env.extensions << "create_enum #{params.join(', ')}"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/schema_plus.rb
CHANGED
@@ -1,22 +1,28 @@
|
|
1
1
|
require 'active_record'
|
2
2
|
require 'valuable'
|
3
3
|
|
4
|
+
require 'schema_monkey'
|
5
|
+
require 'schema_plus_indexes'
|
6
|
+
require 'schema_plus_pg_indexes'
|
7
|
+
|
8
|
+
require 'schema_column_plus'
|
9
|
+
require 'schema_db_default'
|
10
|
+
require 'schema_default_expr'
|
11
|
+
require 'schema_pg_enums'
|
12
|
+
require 'schema_views'
|
13
|
+
require 'schema_plus_tables'
|
14
|
+
|
4
15
|
require 'schema_plus/version'
|
5
|
-
require 'schema_plus/active_record/attribute'
|
6
16
|
require 'schema_plus/active_record/base'
|
7
|
-
require 'schema_plus/active_record/
|
8
|
-
require 'schema_plus/active_record/db_default'
|
9
|
-
require 'schema_plus/active_record/foreign_keys'
|
17
|
+
require 'schema_plus/active_record/connection_adapters/abstract_adapter'
|
10
18
|
require 'schema_plus/active_record/connection_adapters/table_definition'
|
11
19
|
require 'schema_plus/active_record/connection_adapters/schema_statements'
|
12
20
|
require 'schema_plus/active_record/schema'
|
13
|
-
require 'schema_plus/active_record/schema_dumper'
|
14
|
-
require 'schema_plus/active_record/connection_adapters/abstract_adapter'
|
15
|
-
require 'schema_plus/active_record/connection_adapters/column'
|
16
21
|
require 'schema_plus/active_record/connection_adapters/foreign_key_definition'
|
17
|
-
require 'schema_plus/active_record/connection_adapters/index_definition'
|
18
22
|
require 'schema_plus/active_record/migration/command_recorder'
|
19
|
-
require 'schema_plus/
|
23
|
+
require 'schema_plus/middleware/dumper'
|
24
|
+
require 'schema_plus/middleware/migration'
|
25
|
+
require 'schema_plus/middleware/model'
|
20
26
|
|
21
27
|
module SchemaPlus
|
22
28
|
module ActiveRecord
|
@@ -24,7 +30,6 @@ module SchemaPlus
|
|
24
30
|
module ConnectionAdapters
|
25
31
|
autoload :MysqlAdapter, 'schema_plus/active_record/connection_adapters/mysql_adapter'
|
26
32
|
autoload :PostgresqlAdapter, 'schema_plus/active_record/connection_adapters/postgresql_adapter'
|
27
|
-
autoload :PostgreSQLColumn, 'schema_plus/active_record/connection_adapters/postgresql_adapter'
|
28
33
|
autoload :Sqlite3Adapter, 'schema_plus/active_record/connection_adapters/sqlite3_adapter'
|
29
34
|
end
|
30
35
|
end
|
@@ -119,43 +124,10 @@ module SchemaPlus
|
|
119
124
|
yield config
|
120
125
|
end
|
121
126
|
|
122
|
-
def self.insert_connection_adapters #:nodoc:
|
123
|
-
return if @inserted_connection_adapters
|
124
|
-
@inserted_connection_adapters = true
|
125
|
-
::ActiveRecord::ConnectionAdapters::AbstractAdapter.send(:include, SchemaPlus::ActiveRecord::ConnectionAdapters::AbstractAdapter)
|
126
|
-
::ActiveRecord::ConnectionAdapters::Column.send(:include, SchemaPlus::ActiveRecord::ConnectionAdapters::Column)
|
127
|
-
::ActiveRecord::ConnectionAdapters::IndexDefinition.send(:include, SchemaPlus::ActiveRecord::ConnectionAdapters::IndexDefinition)
|
128
|
-
::ActiveRecord::ConnectionAdapters::SchemaStatements.send(:include, SchemaPlus::ActiveRecord::ConnectionAdapters::SchemaStatements)
|
129
|
-
::ActiveRecord::ConnectionAdapters::TableDefinition.send(:include, SchemaPlus::ActiveRecord::ConnectionAdapters::TableDefinition)
|
130
|
-
::ActiveRecord::Migration::CommandRecorder.send(:include, SchemaPlus::ActiveRecord::Migration::CommandRecorder)
|
131
|
-
|
132
|
-
if "#{::ActiveRecord::VERSION::MAJOR}.#{::ActiveRecord::VERSION::MINOR}".to_r >= "4.1".to_r
|
133
|
-
::ActiveRecord::ConnectionAdapters::AbstractAdapter::SchemaCreation.send(:include, SchemaPlus::ActiveRecord::ConnectionAdapters::AbstractAdapter::AddColumnOptions)
|
134
|
-
else
|
135
|
-
::ActiveRecord::ConnectionAdapters::AbstractAdapter.send(:include, SchemaPlus::ActiveRecord::ConnectionAdapters::AbstractAdapter::AddColumnOptions)
|
136
|
-
end
|
137
|
-
|
138
|
-
if ::ActiveRecord::VERSION::MAJOR.to_i >= 4
|
139
|
-
::ActiveRecord::ConnectionAdapters::AbstractAdapter::SchemaCreation.send(:include, SchemaPlus::ActiveRecord::ConnectionAdapters::AbstractAdapter::VisitTableDefinition)
|
140
|
-
end
|
141
|
-
|
142
|
-
if "#{::ActiveRecord::VERSION::MAJOR}.#{::ActiveRecord::VERSION::MINOR}".to_r >= "4.2".to_r
|
143
|
-
require 'active_record/connection_adapters/abstract_mysql_adapter'
|
144
|
-
::ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter::SchemaCreation.send(:include, SchemaPlus::ActiveRecord::ConnectionAdapters::AbstractAdapter::VisitTableDefinition)
|
145
|
-
end
|
146
|
-
end
|
147
|
-
|
148
127
|
def self.insert #:nodoc:
|
149
|
-
|
150
|
-
@inserted = true
|
151
|
-
insert_connection_adapters
|
152
|
-
::ActiveRecord::Base.send(:include, SchemaPlus::ActiveRecord::Base)
|
153
|
-
::ActiveRecord::Schema.send(:include, SchemaPlus::ActiveRecord::Schema)
|
154
|
-
::ActiveRecord::SchemaDumper.send(:include, SchemaPlus::ActiveRecord::SchemaDumper)
|
155
|
-
::ActiveRecord.const_set(:DB_DEFAULT, SchemaPlus::ActiveRecord::DB_DEFAULT)
|
156
|
-
::ActiveRecord::Attribute.send(:include, SchemaPlus::ActiveRecord::Attribute) if defined? ::ActiveRecord::Attribute
|
128
|
+
SchemaMonkey.include_once ::ActiveRecord::ConnectionAdapters::AbstractAdapter::SchemaCreation, SchemaPlus::ActiveRecord::ConnectionAdapters::AbstractAdapter::VisitTableDefinition
|
157
129
|
end
|
158
130
|
|
159
131
|
end
|
160
132
|
|
161
|
-
SchemaPlus
|
133
|
+
SchemaMonkey.register(SchemaPlus)
|