Как изменить метод get ruby ​​rest-client - PullRequest
0 голосов
/ 12 мая 2019

Я использую гем Ruby rest-client для вызова API Google и хочу сократить часть URL.

Текущий код:

class GoogleTimezoneGetter

  def initialize(lat:, lon:)
    @lat = lat
    @lon = lon
    @time_stamp = Time.new.to_i
  end

  def response
    response = RestClient.get "https://maps.googleapis.com/maps/api/timezone/json?location=#{@lat},#{@lon}&timestamp=#{@time_stamp}&key=#{GOOGLE_TIME_ZONE_KEY}"
    JSON.parse(response)
  end

  def time_zone
    response["timeZoneId"]
  end

end

Я бы хотел бытьв состоянии сделать что-то вроде:

def response
    response = RestClient.get (uri, params) 
    JSON.parse(response)
end 

Но я изо всех сил пытаюсь выяснить, как это сделать.

Чтобы сделать класс немного более аккуратным, я хотел бы разбить URLвниз в «URI» и «Params».Я думаю, что гем rest-client позволяет вам сделать это, но я не могу найти конкретные примеры.

Я хочу поместить {@lat},#{@lon}&timestamp=#{@time_stamp}&key=#{GOOGLE_TIME_ZONE_KEY}" в метод 'params' и передать его в RestClient.getспособ.

Ответы [ 2 ]

0 голосов
/ 13 мая 2019

Вы проверяли rest-client драгоценный камень readme ?

Они привели конкретный пример по этому поводу (ниже приведен пример из readme)

RestClient.get 'http://example.com/resource', {params: {id: 50, 'foo' => 'bar'}}

В вашем случае должно быть что-то вроде этого

def url
  "https://maps.googleapis.com/maps/api/timezone/json"
end

def params
  {
    locations: "#{@lat},#{@lon}",
    timestamp: @time_stamp,
    key: GOOGLE_TIME_ZONE_KEY
  }
end

def response
  response = RestClient.get(url, params: params)
  JSON.parse(response)
end
0 голосов
/ 12 мая 2019

rest-client уже принимает хеш для параметров. Если вы предпочитаете кучу маленьких методов в своем классе, вы можете разделить каждый шаг на метод и сохранить все читаемым.

class GoogleTimezoneGetter

  def initialize(lat:, lon:)
    @lat = lat
    @lon = lon
    @time_stamp = Time.new.to_i
  end

  def response
    response = RestClient.get gtz_url, params: { gtz_params }
    JSON.parse(response)
  end

  def time_zone
    response["timeZoneId"]
  end

  def gtz_url
    "https://maps.googleapis.com/maps/api/timezone/json"
  end

  def gtz_params
    return {location: "#{@lat},#{@lon}", timestamp: @time_stamp, key: GOOGLE_TIME_ZONE_KEY }
  end
end
...