Generates interface- need to enable trim mode, save to disk.
parent
d4357b778b
commit
7f22c79ad4
|
@ -0,0 +1,54 @@
|
|||
require 'rake'
|
||||
require 'erb'
|
||||
|
||||
class Typescript
|
||||
TYPE_MAPPING = {
|
||||
"bigint" => "number",
|
||||
"boolean" => "boolean",
|
||||
"integer" => "number",
|
||||
"timestamp without time zone" => "string"
|
||||
}
|
||||
|
||||
INTERFACE_TPL = <<~END
|
||||
/** THIS INTERFACE IS AUTO-GENERATED BY A SCRIPT.
|
||||
DO NOT MANUALLY MODIFY, CHANGES WILL BE
|
||||
OVERWRITTEN WHEN DATABASE SCHEMA CHANGES */
|
||||
|
||||
interface <%= interface_name %> {
|
||||
<% fields.each do |field| %>
|
||||
<%= field.head %>: <%= field.tail %>;
|
||||
<% end %>
|
||||
}
|
||||
END
|
||||
|
||||
# CONFIG_KLASS = [ FbosConfig, WebAppConfig, FirmwareConfig ]
|
||||
|
||||
def self.generate(klass)
|
||||
@klass = klass
|
||||
results = ERB.new(INTERFACE_TPL).result(binding)
|
||||
puts results
|
||||
# File.write()
|
||||
end
|
||||
|
||||
def self.klass
|
||||
@klass
|
||||
end
|
||||
|
||||
def self.interface_name
|
||||
@interface_name ||= klass.name
|
||||
end
|
||||
|
||||
def self.fields
|
||||
@fields ||= klass.columns.map do |col|
|
||||
col_type = TYPE_MAPPING[col.sql_type_metadata.sql_type] or raise "NO!"
|
||||
Pair[col.name, col_type]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
namespace :typescript do
|
||||
desc "This task does nothing"
|
||||
task :interfaces => :environment do
|
||||
Typescript.generate(WebAppConfig)
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue