microslop_one_drive 2.2.0 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +72 -6
  3. data/lib/microslop_one_drive/batch/batch_response.rb +15 -0
  4. data/lib/microslop_one_drive/batch/response.rb +18 -0
  5. data/lib/microslop_one_drive/client.rb +14 -154
  6. data/lib/microslop_one_drive/deserializers/drive_deserializer.rb +57 -0
  7. data/lib/microslop_one_drive/deserializers/drive_item_deserializer.rb +67 -0
  8. data/lib/microslop_one_drive/deserializers/parent_reference_deserializer.rb +20 -0
  9. data/lib/microslop_one_drive/deserializers/quota_deserializer.rb +24 -0
  10. data/lib/microslop_one_drive/deserializers/shared_with_me_item_deserializer.rb +48 -0
  11. data/lib/microslop_one_drive/deserializers/user_deserializer.rb +29 -0
  12. data/lib/microslop_one_drive/drive.rb +40 -10
  13. data/lib/microslop_one_drive/drive_item.rb +61 -63
  14. data/lib/microslop_one_drive/endpoints/all_drives.rb +17 -0
  15. data/lib/microslop_one_drive/endpoints/batch.rb +37 -0
  16. data/lib/microslop_one_drive/endpoints/batch_permissions.rb +42 -0
  17. data/lib/microslop_one_drive/endpoints/delta.rb +19 -0
  18. data/lib/microslop_one_drive/endpoints/drive.rb +27 -0
  19. data/lib/microslop_one_drive/endpoints/drive_exists.rb +15 -0
  20. data/lib/microslop_one_drive/endpoints/drive_item.rb +20 -0
  21. data/lib/microslop_one_drive/endpoints/drive_item_exists.rb +22 -0
  22. data/lib/microslop_one_drive/endpoints/me.rb +14 -0
  23. data/lib/microslop_one_drive/endpoints/permissions.rb +36 -0
  24. data/lib/microslop_one_drive/endpoints/shared_with_me.rb +14 -0
  25. data/lib/microslop_one_drive/endpoints/supports_sites.rb +27 -0
  26. data/lib/microslop_one_drive/file.rb +13 -0
  27. data/lib/microslop_one_drive/folder.rb +13 -0
  28. data/lib/microslop_one_drive/list_responses/drive_item_list.rb +21 -0
  29. data/lib/microslop_one_drive/list_responses/drive_list.rb +15 -0
  30. data/lib/microslop_one_drive/list_responses/list_response.rb +21 -0
  31. data/lib/microslop_one_drive/list_responses/permission_list.rb +27 -0
  32. data/lib/microslop_one_drive/list_responses/shared_with_me_list.rb +15 -0
  33. data/lib/microslop_one_drive/parent_reference.rb +14 -0
  34. data/lib/microslop_one_drive/permission_set.rb +13 -15
  35. data/lib/microslop_one_drive/quota.rb +14 -0
  36. data/lib/microslop_one_drive/root_folder.rb +13 -0
  37. data/lib/microslop_one_drive/shared_with_me_item.rb +44 -0
  38. data/lib/microslop_one_drive/user.rb +33 -5
  39. data/lib/microslop_one_drive/utils.rb +10 -0
  40. data/lib/microslop_one_drive/version.rb +1 -1
  41. data/lib/microslop_one_drive.rb +47 -8
  42. metadata +37 -67
  43. data/lib/microslop_one_drive/batch_response.rb +0 -13
  44. data/lib/microslop_one_drive/drive_item_list.rb +0 -32
  45. data/lib/microslop_one_drive/drive_list.rb +0 -13
  46. data/lib/microslop_one_drive/list_response.rb +0 -21
  47. data/lib/microslop_one_drive/permission_list.rb +0 -29
  48. data/lib/microslop_one_drive/response.rb +0 -16
