Module: BitBucket::Utils::Url

Included in:
Request::OAuth
Defined in:
lib/bitbucket_rest_api/utils/url.rb

Constant Summary collapse

DEFAULT_QUERY_SEP =
/[&;] */n.freeze
KEY_VALUE_SEP =
'='

Class Method Summary collapse

Class Method Details

.build_query(params) ⇒ Object



21
22
23
24
25
26
27
28
29
# File 'lib/bitbucket_rest_api/utils/url.rb', line 21

def build_query(params)
  params.map do |k, v|
    if v.class == Array
      build_query(v.map { |x| [k, x] })
    else
      v.nil? ? escape(k) : "#{escape(k)}=#{escape(v)}"
    end
  end.join('&')
end

.escape(s) ⇒ Object



13
14
15
# File 'lib/bitbucket_rest_api/utils/url.rb', line 13

def escape(s)
  CGI.escape s.to_s
end

.parse_query(query_string) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/bitbucket_rest_api/utils/url.rb', line 31

def parse_query(query_string)
  return '' if query_string.nil? || query_string.empty?

  params = {}

  query_string.split(DEFAULT_QUERY_SEP).each do |part|
    k, v = part.split(KEY_VALUE_SEP, 2).map { |el| unescape(el) }

    if cur = params[k]
      if cur.class == Array
        params[k] << v
      else
        params[k] = [cur, v]
      end
    else
      params[k] = v
    end
  end
  params
end

.parse_query_for_param(query_string, name) ⇒ Object



52
53
54
55
56
57
58
# File 'lib/bitbucket_rest_api/utils/url.rb', line 52

def parse_query_for_param(query_string, name)
  parse_query(query_string).each do |key, val|
    return val.first if (name == key) && val.is_a?(Array)
    return val if name == key
  end
  nil
end

.unescape(s) ⇒ Object



17
18
19
# File 'lib/bitbucket_rest_api/utils/url.rb', line 17

def unescape(s)
  CGI.unescape s.to_s
end