sharepoint_api 1.0.1 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d375981d2a55b77a670835c5c1af3f72226c219c41fdf41ecc0acd97f130a625
4
- data.tar.gz: fbc8130aed3705b7d69355de908cc97470303d7437233a635fe270c09d8086b1
3
+ metadata.gz: eac6402d99bf11213a9a8edc411745d2056ec8ffd3846f5579b91e3383709515
4
+ data.tar.gz: ef5281daee7e600d3a67a480c561e76779eff8fcb4e8bec8005894500dc43361
5
5
  SHA512:
6
- metadata.gz: 45750dcb71e8bcad6bdd11d670df8522205693fe7c08708090782e9ddb5e9c9a6f0d30b152728c9d02951619f47f8a99b296992cc64c6cd1110618c618a86b89
7
- data.tar.gz: 1d3e0c1da95ecced3228a583552c2900a8f91ff8fb93f46b6363cbfa983fa1fa86ee527f44f14774c1b9db13c314e9b9b0f8ae7901668ed6a78129e89e1d97a9
6
+ metadata.gz: 5f3a17b7be2e3a31b9d45f26d407750979d6d2d9946e5b5c46030eb9d49f06a3c02557bcfc926ddb6277828fe962920780d9cca5dc67465b6bea5267ec27c113
7
+ data.tar.gz: ce320268dcc75d3348bab171a58874e075590bbb2a2e2e49c86a05d6bcbaea1568b3f832732506fe9c17f35fefb7ffbf99705c509e63079070dbd6f6538f2c9c
data/.pryrc ADDED
@@ -0,0 +1,46 @@
1
+ #!/usr/env/bin ruby
2
+
3
+ # user = `echo "$USER"`.strip
4
+ class ProgrammerError < StandardError; end
5
+
6
+ if defined?(Pry)
7
+ Pry.config.editor = 'vim'
8
+
9
+ # Hit enter to repeat the last command.
10
+ Pry::Commands.command(/^$/, 'Repeat last command.') do
11
+ pry_instance.run_command Pry.history.to_a.last
12
+ end
13
+
14
+ Pry::Commands.command('args', 'Display local variables.') do
15
+ pry_instance.run_command 'ls -l'
16
+ end
17
+
18
+ Pry.commands.alias_command 'ss', 'show-source'
19
+ Pry.commands.alias_command 'q', 'quit'
20
+ Pry.commands.alias_command 'w', 'whereami'
21
+ Pry.commands.alias_command 'r', 'reload-code'
22
+ Pry.commands.alias_command 'ed', 'edit'
23
+ Pry.commands.alias_command 'ec', 'edit -c' # open current file in editor
24
+ end
25
+
26
+ if defined?(PryByebug)
27
+ Pry.commands.alias_command 'b', 'backtrace'
28
+ Pry.commands.alias_command 'c', 'continue'
29
+ Pry.commands.alias_command 'n', 'next'
30
+ Pry.commands.alias_command 's', 'step'
31
+ end
32
+
33
+ class String
34
+ def gitize
35
+ gsub(/\W+$/, ''). # kill trailing whitespace
36
+ gsub(/\W+/, '-'). # replace whitespace with -
37
+ gsub(/([A-Z])/, '-\1'). # prepend dash to capitals
38
+ gsub(/^-/, ''). # strip leading dash
39
+ gsub(/-+/, '-'). # compress multiple dashes to a single dash
40
+ downcase
41
+ end
42
+
43
+ def prize
44
+ gsub(/\W+$/, '').gsub(/\W+/, ' ').gsub(/\b(?<!['’`])[a-z]/, &:capitalize)
45
+ end
46
+ end
data/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
- ## [1.0.0] - 2020-12-07
2
- * Initial Release
1
+ ## [2.2.0] - 2021-07-06
2
+ * Use $select queries to vastly speed up FileInfo#version lookup.
3
+
4
+ ## [2.1.0] - 2021-07-06
5
+ * Drop feature of add_file creating a folder if one didn't exist as it introduced a security issue where a folder could be created that didn't have access restricted to routing participants.
6
+
7
+ ## [2.0.0] - 2021-06-28
8
+ * Update proof-sharepoint-ruby to escape apostrophes.
9
+ * Change usage of apostrophe escaping.
10
+
11
+ ## [1.0.3] - 2021-01-12
12
+ * Handle edge case where FileInfo file#modified_by refers to a user that no longer exists.
13
+
14
+ ## [1.0.2] - 2021-01-04
15
+ * Handle edge case where FileInfo file/file version refers to a user that no longer exists.
3
16
 
4
17
  ## [1.0.1] - 2020-12-14
5
- * Added new method called fetch_role_assignments => allows a user to get all the current role assignments on a SharePoint folder
18
+ * Added new method called fetch_role_assignments => allows a user to get all the current role assignments on a SharePoint folder
19
+
20
+ ## [1.0.0] - 2020-12-07
21
+ * Initial Release
data/Gemfile CHANGED
@@ -5,9 +5,14 @@ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
5
5
  # Specify your gem's dependencies in sharepoint_api.gemspec
6
6
  gemspec
7
7
 
8
- gem 'faker'
8
+ gem 'faker', '~> 2.15'
9
+ gem 'guard', '~> 2.16'
10
+ gem 'guard-rspec', '~> 4.7'
11
+ gem 'pry', '~> 0.13.1'
12
+ gem 'pry-byebug', '~> 3.9'
13
+ gem 'pry-rescue', '~> 1.5'
9
14
  gem 'rake', '~> 13.0'
10
15
  gem 'rspec', '~> 3.6'
11
- gem 'rspec-collection_matchers'
16
+ gem 'rspec-collection_matchers', '~> 1.2'
12
17
  gem 'rubocop', '~> 1.5'
13
18
  gem 'rubocop-rspec', '~> 2.0'
data/Gemfile.lock CHANGED
@@ -1,31 +1,71 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sharepoint_api (1.0.0)
4
+ sharepoint_api (2.2.0)
5
5
  addressable (~> 2.7)
6
- proof-sharepoint-ruby (~> 1.0)
6
+ proof-sharepoint-ruby (~> 2.0)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
- addressable (2.7.0)
11
+ addressable (2.8.0)
12
12
  public_suffix (>= 2.0.2, < 5.0)
13
13
  ast (2.4.1)
14
+ byebug (11.1.3)
15
+ coderay (1.1.3)
14
16
  concurrent-ruby (1.1.7)
15
17
  curb (0.9.10)
16
18
  diff-lcs (1.4.4)
17
19
  faker (2.15.1)
18
20
  i18n (>= 1.6, < 2)
21
+ ffi (1.14.2)
22
+ formatador (0.2.5)
23
+ guard (2.16.2)
24
+ formatador (>= 0.2.4)
25
+ listen (>= 2.7, < 4.0)
26
+ lumberjack (>= 1.0.12, < 2.0)
27
+ nenv (~> 0.1)
28
+ notiffany (~> 0.0)
29
+ pry (>= 0.9.12)
30
+ shellany (~> 0.0)
31
+ thor (>= 0.18.1)
32
+ guard-compat (1.2.1)
33
+ guard-rspec (4.7.3)
34
+ guard (~> 2.1)
35
+ guard-compat (~> 1.1)
36
+ rspec (>= 2.99.0, < 4.0)
19
37
  i18n (1.8.5)
20
38
  concurrent-ruby (~> 1.0)
39
+ interception (0.5)
40
+ listen (3.4.0)
41
+ rb-fsevent (~> 0.10, >= 0.10.3)
42
+ rb-inotify (~> 0.9, >= 0.9.10)
43
+ lumberjack (1.2.8)
44
+ method_source (1.0.0)
45
+ nenv (0.3.0)
46
+ notiffany (0.1.3)
47
+ nenv (~> 0.1)
48
+ shellany (~> 0.0)
21
49
  parallel (1.20.1)
22
50
  parser (2.7.2.0)
23
51
  ast (~> 2.4.1)
24
- proof-sharepoint-ruby (1.0.0)
52
+ proof-sharepoint-ruby (2.0.0)
25
53
  curb (~> 0.8, <= 0.9.10)
54
+ pry (0.13.1)
55
+ coderay (~> 1.1)
56
+ method_source (~> 1.0)
57
+ pry-byebug (3.9.0)
58
+ byebug (~> 11.0)
59
+ pry (~> 0.13.0)
60
+ pry-rescue (1.5.2)
61
+ interception (>= 0.5)
62
+ pry (>= 0.12.0)
26
63
  public_suffix (4.0.6)
27
64
  rainbow (3.0.0)
28
65
  rake (13.0.1)
66
+ rb-fsevent (0.10.4)
67
+ rb-inotify (0.10.1)
68
+ ffi (~> 1.0)
29
69
  regexp_parser (2.0.0)
30
70
  rexml (3.2.4)
31
71
  rspec (3.10.0)
@@ -58,19 +98,26 @@ GEM
58
98
  rubocop (~> 1.0)
59
99
  rubocop-ast (>= 1.1.0)
60
100
  ruby-progressbar (1.10.1)
101
+ shellany (0.0.1)
102
+ thor (1.0.1)
61
103
  unicode-display_width (1.7.0)
62
104
 
63
105
  PLATFORMS
64
106
  ruby
65
107
 
66
108
  DEPENDENCIES
67
- faker
109
+ faker (~> 2.15)
110
+ guard (~> 2.16)
111
+ guard-rspec (~> 4.7)
112
+ pry (~> 0.13.1)
113
+ pry-byebug (~> 3.9)
114
+ pry-rescue (~> 1.5)
68
115
  rake (~> 13.0)
69
116
  rspec (~> 3.6)
70
- rspec-collection_matchers
117
+ rspec-collection_matchers (~> 1.2)
71
118
  rubocop (~> 1.5)
72
119
  rubocop-rspec (~> 2.0)
73
120
  sharepoint_api!
74
121
 
75
122
  BUNDLED WITH
76
- 1.17.2
123
+ 2.2.4
data/Guardfile ADDED
@@ -0,0 +1,42 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ ## Uncomment and set this to only include directories you want to watch
5
+ # directories %w(app lib config test spec features) \
6
+ # .select{|d| Dir.exist?(d) ? d : UI.warning("Directory #{d} does not exist")}
7
+
8
+ ## Note: if you are using the `directories` clause above and you are not
9
+ ## watching the project directory ('.'), then you will want to move
10
+ ## the Guardfile to a watched dir and symlink it back, e.g.
11
+ #
12
+ # $ mkdir config
13
+ # $ mv Guardfile config/
14
+ # $ ln -s config/Guardfile .
15
+ #
16
+ # and, you'll have to watch "config/Guardfile" instead of "Guardfile"
17
+
18
+ # Note: The cmd option is now required due to the increasing number of ways
19
+ # rspec may be run, below are examples of the most common uses.
20
+ # * bundler: 'bundle exec rspec'
21
+ # * bundler binstubs: 'bin/rspec'
22
+ # * spring: 'bin/rspec' (This will use spring if running and you have
23
+ # installed the spring binstubs per the docs)
24
+ # * zeus: 'zeus rspec' (requires the server to be started separately)
25
+ # * 'just' rspec: 'rspec'
26
+
27
+ guard :rspec, cmd: 'echo -e "\033c"; bundle exec rspec' do
28
+ require 'guard/rspec/dsl'
29
+ dsl = Guard::RSpec::Dsl.new(self)
30
+
31
+ # Feel free to open issues for suggestions and improvements
32
+
33
+ # RSpec files
34
+ rspec = dsl.rspec
35
+ watch(rspec.spec_helper) { rspec.spec_dir }
36
+ watch(rspec.spec_support) { rspec.spec_dir }
37
+ watch(rspec.spec_files)
38
+
39
+ # Ruby files
40
+ ruby = dsl.ruby
41
+ dsl.watch_spec_files_for(ruby.lib_files)
42
+ end
data/README.md CHANGED
@@ -39,25 +39,27 @@ api = SharepointApi.new(
39
39
 
40
40
  api.fetch_content_types # or whatever method you want to test.
41
41
  ```
42
+
42
43
  ## Development
43
44
 
44
45
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
45
46
 
46
47
  To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
47
48
 
49
+ > NOTE: run `bundle install` and commit the changes to the Gemfile.lock before deploying a new version.
50
+
48
51
  ## Testing
49
52
 
50
- Run the test suite:
51
- `rspec`
53
+ Start the test suite watcher:
54
+ `bundle exec guard`
52
55
 
53
- Run the tests for just one file:
54
- `rspec spec/sharepoint_api/items_spec.rb`
56
+ Run the tests for just one file just enter the filename in the Guard console.
57
+ `spec/sharepoint_api/items_spec.rb`
55
58
 
56
59
  ## Contributing
57
60
 
58
61
  Bug reports and pull requests are welcome on GitHub at https://github.com/anlek/sharepoint_api. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/anlek/sharepoint_api/blob/master/CODE_OF_CONDUCT.md).
59
62
 
60
-
61
63
  ## License
62
64
 
63
65
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
data/bin/console CHANGED
@@ -7,8 +7,8 @@ require "sharepoint_api"
7
7
  # with your gem easier. You can also use a different console, if you like.
8
8
 
9
9
  # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
11
- # Pry.start
10
+ require "pry"
11
+ Pry.start
12
12
 
13
- require "irb"
14
- IRB.start(__FILE__)
13
+ # require "irb"
14
+ # IRB.start(__FILE__)
@@ -0,0 +1,38 @@
1
+ [XXXXX](https://proof-tech.atlassian.net/browse/XXXXX)
2
+
3
+ ### Overview
4
+
5
+ Please include a summary of the changes in this pull request.
6
+ List any dependencies that are required before this change is applied.
7
+
8
+ ### Solution
9
+
10
+ How did you solve the problem?
11
+ Call out any particular implementation choices or design decisions you made
12
+
13
+ ### Screenshots
14
+
15
+ [insert screenshots here]
16
+
17
+ ### Testing Instructions
18
+
19
+ Describe, for your colleagues, how they can test your code locally on their system
20
+
21
+ ### Pre-Merge Checklist
22
+
23
+ - [ ] I have updated the version and changelog in a different PR than bug fixes and features.
24
+ - [ ] The work here reflects the user stories in the JIRA ticket(s) listed at the top of this pull request
25
+ - [ ] This pull request has been referenced via URL in the JIRA ticket(s) listed
26
+ - [ ] I have performed a self-review of the code I have written here
27
+ - [ ] I have done end-to-end QA testing of sections of the code I have altered
28
+ - [ ] My changes generate no new warnings / errors in the console
29
+ - [ ] I have written/updated Ruby tests for the areas of the code base that I have modified
30
+ - [ ] I am prepared for this code to go to production today (or there is a WIP label on the pull request)
31
+ - [ ] I am prepared to write hotfixes or rollback my code if something goes wrong
32
+
33
+ ### Gem Deployment Instructions
34
+
35
+ 1. `bundle exec rake install`
36
+ 2. `bundle exec rake release`
37
+
38
+ Reminder that deploy instructions are in the [here](https://github.com/proofgov/sharepoint_api#development).
@@ -62,11 +62,11 @@ class SharepointApi
62
62
  @site = build_connection
63
63
  end
64
64
 
65
- def site_relative_path(path, preview: false)
65
+ def site_relative_path(path, safe_quote: true)
66
66
  file_path = [
67
67
  library_name, path
68
68
  ].reject { |p| p.nil? || p == '' }.join('/')
69
- encode_path(file_path, preview: preview)
69
+ encode_path(file_path, safe_quote: safe_quote)
70
70
  end
71
71
 
72
72
  def server_relative_path(path)
@@ -81,9 +81,9 @@ class SharepointApi
81
81
  "#{protocol}://#{host}/#{site_path}"
82
82
  end
83
83
 
84
- def encode_path(path, preview: false)
84
+ def encode_path(path, safe_quote: true)
85
85
  path = Addressable::URI.encode(path)
86
- path.gsub!(/'/, '%27%27') unless preview
86
+ path.gsub!(/'/, '%27%27') if safe_quote
87
87
  path.gsub!('+', '%2B')
88
88
  path
89
89
  end
@@ -1,5 +1,33 @@
1
+ require_relative 'sharepoint_error'
2
+
1
3
  class SharepointApi
2
4
  class FileInfo
5
+ class FileInfoError < SharepointError; end
6
+
7
+ ##
8
+ # Get all data required to build a FileInfo object without subsequent API calls.
9
+ FILE_SELECT_QUERY_WITH_VERSIONS = begin
10
+ sub_query = %w[
11
+ ModifiedBy/LoginName
12
+ ListItemAllFields/Id
13
+ Versions/Id
14
+ Versions/Created
15
+ Versions/IsCurrentVersion
16
+ Versions/CreatedBy/LoginName
17
+ ].join(',')
18
+ "$select=Name,UpdatedAt,MajorVersion,TimeLastModified,#{sub_query}&$expand=#{sub_query}"
19
+ end.freeze
20
+
21
+ ##
22
+ # Get just enough data to build a FileInfo object that suports to_h
23
+ FILE_SELECT_QUERY = begin
24
+ sub_query = %w[
25
+ ModifiedBy/LoginName
26
+ ListItemAllFields/Id
27
+ ].join(',')
28
+ "$select=Name,UpdatedAt,MajorVersion,TimeLastModified,Versions,#{sub_query}&$expand=#{sub_query}"
29
+ end.freeze
30
+
3
31
  extend Forwardable
4
32
  attr_reader :version, :version_id, :file, :updated_at
5
33
 
@@ -31,7 +59,7 @@ class SharepointApi
31
59
  version_id,
32
60
  created_at: updated_at,
33
61
  current: true,
34
- creator_login: file.modified_by.login_name
62
+ creator_login: safe_modified_by(file)&.login_name
35
63
  )
36
64
 
37
65
  return @all_versions unless version > 1
@@ -41,7 +69,7 @@ class SharepointApi
41
69
  file_version.id,
42
70
  created_at: Time.parse(file_version.created),
43
71
  current: file_version.is_current_version,
44
- creator_login: file_version.creator.login_name
72
+ creator_login: safe_created_by(file_version)&.login_name
45
73
  )
46
74
  end
47
75
 
@@ -63,5 +91,24 @@ class SharepointApi
63
91
  **attrs
64
92
  )
65
93
  end
94
+
95
+ def safe_modified_by(file)
96
+ file.modified_by
97
+ rescue Sharepoint::SPException => e
98
+ return nil if e.message =~ /User cannot be found/
99
+
100
+ raise(FileInfoError, e.message)
101
+ end
102
+
103
+ def safe_created_by(file_version)
104
+ return file_version.creator if file_version.data['CreatedBy']['__deferred']
105
+ return file_version.created_by if file_version.data['CreatedBy']['__metadata']
106
+
107
+ nil
108
+ rescue Sharepoint::SPException => e
109
+ return nil if e.message =~ /User cannot be found/
110
+
111
+ raise(FileInfoError, e.message)
112
+ end
66
113
  end
67
114
  end
@@ -9,26 +9,19 @@ class SharepointApi
9
9
  def add_file(path, content)
10
10
  folder_path = File.dirname(path)
11
11
  file_name = encode_path(File.basename(path))
12
- begin
13
- retries ||= 0
14
- FileInfo.wrap(
15
- site.query(
16
- :post,
17
- "GetFolderByServerRelativeUrl('#{site_relative_path(folder_path)}')/Files" \
18
- "/Add(overwrite=true,url='#{file_name}')",
19
- content
20
- )
12
+ FileInfo.wrap(
13
+ site.query(
14
+ :post,
15
+ "GetFolderByServerRelativeUrl('#{site_relative_path(folder_path)}')/Files" \
16
+ "/Add(overwrite=true,url='#{file_name}')?#{FileInfo::FILE_SELECT_QUERY}",
17
+ content
21
18
  )
22
- rescue Sharepoint::SPException => e
23
- reraise_if_lock_error(e)
24
-
25
- log_as(__method__, e)
26
- log_as(__method__, "adding folder with path #{folder_path}")
27
- add_folder(folder_path)
28
- retry if (retries += 1) < 2
29
- log_as(__method__, e, level: :warn)
30
- nil
31
- end
19
+ )
20
+ rescue Sharepoint::SPException => e
21
+ reraise_if_lock_error(e)
22
+
23
+ log_as(__method__, e)
24
+ nil
32
25
  end
33
26
 
34
27
  def file_exists?(path)
@@ -39,11 +32,18 @@ class SharepointApi
39
32
  false
40
33
  end
41
34
 
35
+ ##
36
+ # Querying a non-existent file will raise a 500 error so we check for existence first.
42
37
  def find_file(path)
38
+ return nil unless file_exists?(path)
39
+
43
40
  server_path = server_relative_path(path)
44
- FileInfo.wrap(
45
- site.query(:get, "GetFileByServerRelativeUrl('#{server_path}')")
46
- )
41
+ result = site.query(:get, "GetFileByServerRelativeUrl('#{server_path}')?#{FileInfo::FILE_SELECT_QUERY_WITH_VERSIONS}", nil, true)
42
+ result = JSON.parse(result)
43
+ result['d']['Versions'] = Sharepoint::Site.make_object_from_response(site, { 'd' => result['d']['Versions'] })
44
+ file = Sharepoint::Site.make_object_from_response(site, result)
45
+
46
+ FileInfo.wrap(file)
47
47
  rescue Sharepoint::SPException => e
48
48
  log_as(__method__, e)
49
49
  nil
@@ -117,8 +117,14 @@ class SharepointApi
117
117
 
118
118
  def files_in_folder(path)
119
119
  server_path = server_relative_path(path)
120
- site.query(:get, "GetFolderByServerRelativeUrl('#{server_path}')/Files").
121
- map { |file| FileInfo.new(file) }
120
+ result = site.query(:get, "GetFolderByServerRelativeUrl('#{server_path}')/Files?#{FileInfo::FILE_SELECT_QUERY_WITH_VERSIONS}", nil, true)
121
+ result = JSON.parse(result)
122
+ result.dig('d', 'results')&.map do |file_result|
123
+ file_result['Versions'] = Sharepoint::Site.make_object_from_response(site, { 'd' => file_result['Versions'] })
124
+ end
125
+ files = Sharepoint::Site.make_object_from_response(site, result)
126
+
127
+ files.map { |file| FileInfo.new(file) }
122
128
  rescue Sharepoint::SPException => e
123
129
  log_as(__method__, e)
124
130
  nil
@@ -97,14 +97,19 @@ class SharepointApi
97
97
  false
98
98
  end
99
99
 
100
- def fetch_role_assignments(path)
100
+ def fetch_role_assignments(path, principal_id: nil)
101
101
  server_path = server_relative_path(path)
102
102
  list_item_path = "GetFolderByServerRelativeUrl('#{server_path}')/ListItemAllFields"
103
103
  query = '$expand=Member,RoleDefinitionBindings&$select=RoleDefinitionBindings/Name&$select=RoleDefinitionBindings/Id,PrincipalId,Member/LoginName'
104
104
 
105
+ unless principal_id.nil?
106
+ principal_filter = encode_path("PrincipalId eq #{principal_id}")
107
+ query += "&$filter=#{principal_filter}"
108
+ end
109
+
105
110
  response = site.query(:get, "#{list_item_path}/RoleAssignments?#{query}")
106
111
 
107
- response.map do |assignment|
112
+ formatted = response.map do |assignment|
108
113
  data = assignment.data
109
114
 
110
115
  current_roles = data['RoleDefinitionBindings']['results'].map { |rdb| { role_id: rdb['Id'], role_name: rdb['Name'] } }
@@ -115,6 +120,8 @@ class SharepointApi
115
120
  roles: current_roles
116
121
  }
117
122
  end
123
+
124
+ principal_id.nil? ? formatted : formatted.first
118
125
  rescue Sharepoint::SPException => e
119
126
  log_as(__method__, e)
120
127
  false
@@ -1,3 +1,3 @@
1
1
  class SharepointApi
2
- VERSION = '1.0.1'.freeze
2
+ VERSION = '2.2.0'.freeze
3
3
  end
@@ -16,16 +16,16 @@ Gem::Specification.new do |spec|
16
16
  spec.metadata['source_code_uri'] = 'https://github.com/proofgov/sharepoint_api'
17
17
  spec.metadata['changelog_uri'] = 'https://github.com/proofgov/sharepoint_api/blob/master/CHANGELOG.md'
18
18
 
19
- spec.add_runtime_dependency('proof-sharepoint-ruby', '~> 1.0')
20
19
  spec.add_runtime_dependency('addressable', '~> 2.7')
20
+ spec.add_runtime_dependency('proof-sharepoint-ruby', '~> 2.0')
21
21
 
22
22
  # Specify which files should be added to the gem when it is released.
23
23
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
24
24
  spec.files = Dir.chdir(File.expand_path(__dir__)) do
25
25
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
26
26
  end
27
- spec.bindir = 'exe'
28
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
27
+ spec.bindir = 'bin'
28
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
29
29
 
30
30
  spec.require_paths = ['lib']
31
31
  end
metadata CHANGED
@@ -1,67 +1,72 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sharepoint_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kalek
8
8
  - Marlen Brunner
9
9
  - Danella Olsen
10
10
  autorequire:
11
- bindir: exe
11
+ bindir: bin
12
12
  cert_chain: []
13
- date: 2020-12-14 00:00:00.000000000 Z
13
+ date: 2021-07-07 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
- name: proof-sharepoint-ruby
16
+ name: addressable
17
17
  requirement: !ruby/object:Gem::Requirement
18
18
  requirements:
19
19
  - - "~>"
20
20
  - !ruby/object:Gem::Version
21
- version: '1.0'
21
+ version: '2.7'
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
26
  - - "~>"
27
27
  - !ruby/object:Gem::Version
28
- version: '1.0'
28
+ version: '2.7'
29
29
  - !ruby/object:Gem::Dependency
30
- name: addressable
30
+ name: proof-sharepoint-ruby
31
31
  requirement: !ruby/object:Gem::Requirement
32
32
  requirements:
33
33
  - - "~>"
34
34
  - !ruby/object:Gem::Version
35
- version: '2.7'
35
+ version: '2.0'
36
36
  type: :runtime
37
37
  prerelease: false
38
38
  version_requirements: !ruby/object:Gem::Requirement
39
39
  requirements:
40
40
  - - "~>"
41
41
  - !ruby/object:Gem::Version
42
- version: '2.7'
42
+ version: '2.0'
43
43
  description: A tool to make it easier to talk to sharepoint (via the proof-sharepoint-ruby
44
44
  gem)
45
45
  email:
46
46
  - akalek@proofgov.com
47
47
  - mbrunner@proofgov.com
48
48
  - dolsen@proofgov.com
49
- executables: []
49
+ executables:
50
+ - console
51
+ - setup
50
52
  extensions: []
51
53
  extra_rdoc_files: []
52
54
  files:
53
55
  - ".gitignore"
56
+ - ".pryrc"
54
57
  - ".rspec"
55
58
  - ".rubocop.yml"
56
59
  - CHANGELOG.md
57
60
  - CODE_OF_CONDUCT.md
58
61
  - Gemfile
59
62
  - Gemfile.lock
63
+ - Guardfile
60
64
  - LICENSE.txt
61
65
  - README.md
62
66
  - Rakefile
63
67
  - bin/console
64
68
  - bin/setup
69
+ - docs/pull_request_template.md
65
70
  - lib/sharepoint_api.rb
66
71
  - lib/sharepoint_api/file_info.rb
67
72
  - lib/sharepoint_api/file_system.rb
@@ -95,7 +100,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
95
100
  - !ruby/object:Gem::Version
96
101
  version: '0'
97
102
  requirements: []
98
- rubygems_version: 3.0.3
103
+ rubygems_version: 3.2.4
99
104
  signing_key:
100
105
  specification_version: 4
101
106
  summary: SharepointApi allows you to interact with sharepoint in a simpler DSL.