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.
Files changed (87) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +4 -4
  3. data/.travis.yml +1 -47
  4. data/CHANGELOG.md +0 -35
  5. data/README.md +73 -107
  6. data/Rakefile +7 -10
  7. data/TODO.md +51 -0
  8. data/gemfiles/Gemfile.base +2 -0
  9. data/lib/schema_column_plus.rb +7 -0
  10. data/lib/{schema_plus → schema_column_plus}/active_record/connection_adapters/column.rb +13 -11
  11. data/lib/schema_column_plus/middleware/model.rb +22 -0
  12. data/lib/schema_db_default.rb +13 -0
  13. data/lib/{schema_plus → schema_db_default}/active_record/attribute.rb +4 -4
  14. data/lib/schema_db_default/db_default.rb +17 -0
  15. data/lib/schema_db_default/middleware.rb +30 -0
  16. data/lib/schema_default_expr.rb +32 -0
  17. data/lib/schema_default_expr/active_record/connection_adapters/mysql_adapter.rb +17 -0
  18. data/lib/schema_default_expr/active_record/connection_adapters/postgresql_adapter.rb +18 -0
  19. data/lib/schema_default_expr/active_record/connection_adapters/sqlite3_adapter.rb +35 -0
  20. data/lib/schema_default_expr/middleware.rb +54 -0
  21. data/lib/schema_pg_enums.rb +6 -0
  22. data/lib/schema_pg_enums/active_record.rb +69 -0
  23. data/lib/schema_pg_enums/middleware.rb +23 -0
  24. data/lib/schema_plus.rb +17 -45
  25. data/lib/schema_plus/active_record/base.rb +6 -23
  26. data/lib/schema_plus/active_record/connection_adapters/abstract_adapter.rb +80 -181
  27. data/lib/schema_plus/active_record/connection_adapters/foreign_key_definition.rb +78 -99
  28. data/lib/schema_plus/active_record/connection_adapters/mysql_adapter.rb +34 -114
  29. data/lib/schema_plus/active_record/connection_adapters/postgresql_adapter.rb +16 -370
  30. data/lib/schema_plus/active_record/connection_adapters/schema_statements.rb +1 -67
  31. data/lib/schema_plus/active_record/connection_adapters/sqlite3_adapter.rb +18 -112
  32. data/lib/schema_plus/active_record/connection_adapters/table_definition.rb +14 -116
  33. data/lib/schema_plus/active_record/migration/command_recorder.rb +8 -59
  34. data/lib/schema_plus/middleware/dumper.rb +94 -0
  35. data/lib/schema_plus/middleware/migration.rb +167 -0
  36. data/lib/schema_plus/middleware/model.rb +17 -0
  37. data/lib/schema_plus/version.rb +1 -1
  38. data/lib/schema_plus_tables.rb +15 -0
  39. data/lib/schema_plus_tables/active_record/connection_adapters/abstract_adapter.rb +20 -0
  40. data/lib/schema_plus_tables/active_record/connection_adapters/mysql_adapter.rb +25 -0
  41. data/lib/schema_plus_tables/active_record/connection_adapters/postgresql_adapter.rb +13 -0
  42. data/lib/schema_plus_tables/active_record/connection_adapters/sqlite3_adapter.rb +12 -0
  43. data/lib/schema_views.rb +16 -0
  44. data/lib/schema_views/active_record/connection_adapters/abstract_adapter.rb +41 -0
  45. data/lib/schema_views/active_record/connection_adapters/mysql_adapter.rb +30 -0
  46. data/lib/schema_views/active_record/connection_adapters/postgresql_adapter.rb +31 -0
  47. data/lib/schema_views/active_record/connection_adapters/sqlite3_adapter.rb +18 -0
  48. data/lib/schema_views/middleware.rb +47 -0
  49. data/schema_dev.yml +1 -31
  50. data/schema_plus.gemspec +11 -9
  51. data/spec/foreign_key_definition_spec.rb +7 -7
  52. data/spec/foreign_key_spec.rb +63 -48
  53. data/spec/migration_spec.rb +58 -203
  54. data/spec/named_schemas_spec.rb +5 -88
  55. data/spec/{column_spec.rb → schema_column_plus/column_spec.rb} +26 -48
  56. data/spec/schema_db_default/column_spec.rb +58 -0
  57. data/spec/{column_default_spec.rb → schema_default_expr/column_default_spec.rb} +1 -2
  58. data/spec/schema_default_expr/schema_dumper_spec.rb +116 -0
  59. data/spec/schema_dumper_spec.rb +22 -327
  60. data/spec/{enum_spec.rb → schema_pg_enums/enum_spec.rb} +1 -1
  61. data/spec/schema_pg_enums/schema_dumper_spec.rb +37 -0
  62. data/spec/schema_views/named_schemas_spec.rb +97 -0
  63. data/spec/{views_spec.rb → schema_views/views_spec.rb} +1 -1
  64. data/spec/spec_helper.rb +2 -1
  65. data/spec/support/matchers/reference.rb +11 -12
  66. metadata +104 -57
  67. data/gemfiles/rails-3.2/Gemfile.base +0 -3
  68. data/gemfiles/rails-3.2/Gemfile.mysql +0 -10
  69. data/gemfiles/rails-3.2/Gemfile.mysql2 +0 -10
  70. data/gemfiles/rails-3.2/Gemfile.postgresql +0 -10
  71. data/gemfiles/rails-3.2/Gemfile.sqlite3 +0 -10
  72. data/gemfiles/rails-4.0/Gemfile.base +0 -3
  73. data/gemfiles/rails-4.0/Gemfile.mysql2 +0 -10
  74. data/gemfiles/rails-4.0/Gemfile.postgresql +0 -10
  75. data/gemfiles/rails-4.0/Gemfile.sqlite3 +0 -10
  76. data/gemfiles/rails-4.1/Gemfile.base +0 -3
  77. data/gemfiles/rails-4.1/Gemfile.mysql2 +0 -10
  78. data/gemfiles/rails-4.1/Gemfile.postgresql +0 -10
  79. data/gemfiles/rails-4.1/Gemfile.sqlite3 +0 -10
  80. data/lib/schema_plus/active_record/column_options_handler.rb +0 -117
  81. data/lib/schema_plus/active_record/connection_adapters/index_definition.rb +0 -70
  82. data/lib/schema_plus/active_record/db_default.rb +0 -19
  83. data/lib/schema_plus/active_record/foreign_keys.rb +0 -137
  84. data/lib/schema_plus/active_record/schema_dumper.rb +0 -171
  85. data/lib/schema_plus/railtie.rb +0 -20
  86. data/spec/index_definition_spec.rb +0 -211
  87. data/spec/index_spec.rb +0 -249
