class Grapethor::Endpoint

Attributes

api_version[R]
app_path[R]
end_desc[R]
end_method[R]
end_name[R]
end_params[R]
end_query[R]
end_query_sample[R]
end_query_with_params[R]
end_resource[R]
request_path[R]
request_path_sample[R]

Public Class Methods

exit_on_failure?() click to toggle source
# File lib/grapethor/generators/endpoint.rb, line 24
def self.exit_on_failure?
  true
end
source_root() click to toggle source
# File lib/grapethor/generators/endpoint.rb, line 28
def self.source_root
  File.join(__dir__, '..')
end

Public Instance Methods

create_endpoint() click to toggle source
# File lib/grapethor/generators/endpoint.rb, line 102
def create_endpoint
  report("Creating new endpoint...") do
    unless File.exist?("#{app_path}/api/#{api_version}/#{end_resource_plural}.rb")
      directory "templates/endpoint/api/\%api_version\%", "#{app_path}/api/#{api_version}"
    end

    insert_into_file "#{app_path}/api/#{api_version}/#{end_resource_plural}.rb",
                     end_content,
                     after: "resource :#{end_resource.pluralize} do\n"

    insert_into_file "#{app_path}/api/#{api_version}/base.rb",
                     "\s\s\s\smount API#{api_version}::#{end_resource.classify.pluralize}\n",
                     before: "\s\s\s\s# mount API#{api_version}::<ResourceOrEndpointClass>\n"

    unless File.exist?("#{app_path}/#{test_dirname}/api/#{api_version}/#{end_resource_plural}_#{test_dirname}.rb")
      directory "templates/endpoint_#{app_test_framework}", app_path
    end

    insert_into_file "#{app_path}/#{test_dirname}/api/#{api_version}/#{end_resource_plural}_#{test_dirname}.rb",
                     end_test_content,
                     after: "\s\s### grapethor works here ###\n"
  end
end
parse_args_and_opts() click to toggle source
# File lib/grapethor/generators/endpoint.rb, line 73
def parse_args_and_opts
  @end_resource          = resource.downcase.singularize
  @end_name              = name.downcase.singularize
  @end_method            = options[:method].upcase
  @end_params            = options[:params]
  @end_query             = options[:query].map { |k, v| [k, v.downcase] }.to_h
  @end_query_with_params = options[:params].merge(options[:query]).map { |k, v| [k, v.downcase] }.to_h
  @api_version           = options[:version].downcase
  @app_path              = options[:path]
end
prepare_endpoint() click to toggle source
# File lib/grapethor/generators/endpoint.rb, line 85
def prepare_endpoint
  prepare_request_path

  prepare_request_path_sample

  @end_desc = options[:desc].empty? ? "#{end_method} #{request_path}" : options[:desc]
end
validate_target_api() click to toggle source
# File lib/grapethor/generators/endpoint.rb, line 94
def validate_target_api
  unless api_version_exists?
    alert "API version '#{api_version}' does not exist!"
    exit
  end
end

Private Instance Methods

api_version_exists?() click to toggle source
# File lib/grapethor/generators/endpoint.rb, line 145
def api_version_exists?
  Dir.exist?("#{app_path}/api/#{api_version}")
end
app_orm() click to toggle source
# File lib/grapethor/generators/endpoint.rb, line 173
def app_orm
  @app_orm ||= config_filename(@app_path)['app_orm']
end
app_test_framework() click to toggle source
# File lib/grapethor/generators/endpoint.rb, line 169
def app_test_framework
  @app_test_framework ||= config_filename(@app_path)['app_test_framework']
end
end_content() click to toggle source
# File lib/grapethor/generators/endpoint.rb, line 150
def end_content
  erb_file = File.join(__dir__, "../templates/endpoint.rb.erb")
  erb_templates = File.read(erb_file)
  ERB.new(erb_templates, nil, '-').result(binding)
end
end_resource_plural() click to toggle source
# File lib/grapethor/generators/endpoint.rb, line 164
def end_resource_plural
  end_resource.pluralize
end
end_test_content() click to toggle source
# File lib/grapethor/generators/endpoint.rb, line 157
def end_test_content
  erb_file = File.join(__dir__, "../templates/endpoint_#{app_test_framework}.rb.erb")
  erb_templates = File.read(erb_file)
  ERB.new(erb_templates, nil, '-').result(binding)
end
param_to_type(param) click to toggle source
# File lib/grapethor/generators/endpoint.rb, line 178
def param_to_type(param)
  ATTRS_MAP.dig(app_orm.to_sym, param.to_sym, :type) || 'Unknown'
end
prepare_request_path() click to toggle source
# File lib/grapethor/generators/endpoint.rb, line 129
def prepare_request_path
  req_path = []
  end_params.each { |k, v| req_path << ":#{k}" } unless end_params.empty?
  req_path << "#{end_name}" unless end_name.empty?
  @request_path = req_path.join('/')
end
prepare_request_path_sample() click to toggle source
# File lib/grapethor/generators/endpoint.rb, line 137
def prepare_request_path_sample
  req_path_sample = []
  end_params.each { |k,v| req_path_sample << sample_value(v, true) } unless end_params.empty?
  req_path_sample << "#{end_name}" unless end_name.empty?
  @request_path_sample = req_path_sample.join('/')
end
sample_value(param, path=false) click to toggle source
# File lib/grapethor/generators/endpoint.rb, line 182
def sample_value(param, path=false)
  val = ATTRS_MAP.dig(app_orm.to_sym, param.to_sym, :sample)
  if path && val.respond_to?(:tr!)
    val.tr!("'", "")
  end
  val || 'unknown'
end