@@ -0,0 +1,14 @@
1
+ module MicroslopOneDrive
2
+ class Quota
3
+ attr_reader :deleted, :remaining, :state, :total, :used, :upgrade_available
4
+
5
+ def initialize(deleted:, remaining:, state:, total:, used:, upgrade_available:)
6
+ @deleted = deleted
7
+ @remaining = remaining
8
+ @state = state
9
+ @total = total
10
+ @used = used
11
+ @upgrade_available = upgrade_available
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,13 @@
1
+ require "microslop_one_drive/folder"
2
+
3
+ module MicroslopOneDrive
4
+ class RootFolder < Folder
5
+ def root?
6
+ true
7
+ end
8
+
9
+ def build_full_path
10
+ "/drive/root:"
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,44 @@
1
+ module MicroslopOneDrive
2
+ class SharedWithMeItem
3
+ attr_reader :id, :name, :web_url, :size, :last_modified_date_time, :created_date_time, :created_by,
4
+ :last_modified_by, :remote_item
5
+
6
+ def initialize(
7
+ id:,
8
+ name:,
9
+ web_url:,
10
+ size:,
11
+ last_modified_date_time:,
12
+ created_date_time:,
13
+ created_by:,
14
+ last_modified_by:,
15
+ remote_item:
16
+ )
17
+ @id = id
18
+ @name = name
19
+ @web_url = web_url
20
+ @size = size
21
+ @last_modified_date_time = last_modified_date_time
22
+ @created_date_time = created_date_time
23
+ @created_by = created_by
24
+ @last_modified_by = last_modified_by
25
+ @remote_item = remote_item
26
+ end
27
+
28
+ def created_at
29
+ @created_date_time
30
+ end
31
+
32
+ def updated_at
33
+ @last_modified_date_time
34
+ end
35
+
36
+ def url
37
+ @web_url
38
+ end
39
+
40
+ def updated_by
41
+ @last_modified_by
42
+ end
43
+ end
44
+ end
@@ -1,12 +1,40 @@
1
1
  module MicroslopOneDrive
2
2
  class User
3
- attr_reader :email_address, :display_name
3
+ attr_reader :principal_name, :id, :display_name, :surname, :given_name, :preferred_language, :mail, :mobile_phone,
4
+ :job_title, :office_location, :business_phones
4
5
 
5
- def initialize(user_hash)
6
- @user_hash = user_hash
6
+ def initialize(
7
+ principal_name: nil,
8
+ id: nil,
9
+ display_name: nil,
10
+ surname: nil,
11
+ given_name: nil,
12
+ preferred_language: nil,
13
+ mail: nil,
14
+ mobile_phone: nil,
15
+ job_title: nil,
16
+ office_location: nil,
17
+ business_phones: []
18
+ )
19
+ @principal_name = principal_name
20
+ @id = id
21
+ @display_name = display_name
22
+ @surname = surname
23
+ @given_name = given_name
24
+ @preferred_language = preferred_language
25
+ @mail = mail
26
+ @mobile_phone = mobile_phone
27
+ @job_title = job_title
28
+ @office_location = office_location
29
+ @business_phones = business_phones
30
+ end
31
+
32
+ def email_address
33
+ mail
34
+ end
7
35
 
8
- @email_address = @user_hash.fetch("mail", nil)
9
- @display_name = @user_hash.fetch("displayName", nil)
36
+ def last_name
37
+ surname
10
38
  end
11
39
  end
12
40
  end
@@ -2,6 +2,16 @@ require "time"
2
2
 
3
3
  module MicroslopOneDrive
4
4
  module Utils
5
+ def self.deep_symbolize_keys(hash)
6
+ hash.transform_keys(&:to_sym).transform_values do
7
+ case it
8
+ when Hash then deep_symbolize_keys(it)
9
+ when Array then it.map { it.is_a?(Hash) ? deep_symbolize_keys(it) : it }
10
+ else it
11
+ end
12
+ end
13
+ end
14
+
5
15
  def self.safe_parse_time(value)
6
16
  return nil if value.nil? || value.to_s.strip.empty?
7
17
 
@@ -1,3 +1,3 @@
1
1
  module MicroslopOneDrive
2
- VERSION = "2.2.0"
2
+ VERSION = "3.1.0".freeze
3
3
  end
@@ -3,17 +3,56 @@ require "json"
3
3
 
4
4
  require_relative "microslop_one_drive/version"
5
5
  require_relative "microslop_one_drive/utils"
