Skip to content

Instantly share code, notes, and snippets.

@jacksonpires
Created May 26, 2023 21:37
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jacksonpires/036a846cc21f8591c56f564d9873263b to your computer and use it in GitHub Desktop.
Save jacksonpires/036a846cc21f8591c56f564d9873263b to your computer and use it in GitHub Desktop.
Move pt-br.yml to splitted version
# frozen_string_literal: true
require "yaml"
namespace :dev do
desc "Create locale files to models"
task create_locale_files: :environment do
models_folder = Rails.root.join("app","models")
original_new_locales_folder = Rails.root.join("config", "locales")
new_locales_folder = Rails.root.join("config", "locales", "models")
files_names = []
FileUtils.mkdir_p(new_locales_folder) unless File.directory?(new_locales_folder)
Dir.foreach(models_folder) do |file_name|
if File.file?("#{models_folder}/#{file_name}") && (File.extname("#{models_folder}/#{file_name}") == ".rb")
files_names << File.basename("#{models_folder}/#{file_name}", ".rb")
end
end
files_names.each do |file_name|
next unless eval(file_name.camelize)
next unless eval(file_name.camelize).respond_to?(:column_names)
attributes = {}
enums = {}
model = eval(file_name.camelize)
begin
model.column_names.each {|column_name| attributes[column_name] = human_name(column_name)}
model.defined_enums.each {|enum, values| enums[enum] = values }
rescue StandardError
next
end
content = {
"pt-BR" => {
"activerecord" => {
"models" => {file_name => file_name.humanize },
"attributes" => {file_name => attributes},
"enums" => {file_name => enums},
}
}
}
arg, arg_value = ARGV&.first&.split("=")
unless File.file?("#{new_locales_folder}/#{file_name}.yml")
File.open("#{new_locales_folder}/#{file_name}.yml", "w") { |file| file.write(content.to_yaml) }
puts "CRIADO #{new_locales_folder}/#{file_name} criado com sucesso!"
next
end
if arg == "OVERWRITE" && arg_value == "TRUE"
File.open("#{new_locales_folder}/#{file_name}.yml", "w") { |file| file.write(content.to_yaml) }
puts "SOBRESCRITO #{new_locales_folder}/#{file_name} criado com sucesso!"
else
puts "PULOU file_name #{new_locales_folder}/#{file_name}"
end
end
Dir.foreach(new_locales_folder) do |file_name|
original_data = YAML.load_file("#{original_new_locales_folder}/pt-BR.yml")
if File.file?("#{new_locales_folder}/#{file_name}") && (File.extname("#{new_locales_folder}/#{file_name}") == ".yml")
data = YAML.load_file("#{new_locales_folder}/#{file_name}")
# next unless data["pt-BR"]["activerecord"]["models"].keys.first == "address"
data["pt-BR"]["activerecord"]["models"].keys.each do |model_key|
if original_data.fetch("pt-BR").fetch("activerecord").fetch("models")&.fetch(model_key, nil)
data["pt-BR"]["activerecord"]["models"][model_key] = original_data["pt-BR"]["activerecord"]["models"][model_key]
end
data["pt-BR"]["activerecord"]["attributes"][model_key].keys.each do |attribute_key|
if original_data.fetch("pt-BR").fetch("activerecord").fetch("attributes")&.fetch(model_key, nil)&.fetch(attribute_key, nil)
data["pt-BR"]["activerecord"]["attributes"][model_key][attribute_key] = original_data["pt-BR"]["activerecord"]["attributes"][model_key][attribute_key]
end
end
data["pt-BR"]["activerecord"]["enums"][model_key].keys.each do |enum_key|
data["pt-BR"]["activerecord"]["enums"][model_key][enum_key].keys.each do |sub_key|
if original_data.fetch("pt-BR").fetch("activerecord").fetch("enums")&.fetch(model_key, nil)&.fetch(enum_key, nil)&.fetch(sub_key, nil)
data["pt-BR"]["activerecord"]["enums"][model_key][enum_key][sub_key] = original_data["pt-BR"]["activerecord"]["enums"][model_key][enum_key][sub_key]
end
end
end
end
File.open("#{new_locales_folder}/#{file_name}", "wb") { |f| YAML.dump(data, f) }
puts "UPDATED file_name #{new_locales_folder}/#{file_name}"
end
end
end
def human_name(attribute)
return "Criado em" if attribute == "created_at"
return "Atualizado em" if attribute == "updated_at"
return "Ativo?" if attribute == "active"
return "ID" if attribute == "id"
return "#{attribute.humanize} ID" if attribute.chars.last(3).join == "_id"
attribute.humanize
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment