#!/usr/bin/env ruby # A script to automatically generate SQL files from an interface definition. # To be called like this: sql-template-renderer interface.yaml sql-template.erb require 'yaml' require 'erb' class SqlTemplateRenderer DATASERVICES_CLIENT_SCHEMA = 'cdb_dataservices_client' DATASERVICES_SERVER_SCHEMA = 'cdb_dataservices_server' def initialize(template_file, function_signature) @function_signature = function_signature @template = File.read(template_file) end def render ERB.new(@template).result(binding) end def name @function_signature['name'] end def return_type @function_signature['return_type'] end def multi_field @function_signature['multi_field'] end def multi_row @function_signature['multi_row'] end def no_params @function_signature['no_params'] end def user_config_key @function_signature['user_config_key'] end def geocoder_config_key @function_signature['geocoder_config_key'] end def params @function_signature['params'].reject(&:empty?).map { |p| "#{p['name']}"}.join(', ') end def params_with_type @function_signature['params'].reject(&:empty?).map { |p| "#{p['name']} #{p['type']}" }.join(', ') end def params_with_type_and_default parameters = @function_signature['params'].reject(&:empty?).map do |p| if not p['default'].nil? "#{p['name']} #{p['type']} DEFAULT #{p['default']}" else "#{p['name']} #{p['type']}" end end return parameters.join(', ') end end if ARGV.length != 2 then puts "Usage: sql-template-renderer " exit end interface_source_file = ARGV[0] template_file = ARGV[1] functions = YAML.load(File.open(interface_source_file)) functions.each do |f| puts SqlTemplateRenderer.new(template_file, f).render end