6
- require_relative "microslop_one_drive/errors/client_error"
6
+
7
+ # Deserializers
8
+ require_relative "microslop_one_drive/deserializers/user_deserializer"
9
+ require_relative "microslop_one_drive/deserializers/drive_deserializer"
10
+ require_relative "microslop_one_drive/deserializers/quota_deserializer"
11
+ require_relative "microslop_one_drive/deserializers/drive_item_deserializer"
12
+ require_relative "microslop_one_drive/deserializers/parent_reference_deserializer"
13
+ require_relative "microslop_one_drive/deserializers/shared_with_me_item_deserializer"
14
+
15
+ # Drive items
16
+ require_relative "microslop_one_drive/file"
17
+ require_relative "microslop_one_drive/folder"
18
+ require_relative "microslop_one_drive/root_folder"
19
+ require_relative "microslop_one_drive/drive_item"
20
+
21
+ # List Responses
22
+ require_relative "microslop_one_drive/list_responses/list_response"
23
+ require_relative "microslop_one_drive/list_responses/drive_list"
24
+ require_relative "microslop_one_drive/list_responses/drive_item_list"
25
+ require_relative "microslop_one_drive/list_responses/permission_list"
26
+ require_relative "microslop_one_drive/list_responses/shared_with_me_list"
27
+
28
+ # Batch
29
+ require_relative "microslop_one_drive/batch/batch_response"
30
+ require_relative "microslop_one_drive/batch/response"
31
+
32
+ # Other models
7
33
  require_relative "microslop_one_drive/user"
8
- require_relative "microslop_one_drive/list_response"
9
- require_relative "microslop_one_drive/drive_list"
34
+ require_relative "microslop_one_drive/parent_reference"
10
35
  require_relative "microslop_one_drive/drive"
11
- require_relative "microslop_one_drive/drive_item"
12
- require_relative "microslop_one_drive/drive_item_list"
13
- require_relative "microslop_one_drive/permission_list"
14
36
  require_relative "microslop_one_drive/permission_set"
15
37
  require_relative "microslop_one_drive/permission"
16
38
  require_relative "microslop_one_drive/audience"
17
- require_relative "microslop_one_drive/batch_response"
18
- require_relative "microslop_one_drive/response"
39
+ require_relative "microslop_one_drive/quota"
40
+ require_relative "microslop_one_drive/shared_with_me_item"
41
+
42
+ # Endpoints
43
+ require_relative "microslop_one_drive/endpoints/me"
44
+ require_relative "microslop_one_drive/endpoints/drive"
45
+ require_relative "microslop_one_drive/endpoints/all_drives"
46
+ require_relative "microslop_one_drive/endpoints/drive_exists"
47
+ require_relative "microslop_one_drive/endpoints/drive_item"
48
+ require_relative "microslop_one_drive/endpoints/drive_item_exists"
49
+ require_relative "microslop_one_drive/endpoints/delta"
50
+ require_relative "microslop_one_drive/endpoints/shared_with_me"
51
+ require_relative "microslop_one_drive/endpoints/permissions"
52
+ require_relative "microslop_one_drive/endpoints/batch"
53
+ require_relative "microslop_one_drive/endpoints/batch_permissions"
54
+ require_relative "microslop_one_drive/endpoints/supports_sites"
55
+
56
+ # Client
57
+ require_relative "microslop_one_drive/errors/client_error"
19
58
  require_relative "microslop_one_drive/client"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: microslop_one_drive
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.0
4
+ version: 3.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bradley Marques
@@ -23,64 +23,8 @@ dependencies:
23
23
  - - "~>"
24
24
  - !ruby/object:Gem::Version
25
25
  version: '0.24'
26
- - !ruby/object:Gem::Dependency
27
- name: minitest
28
- requirement: !ruby/object:Gem::Requirement
29
- requirements:
30
- - - "~>"
31
- - !ruby/object:Gem::Version
32
- version: '5'
33
- type: :development
34
- prerelease: false
35
- version_requirements: !ruby/object:Gem::Requirement
36
- requirements:
37
- - - "~>"
38
- - !ruby/object:Gem::Version
39
- version: '5'
40
- - !ruby/object:Gem::Dependency
41
- name: mocha
42
- requirement: !ruby/object:Gem::Requirement
43
- requirements:
44
- - - "~>"
45
- - !ruby/object:Gem::Version
46
- version: '2'
47
- type: :development
48
- prerelease: false
49
- version_requirements: !ruby/object:Gem::Requirement
50
- requirements:
51
- - - "~>"
52
- - !ruby/object:Gem::Version
53
- version: '2'
54
- - !ruby/object:Gem::Dependency
55
- name: rake
56
- requirement: !ruby/object:Gem::Requirement
57
- requirements:
58
- - - "~>"
59
- - !ruby/object:Gem::Version
60
- version: '13'
61
- type: :development
62
- prerelease: false
63
- version_requirements: !ruby/object:Gem::Requirement
64
- requirements:
65
- - - "~>"
66
- - !ruby/object:Gem::Version
67
- version: '13'
68
- - !ruby/object:Gem::Dependency
69
- name: rubocop
70
- requirement: !ruby/object:Gem::Requirement
71
- requirements:
72
- - - "~>"
73
- - !ruby/object:Gem::Version
74
- version: '1'
75
- type: :development
76
- prerelease: false
77
- version_requirements: !ruby/object:Gem::Requirement
78
- requirements:
79
- - - "~>"
80
- - !ruby/object:Gem::Version
81
- version: '1'
82
- description: Lightweight value objects and HTTP client for OneDrive delta sync, item
83
- metadata, and sharing permissions.
26
+ description: Simple and lightweight Ruby client for Microsoft Graph OneDrive/SharePoint
27
+ API.
84
28
  email:
