class Ratbug::Generators::TypescriptGenerator
Public Class Methods
new(table, options)
click to toggle source
# File lib/ratbug/generators/typescript_generator.rb, line 6 def initialize(table, options) @table = table @options = options end
Public Instance Methods
generate()
click to toggle source
# File lib/ratbug/generators/typescript_generator.rb, line 11 def generate output = "" columns.values.filter { |c| c.enum.present? }.each do |column| output << enum_output(column) end output << "type #{@table.name.singularize.camelize} = {\n" columns.values.sort_by(&:name).each do |column| output << column_row(column) end output << "};" dirname = File.dirname(output_path) unless File.directory?(dirname) FileUtils.mkdir_p(dirname) end File.open(output_path, "w") do |f| f.puts(output) end puts "generated: #{output_path}" end
Private Instance Methods
column_row(column)
click to toggle source
# File lib/ratbug/generators/typescript_generator.rb, line 44 def column_row(column) ret = " #{column.name.camelize(:lower)}#{column.nullable ? '?' : ''}:" if column.enum.present? ret << " #{enum_type_name(column)};\n" else ret << " #{column_type_to_ts_type(column.type)};\n" end ret end
column_type_to_ts_type(column_type)
click to toggle source
# File lib/ratbug/generators/typescript_generator.rb, line 78 def column_type_to_ts_type(column_type) { bigint: 'number', binary: 'number', boolean: 'boolean', date: 'string', datetime: 'string', decimal: 'number', float: 'string', integer: 'number', json: 'string', primary_key: 'number', string: 'string', text: 'string', time: 'string' }[column_type.to_sym] end
columns()
click to toggle source
# File lib/ratbug/generators/typescript_generator.rb, line 36 def columns if @options[:omit_timestamps] @table.columns.except(:created_at, :updated_at) else @table.columns end end
enum_output(column)
click to toggle source
# File lib/ratbug/generators/typescript_generator.rb, line 54 def enum_output(column) type_name = enum_type_name(column) output = "" if @options[:ts_enum_output] === 'union_type' output << "type #{type_name} = " output << column.enum.keys.map do |enum_key| "'#{enum_key}'" end.join(' | ') output << ';' else # force string enum output << "enum #{type_name} {\n" column.enum.keys.map do |enum_key| output << "#{enum_key.camelize} = '#{enum_key}',\n" end.join(' | ') output << "}" end output << "\n\n" end
enum_type_name(column)
click to toggle source
# File lib/ratbug/generators/typescript_generator.rb, line 74 def enum_type_name(column) "#{@table.name}_#{column.name}".pluralize.camelize end
output_path()
click to toggle source
# File lib/ratbug/generators/typescript_generator.rb, line 96 def output_path @options[:output_dir].join("_#{@table.name.singularize}.ts") end