2
0
Fork 0
mirror of https://github.com/discourse/discourse.git synced 2025-10-03 17:21:20 +08:00
discourse/migrations/lib/database/schema/enum_writer.rb
Gerhard Schlager 5b3dbb2c6f DEV: Add ability to generate enums for IntermediateDB
This also adds the ability to generate YARD documentation for IntermediateDB models.
2025-10-01 15:25:28 +02:00

45 lines
1.2 KiB
Ruby

# frozen_string_literal: true
require "rake"
require "syntax_tree/rake_tasks"
module Migrations::Database::Schema
class EnumWriter
def initialize(namespace, header)
@namespace = namespace
@header = header.gsub(/^/, "# ")
end
def self.filename_for(enum)
"#{enum.name.downcase.underscore}.rb"
end
def output_enum(enum, output_stream)
module_name = ::Migrations::Database::Schema.to_singular_classname(enum.name)
output_stream.puts "# frozen_string_literal: true"
output_stream.puts
output_stream.puts @header
output_stream.puts
output_stream.puts "module #{@namespace}"
output_stream.puts " module #{module_name}"
output_stream.puts " extend ::Migrations::Enum"
output_stream.puts
output_stream.puts enum_values(enum.values)
output_stream.puts " end"
output_stream.puts "end"
end
private
def enum_values(values)
values
.sort_by { |_k, v| v }
.map do |name, value|
value = %Q|"#{value}"| if value.is_a?(String)
" #{::Migrations::Database::Schema.to_const_name(name)} = #{value}"
end
.join("\n")
end
end
end