Done with generator

pull/607/head
Rick Carlino 2018-01-08 10:14:21 -06:00
parent 7f22c79ad4
commit 26f3a68ff1
4 changed files with 186 additions and 11 deletions

View File

@ -6,19 +6,21 @@ class Typescript
"bigint" => "number",
"boolean" => "boolean",
"integer" => "number",
"timestamp without time zone" => "string"
"timestamp without time zone" => "string",
"character varying" => "string",
}
INTERFACE_TPL = <<~END
/** THIS INTERFACE IS AUTO-GENERATED BY A SCRIPT.
DO NOT MANUALLY MODIFY, CHANGES WILL BE
OVERWRITTEN WHEN DATABASE SCHEMA CHANGES */
OVERWRITTEN WHEN DATABASE SCHEMA CHANGES
If you do need to change this file, first write a database migration,
then run `rake typescript:interfaces` */
interface <%= interface_name %> {
<% fields.each do |field| %>
<%= field.head %>: <%= field.tail %>;
<% end %>
}
<% fields.each do |field| %> <%= field.head %>: <%= field.tail %>;
<% end %>}
END
# CONFIG_KLASS = [ FbosConfig, WebAppConfig, FirmwareConfig ]
@ -26,8 +28,9 @@ class Typescript
def self.generate(klass)
@klass = klass
results = ERB.new(INTERFACE_TPL).result(binding)
puts results
# File.write()
File.open("webpack/config_storage/#{klass.table_name}.ts", "w") do |f|
f.write(results)
end
end
def self.klass
@ -35,12 +38,13 @@ class Typescript
end
def self.interface_name
@interface_name ||= klass.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!"
klass.columns.map do |col|
t = col.sql_type_metadata.sql_type
col_type = TYPE_MAPPING[t] or raise "NO! #{t.inspect} is not in TYPE_MAPPING"
Pair[col.name, col_type]
end
end
@ -50,5 +54,7 @@ namespace :typescript do
desc "This task does nothing"
task :interfaces => :environment do
Typescript.generate(WebAppConfig)
Typescript.generate(FirmwareConfig)
Typescript.generate(FbosConfig)
end
end

View File

@ -0,0 +1,25 @@
/** THIS INTERFACE IS AUTO-GENERATED BY A SCRIPT.
DO NOT MANUALLY MODIFY, CHANGES WILL BE
OVERWRITTEN WHEN DATABASE SCHEMA CHANGES
If you do need to change this file, first write a database migration,
then run `rake typescript:interfaces` */
interface FbosConfig {
id: number;
device_id: number;
created_at: string;
updated_at: string;
auto_sync: boolean;
beta_opt_in: boolean;
disable_factory_reset: boolean;
firmware_input_log: boolean;
firmware_output_log: boolean;
sequence_body_log: boolean;
sequence_complete_log: boolean;
sequence_init_log: boolean;
arduino_debug_messages: number;
network_not_found_timer: number;
os_auto_update: number;
firmware_hardware: string;
}

View File

