forked from piotrmurach/github
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathparams_hash.rb
More file actions
101 lines (88 loc) · 2.04 KB
/
params_hash.rb
File metadata and controls
101 lines (88 loc) · 2.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# encoding: utf-8
require 'delegate'
require 'base64'
module Github
# Class responsible for holding request parameters
class ParamsHash < DelegateClass(Hash)
include Normalizer
include MimeType
def initialize(hash)
super(normalize!(Hash[hash]))
end
# Create empty hash
#
def self.empty
new({})
end
# Extract and parse media type param
#
# [.version].param[+json]
#
def media
parse(delete('media'))
end
# Return accept header if present
#
def accept
if has_key?('accept')
delete('accept')
elsif has_key?('media')
media
else
nil
end
end
# Extract request data from parameters
#
def data
if has_key?('data') && !self['data'].nil?
return delete('data')
else
return to_hash
end
end
def encoder
if has_key?('encoder') && self['encoder']
return delete('encoder')
else
return {}
end
end
# Any client configuration options
#
def options
opts = has_key?('options') ? delete('options') : {}
headers = opts.fetch(:headers) { {} }
if value = accept
headers[:accept] = value
end
if value = delete('content_type')
headers[:content_type] = value
end
opts[:raw] = has_key?('raw') ? delete('raw') : false
opts[:headers] = headers unless headers.empty?
opts
end
# Update hash with default parameters for non existing keys
#
def merge_default(defaults)
if defaults && !defaults.empty?
defaults.each do |key, value|
self[key] = value unless self.has_key?(key)
end
end
self
end
# Base64 encode string removing newline characters
#
def strict_encode64(key)
value = self[key]
encoded = if Base64.respond_to?(:strict_encode64)
Base64.strict_encode64(value)
else
[value].pack("m0")
end
self[key] = encoded.delete("\n\r")
end
end # ParamsHash
end # Github