ubiquity-mediasilo-api-v3 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +15 -0
- data/Gemfile +6 -0
- data/LICENSE.txt +22 -0
- data/README.md +100 -0
- data/Rakefile +2 -0
- data/bin/ubiquity-mediasilo-api-v3 +26 -0
- data/lib/ubiquity/cli.rb +127 -0
- data/lib/ubiquity/mediasilo/api/v3.rb +11 -0
- data/lib/ubiquity/mediasilo/api/v3/cli.rb +94 -0
- data/lib/ubiquity/mediasilo/api/v3/client.rb +712 -0
- data/lib/ubiquity/mediasilo/api/v3/client/paginator.rb +133 -0
- data/lib/ubiquity/mediasilo/api/v3/client/requests.rb +18 -0
- data/lib/ubiquity/mediasilo/api/v3/client/requests/asset_copy_to_folder.rb +19 -0
- data/lib/ubiquity/mediasilo/api/v3/client/requests/asset_copy_to_project.rb +19 -0
- data/lib/ubiquity/mediasilo/api/v3/client/requests/asset_create.rb +25 -0
- data/lib/ubiquity/mediasilo/api/v3/client/requests/asset_delete.rb +15 -0
- data/lib/ubiquity/mediasilo/api/v3/client/requests/asset_get_by_id.rb +14 -0
- data/lib/ubiquity/mediasilo/api/v3/client/requests/asset_move_to_folder.rb +16 -0
- data/lib/ubiquity/mediasilo/api/v3/client/requests/asset_move_to_project.rb +16 -0
- data/lib/ubiquity/mediasilo/api/v3/client/requests/assets_get.rb +56 -0
- data/lib/ubiquity/mediasilo/api/v3/client/requests/assets_get_by_folder_id.rb +14 -0
- data/lib/ubiquity/mediasilo/api/v3/client/requests/assets_get_by_project_id.rb +14 -0
- data/lib/ubiquity/mediasilo/api/v3/client/requests/base_request.rb +250 -0
- data/lib/ubiquity/mediasilo/api/v3/client/requests/batch.rb +20 -0
- data/lib/ubiquity/mediasilo/api/v3/client/requests/project_create.rb +15 -0
- data/lib/ubiquity/mediasilo/api/v3/client/requests/quicklink_create.rb +54 -0
- data/lib/ubiquity/mediasilo/api/v3/client/requests/quicklink_share.rb +32 -0
- data/lib/ubiquity/mediasilo/api/v3/http_client.rb +259 -0
- data/lib/ubiquity/mediasilo/api/v3/utilities.rb +1145 -0
- data/lib/ubiquity/mediasilo/api/v3/version.rb +9 -0
- data/ubiquity-mediasilo-api-v3.gemspec +23 -0
- metadata +104 -0
@@ -0,0 +1,133 @@
|
|
1
|
+
class Ubiquity::MediaSilo::API::V3::Client::Paginator
|
2
|
+
|
3
|
+
attr_accessor :api_client
|
4
|
+
|
5
|
+
attr_reader :total_results, :last_page_number, :next_page_number, :prev_page_number, :page_size
|
6
|
+
|
7
|
+
def initialize(api_client)
|
8
|
+
@api_client = api_client
|
9
|
+
|
10
|
+
process_response
|
11
|
+
end
|
12
|
+
|
13
|
+
def logger
|
14
|
+
api_client.logger
|
15
|
+
end
|
16
|
+
|
17
|
+
def http_client
|
18
|
+
api_client.http_client
|
19
|
+
end
|
20
|
+
|
21
|
+
def process_response
|
22
|
+
http_response = http_client.response
|
23
|
+
|
24
|
+
@total_results = http_response['total-results']
|
25
|
+
@paginated = !!total_results
|
26
|
+
|
27
|
+
process_link_header(http_response['link']) if paginated?
|
28
|
+
end
|
29
|
+
|
30
|
+
def process_link_header(link)
|
31
|
+
links = link.split(',')
|
32
|
+
@next_page_number = nil
|
33
|
+
@prev_page_number = nil
|
34
|
+
|
35
|
+
links.map! do |l|
|
36
|
+
href, rel = l.split('; ')
|
37
|
+
rel = rel.match(/"(\w*)/)[1]
|
38
|
+
href = href.match(/<(.*)>/)[1]
|
39
|
+
_, query = href.split('?')
|
40
|
+
query_as_hash = Hash[ query.split('&').map { |v| v.split('=') } ]
|
41
|
+
@page_size = query_as_hash['_pageSize']
|
42
|
+
|
43
|
+
case rel
|
44
|
+
when 'next'
|
45
|
+
@next_page_number = query_as_hash['_page']
|
46
|
+
@next_page_href = href
|
47
|
+
when 'last'
|
48
|
+
@last_page_number = query_as_hash['_page']
|
49
|
+
@last_page_href = href
|
50
|
+
when 'prev'
|
51
|
+
@prev_page_number = query_as_hash['_page']
|
52
|
+
@prev_page_href = href
|
53
|
+
end
|
54
|
+
|
55
|
+
[ rel, href ]
|
56
|
+
end
|
57
|
+
@has_next_page = !!@next_page_number
|
58
|
+
@has_prev_page = !!@prev_page_number
|
59
|
+
|
60
|
+
Hash[links]
|
61
|
+
end
|
62
|
+
|
63
|
+
def request
|
64
|
+
@request ||= api_client.request
|
65
|
+
end
|
66
|
+
|
67
|
+
def request_args_out
|
68
|
+
@request_args_out ||= request.initial_arguments.dup
|
69
|
+
end
|
70
|
+
|
71
|
+
def request_options_out
|
72
|
+
@request_options_out ||= { :client => api_client }.merge request.initial_options.dup
|
73
|
+
end
|
74
|
+
|
75
|
+
def paginated?
|
76
|
+
@paginated
|
77
|
+
end
|
78
|
+
|
79
|
+
def next_page?
|
80
|
+
@has_next_page
|
81
|
+
end
|
82
|
+
|
83
|
+
def next_page_get(_next_page_number = @next_page_number)
|
84
|
+
page_get(_next_page_number)
|
85
|
+
end
|
86
|
+
|
87
|
+
def page_get(page_number)
|
88
|
+
logger.debug { "Getting Page #{page_number} of #{last_page_number}" }
|
89
|
+
new_request = request.class.new(request_args_out.merge('_page' => page_number), request_options_out)
|
90
|
+
_response = new_request.execute
|
91
|
+
process_response
|
92
|
+
_response
|
93
|
+
end
|
94
|
+
|
95
|
+
def pages_get(pages, options = { })
|
96
|
+
consolidate = options.fetch(:consolidate, true)
|
97
|
+
pages = pages.to_a if pages.respond_to?(:to_a)
|
98
|
+
pages_out = pages.map { |v| page_get(v) }
|
99
|
+
pages_out.flatten! if consolidate
|
100
|
+
pages_out
|
101
|
+
end
|
102
|
+
|
103
|
+
def prev_page?
|
104
|
+
@has_prev_page
|
105
|
+
end
|
106
|
+
|
107
|
+
def prev_page_get(_prev_page_number = @prev_page_number)
|
108
|
+
return [ ] unless paginated?
|
109
|
+
page_get(_prev_page_number)
|
110
|
+
end
|
111
|
+
|
112
|
+
def include_remaining_pages
|
113
|
+
response = api_client.response.dup
|
114
|
+
response.concat(remaining_pages_get)
|
115
|
+
end
|
116
|
+
|
117
|
+
def remaining_pages_get
|
118
|
+
return [ ] unless paginated? && next_page?
|
119
|
+
_next_page_number = @next_page_number
|
120
|
+
remaining_results = [ ]
|
121
|
+
|
122
|
+
loop do
|
123
|
+
response = next_page_get(_next_page_number)
|
124
|
+
break unless response.is_a?(Array)
|
125
|
+
remaining_results.concat(response)
|
126
|
+
|
127
|
+
break unless next_page?
|
128
|
+
_next_page_number = next_page_number
|
129
|
+
end
|
130
|
+
remaining_results
|
131
|
+
end
|
132
|
+
|
133
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'ubiquity/mediasilo/api/v3/client/requests/base_request'
|
2
|
+
|
3
|
+
require 'ubiquity/mediasilo/api/v3/client/requests/asset_copy_to_folder'
|
4
|
+
require 'ubiquity/mediasilo/api/v3/client/requests/asset_copy_to_project'
|
5
|
+
require 'ubiquity/mediasilo/api/v3/client/requests/asset_create'
|
6
|
+
require 'ubiquity/mediasilo/api/v3/client/requests/asset_delete'
|
7
|
+
require 'ubiquity/mediasilo/api/v3/client/requests/asset_get_by_id'
|
8
|
+
require 'ubiquity/mediasilo/api/v3/client/requests/asset_move_to_folder'
|
9
|
+
require 'ubiquity/mediasilo/api/v3/client/requests/asset_move_to_project'
|
10
|
+
|
11
|
+
require 'ubiquity/mediasilo/api/v3/client/requests/assets_get'
|
12
|
+
require 'ubiquity/mediasilo/api/v3/client/requests/assets_get_by_folder_id'
|
13
|
+
require 'ubiquity/mediasilo/api/v3/client/requests/assets_get_by_project_id'
|
14
|
+
|
15
|
+
require 'ubiquity/mediasilo/api/v3/client/requests/batch'
|
16
|
+
|
17
|
+
require 'ubiquity/mediasilo/api/v3/client/requests/quicklink_create'
|
18
|
+
require 'ubiquity/mediasilo/api/v3/client/requests/quicklink_share'
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Ubiquity::MediaSilo::API::V3::Client::Requests
|
2
|
+
|
3
|
+
class AssetCopyToFolder < BaseRequest
|
4
|
+
|
5
|
+
HTTP_METHOD = :post
|
6
|
+
HTTP_PATH = '/folders/#{arguments[:destinationFolderId]}/assets/#{arguments[:assetId]}/copy'
|
7
|
+
HTTP_SUCCESS_CODE = 204
|
8
|
+
|
9
|
+
PARAMETERS = [
|
10
|
+
{ :name => :destinationFolderId, :required => true, :aliases => [ :folderid ] },
|
11
|
+
{ :name => :assetId, :required => true },
|
12
|
+
:includeComments,
|
13
|
+
:includeMetadata,
|
14
|
+
:includeTags
|
15
|
+
]
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Ubiquity::MediaSilo::API::V3::Client::Requests
|
2
|
+
|
3
|
+
class AssetCopyToProject < BaseRequest
|
4
|
+
|
5
|
+
HTTP_METHOD = :post
|
6
|
+
HTTP_PATH = '/projects/#{arguments[:destinationProjectId]}/assets/#{arguments[:assetId]}/copy'
|
7
|
+
HTTP_SUCCESS_CODE = 204
|
8
|
+
|
9
|
+
PARAMETERS = [
|
10
|
+
{ :name => :destinationProjectId, :required => true, :aliases => [ :projectid ] },
|
11
|
+
{ :name => :assetId, :required => true },
|
12
|
+
:includeComments,
|
13
|
+
:includeMetadata,
|
14
|
+
:includeTags
|
15
|
+
]
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Ubiquity::MediaSilo::API::V3::Client::Requests
|
2
|
+
|
3
|
+
# @see http://docs.mediasilo.com/v3.0/docs/create-asset
|
4
|
+
class AssetCreate < BaseRequest
|
5
|
+
|
6
|
+
HTTP_METHOD = :post
|
7
|
+
HTTP_PATH = '/assets'
|
8
|
+
DEFAULT_PARAMETER_SEND_IN_VALUE = :body
|
9
|
+
|
10
|
+
PARAMETERS = [
|
11
|
+
{ :name => :projectId, :required => true },
|
12
|
+
:folderId,
|
13
|
+
:title,
|
14
|
+
:description,
|
15
|
+
{ :name => :sourceUrl, :required => true },
|
16
|
+
:isPrivate
|
17
|
+
]
|
18
|
+
|
19
|
+
def after_process_parameters
|
20
|
+
arguments.delete(:folderId) if arguments[:folderId].to_s == '0'
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Ubiquity::MediaSilo::API::V3::Client::Requests
|
2
|
+
|
3
|
+
class AssetDelete < BaseRequest
|
4
|
+
|
5
|
+
HTTP_METHOD = :delete
|
6
|
+
HTTP_PATH = '/assets/#{arguments[:assetId]}'
|
7
|
+
HTTP_SUCCESS_CODE = 204
|
8
|
+
|
9
|
+
PARAMETERS = [
|
10
|
+
{ :name => :assetId, :aliases => [ :id ], :required => true }
|
11
|
+
]
|
12
|
+
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Ubiquity::MediaSilo::API::V3::Client::Requests
|
2
|
+
|
3
|
+
class AssetGetById < BaseRequest
|
4
|
+
|
5
|
+
HTTP_METHOD = :get
|
6
|
+
HTTP_PATH = '/assets/#{arguments[:asset_id]}'
|
7
|
+
|
8
|
+
PARAMETERS = [
|
9
|
+
{ :name => :asset_id, :aliases => [ :id ], :send_in => :path, :required => true },
|
10
|
+
]
|
11
|
+
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Ubiquity::MediaSilo::API::V3::Client::Requests
|
2
|
+
|
3
|
+
class AssetMoveToFolder < BaseRequest
|
4
|
+
|
5
|
+
HTTP_METHOD = :post
|
6
|
+
HTTP_PATH = '/folders/#{arguments[:destinationFolderId]}/assets/#{arguments[:assetId]}/move'
|
7
|
+
HTTP_SUCCESS_CODE = 204
|
8
|
+
|
9
|
+
PARAMETERS = [
|
10
|
+
{ :name => :destinationFolderId, :required => true, :aliases => [ :folderid ] },
|
11
|
+
{ :name => :assetId, :required => true },
|
12
|
+
]
|
13
|
+
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Ubiquity::MediaSilo::API::V3::Client::Requests
|
2
|
+
|
3
|
+
class AssetMoveToProject < BaseRequest
|
4
|
+
|
5
|
+
HTTP_METHOD = :post
|
6
|
+
HTTP_PATH = '/projects/#{arguments[:destinationProjectId]}/assets/#{arguments[:assetId]}/move'
|
7
|
+
HTTP_SUCCESS_CODE = 204
|
8
|
+
|
9
|
+
PARAMETERS = [
|
10
|
+
{ :name => :destinationProjectId, :required => true, :aliases => [ :projectid ] },
|
11
|
+
{ :name => :assetId, :required => true },
|
12
|
+
]
|
13
|
+
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module Ubiquity::MediaSilo::API::V3::Client::Requests
|
2
|
+
|
3
|
+
class AssetsGet < BaseRequest
|
4
|
+
|
5
|
+
HTTP_METHOD = :get
|
6
|
+
HTTP_PATH = '/assets'
|
7
|
+
|
8
|
+
PARAMETERS = [
|
9
|
+
# { :name => :_pageSize, :default_value => 250 },
|
10
|
+
:_pageSize,
|
11
|
+
:_page,
|
12
|
+
:_sortBy,
|
13
|
+
:_sort,
|
14
|
+
|
15
|
+
:approvalstatus,
|
16
|
+
:averagerating,
|
17
|
+
:comments,
|
18
|
+
:datecreated,
|
19
|
+
:datemodified,
|
20
|
+
:description,
|
21
|
+
:duration,
|
22
|
+
:filename,
|
23
|
+
:folderid,
|
24
|
+
:hasapprovals,
|
25
|
+
:hascomments,
|
26
|
+
:hasrating,
|
27
|
+
:hastranscript,
|
28
|
+
:height,
|
29
|
+
:metadatakeys,
|
30
|
+
:metadatakeys_exact,
|
31
|
+
:metadatamatch,
|
32
|
+
:metadatavalues,
|
33
|
+
:metadatavalues_exact,
|
34
|
+
:projectid,
|
35
|
+
:rating,
|
36
|
+
:size,
|
37
|
+
:tags,
|
38
|
+
:title,
|
39
|
+
:transcript,
|
40
|
+
:transcriptstatus,
|
41
|
+
:type,
|
42
|
+
# { :name => :type, :default_value => '{"in":"video,image,document,archive,audio"}' },
|
43
|
+
:uploaduser,
|
44
|
+
:width,
|
45
|
+
]
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
|
50
|
+
|
51
|
+
def success?
|
52
|
+
response_code = client.http_client.response.code
|
53
|
+
(response_code == '404' || response_code.start_with?('2'))
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Ubiquity::MediaSilo::API::V3::Client::Requests
|
2
|
+
|
3
|
+
class AssetsGetByFolderId < BaseRequest
|
4
|
+
|
5
|
+
HTTP_METHOD = :get
|
6
|
+
HTTP_PATH = '/folders/#{arguments[:folderId]}/assets'
|
7
|
+
|
8
|
+
PARAMETERS = [
|
9
|
+
{ :name => :folderId, :aliases => [ :id ], :required => true },
|
10
|
+
]
|
11
|
+
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Ubiquity::MediaSilo::API::V3::Client::Requests
|
2
|
+
|
3
|
+
class AssetsGetByProjectId < BaseRequest
|
4
|
+
|
5
|
+
HTTP_METHOD = :get
|
6
|
+
HTTP_PATH = '/projects/#{arguments[:projectId]}/assets'
|
7
|
+
|
8
|
+
PARAMETERS = [
|
9
|
+
{ :name => :projectId, :aliases => [ :id ], :required => true },
|
10
|
+
]
|
11
|
+
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
@@ -0,0 +1,250 @@
|
|
1
|
+
require 'cgi'
|
2
|
+
|
3
|
+
module Ubiquity
|
4
|
+
module MediaSilo
|
5
|
+
class API
|
6
|
+
module V3
|
7
|
+
class Client
|
8
|
+
module Requests
|
9
|
+
class BaseRequest
|
10
|
+
|
11
|
+
HTTP_METHOD = :get
|
12
|
+
HTTP_BASE_PATH = ''
|
13
|
+
HTTP_PATH = ''
|
14
|
+
HTTP_SUCCESS_CODE = 200
|
15
|
+
|
16
|
+
DEFAULT_PARAMETER_SEND_IN_VALUE = :query
|
17
|
+
|
18
|
+
PARAMETERS = [ ]
|
19
|
+
|
20
|
+
attr_accessor :client, :arguments, :options, :initial_arguments, :initial_options, :missing_required_arguments,
|
21
|
+
:default_parameter_send_in_value, :processed_parameters, :initialized, :response
|
22
|
+
|
23
|
+
attr_writer :parameters, :path, :body, :query
|
24
|
+
|
25
|
+
def self.normalize_argument_hash_keys(hash)
|
26
|
+
return hash unless hash.is_a?(Hash)
|
27
|
+
Hash[ hash.dup.map { |k,v| [ normalize_parameter_name(k), v ] } ]
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.normalize_parameter_name(name)
|
31
|
+
(name || '').respond_to?(:to_s) ? name.to_s.gsub('_', '').gsub('-', '').downcase : name
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.process_parameter(param, args = { }, args_out = { }, missing_required_arguments = [ ], processed_parameters = { }, default_parameter_send_in_value = DEFAULT_PARAMETER_SEND_IN_VALUE, options = { })
|
35
|
+
args = normalize_argument_hash_keys(args) || { } if options.fetch(:normalize_argument_hash_keys, false)
|
36
|
+
|
37
|
+
_k = param.is_a?(Hash) ? param : { :name => param, :required => false, :send_in => default_parameter_send_in_value }
|
38
|
+
_k[:send_in] ||= default_parameter_send_in_value
|
39
|
+
|
40
|
+
proper_parameter_name = _k[:name]
|
41
|
+
param_name = normalize_parameter_name(proper_parameter_name)
|
42
|
+
arg_key = (has_key = args.has_key?(param_name)) ?
|
43
|
+
param_name :
|
44
|
+
( (_k[:aliases] || [ ]).map { |a| normalize_parameter_name(a) }.find { |a| has_key = args.has_key?(a) } || param_name )
|
45
|
+
|
46
|
+
value = has_key ? args[arg_key] : _k[:default_value]
|
47
|
+
is_set = has_key || _k.has_key?(:default_value)
|
48
|
+
|
49
|
+
processed_parameters[proper_parameter_name] = _k.merge(:value => value, :is_set => is_set)
|
50
|
+
|
51
|
+
unless is_set
|
52
|
+
missing_required_arguments << proper_parameter_name if _k[:required]
|
53
|
+
else
|
54
|
+
args_out[proper_parameter_name] = value
|
55
|
+
end
|
56
|
+
|
57
|
+
{ :arguments_out => args_out, :processed_parameters => processed_parameters, :missing_required_arguments => missing_required_arguments }
|
58
|
+
rescue => e
|
59
|
+
raise e, "Error Processing Parameter: #{param.inspect} Args: #{args.inspect}. #{e.message}"
|
60
|
+
end
|
61
|
+
|
62
|
+
def self.process_parameters(params, args, options = { })
|
63
|
+
args = normalize_argument_hash_keys(args) || { }
|
64
|
+
args_out = options[:arguments_out] || { }
|
65
|
+
default_parameter_send_in_value = options[:default_parameter_send_in_value] || DEFAULT_PARAMETER_SEND_IN_VALUE
|
66
|
+
processed_parameters = options[:processed_parameters] || { }
|
67
|
+
missing_required_arguments = options[:missing_required_arguments] || [ ]
|
68
|
+
|
69
|
+
params.each do |param|
|
70
|
+
process_parameter(param, args, args_out, missing_required_arguments, processed_parameters, default_parameter_send_in_value)
|
71
|
+
end
|
72
|
+
{ :arguments_out => args_out, :processed_parameters => processed_parameters, :missing_required_arguments => missing_required_arguments }
|
73
|
+
end
|
74
|
+
|
75
|
+
def initialize(args = { }, options = { })
|
76
|
+
@initial_arguments = args.dup
|
77
|
+
@initial_options = options.dup
|
78
|
+
|
79
|
+
@options = options.dup
|
80
|
+
|
81
|
+
initialize_attributes if options.fetch(:initialize_attributes, true)
|
82
|
+
after_initialize
|
83
|
+
end
|
84
|
+
|
85
|
+
def after_initialize
|
86
|
+
process_parameters if initialized
|
87
|
+
end
|
88
|
+
|
89
|
+
def initialize_attributes
|
90
|
+
@client = options[:client]
|
91
|
+
@missing_required_arguments = [ ]
|
92
|
+
@default_parameter_send_in_value = options[:default_parameter_send_in_value] || self.class::DEFAULT_PARAMETER_SEND_IN_VALUE
|
93
|
+
@processed_parameters = { }
|
94
|
+
@arguments = { }
|
95
|
+
@eval_http_path = options.fetch(:eval_http_path, true)
|
96
|
+
@base_path = options[:base_path]
|
97
|
+
|
98
|
+
@parameters = options[:parameters]
|
99
|
+
@http_method = options[:http_method]
|
100
|
+
@http_path = options[:http_path] ||= options[:path_raw]
|
101
|
+
|
102
|
+
@path = options[:path]
|
103
|
+
@path_arguments = nil
|
104
|
+
@path_only = nil
|
105
|
+
|
106
|
+
@query = options[:query]
|
107
|
+
@query_arguments = nil
|
108
|
+
|
109
|
+
@body = options[:body]
|
110
|
+
@body_arguments = nil
|
111
|
+
|
112
|
+
@response = nil
|
113
|
+
|
114
|
+
@http_success_code = options[:http_success_code] || HTTP_SUCCESS_CODE
|
115
|
+
|
116
|
+
@initialized = true
|
117
|
+
end
|
118
|
+
alias :reset_attributes :initialize_attributes
|
119
|
+
|
120
|
+
def process_parameters(params = parameters, args = @initial_arguments, _options = @options)
|
121
|
+
before_process_parameters unless _options.fetch(:skip_before_process_parameters, false)
|
122
|
+
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))
|
123
|
+
after_process_parameters unless _options.fetch(:skip_after_process_parameters, false)
|
124
|
+
end
|
125
|
+
|
126
|
+
def before_process_parameters
|
127
|
+
# TO BE IMPLEMENTED IN CHILD CLASS
|
128
|
+
end
|
129
|
+
alias :pre_process_arguments :before_process_parameters
|
130
|
+
|
131
|
+
def after_process_parameters
|
132
|
+
# TO BE IMPLEMENTED IN CHILD CLASS
|
133
|
+
end
|
134
|
+
alias :post_process_arguments :after_process_parameters
|
135
|
+
|
136
|
+
# @!group Attribute Readers
|
137
|
+
|
138
|
+
def http_success_code
|
139
|
+
@http_success_code
|
140
|
+
end
|
141
|
+
|
142
|
+
def arguments
|
143
|
+
@arguments ||= { }
|
144
|
+
end
|
145
|
+
|
146
|
+
def base_path
|
147
|
+
@base_path ||= self.class::HTTP_BASE_PATH
|
148
|
+
end
|
149
|
+
|
150
|
+
def body_arguments
|
151
|
+
@body_arguments ||= arguments.dup.delete_if { |k,_| processed_parameters[k][:send_in] != :body }
|
152
|
+
end
|
153
|
+
|
154
|
+
def body
|
155
|
+
@body ||= body_arguments.empty? ? nil : body_arguments
|
156
|
+
end
|
157
|
+
|
158
|
+
def client
|
159
|
+
@client ||= options[:client]
|
160
|
+
end
|
161
|
+
|
162
|
+
def eval_http_path?
|
163
|
+
@eval_http_path
|
164
|
+
end
|
165
|
+
|
166
|
+
def http_path
|
167
|
+
@http_path ||= self.class::HTTP_PATH
|
168
|
+
end
|
169
|
+
|
170
|
+
def http_method
|
171
|
+
@http_method ||= self.class::HTTP_METHOD
|
172
|
+
end
|
173
|
+
|
174
|
+
def parameters
|
175
|
+
@parameters ||= self.class::PARAMETERS.dup
|
176
|
+
end
|
177
|
+
|
178
|
+
def relative_path
|
179
|
+
@relative_path ||= (path.start_with?('/') ? path[1..-1] : path)
|
180
|
+
end
|
181
|
+
|
182
|
+
# The URI Path
|
183
|
+
def path
|
184
|
+
@path ||= File.join(base_path, (eval_http_path? ? eval(%("#{http_path}"), binding, __FILE__, __LINE__) : http_path))
|
185
|
+
end
|
186
|
+
|
187
|
+
def path_arguments
|
188
|
+
@path_arguments ||= Hash[
|
189
|
+
arguments.dup.delete_if { |k, _| processed_parameters[k][:send_in] != :path }.
|
190
|
+
map { |k,v| [ k, CGI.escape(v.respond_to?(:to_s) ? v.to_s : '').gsub('+', '%20') ] }
|
191
|
+
]
|
192
|
+
end
|
193
|
+
|
194
|
+
def query
|
195
|
+
@query ||= begin
|
196
|
+
query_arguments.is_a?(Hash) ? 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
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
200
|
+
def query_arguments
|
201
|
+
@query_arguments ||= arguments.dup.delete_if { |k,_| processed_parameters[k][:send_in] != :query }
|
202
|
+
end
|
203
|
+
|
204
|
+
def uri_request_path
|
205
|
+
[ path ].concat( [*query].delete_if { |v| v.respond_to?(:empty?) and v.empty? } ).join('?')
|
206
|
+
end
|
207
|
+
|
208
|
+
# @!endgroup
|
209
|
+
|
210
|
+
def to_batchable_request
|
211
|
+
_output = { :method => http_method.to_s.upcase, :resourcePath => relative_path }
|
212
|
+
_output[:payload] = body if (![:delete, :get, :options].include?(http_method) & body)
|
213
|
+
_output
|
214
|
+
end
|
215
|
+
alias :as_batchable_request :to_batchable_request
|
216
|
+
|
217
|
+
def to_batchable_request_as_json
|
218
|
+
#%({ "method": #{http_method.upcase}, "resourcePath": #{relative_path}#{(![:delete, :get].include?(http_method) && body) ? %(, "payload": { "body": #{body} }) : ''} })
|
219
|
+
to_batchable_request.to_json
|
220
|
+
end
|
221
|
+
alias :as_batchable_request_as_json :to_batchable_request_as_json
|
222
|
+
|
223
|
+
# def response
|
224
|
+
# client.response if client
|
225
|
+
# end
|
226
|
+
|
227
|
+
def http_client
|
228
|
+
client.http_client
|
229
|
+
end
|
230
|
+
|
231
|
+
def http_response
|
232
|
+
@http_response ||= http_client.response.dup rescue nil
|
233
|
+
end
|
234
|
+
|
235
|
+
def execute
|
236
|
+
@response = http_client.call_method(http_method, { :path => relative_path, :query => query, :body => body }, options) if client
|
237
|
+
end
|
238
|
+
|
239
|
+
def success?
|
240
|
+
_response = http_response and ([*http_success_code].include?(http_response.code))
|
241
|
+
_response
|
242
|
+
end
|
243
|
+
|
244
|
+
end
|
245
|
+
end
|
246
|
+
end
|
247
|
+
end
|
248
|
+
end
|
249
|
+
end
|
250
|
+
end
|