読者です 読者をやめる 読者になる 読者になる

Addressable::URI でURLを簡単に生成する (Ruby)

API叩くときにquerystring生成するのって面倒ですが(?つけたり&でつなげたり) Addressable::URI を使うと簡単に生成できます。
 
というのを先ほど知りました。
How to turn a Ruby Hash into HTTP Params - Stack Overflow  

上記リンクがとても分かりやすいのですが今回使用した例。

require 'addressable/uri'
uri = Addressable::URI.parse('https://github.com/trending')

uri.query_values = {l: 'objective-c++', since: 'weekly'}
p uri.query
=> "l=objective-c%2B%2B&since=weekly"
p uri.to_s
=> "https://github.com/trending?l=objective-c%2B%2B&since=weekly"

 

一見よさそうですが

querystringのparameterの一部もしくは全てがnilの場合querystringにパラメータを渡したくないのですが、そこはうまくいきません。
とりあえずこうしました。

        if language or since
          uri.query_values = { l: language, since: since}.delete_if{ |k,v| v.nil? }
        end

んー、これはいまいちだなぁ。monkey patchingしようかしら。


2014/6/18追記

 
勝手に標準添付ライブラリかと思っていましたが、rubygemsでした。
sporkmonger/addressable