mirror of
https://github.com/discourse/discourse.git
synced 2025-10-03 17:21:20 +08:00
46 lines
1.2 KiB
Ruby
46 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
|