resourcespace-ruby 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.rspec +1 -0
- data/.rubocop.yml +8 -0
- data/.ruby-version +1 -0
- data/CHANGELOG.md +22 -0
- data/LICENSE.txt +21 -0
- data/README.md +355 -0
- data/Rakefile +6 -0
- data/lib/resourcespace/client.rb +245 -0
- data/lib/resourcespace/collection.rb +211 -0
- data/lib/resourcespace/configuration.rb +127 -0
- data/lib/resourcespace/errors.rb +111 -0
- data/lib/resourcespace/metadata.rb +298 -0
- data/lib/resourcespace/resource.rb +285 -0
- data/lib/resourcespace/search.rb +259 -0
- data/lib/resourcespace/user.rb +188 -0
- data/lib/resourcespace/version.rb +6 -0
- data/lib/resourcespace.rb +71 -0
- data/resourcespace-ruby.gemspec +49 -0
- metadata +247 -0
@@ -0,0 +1,298 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ResourceSpace
|
4
|
+
# Metadata management interface for ResourceSpace API
|
5
|
+
#
|
6
|
+
# @example
|
7
|
+
# metadata = client.metadata
|
8
|
+
#
|
9
|
+
# # Get field options
|
10
|
+
# options = metadata.get_field_options(75)
|
11
|
+
#
|
12
|
+
# # Create a resource type field
|
13
|
+
# field = metadata.create_resource_type_field(
|
14
|
+
# name: "Web Asset Type",
|
15
|
+
# type: "dropdown"
|
16
|
+
# )
|
17
|
+
class Metadata
|
18
|
+
# @return [Client] the ResourceSpace client
|
19
|
+
attr_reader :client
|
20
|
+
|
21
|
+
# Initialize the metadata interface
|
22
|
+
#
|
23
|
+
# @param client [Client] ResourceSpace client instance
|
24
|
+
def initialize(client)
|
25
|
+
@client = client
|
26
|
+
end
|
27
|
+
|
28
|
+
# Get field options for dropdown/checkbox fields
|
29
|
+
#
|
30
|
+
# @param field_id [Integer] field ID
|
31
|
+
# @param node_info [Boolean] whether to include detailed node information
|
32
|
+
# @return [Array] field options
|
33
|
+
def get_field_options(field_id, node_info: false)
|
34
|
+
params = { param1: field_id.to_s }
|
35
|
+
params[:param2] = node_info ? "true" : "false"
|
36
|
+
|
37
|
+
client.get("get_field_options", params)
|
38
|
+
end
|
39
|
+
|
40
|
+
# Get node ID for a field value
|
41
|
+
#
|
42
|
+
# @param field_id [Integer] field ID
|
43
|
+
# @param value [String] field value
|
44
|
+
# @return [Integer] node ID
|
45
|
+
def get_node_id(field_id, value)
|
46
|
+
response = client.get("get_node_id", {
|
47
|
+
param1: field_id.to_s,
|
48
|
+
param2: value
|
49
|
+
})
|
50
|
+
response.to_i
|
51
|
+
end
|
52
|
+
|
53
|
+
# Get all nodes for a field
|
54
|
+
#
|
55
|
+
# @param field_id [Integer] field ID
|
56
|
+
# @return [Array] field nodes
|
57
|
+
def get_nodes(field_id)
|
58
|
+
client.get("get_nodes", { param1: field_id.to_s })
|
59
|
+
end
|
60
|
+
|
61
|
+
# Set/create a node value
|
62
|
+
#
|
63
|
+
# @param field_id [Integer] field ID
|
64
|
+
# @param value [String] node value
|
65
|
+
# @param return_existing [Boolean] return existing node if it exists
|
66
|
+
# @return [Integer] node ID
|
67
|
+
def set_node(field_id, value, return_existing: true)
|
68
|
+
params = {
|
69
|
+
param1: field_id.to_s,
|
70
|
+
param2: value
|
71
|
+
}
|
72
|
+
params[:param3] = return_existing ? "true" : "false"
|
73
|
+
|
74
|
+
response = client.post("set_node", params)
|
75
|
+
response.to_i
|
76
|
+
end
|
77
|
+
|
78
|
+
# Add resource nodes (multiple field values)
|
79
|
+
#
|
80
|
+
# @param resource_id [Integer] resource ID
|
81
|
+
# @param field_id [Integer] field ID
|
82
|
+
# @param node_ids [Array<Integer>] array of node IDs
|
83
|
+
# @return [Hash] response
|
84
|
+
def add_resource_nodes(resource_id, field_id, node_ids)
|
85
|
+
node_ids_str = Array(node_ids).join(",")
|
86
|
+
|
87
|
+
client.post("add_resource_nodes", {
|
88
|
+
param1: resource_id.to_s,
|
89
|
+
param2: field_id.to_s,
|
90
|
+
param3: node_ids_str
|
91
|
+
})
|
92
|
+
end
|
93
|
+
|
94
|
+
# Add resource nodes for multiple fields
|
95
|
+
#
|
96
|
+
# @param resource_id [Integer] resource ID
|
97
|
+
# @param field_data [Hash] hash of field_id => node_ids pairs
|
98
|
+
# @return [Hash] response
|
99
|
+
def add_resource_nodes_multi(resource_id, field_data)
|
100
|
+
# Convert field_data to the format expected by the API
|
101
|
+
# This might need adjustment based on the exact API format
|
102
|
+
params = { param1: resource_id.to_s }
|
103
|
+
|
104
|
+
field_data.each_with_index do |(field_id, node_ids), index|
|
105
|
+
node_ids_str = Array(node_ids).join(",")
|
106
|
+
params["param#{index + 2}"] = "#{field_id}:#{node_ids_str}"
|
107
|
+
end
|
108
|
+
|
109
|
+
client.post("add_resource_nodes_multi", params)
|
110
|
+
end
|
111
|
+
|
112
|
+
# Update a field definition
|
113
|
+
#
|
114
|
+
# @param field_id [Integer] field ID
|
115
|
+
# @param properties [Hash] field properties to update
|
116
|
+
# @return [Hash] response
|
117
|
+
def update_field(field_id, properties = {})
|
118
|
+
params = { param1: field_id.to_s }
|
119
|
+
|
120
|
+
# Add properties as additional parameters
|
121
|
+
properties.each_with_index do |(key, value), index|
|
122
|
+
params["param#{index + 2}"] = "#{key}:#{value}"
|
123
|
+
end
|
124
|
+
|
125
|
+
client.post("update_field", params)
|
126
|
+
end
|
127
|
+
|
128
|
+
# Get resource type fields
|
129
|
+
#
|
130
|
+
# @param resource_type [Integer] resource type ID
|
131
|
+
# @return [Array] fields for the resource type
|
132
|
+
def get_resource_type_fields(resource_type = nil)
|
133
|
+
params = {}
|
134
|
+
params[:param1] = resource_type.to_s if resource_type
|
135
|
+
|
136
|
+
client.get("get_resource_type_fields", params)
|
137
|
+
end
|
138
|
+
|
139
|
+
# Create a new resource type field
|
140
|
+
#
|
141
|
+
# @param name [String] field name
|
142
|
+
# @param type [String] field type ("text", "dropdown", "checkbox", "date", etc.)
|
143
|
+
# @param resource_types [Array<Integer>] resource types this field applies to
|
144
|
+
# @param options [Hash] additional field options
|
145
|
+
# @return [Hash] created field data
|
146
|
+
def create_resource_type_field(name:, type:, resource_types: [1], **options)
|
147
|
+
params = {
|
148
|
+
param1: name,
|
149
|
+
param2: type,
|
150
|
+
param3: Array(resource_types).join(",")
|
151
|
+
}
|
152
|
+
|
153
|
+
# Add additional options
|
154
|
+
options.each_with_index do |(key, value), index|
|
155
|
+
params["param#{index + 4}"] = "#{key}:#{value}"
|
156
|
+
end
|
157
|
+
|
158
|
+
client.post("create_resource_type_field", params)
|
159
|
+
end
|
160
|
+
|
161
|
+
# Toggle active state for nodes
|
162
|
+
#
|
163
|
+
# @param field_id [Integer] field ID
|
164
|
+
# @param node_ids [Array<Integer>] node IDs to toggle
|
165
|
+
# @param active [Boolean] whether to activate or deactivate
|
166
|
+
# @return [Hash] response
|
167
|
+
def toggle_active_state_for_nodes(field_id, node_ids, active: true)
|
168
|
+
node_ids_str = Array(node_ids).join(",")
|
169
|
+
|
170
|
+
client.post("toggle_active_state_for_nodes", {
|
171
|
+
param1: field_id.to_s,
|
172
|
+
param2: node_ids_str,
|
173
|
+
param3: active ? "1" : "0"
|
174
|
+
})
|
175
|
+
end
|
176
|
+
|
177
|
+
# Get metadata schema for web assets
|
178
|
+
#
|
179
|
+
# @return [Hash] recommended metadata fields for web assets
|
180
|
+
def web_asset_schema
|
181
|
+
{
|
182
|
+
8 => "Title/Name",
|
183
|
+
12 => "Keywords/Tags",
|
184
|
+
51 => "Asset Type", # Custom field for web asset type
|
185
|
+
52 => "Usage Rights", # Custom field for usage/license
|
186
|
+
53 => "Dimensions", # Custom field for dimensions
|
187
|
+
54 => "File Size", # Custom field for file size
|
188
|
+
55 => "Compression", # Custom field for compression type
|
189
|
+
56 => "Color Profile", # Custom field for color profile
|
190
|
+
57 => "Purpose/Context" # Custom field for intended use
|
191
|
+
}
|
192
|
+
end
|
193
|
+
|
194
|
+
# Create web asset metadata fields
|
195
|
+
#
|
196
|
+
# @param resource_types [Array<Integer>] resource types to apply fields to
|
197
|
+
# @return [Array] created field data
|
198
|
+
def create_web_asset_fields(resource_types: [1])
|
199
|
+
fields_to_create = [
|
200
|
+
{
|
201
|
+
name: "Web Asset Type",
|
202
|
+
type: "dropdown",
|
203
|
+
options: ["Image", "CSS", "JavaScript", "Font", "Icon", "Video", "Audio"]
|
204
|
+
},
|
205
|
+
{
|
206
|
+
name: "Usage Rights",
|
207
|
+
type: "dropdown",
|
208
|
+
options: ["Public Domain", "Creative Commons", "Licensed", "Proprietary"]
|
209
|
+
},
|
210
|
+
{
|
211
|
+
name: "Dimensions",
|
212
|
+
type: "text",
|
213
|
+
description: "Width x Height (e.g., 1920x1080)"
|
214
|
+
},
|
215
|
+
{
|
216
|
+
name: "File Size",
|
217
|
+
type: "text",
|
218
|
+
description: "File size in bytes/KB/MB"
|
219
|
+
},
|
220
|
+
{
|
221
|
+
name: "Compression",
|
222
|
+
type: "dropdown",
|
223
|
+
options: ["None", "Lossless", "Lossy", "Optimized"]
|
224
|
+
},
|
225
|
+
{
|
226
|
+
name: "Color Profile",
|
227
|
+
type: "dropdown",
|
228
|
+
options: ["sRGB", "Adobe RGB", "ProPhoto RGB", "CMYK", "Grayscale"]
|
229
|
+
},
|
230
|
+
{
|
231
|
+
name: "Purpose/Context",
|
232
|
+
type: "text",
|
233
|
+
description: "Intended use or context for this asset"
|
234
|
+
}
|
235
|
+
]
|
236
|
+
|
237
|
+
created_fields = []
|
238
|
+
fields_to_create.each do |field_data|
|
239
|
+
options = field_data.dup
|
240
|
+
name = options.delete(:name)
|
241
|
+
type = options.delete(:type)
|
242
|
+
|
243
|
+
created_field = create_resource_type_field(
|
244
|
+
name: name,
|
245
|
+
type: type,
|
246
|
+
resource_types: resource_types,
|
247
|
+
**options
|
248
|
+
)
|
249
|
+
created_fields << created_field
|
250
|
+
end
|
251
|
+
|
252
|
+
created_fields
|
253
|
+
end
|
254
|
+
|
255
|
+
# Update resource with web asset metadata
|
256
|
+
#
|
257
|
+
# @param resource_id [Integer] resource ID
|
258
|
+
# @param metadata [Hash] web asset metadata
|
259
|
+
# @return [Array] array of update responses
|
260
|
+
def update_web_asset_metadata(resource_id, metadata = {})
|
261
|
+
updates = []
|
262
|
+
|
263
|
+
schema = web_asset_schema
|
264
|
+
|
265
|
+
metadata.each do |field_name, value|
|
266
|
+
field_id = case field_name.to_s.downcase
|
267
|
+
when "title", "name"
|
268
|
+
8
|
269
|
+
when "keywords", "tags"
|
270
|
+
12
|
271
|
+
when "asset_type", "type"
|
272
|
+
51
|
273
|
+
when "usage_rights", "rights", "license"
|
274
|
+
52
|
275
|
+
when "dimensions", "size"
|
276
|
+
53
|
277
|
+
when "file_size"
|
278
|
+
54
|
279
|
+
when "compression"
|
280
|
+
55
|
281
|
+
when "color_profile", "color"
|
282
|
+
56
|
283
|
+
when "purpose", "context", "description"
|
284
|
+
57
|
285
|
+
else
|
286
|
+
field_name.to_i if field_name.to_s.match?(/^\d+$/)
|
287
|
+
end
|
288
|
+
|
289
|
+
if field_id
|
290
|
+
update_response = client.resources.update_field(resource_id, field_id, value.to_s)
|
291
|
+
updates << { field_id: field_id, field_name: field_name, response: update_response }
|
292
|
+
end
|
293
|
+
end
|
294
|
+
|
295
|
+
updates
|
296
|
+
end
|
297
|
+
end
|
298
|
+
end
|
@@ -0,0 +1,285 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ResourceSpace
|
4
|
+
# Resource management interface for ResourceSpace API
|
5
|
+
#
|
6
|
+
# @example
|
7
|
+
# resources = client.resources
|
8
|
+
#
|
9
|
+
# # Create a new resource
|
10
|
+
# resource = resources.create_resource(name: "My Image")
|
11
|
+
#
|
12
|
+
# # Upload a file
|
13
|
+
# uploaded = resources.upload_file(File.open("image.jpg"))
|
14
|
+
#
|
15
|
+
# # Get resource data
|
16
|
+
# data = resources.get_resource_data(123)
|
17
|
+
class Resource
|
18
|
+
# @return [Client] the ResourceSpace client
|
19
|
+
attr_reader :client
|
20
|
+
|
21
|
+
# Initialize the resource interface
|
22
|
+
#
|
23
|
+
# @param client [Client] ResourceSpace client instance
|
24
|
+
def initialize(client)
|
25
|
+
@client = client
|
26
|
+
end
|
27
|
+
|
28
|
+
# Create a new resource
|
29
|
+
#
|
30
|
+
# @param name [String] resource name
|
31
|
+
# @param resource_type [Integer] resource type ID (default: 1)
|
32
|
+
# @param collection [Integer] collection ID to add resource to
|
33
|
+
# @param metadata [Hash] metadata fields to set
|
34
|
+
# @return [Hash] created resource data
|
35
|
+
def create_resource(name: nil, resource_type: 1, collection: nil, metadata: {})
|
36
|
+
params = {
|
37
|
+
param1: resource_type.to_s
|
38
|
+
}
|
39
|
+
|
40
|
+
params[:param2] = collection.to_s if collection
|
41
|
+
|
42
|
+
response = client.post("create_resource", params)
|
43
|
+
resource_id = response.is_a?(Hash) ? response["ref"] || response["id"] : response
|
44
|
+
|
45
|
+
# Set resource name if provided
|
46
|
+
if name && resource_id
|
47
|
+
update_field(resource_id, 8, name) # Field 8 is typically the title/name field
|
48
|
+
end
|
49
|
+
|
50
|
+
# Set additional metadata if provided
|
51
|
+
metadata.each do |field, value|
|
52
|
+
update_field(resource_id, field, value)
|
53
|
+
end if metadata.any?
|
54
|
+
|
55
|
+
get_resource_data(resource_id)
|
56
|
+
end
|
57
|
+
|
58
|
+
# Upload a file to ResourceSpace
|
59
|
+
#
|
60
|
+
# @param file [File, String] file object or file path
|
61
|
+
# @param caption [String] file caption
|
62
|
+
# @param no_exif [Boolean] whether to skip EXIF data extraction
|
63
|
+
# @return [Hash] uploaded file data
|
64
|
+
def upload_file(file, caption: nil, no_exif: false)
|
65
|
+
params = {}
|
66
|
+
params[:param1] = caption if caption
|
67
|
+
params[:param2] = "1" if no_exif
|
68
|
+
|
69
|
+
client.upload_file(file, params)
|
70
|
+
end
|
71
|
+
|
72
|
+
# Get resource data
|
73
|
+
#
|
74
|
+
# @param resource_id [Integer] resource ID
|
75
|
+
# @return [Hash] resource data
|
76
|
+
def get_resource_data(resource_id)
|
77
|
+
client.get("get_resource_data", { param1: resource_id.to_s })
|
78
|
+
end
|
79
|
+
|
80
|
+
# Get resource field data
|
81
|
+
#
|
82
|
+
# @param resource_id [Integer] resource ID
|
83
|
+
# @param field_id [Integer] field ID (optional)
|
84
|
+
# @return [Hash] field data
|
85
|
+
def get_resource_field_data(resource_id, field_id = nil)
|
86
|
+
params = { param1: resource_id.to_s }
|
87
|
+
params[:param2] = field_id.to_s if field_id
|
88
|
+
|
89
|
+
client.get("get_resource_field_data", params)
|
90
|
+
end
|
91
|
+
|
92
|
+
# Update a resource field
|
93
|
+
#
|
94
|
+
# @param resource_id [Integer] resource ID
|
95
|
+
# @param field_id [Integer] field ID
|
96
|
+
# @param value [String] field value
|
97
|
+
# @param node_values [Boolean] whether value contains node IDs
|
98
|
+
# @return [Hash] response
|
99
|
+
def update_field(resource_id, field_id, value, node_values: false)
|
100
|
+
params = {
|
101
|
+
param1: resource_id.to_s,
|
102
|
+
param2: field_id.to_s,
|
103
|
+
param3: value.to_s
|
104
|
+
}
|
105
|
+
params[:param4] = node_values.to_s if node_values
|
106
|
+
|
107
|
+
client.post("update_field", params)
|
108
|
+
end
|
109
|
+
|
110
|
+
# Delete a resource
|
111
|
+
#
|
112
|
+
# @param resource_id [Integer] resource ID
|
113
|
+
# @return [Hash] response
|
114
|
+
def delete_resource(resource_id)
|
115
|
+
client.post("delete_resource", { param1: resource_id.to_s })
|
116
|
+
end
|
117
|
+
|
118
|
+
# Copy a resource
|
119
|
+
#
|
120
|
+
# @param resource_id [Integer] source resource ID
|
121
|
+
# @param resource_type [Integer] destination resource type (optional)
|
122
|
+
# @return [Hash] new resource data
|
123
|
+
def copy_resource(resource_id, resource_type: nil)
|
124
|
+
params = { param1: resource_id.to_s }
|
125
|
+
params[:param2] = resource_type.to_s if resource_type
|
126
|
+
|
127
|
+
client.post("copy_resource", params)
|
128
|
+
end
|
129
|
+
|
130
|
+
# Get resource download path
|
131
|
+
#
|
132
|
+
# @param resource_id [Integer] resource ID
|
133
|
+
# @param size [String] image size ('', 'pre', 'scr', 'thm', 'col')
|
134
|
+
# @param page [Integer] page number for multi-page documents
|
135
|
+
# @param ext [String] file extension override
|
136
|
+
# @return [String] download path
|
137
|
+
def get_resource_path(resource_id, size: "", page: 1, ext: "")
|
138
|
+
params = {
|
139
|
+
param1: resource_id.to_s,
|
140
|
+
param2: size.to_s,
|
141
|
+
param3: page.to_s
|
142
|
+
}
|
143
|
+
params[:param4] = ext if ext && !ext.empty?
|
144
|
+
|
145
|
+
response = client.get("get_resource_path", params)
|
146
|
+
response.is_a?(String) ? response : response["path"]
|
147
|
+
end
|
148
|
+
|
149
|
+
# Get alternative files for a resource
|
150
|
+
#
|
151
|
+
# @param resource_id [Integer] resource ID
|
152
|
+
# @return [Array] alternative files data
|
153
|
+
def get_alternative_files(resource_id)
|
154
|
+
client.get("get_alternative_files", { param1: resource_id.to_s })
|
155
|
+
end
|
156
|
+
|
157
|
+
# Add an alternative file to a resource
|
158
|
+
#
|
159
|
+
# @param resource_id [Integer] resource ID
|
160
|
+
# @param file [File, String] file object or file path
|
161
|
+
# @param name [String] alternative file name
|
162
|
+
# @param description [String] alternative file description
|
163
|
+
# @return [Hash] response
|
164
|
+
def add_alternative_file(resource_id, file, name: nil, description: nil)
|
165
|
+
params = { param1: resource_id.to_s }
|
166
|
+
params[:param2] = name if name
|
167
|
+
params[:param3] = description if description
|
168
|
+
|
169
|
+
client.upload_file(file, params.merge(function: "add_alternative_file"))
|
170
|
+
end
|
171
|
+
|
172
|
+
# Delete an alternative file
|
173
|
+
#
|
174
|
+
# @param resource_id [Integer] resource ID
|
175
|
+
# @param alt_file_id [Integer] alternative file ID
|
176
|
+
# @return [Hash] response
|
177
|
+
def delete_alternative_file(resource_id, alt_file_id)
|
178
|
+
client.post("delete_alternative_file", {
|
179
|
+
param1: resource_id.to_s,
|
180
|
+
param2: alt_file_id.to_s
|
181
|
+
})
|
182
|
+
end
|
183
|
+
|
184
|
+
# Get resource types
|
185
|
+
#
|
186
|
+
# @return [Array] resource types
|
187
|
+
def get_resource_types
|
188
|
+
client.get("get_resource_types")
|
189
|
+
end
|
190
|
+
|
191
|
+
# Update resource type
|
192
|
+
#
|
193
|
+
# @param resource_id [Integer] resource ID
|
194
|
+
# @param resource_type [Integer] new resource type ID
|
195
|
+
# @return [Hash] response
|
196
|
+
def update_resource_type(resource_id, resource_type)
|
197
|
+
client.post("update_resource_type", {
|
198
|
+
param1: resource_id.to_s,
|
199
|
+
param2: resource_type.to_s
|
200
|
+
})
|
201
|
+
end
|
202
|
+
|
203
|
+
# Get resource log
|
204
|
+
#
|
205
|
+
# @param resource_id [Integer] resource ID
|
206
|
+
# @param entries [Integer] number of entries to return
|
207
|
+
# @return [Array] log entries
|
208
|
+
def get_resource_log(resource_id, entries: 50)
|
209
|
+
client.get("get_resource_log", {
|
210
|
+
param1: resource_id.to_s,
|
211
|
+
param2: entries.to_s
|
212
|
+
})
|
213
|
+
end
|
214
|
+
|
215
|
+
# Get all image sizes for a resource
|
216
|
+
#
|
217
|
+
# @param resource_id [Integer] resource ID
|
218
|
+
# @return [Hash] image sizes data
|
219
|
+
def get_resource_all_image_sizes(resource_id)
|
220
|
+
client.get("get_resource_all_image_sizes", { param1: resource_id.to_s })
|
221
|
+
end
|
222
|
+
|
223
|
+
# Replace resource file
|
224
|
+
#
|
225
|
+
# @param resource_id [Integer] resource ID
|
226
|
+
# @param file [File, String] new file
|
227
|
+
# @param no_exif [Boolean] skip EXIF extraction
|
228
|
+
# @return [Hash] response
|
229
|
+
def replace_resource_file(resource_id, file, no_exif: false)
|
230
|
+
params = { param1: resource_id.to_s }
|
231
|
+
params[:param2] = "1" if no_exif
|
232
|
+
|
233
|
+
client.upload_file(file, params.merge(function: "replace_resource_file"))
|
234
|
+
end
|
235
|
+
|
236
|
+
# Upload file by URL
|
237
|
+
#
|
238
|
+
# @param resource_id [Integer] resource ID
|
239
|
+
# @param url [String] file URL
|
240
|
+
# @param save_as [String] filename to save as
|
241
|
+
# @param no_exif [Boolean] skip EXIF extraction
|
242
|
+
# @return [Hash] response
|
243
|
+
def upload_file_by_url(resource_id, url, save_as: nil, no_exif: false)
|
244
|
+
params = {
|
245
|
+
param1: resource_id.to_s,
|
246
|
+
param2: url
|
247
|
+
}
|
248
|
+
params[:param3] = save_as if save_as
|
249
|
+
params[:param4] = "1" if no_exif
|
250
|
+
|
251
|
+
client.post("upload_file_by_url", params)
|
252
|
+
end
|
253
|
+
|
254
|
+
# Check if user has edit access to resource
|
255
|
+
#
|
256
|
+
# @param resource_id [Integer] resource ID
|
257
|
+
# @return [Boolean] true if user has edit access
|
258
|
+
def edit_access?(resource_id)
|
259
|
+
response = client.get("get_edit_access", { param1: resource_id.to_s })
|
260
|
+
response == true || response == "true" || response == 1 || response == "1"
|
261
|
+
end
|
262
|
+
|
263
|
+
# Get resource access level
|
264
|
+
#
|
265
|
+
# @param resource_id [Integer] resource ID
|
266
|
+
# @return [Integer] access level
|
267
|
+
def get_resource_access(resource_id)
|
268
|
+
response = client.get("get_resource_access", { param1: resource_id.to_s })
|
269
|
+
response.to_i
|
270
|
+
end
|
271
|
+
|
272
|
+
# Download a resource file
|
273
|
+
#
|
274
|
+
# @param resource_id [Integer] resource ID
|
275
|
+
# @param file_path [String] local file path to save to
|
276
|
+
# @param size [String] image size
|
277
|
+
# @return [Boolean] true if successful
|
278
|
+
def download_resource(resource_id, file_path, size: "")
|
279
|
+
download_path = get_resource_path(resource_id, size: size)
|
280
|
+
download_url = "#{client.config.url.gsub('/api/', '')}#{download_path}"
|
281
|
+
|
282
|
+
client.download_file(download_url, file_path)
|
283
|
+
end
|
284
|
+
end
|
285
|
+
end
|