@ -0,0 +1,103 @@
/** THIS INTERFACE IS AUTO-GENERATED BY A SCRIPT.
DO NOT MANUALLY MODIFY, CHANGES WILL BE
OVERWRITTEN WHEN DATABASE SCHEMA CHANGES
If you do need to change this file, first write a database migration,
then run `rake typescript:interfaces` */
interface FirmwareConfig {
id: number;
device_id: number;
created_at: string;
updated_at: string;
encoder_enabled_x: number;
encoder_enabled_y: number;
encoder_enabled_z: number;
encoder_invert_x: number;
encoder_invert_y: number;
encoder_invert_z: number;
encoder_missed_steps_decay_x: number;
encoder_missed_steps_decay_y: number;
encoder_missed_steps_decay_z: number;
encoder_missed_steps_max_x: number;
encoder_missed_steps_max_y: number;
encoder_missed_steps_max_z: number;
encoder_scaling_x: number;
encoder_scaling_y: number;
encoder_scaling_z: number;
encoder_type_x: number;
encoder_type_y: number;
encoder_type_z: number;
encoder_use_for_pos_x: number;
encoder_use_for_pos_y: number;
encoder_use_for_pos_z: number;
movement_axis_nr_steps_x: number;
movement_axis_nr_steps_y: number;
movement_axis_nr_steps_z: number;
movement_enable_endpoints_x: number;
movement_enable_endpoints_y: number;
movement_enable_endpoints_z: number;
movement_home_at_boot_x: number;
movement_home_at_boot_y: number;
movement_home_at_boot_z: number;
movement_home_spd_x: number;
movement_home_spd_y: number;
movement_home_spd_z: number;
movement_home_up_x: number;
movement_home_up_y: number;
movement_home_up_z: number;
movement_invert_endpoints_x: number;
movement_invert_endpoints_y: number;
movement_invert_endpoints_z: number;
movement_invert_motor_x: number;
movement_invert_motor_y: number;
movement_invert_motor_z: number;
movement_keep_active_x: number;
movement_keep_active_y: number;
movement_keep_active_z: number;
movement_max_spd_x: number;
movement_max_spd_y: number;
movement_max_spd_z: number;
movement_min_spd_x: number;
movement_min_spd_y: number;
movement_min_spd_z: number;
movement_secondary_motor_invert_x: number;
movement_secondary_motor_x: number;
movement_step_per_mm_x: number;
movement_step_per_mm_y: number;
movement_step_per_mm_z: number;
movement_steps_acc_dec_x: number;
movement_steps_acc_dec_y: number;
movement_steps_acc_dec_z: number;
movement_stop_at_home_x: number;
movement_stop_at_home_y: number;
movement_stop_at_home_z: number;
movement_stop_at_max_x: number;
movement_stop_at_max_y: number;
movement_stop_at_max_z: number;
movement_timeout_x: number;
movement_timeout_y: number;
movement_timeout_z: number;
param_config_ok: number;
param_e_stop_on_mov_err: number;
param_mov_nr_retry: number;
param_test: number;
param_use_eeprom: number;
param_version: number;
pin_guard_1_active_state: number;
pin_guard_1_pin_nr: number;
pin_guard_1_time_out: number;
pin_guard_2_active_state: number;
pin_guard_2_pin_nr: number;
pin_guard_2_time_out: number;
pin_guard_3_active_state: number;
pin_guard_3_pin_nr: number;
pin_guard_3_time_out: number;
pin_guard_4_active_state: number;
pin_guard_4_pin_nr: number;
pin_guard_4_time_out: number;
pin_guard_5_active_state: number;
pin_guard_5_pin_nr: number;
pin_guard_5_time_out: number;
status_general: number;
}

View File

@ -0,0 +1,41 @@
/** THIS INTERFACE IS AUTO-GENERATED BY A SCRIPT.
DO NOT MANUALLY MODIFY, CHANGES WILL BE
OVERWRITTEN WHEN DATABASE SCHEMA CHANGES
If you do need to change this file, first write a database migration,
then run `rake typescript:interfaces` */
interface WebAppConfig {
id: number;
device_id: number;
created_at: string;
updated_at: string;
confirm_step_deletion: boolean;
disable_animations: boolean;
disable_i18n: boolean;
display_trail: boolean;
dynamic_map: boolean;
encoder_figure: boolean;
hide_webcam_widget: boolean;
legend_menu_open: boolean;
map_xl: boolean;
raw_encoders: boolean;
scaled_encoders: boolean;
show_spread: boolean;
show_farmbot: boolean;
show_plants: boolean;
show_points: boolean;
x_axis_inverted: boolean;
y_axis_inverted: boolean;
z_axis_inverted: boolean;
bot_origin_quadrant: number;
zoom_level: number;
success_log: number;
busy_log: number;
warn_log: number;
error_log: number;
info_log: number;
fun_log: number;
debug_log: number;
successs_log: number;
}