Patch #41954 » 0010-Support-omit-default-or-nil-value.patch
lib/tasks/extract_fixtures.rake | ||
---|---|---|
40 | 40 |
tables = ENV['TABLES']&.split(',') || [] |
41 | 41 |
skip_tables = ENV['SKIP_TABLES']&.split(',') || [] |
42 | 42 |
table_filters = ENV['TABLE_FILTERS']&.split(';')&.map {|tf| tf.split(":", 2)}&.to_h || {} |
43 |
omit_default_or_nil = ActiveRecord::Type::Boolean.new.cast(ENV.fetch('OMIT_DEFAULT_OR_NIL', 'false')) |
|
43 | 44 | |
44 | 45 |
FileUtils.mkdir_p(dir) |
45 | 46 |
if time_offset.present? && !time_offset.match?(/^([+-](0[0-9]|1[0-4]):[0-5][0-9])$/) |
... | ... | |
60 | 61 |
sql = "SELECT * FROM #{table_name} #{where_clause} ORDER BY #{order_columns}" |
61 | 62 |
data = ActiveRecord::Base.connection.select_all(sql) |
62 | 63 |
file.write data.inject({}) { |hash, record| |
63 |
# cast extracted values
|
|
64 |
# omit default or nil values or cast extracted values with formatting time
|
|
64 | 65 |
columns.each do |col| |
65 |
if record[col.name] |
|
66 |
if omit_default_or_nil && ( |
|
67 |
(!col.default.nil? && !record[col.name].nil? && record[col.name].to_s == col.default) || |
|
68 |
(col.default.nil? && record[col.name].nil?) |
|
69 |
) |
|
70 |
record.delete(col.name) |
|
71 |
next |
|
72 |
elsif record[col.name] |
|
66 | 73 |
record[col.name] = ActiveRecord::Type.lookup(col.type).deserialize(record[col.name]) |
67 | 74 |
if col.type == :datetime && record[col.name].is_a?(Time) |
68 | 75 |
if time_offset.present? |