如何重构 ruby rest-client get 方法
How to refactor ruby rest-client get method
我正在使用 Rubys rest-client gem 调用 Google API 并希望缩短 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}×tamp=#{@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
但我正在努力寻找如何做到这一点。
为了使 class 更简洁一些,我想将 url 分解为 'uri' 和 'params'。我认为 rest-client gem 允许你这样做,但我找不到具体的例子。
我想把
{@lat},#{@lon}×tamp=#{@time_stamp}&key=#{GOOGLE_TIME_ZONE_KEY}"
进入 'params' 方法并将其传递给 RestClient.get
方法。
rest-client 已经接受参数的散列。如果您更喜欢 class 上的一堆小方法,您可以将每个步骤划分为一个方法并保持所有内容的可读性。
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
你检查过rest-client
gemreadme了吗?
他们确实给出了一个具体的例子(下面的例子引用自自述文件)
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
我正在使用 Rubys rest-client gem 调用 Google API 并希望缩短 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}×tamp=#{@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
但我正在努力寻找如何做到这一点。
为了使 class 更简洁一些,我想将 url 分解为 'uri' 和 'params'。我认为 rest-client gem 允许你这样做,但我找不到具体的例子。
我想把
{@lat},#{@lon}×tamp=#{@time_stamp}&key=#{GOOGLE_TIME_ZONE_KEY}"
进入 'params' 方法并将其传递给 RestClient.get
方法。
rest-client 已经接受参数的散列。如果您更喜欢 class 上的一堆小方法,您可以将每个步骤划分为一个方法并保持所有内容的可读性。
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
你检查过rest-client
gemreadme了吗?
他们确实给出了一个具体的例子(下面的例子引用自自述文件)
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