From 5b004ed0f580946952b912530b782c91d256a910 Mon Sep 17 00:00:00 2001 From: Ko Nagase Date: Mon, 6 Jan 2025 23:41:06 +0900 Subject: [PATCH 10/12] Support omit default or nil value --- lib/tasks/extract_fixtures.rake | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/lib/tasks/extract_fixtures.rake b/lib/tasks/extract_fixtures.rake index 1ce183b06..5ee9c168d 100644 --- a/lib/tasks/extract_fixtures.rake +++ b/lib/tasks/extract_fixtures.rake @@ -40,6 +40,7 @@ task :extract_fixtures => :environment do tables = ENV['TABLES']&.split(',') || [] skip_tables = ENV['SKIP_TABLES']&.split(',') || [] table_filters = ENV['TABLE_FILTERS']&.split(';')&.map {|tf| tf.split(":", 2)}&.to_h || {} + omit_default_or_nil = ActiveRecord::Type::Boolean.new.cast(ENV.fetch('OMIT_DEFAULT_OR_NIL', 'false')) FileUtils.mkdir_p(dir) if time_offset.present? && !time_offset.match?(/^([+-](0[0-9]|1[0-4]):[0-5][0-9])$/) @@ -60,9 +61,15 @@ task :extract_fixtures => :environment do sql = "SELECT * FROM #{table_name} #{where_clause} ORDER BY #{order_columns}" data = ActiveRecord::Base.connection.select_all(sql) file.write data.inject({}) { |hash, record| - # cast extracted values + # omit default or nil values or cast extracted values with formatting time columns.each do |col| - if record[col.name] + if omit_default_or_nil && ( + (!col.default.nil? && !record[col.name].nil? && record[col.name].to_s == col.default) || + (col.default.nil? && record[col.name].nil?) + ) + record.delete(col.name) + next + elsif record[col.name] record[col.name] = ActiveRecord::Type.lookup(col.type).deserialize(record[col.name]) if col.type == :datetime && record[col.name].is_a?(Time) if time_offset.present? -- 2.49.0