Module: Songkick::Transport::Serialization

Extended by:
Serialization
Included in:
Serialization
Defined in:
lib/songkick/transport/serialization.rb

Constant Summary collapse

SANITIZED_VALUE =
'[REMOVED]'

Instance Method Summary collapse

Instance Method Details

#build_query_string(params, fully_encode = true, sanitize = false) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/songkick/transport/serialization.rb', line 16

def build_query_string(params, fully_encode = true, sanitize = false)
  return params if String === params
  pairs = []
  each_qs_param('', params, fully_encode) do |key, value|
    value = SANITIZED_VALUE if sanitize and sanitize?(key)
    pairs << [key, value]
  end
  if fully_encode
    pairs.map { |p| p.join('=') }.join('&')
  else
    pairs.inject({}) do |hash, pair|
      hash[pair.first] = pair.last
      hash
    end
  end
end

#build_url(verb, host, path, params, scrub = false) ⇒ Object



9
10
11
12
13
14
# File 'lib/songkick/transport/serialization.rb', line 9

def build_url(verb, host, path, params, scrub=false)
  url = host + path
  return url if USE_BODY.include?(verb)
  qs  = build_query_string(params, true, scrub)
  url + (qs == '' ? '' : '?' + qs)
end

#each_qs_param(prefix, value, fully_encode = true, &block) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/songkick/transport/serialization.rb', line 33

def each_qs_param(prefix, value, fully_encode = true, &block)
  case value
  when Array
    value.each { |e| each_qs_param(prefix + "[]", e, fully_encode, &block) }
  when Hash
    value.each do |k,v|
      encoded = fully_encode ? CGI.escape(k.to_s) : k.to_s
      key = (prefix == '') ? encoded : prefix + "[#{encoded}]"
      each_qs_param(key, v, fully_encode, &block)
    end
  when Transport::IO
    block.call(prefix, value)
  else
    encoded = fully_encode ? CGI.escape(value.to_s) : value.to_s
    block.call(prefix, encoded)
  end
end

#multipart?(params) ⇒ Boolean

Returns:

  • (Boolean)


51
52
53
54
55
56
57
# File 'lib/songkick/transport/serialization.rb', line 51

def multipart?(params)
  case params
  when Hash  then params.any? { |k,v| multipart? v }
  when Array then params.any? { |e|   multipart? e }
  else Transport::IO === params
  end
end

#sanitize?(key) ⇒ Boolean

Returns:

  • (Boolean)


59
60
61
# File 'lib/songkick/transport/serialization.rb', line 59

def sanitize?(key)
  Transport.sanitized_params.any? { |param| param === key }
end

#serialize_multipart(params, boundary = Multipartable::DEFAULT_BOUNDARY) ⇒ Object



63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/songkick/transport/serialization.rb', line 63

def serialize_multipart(params, boundary = Multipartable::DEFAULT_BOUNDARY)
  params = build_query_string(params, false)

  parts = params.map { |k,v| Parts::Part.new(boundary, k, v) }
  parts << Parts::EpiloguePart.new(boundary)
  ios = parts.map { |p| p.to_io }

  {
    :content_type   => "multipart/form-data; boundary=#{boundary}",
    :content_length => parts.inject(0) { |sum,i| sum + i.length }.to_s,
    :body           => CompositeReadIO.new(*ios).read
  }
end