Module: SharepointApi::FileSystem
- Included in:
- SharepointApi
- Defined in:
- lib/sharepoint_api/file_system.rb
Defined Under Namespace
Classes: FileNotFoundError, LockError
Instance Method Summary
collapse
Instance Method Details
#add_file(path, content) ⇒ Object
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
# 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) ⇒ Object
Perhaps this should support a recursive option to create all parents as needed?
136
137
138
139
140
141
|
# 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) ⇒ Object
159
160
161
162
163
164
165
166
167
168
169
170
171
172
|
# 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) ⇒ Boolean
27
28
29
30
31
32
33
|
# 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) ⇒ Object
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
# 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) ⇒ Object
Querying a non-existent file will raise a 500 error so we check for existence first.
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
# 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) ⇒ Object
52
53
54
55
56
57
58
|
# 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) ⇒ Object
143
144
145
146
147
148
149
|
# 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) ⇒ Object
174
175
176
177
178
179
180
|
# 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) ⇒ Object
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
# 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) ⇒ Object
86
87
88
89
90
91
92
93
94
95
96
|
# 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) ⇒ Object
98
99
100
101
102
103
104
105
106
|
# 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) ⇒ Object
151
152
153
154
155
156
157
|
# 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) ⇒ Object
75
76
77
78
79
80
81
82
83
84
|
# 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) ⇒ Object
108
109
110
111
112
113
114
115
116
|
# 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
|