From 320788097df990e90fb6942fab168141e8a682a2 Mon Sep 17 00:00:00 2001
From: Ryuta Kamizono <kamipo@gmail.com>
Date: Mon, 18 May 2015 11:02:00 -0700
Subject: Divide methods for handling column options separately

---
 .../connection_adapters/abstract/schema_dumper.rb  | 28 ++++++++++++++++++----
 .../connection_adapters/abstract_mysql_adapter.rb  | 16 ++++++++-----
 2 files changed, 34 insertions(+), 10 deletions(-)

(limited to 'activerecord')

diff --git a/activerecord/lib/active_record/connection_adapters/abstract/schema_dumper.rb b/activerecord/lib/active_record/connection_adapters/abstract/schema_dumper.rb
index deb014ad46..b944a8631c 100644
--- a/activerecord/lib/active_record/connection_adapters/abstract/schema_dumper.rb
+++ b/activerecord/lib/active_record/connection_adapters/abstract/schema_dumper.rb
@@ -27,10 +27,17 @@ module ActiveRecord
         spec[:type]      = schema_type(column)
         spec[:null]      = 'false' unless column.null
 
-        limit = column.limit || native_database_types[column.type][:limit]
-        spec[:limit]     = limit.inspect if limit
-        spec[:precision] = column.precision.inspect if column.precision
-        spec[:scale]     = column.scale.inspect if column.scale
+        if limit = schema_limit(column)
+          spec[:limit] = limit
+        end
+
+        if precision = schema_precision(column)
+          spec[:precision] = precision
+        end
+
+        if scale = schema_scale(column)
+          spec[:scale] = scale
+        end
 
         default = schema_default(column) if column.has_default?
         spec[:default]   = default unless default.nil?
@@ -53,6 +60,19 @@ module ActiveRecord
         column.type.to_s
       end
 
+      def schema_limit(column)
+        limit = column.limit || native_database_types[column.type][:limit]
+        limit.inspect if limit
+      end
+
+      def schema_precision(column)
+        column.precision.inspect if column.precision
+      end
+
+      def schema_scale(column)
+        column.scale.inspect if column.scale
+      end
+
       def schema_default(column)
         type = lookup_cast_type_from_column(column)
         default = type.deserialize(column.default)
diff --git a/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb b/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb
index 0862c7678e..8776d0adf4 100644
--- a/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb
+++ b/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb
@@ -122,11 +122,14 @@ module ActiveRecord
         spec
       end
 
-      def prepare_column_options(column)
-        spec = super
-        spec.delete(:precision) if /time/ === column.sql_type && column.precision == 0
-        spec.delete(:limit)     if :boolean === column.type
-        spec
+      private
+
+      def schema_limit(column)
+        super unless column.type == :boolean
+      end
+
+      def schema_precision(column)
+        super unless /time/ === column.sql_type && column.precision == 0
       end
 
       def schema_collation(column)
@@ -136,7 +139,8 @@ module ActiveRecord
           column.collation.inspect if column.collation != @collation_cache[table_name]
         end
       end
-      private :schema_collation
+
+      public
 
       class Column < ConnectionAdapters::Column # :nodoc:
         delegate :strict, :extra, to: :sql_type_metadata, allow_nil: true
-- 
cgit v1.2.3