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

Returns:

  • (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