From 7f22c79ad4178ed4eec2b5aa97227ca652e548f7 Mon Sep 17 00:00:00 2001 From: Rick Carlino Date: Mon, 8 Jan 2018 09:54:02 -0600 Subject: [PATCH] Generates interface- need to enable trim mode, save to disk. --- lib/tasks/typescript.rake | 54 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 lib/tasks/typescript.rake diff --git a/lib/tasks/typescript.rake b/lib/tasks/typescript.rake new file mode 100644 index 000000000..c2c70f6c6 --- /dev/null +++ b/lib/tasks/typescript.rake @@ -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