@@ -1,14 +1,13 @@
1
- module SchemaPlus
1
+ module SchemaColumnPlus
2
2
  module ActiveRecord
3
3
  module ConnectionAdapters
4
4
 
5
5
  #
6
- # SchemaPlus adds several methods to Column
6
+ # SchemaPlusIndex adds several methods to Column
7
7
  #
8
8
  module Column
9
9
 
10
- attr_reader :default_expr
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 SchemaPlus
1
+ module SchemaDbDefault
2
2
  module ActiveRecord
3
3
  module Attribute
4
4
  def self.included(base)
5
- base.alias_method_chain :original_value, :schema_plus
5
+ base.alias_method_chain :original_value, :schema_db_default
6
6
  end
7
7
 
8
- def original_value_with_schema_plus
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
- original_value_without_schema_plus
13
+ original_value_without_schema_db_default
14
14
  end
15
15
 
16
16
  end
@@ -0,0 +1,17 @@
1
+ require 'singleton'
2
+
3
+ module SchemaDbDefault
4
+ class DbDefault
5
+ include Singleton
6
+ def to_s
7
+ 'DEFAULT'
8
+ end
9
+ def id
10
+ self
11
+ end
12
+ def quoted_id
13
+ self
14
+ end
15
+ end
16
+ DB_DEFAULT = DbDefault.instance
17
+ 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,6 @@
1
+ require 'schema_monkey'
2
+
3
+ require_relative 'schema_pg_enums/active_record'
4
+ require_relative 'schema_pg_enums/middleware'
5
+
6
+ SchemaMonkey.register(SchemaPgEnums)
@@ -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
@@ -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/column_options_handler'
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/railtie' if defined?(Rails::Railtie)
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
- return if @inserted
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.insert unless defined? Rails::Railtie
133
+ SchemaMonkey.register(SchemaPlus)