class LazyAnt::Endpoint

Endpoint Definition

(in dsl) api :echo do

get '/echo'
param :hello, default: 'world', required: true, rename: 'SHIT_KEY'

end

client.echo(hello: 'test')

> GET '/echo?SHIT_KEY=test'

Public Class Methods

new(*args) click to toggle source
# File lib/lazy_ant/endpoint.rb, line 17
def initialize(*args)
  @query = default_query.merge(args.extract_options!)
  @url = build_url(*args)
end

Protected Class Methods

inherited(child) click to toggle source
# File lib/lazy_ant/endpoint.rb, line 84
def inherited(child)
  child.params = {}
end
param(name, options = {}) click to toggle source
# File lib/lazy_ant/endpoint.rb, line 80
def param(name, options = {})
  params[name] = options
end

Public Instance Methods

execute(connection) click to toggle source
# File lib/lazy_ant/endpoint.rb, line 22
def execute(connection)
  @query = connection.params.merge(@query)
  validate!
  connection.send(verb, @url, renamed_query) do |req|
    req.params.clear if [:put, :post].include?(req.method)
  end
end

Protected Instance Methods

build_url(*args) click to toggle source
# File lib/lazy_ant/endpoint.rb, line 38
def build_url(*args)
  args = Array(args)
  url = path.dup
  arg_names = url.scan(/:([\w_]+)/).map(&:first)
  arg_names.each do |k|
    arg = args.shift
    raise ArgumentError, "missing required key :#{k}" unless arg
    url.gsub!(/:#{k}/, arg.to_s)
  end
  url
end
default_query() click to toggle source
# File lib/lazy_ant/endpoint.rb, line 50
def default_query
  res = {}
  params.each do |k, v|
    res[k] = v[:default] if v[:default]
    res
  end
  res
end
renamed_query() click to toggle source
# File lib/lazy_ant/endpoint.rb, line 59
def renamed_query
  query = @query.dup
  params.each do |k, v|
    if v[:rename]
      query[v[:rename]] = query[k]
      query.delete k
    end
  end
  query
end
validate!() click to toggle source
# File lib/lazy_ant/endpoint.rb, line 32
def validate!
  params.select { |_k, v| v[:required] }.each do |k, _v|
    raise ArgumentError, "params[:#{k}] is required!" unless @query[k]
  end
end