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
- #build_query_string(params, fully_encode = true, sanitize = false) ⇒ Object
- #build_url(verb, host, path, params, scrub = false) ⇒ Object
- #each_qs_param(prefix, value, fully_encode = true, &block) ⇒ Object
- #multipart?(params) ⇒ Boolean
- #sanitize?(key) ⇒ Boolean
- #serialize_multipart(params, boundary = Multipartable::DEFAULT_BOUNDARY) ⇒ Object
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
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
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 |