63 lines
1.9 KiB
Ruby
63 lines
1.9 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'active_support/all'
|
|
|
|
class SpaceTraders::Endpoint
|
|
attr_reader :client
|
|
|
|
def initialize(client:)
|
|
@client = client
|
|
end
|
|
|
|
delegate :get, to: :client
|
|
delegate :post, to: :client
|
|
|
|
def self.fills_endpoint_placeholders(raw_endpoint, params, query: false)
|
|
Log.debug("raw_endpoint #{raw_endpoint}")
|
|
mutated = params.reduce(raw_endpoint) do |base, kv|
|
|
Log.debug("endpoint mutate #{base}")
|
|
if base.match?(/:#{kv[0]}\b/)
|
|
base.gsub(/:#{kv[0]}\b/, kv[1])
|
|
elsif query
|
|
join = base.include?("?") ? "&" : "?"
|
|
"#{base}#{join}#{kv[0]}=#{kv[1]}"
|
|
else
|
|
base
|
|
end
|
|
end
|
|
Log.debug("endpoint mutate to #{mutated}")
|
|
mutated
|
|
end
|
|
|
|
def self.define_endpoint(method_name, get: nil, post: nil)
|
|
SpaceTraders::Log.debug("define endpoint #{method_name} to #{get || post}")
|
|
if get
|
|
define_method(method_name) do |params={}, &block|
|
|
endpoint = SpaceTraders::Endpoint.fills_endpoint_placeholders(get || post, params, query: true)
|
|
SpaceTraders::Log.debug("filled_endpoint of #{method_name} to #{endpoint} with #{get || post} and #{params}")
|
|
if block
|
|
get(endpoint: endpoint, &block)
|
|
else
|
|
get(endpoint: endpoint)
|
|
# method get from client(endpoint url get from params)
|
|
end
|
|
end
|
|
elsif post
|
|
define_method(method_name) do |params={}, body=nil, &block|
|
|
endpoint = SpaceTraders::Endpoint.fills_endpoint_placeholders(get || post, params, query: false)
|
|
SpaceTraders::Log.debug("filled_endpoint of #{method_name} to #{endpoint} with #{get || post} and #{params}")
|
|
if block
|
|
post(endpoint: endpoint, body: body, &block)
|
|
else
|
|
post(endpoint: endpoint, body: body)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
Dir['lib/endpoint/*.rb'].each do
|
|
SpaceTraders::Log.warn("load #{_1}")
|
|
load _1
|
|
end
|