ubiquity-mediasilo-api-v3 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (33) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +15 -0
  3. data/Gemfile +6 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +100 -0
  6. data/Rakefile +2 -0
  7. data/bin/ubiquity-mediasilo-api-v3 +26 -0
  8. data/lib/ubiquity/cli.rb +127 -0
  9. data/lib/ubiquity/mediasilo/api/v3.rb +11 -0
  10. data/lib/ubiquity/mediasilo/api/v3/cli.rb +94 -0
  11. data/lib/ubiquity/mediasilo/api/v3/client.rb +712 -0
  12. data/lib/ubiquity/mediasilo/api/v3/client/paginator.rb +133 -0
  13. data/lib/ubiquity/mediasilo/api/v3/client/requests.rb +18 -0
  14. data/lib/ubiquity/mediasilo/api/v3/client/requests/asset_copy_to_folder.rb +19 -0
  15. data/lib/ubiquity/mediasilo/api/v3/client/requests/asset_copy_to_project.rb +19 -0
  16. data/lib/ubiquity/mediasilo/api/v3/client/requests/asset_create.rb +25 -0
  17. data/lib/ubiquity/mediasilo/api/v3/client/requests/asset_delete.rb +15 -0
  18. data/lib/ubiquity/mediasilo/api/v3/client/requests/asset_get_by_id.rb +14 -0
  19. data/lib/ubiquity/mediasilo/api/v3/client/requests/asset_move_to_folder.rb +16 -0
  20. data/lib/ubiquity/mediasilo/api/v3/client/requests/asset_move_to_project.rb +16 -0
  21. data/lib/ubiquity/mediasilo/api/v3/client/requests/assets_get.rb +56 -0
  22. data/lib/ubiquity/mediasilo/api/v3/client/requests/assets_get_by_folder_id.rb +14 -0
  23. data/lib/ubiquity/mediasilo/api/v3/client/requests/assets_get_by_project_id.rb +14 -0
  24. data/lib/ubiquity/mediasilo/api/v3/client/requests/base_request.rb +250 -0
  25. data/lib/ubiquity/mediasilo/api/v3/client/requests/batch.rb +20 -0
  26. data/lib/ubiquity/mediasilo/api/v3/client/requests/project_create.rb +15 -0
  27. data/lib/ubiquity/mediasilo/api/v3/client/requests/quicklink_create.rb +54 -0
  28. data/lib/ubiquity/mediasilo/api/v3/client/requests/quicklink_share.rb +32 -0
  29. data/lib/ubiquity/mediasilo/api/v3/http_client.rb +259 -0
  30. data/lib/ubiquity/mediasilo/api/v3/utilities.rb +1145 -0
  31. data/lib/ubiquity/mediasilo/api/v3/version.rb +9 -0
  32. data/ubiquity-mediasilo-api-v3.gemspec +23 -0
  33. 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