module BaiduApi::LbsCloud::V3::RequestBase

Attributes

ak[RW]
sk[RW]

Public Class Methods

included(base) click to toggle source
# File lib/baidu_api/lbs_cloud/v3/request_base.rb, line 8
def self.included(base)
  base.send(:include, HTTParty)
  base.send(:extend, ClassMethods)

  base.instance_eval do
    base_uri "http://api.map.baidu.com/"
    format :json
  end
end
new(ak, sk = nil) click to toggle source
# File lib/baidu_api/lbs_cloud/v3/request_base.rb, line 47
def initialize(ak, sk = nil)
  @ak, @sk = ak, sk
end

Protected Instance Methods

build_query(uri, data) click to toggle source
# File lib/baidu_api/lbs_cloud/v3/request_base.rb, line 67
def build_query(uri, data)
  ak_str = ak.is_a?(Proc) ? ak.call : ak
  sk_str = sk.is_a?(Proc) ? sk.call : sk
  data = data.merge(ak: ak_str)
  query_str = data.sort.map do |key, value|
    "#{key}=#{URI.encode(value.to_s, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))}"
  end.join('&')
  return query_str if sk_str.nil?
  sn = Digest::MD5.hexdigest(ERB::Util.url_encode("#{uri}?#{query_str}#{sk_str}"))
  "#{query_str}&sn=#{sn}"
end
build_uri(action) click to toggle source
# File lib/baidu_api/lbs_cloud/v3/request_base.rb, line 63
def build_uri(action)
  "/#{self.class.module_name}/v3/#{self.class.controller + '/' if self.class.controller}#{action}"
end
request(action, data, method = :get) click to toggle source
# File lib/baidu_api/lbs_cloud/v3/request_base.rb, line 53
def request(action, data, method = :get)
  uri       = build_uri(action)
  query_str = build_query(uri, data)
  if method == :post
    self.class.post(uri, body: query_str)
  else
    self.class.get(uri, query: query_str)
  end
end