#!/usr/bin/env ruby require "./lib/parser" require "byebug" require "yaml" require "json" require 'active_support/inflector' require "fileutils" require "./lib/alula/util" FileUtils.mkdir_p './data/generated' ## This file is used to generate API resource code from imported API docs ## The generated code is _not_ intended to be used directly, it is created ## so that you can manually move the parts you need into the classes you want ## to update. Feel free to modify this as needed to generate your code. resource_files = Dir.glob("./data/resource_fixtures/rest/*.yml") def user_types_to_roles_list(user_type_list) role_list = user_type_list.split(', ') .map{ |user_type| Alula::Util.camelize(user_type) } .map(&:to_sym) return "[#{role_list.map(&:inspect).join(', ')}]" end resource_files.each do |rf| raw = YAML.load_file(rf) parsed = OpenStruct.new(raw) pp rf fields = parsed.fields == false ? [] : parsed.fields.each_with_object([]) do |field, arry| arry << "field :#{Alula::Util.underscore(field['name'])}, type: #{field['name'].match(/date/) ? ":date" : ":string" }, sortable: #{field['sortable'] == 'true'}, filterable: #{field['filterable'] == 'true'}, creatable_by: #{user_types_to_roles_list(field['creatable by'])}, patchable_by: #{user_types_to_roles_list(field['patchable by'])} " end relationships = parsed.relationships == false ? ['# None'] : parsed.relationships.map do |r| "relationship :#{r['name']}, type: :'#{r['type']}', cardinality: '#{r['cardinality']}'" end resource_name = Alula::Util.split_on_word(parsed.name).map(&:singularize) template = <