mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Remove the SchemaDumper options and change the default behavior
Now the schema dumper by default doesn't align the types and arguments in the ruby format anymore.
This commit is contained in:
parent
d25a5ce256
commit
df84e98672
4 changed files with 17 additions and 137 deletions
|
@ -1,6 +1,4 @@
|
|||
* Option to remove standardized column types/arguments spaces in schema dump
|
||||
with `ActiveRecord::SchemaDumper.standardized_argument_widths` and
|
||||
`ActiveRecord::SchemaDumper.standardized_type_widths` methods.
|
||||
* Remove standardized column types/arguments spaces in schema dump.
|
||||
|
||||
*Tim Petricola*
|
||||
|
||||
|
|
|
@ -16,22 +16,6 @@ module ActiveRecord
|
|||
cattr_accessor :ignore_tables
|
||||
@@ignore_tables = []
|
||||
|
||||
##
|
||||
# :singleton-method:
|
||||
# Define whether column arguments are lined up in dump.
|
||||
# Acceptable values are true or false.
|
||||
# This setting is only used if ActiveRecord::Base.schema_format == :ruby
|
||||
cattr_accessor :standardized_argument_widths
|
||||
@@standardized_argument_widths = true
|
||||
|
||||
##
|
||||
# :singleton-method:
|
||||
# Define whether columns types are lined up in dump.
|
||||
# Acceptable values are true or false.
|
||||
# This setting is only used if ActiveRecord::Base.schema_format == :ruby
|
||||
cattr_accessor :standardized_type_widths
|
||||
@@standardized_type_widths = true
|
||||
|
||||
class << self
|
||||
def dump(connection=ActiveRecord::Base.connection, stream=STDOUT, config = ActiveRecord::Base)
|
||||
new(connection, generate_options(config)).dump(stream)
|
||||
|
@ -162,32 +146,13 @@ HEADER
|
|||
keys = @connection.migration_keys
|
||||
|
||||
# figure out the lengths for each column based on above keys
|
||||
lengths = if standardized_argument_widths
|
||||
keys.map { |key|
|
||||
column_specs.map { |spec|
|
||||
spec[key] ? spec[key].length + 2 : 0
|
||||
}.max
|
||||
}
|
||||
else
|
||||
[0] * keys.length
|
||||
end
|
||||
lengths = [0] * keys.length
|
||||
|
||||
# the string we're going to sprintf our values against, with standardized column widths
|
||||
format_string = if standardized_argument_widths
|
||||
lengths.map { |len| "%-#{len}s" }
|
||||
else
|
||||
["%s"] * keys.length
|
||||
end
|
||||
format_string = ["%s"] * keys.length
|
||||
|
||||
# add column type definition to our format string
|
||||
if standardized_type_widths
|
||||
# find the max length for the 'type' column, which is special
|
||||
type_length = column_specs.map { |column| column[:type].length }.max
|
||||
|
||||
format_string.unshift " t.%-#{type_length}s "
|
||||
else
|
||||
format_string.unshift " t.%s "
|
||||
end
|
||||
format_string.unshift " t.%s "
|
||||
|
||||
format_string *= ""
|
||||
|
||||
|
|
|
@ -70,38 +70,35 @@ class SchemaDumperTest < ActiveRecord::TestCase
|
|||
assert_match %r{create_table "CamelCase"}, output
|
||||
end
|
||||
|
||||
def assert_line_up(lines, pattern, required = false)
|
||||
def assert_no_line_up(lines, pattern)
|
||||
return assert(true) if lines.empty?
|
||||
matches = lines.map { |line| line.match(pattern) }
|
||||
assert matches.all? if required
|
||||
matches.compact!
|
||||
return assert(true) if matches.empty?
|
||||
assert_equal 1, matches.map { |match| match.offset(0).first }.uniq.length
|
||||
line_matches = lines.map { |line| [line, line.match(pattern)] }.select { |line, match| match }
|
||||
assert line_matches.all? { |line, match|
|
||||
start = match.offset(0).first
|
||||
line[start - 2..start - 1] == ", "
|
||||
}
|
||||
end
|
||||
|
||||
def column_definition_lines(output = standard_dump)
|
||||
output.scan(/^( *)create_table.*?\n(.*?)^\1end/m).map { |m| m.last.split(/\n/) }
|
||||
end
|
||||
|
||||
def test_types_line_up
|
||||
def test_types_no_line_up
|
||||
column_definition_lines.each do |column_set|
|
||||
next if column_set.empty?
|
||||
|
||||
lengths = column_set.map do |column|
|
||||
if match = column.match(/\bt\.\w+\s+(?="\w+?")/)
|
||||
match[0].length
|
||||
end
|
||||
end.compact
|
||||
|
||||
assert_equal 1, lengths.uniq.length
|
||||
assert column_set.all? { |column| !column.match(/\bt\.\w+\s{2,}/) }
|
||||
end
|
||||
end
|
||||
|
||||
def test_arguments_line_up
|
||||
def test_arguments_no_line_up
|
||||
column_definition_lines.each do |column_set|
|
||||
assert_line_up(column_set, /default: /)
|
||||
assert_line_up(column_set, /limit: /)
|
||||
assert_line_up(column_set, /null: /)
|
||||
assert_no_line_up(column_set, /default: /)
|
||||
assert_no_line_up(column_set, /limit: /)
|
||||
assert_no_line_up(column_set, /null: /)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -442,81 +439,3 @@ class SchemaDumperDefaultsTest < ActiveRecord::TestCase
|
|||
assert_match %r{t\.time\s+"time_with_default",\s+default: '2000-01-01 07:17:04'}, output
|
||||
end
|
||||
end
|
||||
|
||||
class SchemaDumperNoStandardizedArgumentWidthsTest < ActiveRecord::TestCase
|
||||
include SchemaDumpingHelper
|
||||
|
||||
setup do
|
||||
ActiveRecord::SchemaDumper.standardized_argument_widths = false
|
||||
ActiveRecord::SchemaMigration.create_table
|
||||
end
|
||||
|
||||
teardown do
|
||||
ActiveRecord::SchemaDumper.standardized_argument_widths = true
|
||||
end
|
||||
|
||||
def standard_dump
|
||||
@@standard_dump ||= perform_schema_dump
|
||||
end
|
||||
|
||||
def perform_schema_dump
|
||||
dump_all_table_schema []
|
||||
end
|
||||
|
||||
def assert_no_line_up(lines, pattern)
|
||||
return assert(true) if lines.empty?
|
||||
matches = lines.map { |line| line.match(pattern) }
|
||||
matches.compact!
|
||||
return assert(true) if matches.empty?
|
||||
line_matches = lines.map { |line| [line, line.match(pattern)] }.select { |line, match| match }
|
||||
assert line_matches.all? { |line, match|
|
||||
start = match.offset(0).first
|
||||
line[start - 2..start - 1] == ", "
|
||||
}
|
||||
end
|
||||
|
||||
def column_definition_lines(output = standard_dump)
|
||||
output.scan(/^( *)create_table.*?\n(.*?)^\1end/m).map { |m| m.last.split(/\n/) }
|
||||
end
|
||||
|
||||
def test_arguments_no_line_up
|
||||
column_definition_lines.each do |column_set|
|
||||
assert_no_line_up(column_set, /default: /)
|
||||
assert_no_line_up(column_set, /limit: /)
|
||||
assert_no_line_up(column_set, /null: /)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class SchemaDumperNoStandardizedTypeWidthsTest < ActiveRecord::TestCase
|
||||
include SchemaDumpingHelper
|
||||
|
||||
setup do
|
||||
ActiveRecord::SchemaDumper.standardized_type_widths = false
|
||||
ActiveRecord::SchemaMigration.create_table
|
||||
end
|
||||
|
||||
teardown do
|
||||
ActiveRecord::SchemaDumper.standardized_type_widths = true
|
||||
end
|
||||
|
||||
def standard_dump
|
||||
@@standard_dump ||= perform_schema_dump
|
||||
end
|
||||
|
||||
def perform_schema_dump
|
||||
dump_all_table_schema []
|
||||
end
|
||||
|
||||
def column_definition_lines(output = standard_dump)
|
||||
output.scan(/^( *)create_table.*?\n(.*?)^\1end/m).map { |m| m.last.split(/\n/) }
|
||||
end
|
||||
|
||||
def test_types_no_line_up
|
||||
column_definition_lines.each do |column_set|
|
||||
next if column_set.empty?
|
||||
|
||||
assert column_set.all? { |column| !column.match(/\bt\.\w+\s{2,}/) }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -368,11 +368,9 @@ The MySQL adapter adds one additional configuration option:
|
|||
|
||||
* `ActiveRecord::ConnectionAdapters::Mysql2Adapter.emulate_booleans` controls whether Active Record will consider all `tinyint(1)` columns as booleans. Defaults to `true`.
|
||||
|
||||
The schema dumper adds additional configuration options:
|
||||
The schema dumper adds one additional configuration option:
|
||||
|
||||
* `ActiveRecord::SchemaDumper.ignore_tables` accepts an array of tables that should _not_ be included in any generated schema file. This setting is ignored unless `config.active_record.schema_format == :ruby`.
|
||||
* `ActiveRecord::SchemaDumper.standardized_argument_widths` configures whether colum arguments should be lined up or not in dump. By default this is `true`. This setting is ignored unless `config.active_record.schema_format == :ruby`.
|
||||
* `ActiveRecord::SchemaDumper.standardized_type_widths` configures whether colum types should be lined up or not in dump. By default this is `true`. This setting is ignored unless `config.active_record.schema_format == :ruby`.
|
||||
|
||||
### Configuring Action Controller
|
||||
|
||||
|
|
Loading…
Reference in a new issue