class GrapeApeRails::API

Public Class Methods

api(name, *args) { || ... } click to toggle source

args:

[0] => version name (e.g. 'v1')
[1] => (optional) an array of cascades (e.g. ['V2', 'V1'])
# File lib/grape_ape_rails/api.rb, line 41
def API.api(name, *args, &block)
  puts "Spinning up Grape API: #{name} ..."
  @gar_api_version = name
  mounts_klass = Class.new(GrapeApeRails::API)
  klass = GrapeApeRails.const_set("#{name}Base", mounts_klass)
  api_key = api_key_from(args)
  api_version = name.underscore.gsub('_','.')
  update_api_version_cascades_map(api_version, args)
  update_api_keys_map(name, api_key)
  yield
  mount mounts_klass
ensure
  if GrapeApeRails.configuration.swagger_documentation
    puts "Swaggering #{api_version} endpoints at /api/docs ..."
    klass.add_swagger_documentation hide_documentation_path: true,
                              api_version: api_version.gsub('.','_'),
                              mount_with_version: true,
                              mount_path: "/api/docs"
  end
end
api_keys_map() click to toggle source
# File lib/grape_ape_rails/api.rb, line 16
def self.api_keys_map
  @api_keys_map ||= {}
end
api_secret_key() click to toggle source
# File lib/grape_ape_rails/api.rb, line 24
def self.api_secret_key
  @api_secret_key
end
api_secret_key=(val) click to toggle source
# File lib/grape_ape_rails/api.rb, line 28
def self.api_secret_key=(val)
  @api_secret_key = val
end
api_version_cascades_map() click to toggle source
# File lib/grape_ape_rails/api.rb, line 20
def self.api_version_cascades_map
  @api_version_cascades ||= {}
end
grape_apis() { || ... } click to toggle source
# File lib/grape_ape_rails/api.rb, line 32
def API.grape_apis(&block)
  res = yield
  include GrapeApeRails::Base
  res
end
grape_mount(resource) click to toggle source
# File lib/grape_ape_rails/api.rb, line 62
def API.grape_mount(resource)
  mounts_klass = "GrapeApeRails::#{@gar_api_version}Base".constantize
  name = "API::#{@gar_api_version}::#{resource.to_s.camelize}"
  puts "  endpoints: #{name}"
  mounts_klass.send(:mount, name.constantize)
rescue NameError => e
  puts "    [ERROR] Could not instantiate API Endpoints at '#{name}'. Maybe you still need to create the class file?"
end

Private Class Methods

api_key_from(args) click to toggle source
# File lib/grape_ape_rails/api.rb, line 74
def api_key_from(args)
  api_key = GrapeApeRails.configuration.api_secret_key
  api_key = args[0] if args[0].present? && args[0].is_a?(String)
  api_key
end
cascades_array_from(args) click to toggle source
# File lib/grape_ape_rails/api.rb, line 90
def cascades_array_from(args)
  return args[0] if args[0].present? && args[0].is_a?(Array)
  return args[1] if args[1].present? && args[1].is_a?(Array)
  return nil
end
update_api_keys_map(name, api_key) click to toggle source
# File lib/grape_ape_rails/api.rb, line 80
def update_api_keys_map(name, api_key)
  GrapeApeRails::API.api_keys_map.merge!({ name.underscore.gsub('_','.') => api_key })
end
update_api_version_cascades_map(api_version, args) click to toggle source
# File lib/grape_ape_rails/api.rb, line 84
def update_api_version_cascades_map(api_version, args)
  return unless arr = cascades_array_from(args)
  cascades = arr.map{ |v| v.underscore.gsub('_','.') }
  GrapeApeRails::API.api_version_cascades_map.merge!({ api_version => cascades })
end