Class: Vidispine::API::Client::Requests::BaseRequest
- Inherits:
-
Object
- Object
- Vidispine::API::Client::Requests::BaseRequest
show all
- Defined in:
- lib/vidispine/api/client/requests/base_request.rb
Direct Known Subclasses
CollectionAccessAdd, CollectionAccessDelete, CollectionMetadataSet, ImportPlaceholder, ImportPlaceholderItem, ImportSidecarFile, ImportUsingURI, ItemAccessAdd, ItemAccessDelete, ItemDelete, ItemExport, ItemMetadataGet, ItemMetadataSet, ItemTranscode, ItemsSearch, Search, StorageFileCreate, StorageFileGet, StorageFilesGet
Constant Summary
collapse
- HTTP_METHOD =
:get
- HTTP_BASE_PATH =
Not used, using client.api_endpoint_prefix instead
'/API/'
- HTTP_PATH =
''
- HTTP_SUCCESS_CODE =
'200'
- DEFAULT_PARAMETER_SEND_IN_VALUE =
:query
- PARAMETERS =
[ ]
Attribute Readers collapse
Instance Attribute Summary collapse
Attribute Readers
collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(args = { }, options = { }) ⇒ BaseRequest
Returns a new instance of BaseRequest.
85
86
87
88
89
90
|
# File 'lib/vidispine/api/client/requests/base_request.rb', line 85
def initialize(args = { }, options = { })
@initial_arguments = args.dup
@options = options.dup
after_initialize
end
|
Instance Attribute Details
#arguments ⇒ Object
Returns the value of attribute arguments.
20
21
22
|
# File 'lib/vidispine/api/client/requests/base_request.rb', line 20
def arguments
@arguments
end
|
#body ⇒ Object
160
161
162
|
# File 'lib/vidispine/api/client/requests/base_request.rb', line 160
def body
body_arguments.empty? ? nil : body_arguments
end
|
#client ⇒ Object
Returns the value of attribute client.
20
21
22
|
# File 'lib/vidispine/api/client/requests/base_request.rb', line 20
def client
@client
end
|
#default_parameter_send_in_value ⇒ Object
Returns the value of attribute default_parameter_send_in_value.
20
21
22
|
# File 'lib/vidispine/api/client/requests/base_request.rb', line 20
def default_parameter_send_in_value
@default_parameter_send_in_value
end
|
#initial_arguments ⇒ Object
Returns the value of attribute initial_arguments.
20
21
22
|
# File 'lib/vidispine/api/client/requests/base_request.rb', line 20
def initial_arguments
@initial_arguments
end
|
#missing_required_arguments ⇒ Object
Returns the value of attribute missing_required_arguments.
20
21
22
|
# File 'lib/vidispine/api/client/requests/base_request.rb', line 20
def missing_required_arguments
@missing_required_arguments
end
|
#options ⇒ Object
Returns the value of attribute options.
20
21
22
|
# File 'lib/vidispine/api/client/requests/base_request.rb', line 20
def options
@options
end
|
#parameters ⇒ Object
180
181
182
|
# File 'lib/vidispine/api/client/requests/base_request.rb', line 180
def parameters
@parameters ||= self.class::PARAMETERS.dup
end
|
#path ⇒ Object
Also known as:
path_with_matrix
The URI Path including “matrix” arguments
185
186
187
|
# File 'lib/vidispine/api/client/requests/base_request.rb', line 185
def path
@path ||= [ path_only ].concat( [*matrix].delete_if { |v| v.respond_to?(:empty?) and v.empty? } ).join('')
end
|
#processed_parameters ⇒ Object
Returns the value of attribute processed_parameters.
20
21
22
|
# File 'lib/vidispine/api/client/requests/base_request.rb', line 20
def processed_parameters
@processed_parameters
end
|
#query ⇒ Object
201
202
203
204
205
|
# File 'lib/vidispine/api/client/requests/base_request.rb', line 201
def query
@query ||= begin
query_arguments.is_a?(Hash) ? (client.http_client.default_query_data.merge(query_arguments)).map { |k,v| "#{CGI.escape(k.to_s).gsub('+', '%20')}=#{CGI.escape(v.respond_to?(:to_s) ? v.to_s : v).gsub('+', '%20')}" }.join('&') : query_arguments
end
end
|
Class Method Details
.normalize_argument_hash_keys(hash) ⇒ Object
25
26
27
28
|
# File 'lib/vidispine/api/client/requests/base_request.rb', line 25
def self.normalize_argument_hash_keys(hash)
return hash unless hash.is_a?(Hash)
Hash[ hash.dup.map { |k,v| [ normalize_parameter_name(k), v ] } ]
end
|
.normalize_parameter_name(name) ⇒ Object
30
31
32
|
# File 'lib/vidispine/api/client/requests/base_request.rb', line 30
def self.normalize_parameter_name(name)
(name || '').respond_to?(:to_s) ? name.to_s.gsub('_', '').gsub('-', '').downcase : name
end
|
.process_parameter(param, args = { }, args_out = { }, missing_required_arguments = [ ], processed_parameters = { }, default_parameter_send_in_value = DEFAULT_PARAMETER_SEND_IN_VALUE, options = { }) ⇒ Object
A method to expose parameter processing
will be placed into this array will be set if the :send_in key is not found
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
|
# File 'lib/vidispine/api/client/requests/base_request.rb', line 59
def self.process_parameter(param, args = { }, args_out = { }, missing_required_arguments = [ ], processed_parameters = { }, default_parameter_send_in_value = DEFAULT_PARAMETER_SEND_IN_VALUE, options = { })
args = normalize_argument_hash_keys(args) || { } if options.fetch(:normalize_argument_hash_keys, false)
_k = param.is_a?(Hash) ? param : { :name => param, :required => false, :send_in => default_parameter_send_in_value }
_k[:send_in] ||= default_parameter_send_in_value
proper_parameter_name = _k[:name]
param_name = normalize_parameter_name(proper_parameter_name)
arg_key = (has_key = args.has_key?(param_name)) ?
param_name :
( (_k[:aliases] || [ ]).map { |a| normalize_parameter_name(a) }.find { |a| has_key = args.has_key?(a) } || param_name )
value = has_key ? args[arg_key] : _k[:default_value]
is_set = has_key || _k.has_key?(:default_value)
processed_parameters[proper_parameter_name] = _k.merge(:value => value, :is_set => is_set)
unless is_set
missing_required_arguments << proper_parameter_name if _k[:required]
else
args_out[proper_parameter_name] = value
end
{ :arguments_out => args_out, :processed_parameters => processed_parameters, :missing_required_arguments => missing_required_arguments }
end
|
.process_parameters(params, args, options = { }) ⇒ Object
34
35
36
37
38
39
40
41
42
43
44
45
|
# File 'lib/vidispine/api/client/requests/base_request.rb', line 34
def self.process_parameters(params, args, options = { })
args = normalize_argument_hash_keys(args) || { }
args_out = options[:arguments_out] || { }
default_parameter_send_in_value = options[:default_parameter_send_in_value] || DEFAULT_PARAMETER_SEND_IN_VALUE
processed_parameters = options[:processed_parameters] || { }
missing_required_arguments = options[:missing_required_arguments] || [ ]
params.each do |param|
process_parameter(param, args, args_out, missing_required_arguments, processed_parameters, default_parameter_send_in_value)
end
{ :arguments_out => args_out, :processed_parameters => processed_parameters, :missing_required_arguments => missing_required_arguments }
end
|
Instance Method Details
#after_initialize ⇒ Object
92
93
94
95
96
|
# File 'lib/vidispine/api/client/requests/base_request.rb', line 92
def after_initialize
reset_attributes
process_parameters
end
|
#after_process_parameters ⇒ Object
138
139
140
|
# File 'lib/vidispine/api/client/requests/base_request.rb', line 138
def after_process_parameters
end
|
#base_path ⇒ Object
152
153
154
|
# File 'lib/vidispine/api/client/requests/base_request.rb', line 152
def base_path
@base_path ||= client.api_endpoint_prefix end
|
#before_process_parameters ⇒ Object
134
135
136
|
# File 'lib/vidispine/api/client/requests/base_request.rb', line 134
def before_process_parameters
end
|
#body_arguments ⇒ Object
156
157
158
|
# File 'lib/vidispine/api/client/requests/base_request.rb', line 156
def body_arguments
@body_arguments ||= arguments.dup.delete_if { |k,_| processed_parameters[k][:send_in] != :body }
end
|
#eval_http_path? ⇒ Boolean
168
169
170
|
# File 'lib/vidispine/api/client/requests/base_request.rb', line 168
def eval_http_path?
@eval_http_path
end
|
#http_method ⇒ Object
176
177
178
|
# File 'lib/vidispine/api/client/requests/base_request.rb', line 176
def http_method
@http_method ||= self.class::HTTP_METHOD
end
|
#http_path ⇒ Object
172
173
174
|
# File 'lib/vidispine/api/client/requests/base_request.rb', line 172
def http_path
@http_path ||= self.class::HTTP_PATH end
|
#http_success_code ⇒ Object
144
145
146
|
# File 'lib/vidispine/api/client/requests/base_request.rb', line 144
def http_success_code
@http_success_code
end
|
#matrix ⇒ Object
211
212
213
|
# File 'lib/vidispine/api/client/requests/base_request.rb', line 211
def matrix
@matrix = matrix_arguments.map { |k,v| ";#{CGI.escape(k.to_s).gsub('+', '%20')}=#{CGI.escape(v.to_s).gsub('+', '%20')}" }.join('')
end
|
#matrix_arguments ⇒ Object
215
216
217
|
# File 'lib/vidispine/api/client/requests/base_request.rb', line 215
def matrix_arguments
@matrix_arguments ||= arguments.dup.delete_if { |k,_| processed_parameters[k][:send_in] != :matrix }
end
|
#path_arguments ⇒ Object
190
191
192
193
194
195
|
# File 'lib/vidispine/api/client/requests/base_request.rb', line 190
def path_arguments
@path_arguments ||= Hash[
arguments.dup.delete_if { |k, _| processed_parameters[k][:send_in] != :path }.
map { |k,v| [ k, CGI.escape(v.respond_to?(:to_s) ? v.to_s : '').gsub('+', '%20') ] }
]
end
|
#path_only ⇒ Object
197
198
199
|
# File 'lib/vidispine/api/client/requests/base_request.rb', line 197
def path_only
@path_only ||= File.join(base_path, (eval_http_path? ? eval(%("#{http_path}"), binding, __FILE__, __LINE__) : http_path))
end
|
#process_parameters(params = parameters, args = @initial_arguments, options = @options) ⇒ Object
126
127
128
129
130
131
132
|
# File 'lib/vidispine/api/client/requests/base_request.rb', line 126
def process_parameters(params = parameters, args = @initial_arguments, options = @options)
before_process_parameters unless options.fetch(:skip_before_process_parameters, false)
self.class.process_parameters(params, args, options.merge(:processed_parameters => processed_parameters, :missing_required_arguments => missing_required_arguments, :default_parameter_send_in_value => default_parameter_send_in_value, :arguments_out => arguments))
after_process_parameters unless options.fetch(:skip_after_process_parameters, false)
end
|
#query_arguments ⇒ Object
207
208
209
|
# File 'lib/vidispine/api/client/requests/base_request.rb', line 207
def query_arguments
@query_arguments ||= arguments.dup.delete_if { |k,_| processed_parameters[k][:send_in] != :query }
end
|
#reset_attributes ⇒ Object
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
# File 'lib/vidispine/api/client/requests/base_request.rb', line 98
def reset_attributes
@client = options[:client]
@missing_required_arguments = [ ]
@default_parameter_send_in_value = options[:default_parameter_send_in_value] || self.class::DEFAULT_PARAMETER_SEND_IN_VALUE
@processed_parameters = { }
@arguments = { }
@eval_http_path = options.fetch(:eval_http_path, true)
@base_path = options[:base_path]
@parameters = options[:parameters]
@http_method = options[:http_method]
@http_path = options[:http_path] ||= options[:path_raw]
@http_success_code = options[:http_success_code] ||= HTTP_SUCCESS_CODE
@path = options[:path]
@path_arguments = nil
@path_only = nil
@matrix = options[:matrix]
@matrix_arguments = nil
@query = options[:query]
@query_arguments = nil
@body = options[:body]
@body_arguments = nil
end
|
#success? ⇒ Boolean
223
224
225
226
|
# File 'lib/vidispine/api/client/requests/base_request.rb', line 223
def success?
_response = client.http_client.response
_response && (_response.code == http_success_code)
end
|
#uri_request_path ⇒ Object
219
220
221
|
# File 'lib/vidispine/api/client/requests/base_request.rb', line 219
def uri_request_path
[ path_with_matrix ].concat( [*query].delete_if { |v| v.respond_to?(:empty?) and v.empty? } ).join('?')
end
|