85
29
  - ''
86
30
  executables: []
@@ -90,18 +34,43 @@ files:
90
34
  - README.md
91
35
  - lib/microslop_one_drive.rb
92
36
  - lib/microslop_one_drive/audience.rb
93
- - lib/microslop_one_drive/batch_response.rb
37
+ - lib/microslop_one_drive/batch/batch_response.rb
38
+ - lib/microslop_one_drive/batch/response.rb
94
39
  - lib/microslop_one_drive/client.rb
40
+ - lib/microslop_one_drive/deserializers/drive_deserializer.rb
41
+ - lib/microslop_one_drive/deserializers/drive_item_deserializer.rb
42
+ - lib/microslop_one_drive/deserializers/parent_reference_deserializer.rb
43
+ - lib/microslop_one_drive/deserializers/quota_deserializer.rb
44
+ - lib/microslop_one_drive/deserializers/shared_with_me_item_deserializer.rb
45
+ - lib/microslop_one_drive/deserializers/user_deserializer.rb
95
46
  - lib/microslop_one_drive/drive.rb
96
47
  - lib/microslop_one_drive/drive_item.rb
97
- - lib/microslop_one_drive/drive_item_list.rb
98
- - lib/microslop_one_drive/drive_list.rb
48
+ - lib/microslop_one_drive/endpoints/all_drives.rb
49
+ - lib/microslop_one_drive/endpoints/batch.rb
50
+ - lib/microslop_one_drive/endpoints/batch_permissions.rb
51
+ - lib/microslop_one_drive/endpoints/delta.rb
52
+ - lib/microslop_one_drive/endpoints/drive.rb
53
+ - lib/microslop_one_drive/endpoints/drive_exists.rb
54
+ - lib/microslop_one_drive/endpoints/drive_item.rb
55
+ - lib/microslop_one_drive/endpoints/drive_item_exists.rb
56
+ - lib/microslop_one_drive/endpoints/me.rb
57
+ - lib/microslop_one_drive/endpoints/permissions.rb
58
+ - lib/microslop_one_drive/endpoints/shared_with_me.rb
59
+ - lib/microslop_one_drive/endpoints/supports_sites.rb
99
60
  - lib/microslop_one_drive/errors/client_error.rb
100
- - lib/microslop_one_drive/list_response.rb
61
+ - lib/microslop_one_drive/file.rb
62
+ - lib/microslop_one_drive/folder.rb
63
+ - lib/microslop_one_drive/list_responses/drive_item_list.rb
64
+ - lib/microslop_one_drive/list_responses/drive_list.rb
65
+ - lib/microslop_one_drive/list_responses/list_response.rb
66
+ - lib/microslop_one_drive/list_responses/permission_list.rb
67
+ - lib/microslop_one_drive/list_responses/shared_with_me_list.rb
68
+ - lib/microslop_one_drive/parent_reference.rb
101
69
  - lib/microslop_one_drive/permission.rb
102
- - lib/microslop_one_drive/permission_list.rb
103
70
  - lib/microslop_one_drive/permission_set.rb
104
- - lib/microslop_one_drive/response.rb
71
+ - lib/microslop_one_drive/quota.rb
72
+ - lib/microslop_one_drive/root_folder.rb
73
+ - lib/microslop_one_drive/shared_with_me_item.rb
105
74
  - lib/microslop_one_drive/user.rb
106
75
  - lib/microslop_one_drive/utils.rb
107
76
  - lib/microslop_one_drive/version.rb
@@ -111,6 +80,7 @@ licenses:
111
80
  metadata:
112
81
  homepage_uri: https://github.com/bradleymarques/microslop_one_drive
113
82
  source_code_uri: https://github.com/bradleymarques/microslop_one_drive
83
+ rubygems_mfa_required: 'true'
114
84
  rdoc_options: []
115
85
  require_paths:
116
86
  - lib
@@ -127,6 +97,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
127
97
  requirements: []
