class Swgr2rb::EndpointClassesGenerator

EndpointClassesGenerator calls a component that generates an array of configs for endpoint models from Swagger JSON, and then invokes Ruby file generators for each config.

Public Class Methods

new(swagger_endpoint_path, params) click to toggle source
# File lib/endpoint_class_generator/endpoint_classes_generator.rb, line 12
def initialize(swagger_endpoint_path, params)
  @swagger_endpoint_path = swagger_endpoint_path
  @params = params
end

Public Instance Methods

generate_endpoint_classes() click to toggle source
# File lib/endpoint_class_generator/endpoint_classes_generator.rb, line 17
def generate_endpoint_classes
  EndpointClassConfigGenerator.new(@swagger_endpoint_path)
                              .generate_configs.map do |endpoint_config|
    endpoint_class_name = generate_class_name(endpoint_config.operation_id)
    SchemaModuleGenerator.new(endpoint_config,
                              generate_schema_opts(endpoint_class_name))
                         .generate_file

    EndpointClassGenerator.new(endpoint_config,
                               generate_class_opts(endpoint_class_name))
                          .generate_file
  end
end

Private Instance Methods

base_config(name) click to toggle source
# File lib/endpoint_class_generator/endpoint_classes_generator.rb, line 69
def base_config(name)
  {
    name: name,
    path: File.join('..', RubyFileGeneratorConstants::CAMEL_CASE_TO_SNAKE_CASE.call(name))
  }
end
generate_class_name(operation_id) click to toggle source
# File lib/endpoint_class_generator/endpoint_classes_generator.rb, line 33
def generate_class_name(operation_id)
  operation_id.gsub('_', '').split(/([[:upper:]][[:lower:]]+)/)
              .select(&:present?).map(&:capitalize).join
end
generate_class_opts(class_name) click to toggle source
# File lib/endpoint_class_generator/endpoint_classes_generator.rb, line 49
def generate_class_opts(class_name)
  {
    target_dir: File.join(@params[:target_dir], @params[:component]),
    name: class_name,
    modules_to_include: [base_config('BaseEndpointObjectModelMethods'),
                         generate_config_for_schema(class_name)].compact,
    parent_class: base_config('BaseEndpointObjectModel'),
    update_only: @params[:update_only],
    rewrite: false
  }
end
generate_config_for_schema(class_name) click to toggle source
# File lib/endpoint_class_generator/endpoint_classes_generator.rb, line 61
def generate_config_for_schema(class_name)
  {
    name: "#{class_name}Schema",
    path: File.join('object_model_schemas',
                    RubyFileGeneratorConstants::CAMEL_CASE_TO_SNAKE_CASE.call("#{class_name}Schema"))
  }
end
generate_schema_opts(endpoint_class_name) click to toggle source
# File lib/endpoint_class_generator/endpoint_classes_generator.rb, line 38
def generate_schema_opts(endpoint_class_name)
  {
    target_dir: File.join(@params[:target_dir],
                          @params[:component],
                          'object_model_schemas'),
    name: "#{endpoint_class_name}Schema",
    update_only: @params[:update_only],
    rewrite: @params[:rewrite_schemas]
  }
end