Generates interface- need to enable trim mode, save to disk.

pull/607/head
Rick Carlino 2018-01-08 09:54:02 -06:00
parent d4357b778b
commit 7f22c79ad4
1 changed files with 54 additions and 0 deletions

View File

@ -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