128
98
  rubygems_version: 3.7.2
129
99
  specification_version: 4
130
- summary: Ruby client helpers for Microsoft Graph OneDrive/SharePoint API (drive items,
131
- delta, permissions).
100
+ summary: Simple and lightweight Ruby client for Microsoft Graph OneDrive/SharePoint
101
+ API.
132
102
  test_files: []
@@ -1,13 +0,0 @@
1
- module MicroslopOneDrive
2
- class BatchResponse
3
- attr_reader :responses
4
-
5
- def initialize
6
- @responses = []
7
- end
8
-
9
- def add_response(response)
10
- @responses << response
11
- end
12
- end
13
- end
@@ -1,32 +0,0 @@
1
- module MicroslopOneDrive
2
- class DriveItemList < ListResponse
3
- attr_reader :items
4
-
5
- def initialize(parsed_response)
6
- super(parsed_response)
7
-
8
- @parsed_response = parsed_response
9
- @items = build_items
10
- end
11
-
12
- private
13
-
14
- def build_items
15
- items = @parsed_response.fetch("value", []).map do
16
- MicroslopOneDrive::DriveItem.new(it)
17
- end
18
-
19
- set_parent_and_child_relationships(items)
20
- end
21
-
22
- def set_parent_and_child_relationships(items)
23
- items.each do |item|
24
- next if item.parent_id.nil?
25
- parent = items.find { it.id == item.parent_id }
26
- next if parent.nil?
27
-
28
- item.set_parent(parent)
29
- end
30
- end
31
- end
32
- end
@@ -1,13 +0,0 @@
1
- module MicroslopOneDrive
2
- class DriveList < ListResponse
3
- attr_reader :drives
4
-
5
- def initialize(response_hash)
6
- super(response_hash)
7
-
8
- @drives = response_hash.fetch("value", []).map do
9
- MicroslopOneDrive::Drive.new(it)
10
- end
11
- end
12
- end
13
- end
@@ -1,21 +0,0 @@
1
- module MicroslopOneDrive
2
- class ListResponse
3
- attr_reader :next_link, :next_token, :delta_link, :delta_token, :context
4
-
5
- def initialize(response_hash)
6
- @response_hash = response_hash
7
-
8
- @context = response_hash.fetch("@odata.context", nil)
9
-
10
- @next_link = response_hash.fetch("@odata.nextLink", nil)
11
- @next_token = @next_link.split("?token=").last if @next_link && !@next_link.empty?
12
-
13
- @delta_link = response_hash.fetch("@odata.deltaLink", nil)
14
- @delta_token = @delta_link.split("?token=").last if @delta_link && !@delta_link.empty?
15
- end
16
-
17
- def next_page?
18
- !next_link.nil?
19
- end
20
- end
21
- end
@@ -1,29 +0,0 @@
1
- module MicroslopOneDrive
2
- class PermissionList < ListResponse
3
- attr_reader :permissions
4
-
5
- def initialize(drive_item_id:, parsed_response: )
6
- super(parsed_response)
7
-
8
- @drive_item_id = drive_item_id
9
- @parsed_response = parsed_response
10
- @permissions = build_permissions(@drive_item_id, @parsed_response)
11
- end
12
-
13
- private
14
-
15
- def build_permissions(drive_item_id, parsed_response)
16
- value_list = parsed_response.is_a?(Array) ? parsed_response : parsed_response.fetch("value", [])
17
-
18
- permission_sets = value_list.map do
19
- MicroslopOneDrive::PermissionSet.new(drive_item_id: drive_item_id, parsed_response: it)
20
- end
21
-
22
- # At this stage, the permissions could contain multiple Audiences for the same Permission.
23
- # This is because OneDrive can return multiple permissions for the same thing.
24
- # For example, a file shared with one person and a public link will return in a single permission object.
25
- # We therefore need to "explode" the permission sets into multiple permissions, one for each Audience.
26
- permission_sets.flat_map(&:to_permissions)
27
- end
28
- end
29
- end
@@ -1,16 +0,0 @@
1
- module MicroslopOneDrive
2
- class Response
3
- attr_reader :id, :status, :headers, :body
4
-
5
- def initialize(response_hash)
6
- @id = response_hash.fetch("id")
7
- @status = response_hash.fetch("status")
8
- @headers = response_hash.fetch("headers")
9
- @body = response_hash.fetch("body")
10
- end
11
-
12
- def success?
13
- @status.between?(200, 299)
14
- end
15
- end
16
- end