diff options
author | David Heinemeier Hansson <david@loudthinking.com> | 2007-05-11 21:26:53 +0000 |
---|---|---|
committer | David Heinemeier Hansson <david@loudthinking.com> | 2007-05-11 21:26:53 +0000 |
commit | e105e599e706780905d4c348394da989de3b200f (patch) | |
tree | ecff04b0f168d2b1c6cb84083234601dd8bbfcae /activerecord/lib/active_record | |
parent | 19ed709b09e7d942dadb285150a7b41225a2236f (diff) | |
download | rails-e105e599e706780905d4c348394da989de3b200f.tar.gz rails-e105e599e706780905d4c348394da989de3b200f.tar.bz2 rails-e105e599e706780905d4c348394da989de3b200f.zip |
Sexy dumper now has its groove on (closes #8281) [Chris Wanstrath]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@6719 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'activerecord/lib/active_record')
-rw-r--r-- | activerecord/lib/active_record/schema_dumper.rb | 33 |
1 files changed, 24 insertions, 9 deletions
diff --git a/activerecord/lib/active_record/schema_dumper.rb b/activerecord/lib/active_record/schema_dumper.rb index 98c1163458..7fe5f26daf 100644 --- a/activerecord/lib/active_record/schema_dumper.rb +++ b/activerecord/lib/active_record/schema_dumper.rb @@ -89,22 +89,37 @@ HEADER raise StandardError, "Unknown type '#{column.sql_type}' for column '#{column.name}'" if @types[column.type].nil? next if column.name == pk spec = {} - spec[:name] = column.name.inspect - spec[:type] = column.type.inspect - spec[:limit] = column.limit.inspect if column.limit != @types[column.type][:limit] && column.type != :decimal + spec[:name] = column.name.inspect + spec[:type] = column.type.to_s + spec[:limit] = column.limit.inspect if column.limit != @types[column.type][:limit] && column.type != :decimal spec[:precision] = column.precision.inspect if !column.precision.nil? - spec[:scale] = column.scale.inspect if !column.scale.nil? - spec[:null] = 'false' if !column.null - spec[:default] = default_string(column.default) if !column.default.nil? + spec[:scale] = column.scale.inspect if !column.scale.nil? + spec[:null] = 'false' if !column.null + spec[:default] = default_string(column.default) if !column.default.nil? (spec.keys - [:name, :type]).each{ |k| spec[k].insert(0, "#{k.inspect} => ")} spec end.compact - keys = [:name, :type, :limit, :precision, :scale, :default, :null] & column_specs.map{ |spec| spec.keys }.inject([]){ |a,b| a | b } + + # find all migration keys used in this table + keys = [:name, :limit, :precision, :scale, :default, :null] & column_specs.map(&:keys).flatten + + # figure out the lengths for each column based on above keys lengths = keys.map{ |key| column_specs.map{ |spec| spec[key] ? spec[key].length + 2 : 0 }.max } - format_string = lengths.map{ |len| "%-#{len}s" }.join("") + + # the string we're going to sprintf our values against, with standardized column widths + format_string = lengths.map{ |len| "%-#{len}s" } + + # find the max length for the 'type' column, which is special + type_length = column_specs.map{ |column| column[:type].length }.max + + # add column type definition to our format string + format_string.unshift " t.%-#{type_length}s " + + format_string *= '' + column_specs.each do |colspec| values = keys.zip(lengths).map{ |key, len| colspec.key?(key) ? colspec[key] + ", " : " " * len } - tbl.print " t.column " + values.unshift colspec[:type] tbl.print((format_string % values).gsub(/,\s*$/, '')) tbl.puts end |