class DynApiGen::Generator

Constants

RequestDefinition

Public Class Methods

generate(path) click to toggle source
# File lib/dyn_api_gen/generator.rb, line 12
def self.generate(path)
  new(path).generate
end
new(openapi_path) click to toggle source
# File lib/dyn_api_gen/generator.rb, line 7
def initialize(openapi_path)
  @openapi_path = openapi_path
  @module = Module.new
end

Public Instance Methods

generate() click to toggle source
# File lib/dyn_api_gen/generator.rb, line 16
def generate
  requests = []

  openapi['paths'].each do |path, endpoints|
    endpoints.each do |verb, detail|
      name = to_underscore(detail.fetch('operationId'))
      parameters = detail.fetch('parameters').map(&Parameter.method(:new))

      detail.fetch('tags').each do |namespace|
        requests << RequestDefinition.new(to_camelcase(namespace), name, verb, path, parameters)
      end
    end
  end

  requests.group_by(&:namespace).each do |namespace, req_definitions|
    namespace_module = Module.new
    puts namespace
    req_definitions.each do |req_def|
      puts "> #{req_def.name}"
      namespace_module.define_singleton_method(req_def.name) do
        Request.new(req_def.to_h)
      end
    end

    @module.send(:const_set, namespace, namespace_module)
    # @module.const_set(namespace, namespace_module)
  end

  @module
end

Private Instance Methods

openapi() click to toggle source
# File lib/dyn_api_gen/generator.rb, line 49
def openapi
  @openapi ||= YAML.load_file(@openapi_path)
end
to_camelcase(str) click to toggle source
# File lib/dyn_api_gen/generator.rb, line 57
def to_camelcase(str)
  str.split('_').map(&:capitalize).join
end
to_underscore(str) click to toggle source
# File lib/dyn_api_gen/generator.rb, line 53
def to_underscore(str)
  str.gsub(/(.)([A-Z])/, '\1_\2').downcase
end