module SharepointApi::FileSystem
Public Instance Methods
add_file(path, content)
click to toggle source
# File lib/sharepoint_api/file_system.rb, line 9 def add_file(path, content) folder_path = File.dirname(path) file_name = encode_path(File.basename(path)) FileInfo.wrap( site.query( :post, "GetFolderByServerRelativeUrl('#{site_relative_path(folder_path)}')/Files" \ "/Add(overwrite=true,url='#{file_name}')?#{FileInfo::FILE_SELECT_QUERY}", content ) ) rescue Sharepoint::SPException => e reraise_if_lock_error(e) log_as(__method__, e) nil end
add_folder(path)
click to toggle source
Perhaps this should support a recursive option to create all parents as needed?
# File lib/sharepoint_api/file_system.rb, line 136 def add_folder(path) site.query(:post, "Folders/Add('#{server_relative_path(path)}')") rescue Sharepoint::SPException => e log_as(__method__, e) nil end
add_library(name, description: nil)
click to toggle source
# File lib/sharepoint_api/file_system.rb, line 159 def add_library(name, description: nil) site.query(:post, 'lists', { '__metadata' => { 'type' => 'SP.List' }, 'Title' => name, 'Description' => description || "Document library for #{name}.", 'BaseTemplate' => Sharepoint::LIST_TEMPLATE_TYPE[:DocumentLibrary], 'AllowContentTypes' => true, 'ContentTypesEnabled' => true, 'EnableVersioning' => true }.to_json) rescue Sharepoint::SPException => e log_as(__method__, e) false end
file_exists?(path)
click to toggle source
# File lib/sharepoint_api/file_system.rb, line 27 def file_exists?(path) server_path = server_relative_path(path) site.query(:get, "GetFileByServerRelativeUrl('#{server_path}')/Exists") rescue Sharepoint::SPException => e log_as(__method__, e) false end
files_in_folder(path)
click to toggle source
# File lib/sharepoint_api/file_system.rb, line 118 def files_in_folder(path) server_path = server_relative_path(path) result = site.query(:get, "GetFolderByServerRelativeUrl('#{server_path}')/Files?#{FileInfo::FILE_SELECT_QUERY_WITH_VERSIONS}", nil, true) result = JSON.parse(result) result.dig('d', 'results')&.map do |file_result| file_result['Versions'] = Sharepoint::Site.make_object_from_response(site, { 'd' => file_result['Versions'] }) end files = Sharepoint::Site.make_object_from_response(site, result) files.map { |file| FileInfo.new(file) } rescue Sharepoint::SPException => e log_as(__method__, e) nil end
find_file(path)
click to toggle source
Querying a non-existent file will raise a 500 error so we check for existence first.
# File lib/sharepoint_api/file_system.rb, line 37 def find_file(path) return nil unless file_exists?(path) server_path = server_relative_path(path) result = site.query(:get, "GetFileByServerRelativeUrl('#{server_path}')?#{FileInfo::FILE_SELECT_QUERY_WITH_VERSIONS}", nil, true) result = JSON.parse(result) result['d']['Versions'] = Sharepoint::Site.make_object_from_response(site, { 'd' => result['d']['Versions'] }) file = Sharepoint::Site.make_object_from_response(site, result) FileInfo.wrap(file) rescue Sharepoint::SPException => e log_as(__method__, e) nil end
find_file_version(path, version_id)
click to toggle source
# File lib/sharepoint_api/file_system.rb, line 52 def find_file_version(path, version_id) server_path = server_relative_path(path) site.query(:get, "GetFileByServerRelativeUrl('#{server_path}')/versions(#{version_id})") rescue Sharepoint::SPException => e log_as(__method__, e) nil end
find_folder(path)
click to toggle source
# File lib/sharepoint_api/file_system.rb, line 143 def find_folder(path) server_path = server_relative_path(path) site.query(:get, "GetFolderByServerRelativeUrl('#{server_path}')") rescue Sharepoint::SPException => e log_as(__method__, e) false end
find_library(name)
click to toggle source
# File lib/sharepoint_api/file_system.rb, line 174 def find_library(name) encoded_name = encode_path(name) site.query :get, "Lists/GetByTitle('#{encoded_name}')" rescue Sharepoint::SPException => e log_as(__method__, e) nil end
move_file(path, new_path)
click to toggle source
# File lib/sharepoint_api/file_system.rb, line 60 def move_file(path, new_path) server_path = server_relative_path(path) new_server_path = server_relative_path(new_path) site.query( :post, "GetFileByServerRelativeUrl(@v)/MoveTo?@v='#{server_path}'&newurl='#{new_server_path}'&flags=0" ) true rescue Sharepoint::SPException => e log_as(__method__, e) false end
remove_file(path)
click to toggle source
# File lib/sharepoint_api/file_system.rb, line 86 def remove_file(path) site.query( :post, "GetFileByServerRelativeUrl('#{server_relative_path(path)}')/Recycle" ) rescue Sharepoint::SPException => e reraise_if_lock_error(e) log_as(__method__, e) nil end
remove_file_version(path, version_id)
click to toggle source
# File lib/sharepoint_api/file_system.rb, line 98 def remove_file_version(path, version_id) site.query( :post, "GetFileByServerRelativeUrl('#{server_relative_path(path)}')/Versions/DeleteById(vid=#{version_id})" ) rescue Sharepoint::SPException => e log_as(__method__, e) nil end
remove_folder(path)
click to toggle source
# File lib/sharepoint_api/file_system.rb, line 151 def remove_folder(path) server_path = server_relative_path(path) site.query(:post, "GetFolderByServerRelativeUrl('#{server_path}')/Recycle") rescue Sharepoint::SPException => e log_as(__method__, e) nil end
rename_file(path, rename_to)
click to toggle source
# File lib/sharepoint_api/file_system.rb, line 75 def rename_file(path, rename_to) validate_update_list_item( path, { 'FileLeafRef' => rename_to } ) rescue SharepointApi::ItemUpdateError => _e false end
retrieve_file_content(path)
click to toggle source
# File lib/sharepoint_api/file_system.rb, line 108 def retrieve_file_content(path) server_path = server_relative_path(path) site.query(:get, "GetFileByServerRelativeUrl('#{server_path}')/$value", { binaryStringResponseBody: true }.to_json, true) rescue Sharepoint::SPException => e reraise_if_lock_error(e) log_as(__method__, e) raise FileNotFoundError, "The file #{path} does not exist." end
Private Instance Methods
reraise_if_lock_error(error)
click to toggle source
# File lib/sharepoint_api/file_system.rb, line 186 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