module SharepointApi::Items
Public Instance Methods
fetch_content_types()
click to toggle source
# File lib/sharepoint_api/items.rb, line 25 def fetch_content_types encoded_name = encode_path(library_name) response = site.query( :get, "Lists/GetByTitle('#{encoded_name}')/ContentTypes?" \ '$select=Name,StringId' ) response.map { |content_type| reject_metadata(content_type.data) } rescue Sharepoint::SharepointError => e log_as(__method__, e) nil end
validate_update_list_item(path, field_name_field_value_pairs)
click to toggle source
# File lib/sharepoint_api/items.rb, line 7 def validate_update_list_item(path, field_name_field_value_pairs) server_path = server_relative_path(path) uri = "GetFolderByServerRelativeUrl('#{server_path}')/ListItemAllFields/" \ 'ValidateUpdateListItem' form_values = field_name_field_value_pairs.map do |key, value| { 'FieldName' => key, 'FieldValue' => value } end body = { 'formValues' => form_values, 'bNewDocumentUpdate' => false } response = site.query(:post, uri, body.to_json, true) hoist_complex_errors!(response, uri, body) true rescue Sharepoint::SharepointError => e raise SharepointApi::SharepointError, e.message end
Private Instance Methods
hoist_complex_errors!(response, uri, body)
click to toggle source
# File lib/sharepoint_api/items.rb, line 43 def hoist_complex_errors!(response, uri, body) data = JSON.parse(response) if data['error'] error = Sharepoint::SPException.new(data, uri, body) reraise_if_lock_error(error) log_as(__method__, error) raise ItemUpdateError, error.message end errors = data.dig('d', 'ValidateUpdateListItem', 'results')&. select { |result| result['HasException'] }&. map { |result| result.slice('FieldName', 'FieldValue', 'ErrorMessage') } return if errors.nil? || errors.count.zero? log_as(__method__, errors) raise ItemUpdateError, errors end
reject_metadata(data)
click to toggle source
# File lib/sharepoint_api/items.rb, line 71 def reject_metadata(data) data.reject { |key| key == '__metadata' } end
reraise_if_lock_error(error)
click to toggle source
# File lib/sharepoint_api/items.rb, line 64 def reraise_if_lock_error(error) return unless error.message =~ /is locked for shared use/ log_as(__method__, error, level: :warn) raise(LockError, error.message) end