lean-microsoft-graph 0.1.0 → 0.2.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +14 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +53 -0
- data/README.md +31 -1
- data/bin/console +1 -1
- data/lib/lean_microsoft_graph/authentication/credentials.rb +15 -0
- data/lib/lean_microsoft_graph/authentication/token_retriever.rb +22 -0
- data/lib/lean_microsoft_graph/client.rb +39 -0
- data/lib/lean_microsoft_graph/error.rb +5 -0
- data/lib/lean_microsoft_graph/resource.rb +48 -0
- data/lib/lean_microsoft_graph/resources/token_resource/token.rb +29 -0
- data/lib/lean_microsoft_graph/resources/token_resource.rb +26 -0
- data/lib/lean_microsoft_graph/resources/users_resource/user.rb +51 -0
- data/lib/lean_microsoft_graph/resources/users_resource/users.rb +27 -0
- data/lib/lean_microsoft_graph/resources/users_resource.rb +27 -0
- data/lib/lean_microsoft_graph/version.rb +5 -0
- data/lib/lean_microsoft_graph.rb +17 -0
- metadata +45 -6
- data/lib/lean/microsoft/graph/version.rb +0 -9
- data/lib/lean/microsoft/graph.rb +0 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 68d12b40dc1ac7a49f0871b42827af0428474d472e9b06f6e6b18cdfaff67138
|
4
|
+
data.tar.gz: f6493c4f976717411ad7b1a0fb08ee97a0faf416dcfa99f05b7375675e89e0f2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f38076f360a47acc6d05b4b985cf356503316bb90ab8c8e9ff826012005f26fbab25b03e092634987bda14987c2aefd887e7fe0c20d9c9ffce235e93e55e04ef
|
7
|
+
data.tar.gz: 25fe8eb56dafb3891d6b6409aa8e4605c4593e0272f9d3f60f131f7889e2da3d0f990ac1815643141baa14acff166ce22a4eb468c94b9e5096e80438f92a92f9
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,19 @@
|
|
1
|
+
# Changelog
|
2
|
+
|
3
|
+
All notable changes to this project will be documented in this file.
|
4
|
+
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
6
|
+
|
7
|
+
## [0.2.0] - 2023-11-04
|
8
|
+
### Added
|
9
|
+
- Ability to count users with `client.users.count`.
|
10
|
+
- Ability to retrieve users per page with `client.users.get_all(per_page)`.
|
11
|
+
- Ability to retrieve users by reference with `client.users.get_all_by_reference('reference')`.
|
12
|
+
|
1
13
|
## [Unreleased]
|
2
14
|
|
3
15
|
## [0.1.0] - 2023-08-28
|
4
16
|
|
5
17
|
- Initial release
|
18
|
+
|
19
|
+
[0.2.0]: https://github.com/betogrun/lean_microsoft_graph/releases/tag/v0.2.0
|
data/Gemfile
CHANGED
data/Gemfile.lock
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
lean-microsoft-graph (0.1.0)
|
5
|
+
faraday (~> 1.10)
|
6
|
+
faraday_middleware (~> 1.0)
|
7
|
+
|
8
|
+
GEM
|
9
|
+
remote: https://rubygems.org/
|
10
|
+
specs:
|
11
|
+
faraday (1.10.3)
|
12
|
+
faraday-em_http (~> 1.0)
|
13
|
+
faraday-em_synchrony (~> 1.0)
|
14
|
+
faraday-excon (~> 1.1)
|
15
|
+
faraday-httpclient (~> 1.0)
|
16
|
+
faraday-multipart (~> 1.0)
|
17
|
+
faraday-net_http (~> 1.0)
|
18
|
+
faraday-net_http_persistent (~> 1.0)
|
19
|
+
faraday-patron (~> 1.0)
|
20
|
+
faraday-rack (~> 1.0)
|
21
|
+
faraday-retry (~> 1.0)
|
22
|
+
ruby2_keywords (>= 0.0.4)
|
23
|
+
faraday-em_http (1.0.0)
|
24
|
+
faraday-em_synchrony (1.0.0)
|
25
|
+
faraday-excon (1.1.0)
|
26
|
+
faraday-httpclient (1.0.1)
|
27
|
+
faraday-multipart (1.0.4)
|
28
|
+
multipart-post (~> 2)
|
29
|
+
faraday-net_http (1.0.1)
|
30
|
+
faraday-net_http_persistent (1.2.0)
|
31
|
+
faraday-patron (1.0.0)
|
32
|
+
faraday-rack (1.0.0)
|
33
|
+
faraday-retry (1.0.3)
|
34
|
+
faraday_middleware (1.2.0)
|
35
|
+
faraday (~> 1.0)
|
36
|
+
minitest (5.20.0)
|
37
|
+
mocha (2.1.0)
|
38
|
+
ruby2_keywords (>= 0.0.5)
|
39
|
+
multipart-post (2.3.0)
|
40
|
+
rake (13.0.6)
|
41
|
+
ruby2_keywords (0.0.5)
|
42
|
+
|
43
|
+
PLATFORMS
|
44
|
+
x86_64-linux
|
45
|
+
|
46
|
+
DEPENDENCIES
|
47
|
+
lean-microsoft-graph!
|
48
|
+
minitest (~> 5.0)
|
49
|
+
mocha (~> 2.1)
|
50
|
+
rake (~> 13.0)
|
51
|
+
|
52
|
+
BUNDLED WITH
|
53
|
+
2.2.31
|
data/README.md
CHANGED
@@ -22,7 +22,37 @@ Or install it yourself as:
|
|
22
22
|
|
23
23
|
## Usage
|
24
24
|
|
25
|
-
|
25
|
+
To start using the LeanMicrosoftGraph gem, you need to create a client instance by providing the tenant_id, client_id, and client_secret.
|
26
|
+
|
27
|
+
### Initialize the client
|
28
|
+
|
29
|
+
```ruby
|
30
|
+
client = LeanMicrosoftGraph::Client.new(
|
31
|
+
tenant_id: 'your_tenant_id',
|
32
|
+
client_id: 'your_client_id',
|
33
|
+
client_secret: 'your_client_secret'
|
34
|
+
)
|
35
|
+
```
|
36
|
+
|
37
|
+
Replace 'your_tenant_id', 'your_client_id', and 'your_client_secret' with your actual Microsoft Azure credentials.
|
38
|
+
|
39
|
+
### Count the number of users
|
40
|
+
|
41
|
+
```ruby
|
42
|
+
count = client.users.count
|
43
|
+
puts "Number of users: #{count}"
|
44
|
+
```
|
45
|
+
|
46
|
+
### Retrieving all users
|
47
|
+
|
48
|
+
```ruby
|
49
|
+
per_page = 10 # Set the number of users you want per page
|
50
|
+
users = client.users.get_all(per_page)
|
51
|
+
|
52
|
+
users.each do |user|
|
53
|
+
puts "User ID: #{user.id}"
|
54
|
+
end
|
55
|
+
```
|
26
56
|
|
27
57
|
## Development
|
28
58
|
|
data/bin/console
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
4
|
require "bundler/setup"
|
5
|
-
require "
|
5
|
+
require "lean_microsoft_graph"
|
6
6
|
|
7
7
|
# You can add fixtures and/or initialization code here to make experimenting
|
8
8
|
# with your gem easier. You can also use a different console, if you like.
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module LeanMicrosoftGraph
|
4
|
+
module Authentication
|
5
|
+
class Credentials
|
6
|
+
attr_reader :tenant_id, :client_id, :client_secret
|
7
|
+
|
8
|
+
def initialize(tenant_id, client_id, client_secret)
|
9
|
+
@tenant_id = tenant_id
|
10
|
+
@client_id = client_id
|
11
|
+
@client_secret = client_secret
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module LeanMicrosoftGraph
|
4
|
+
module Authentication
|
5
|
+
class TokenRetriever
|
6
|
+
def initialize(token_resource)
|
7
|
+
@token_resource = token_resource
|
8
|
+
@token = nil
|
9
|
+
end
|
10
|
+
|
11
|
+
def to_proc
|
12
|
+
-> { retrieve }
|
13
|
+
end
|
14
|
+
|
15
|
+
def retrieve
|
16
|
+
return @token if @token && !@token.expired?
|
17
|
+
|
18
|
+
@token = @token_resource.renew
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module LeanMicrosoftGraph
|
4
|
+
class Client
|
5
|
+
def initialize(tenant_id:, client_id:, client_secret:, adapter: Faraday.default_adapter, stubs: nil)
|
6
|
+
@tenant_id = tenant_id
|
7
|
+
@client_id = client_id
|
8
|
+
@client_secret = client_secret
|
9
|
+
@adapter = adapter
|
10
|
+
@stubs = stubs # Stubs for testing purpouses
|
11
|
+
end
|
12
|
+
|
13
|
+
def users
|
14
|
+
Resources::UsersResource.new(connection)
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def connection
|
20
|
+
@connection ||= Faraday.new(url: 'https://graph.microsoft.com/v1.0') do |faraday|
|
21
|
+
faraday.request :authorization, 'Bearer', proc(&token_retriever)
|
22
|
+
faraday.request :url_encoded
|
23
|
+
faraday.request :retry, retry_statuses: [429]
|
24
|
+
faraday.adapter @adapter, @stubs
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def token_retriever
|
29
|
+
@token_retriever ||= begin
|
30
|
+
token_resource = Resources::TokenResource.new(credentials, @adapter, @stubs)
|
31
|
+
Authentication::TokenRetriever.new(token_resource)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def credentials
|
36
|
+
Authentication::Credentials.new(@tenant_id, @client_id, @client_secret)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module LeanMicrosoftGraph
|
4
|
+
class Resource
|
5
|
+
def initialize(connection)
|
6
|
+
@connection = connection
|
7
|
+
end
|
8
|
+
|
9
|
+
def get_request(url, params = {}, headers = {}, &block)
|
10
|
+
handle_response(@connection.get(url, params, headers, &block))
|
11
|
+
end
|
12
|
+
|
13
|
+
def post_request(url, body = {}, headers = {}, &block)
|
14
|
+
handle_response(@connection.post(url, body, headers, &block))
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def handle_response(response)
|
20
|
+
parsed_response = JSON.parse(response.body, symbolize_names: true)
|
21
|
+
return parsed_response if (200..299).include?(response.status)
|
22
|
+
|
23
|
+
error_message = parsed_response[:error_description]
|
24
|
+
error_code = parsed_response[:error_codes]
|
25
|
+
|
26
|
+
puts parsed_response
|
27
|
+
|
28
|
+
case { status: response.status, code: error_code, message: error_message }
|
29
|
+
in { status: 400, code: code, message: message }
|
30
|
+
raise Error, "Bad request. Code: #{code}. Message: #{message}"
|
31
|
+
in { status: 401, code: code, message: message }
|
32
|
+
raise Error, "Unauthorized. Check permissions or authentication token. Code: #{code}. Message: #{message}"
|
33
|
+
in { status: 403, code: code, message: message }
|
34
|
+
raise Error, "Forbidden. Insufficient permissions. Code: #{code}. Message: #{message}"
|
35
|
+
in { status: 404, code: code, message: message }
|
36
|
+
raise Error, "Resource not found. Code: #{code}. Message: #{message}"
|
37
|
+
in { status: 429, code: code, message: message }
|
38
|
+
raise Error, "Too many requests. Rate limit exceeded. Code: #{code}. Message: #{message}"
|
39
|
+
in { status: 500, code: code, message: message }
|
40
|
+
raise Error, "Internal server error. Code: #{code}. Message: #{message}"
|
41
|
+
in { status: 503, code: code, message: message }
|
42
|
+
raise Error, "Service unavailable. Try again later. Code: #{code}. Message: #{message}"
|
43
|
+
else
|
44
|
+
raise Error, "An unknown error occurred with status: #{response.status}."
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module LeanMicrosoftGraph
|
4
|
+
module Resources
|
5
|
+
class TokenResource
|
6
|
+
class Token
|
7
|
+
attr_reader :value, :expires_in
|
8
|
+
|
9
|
+
def initialize(value, expires_in)
|
10
|
+
@value = value
|
11
|
+
@expires_in = expires_in
|
12
|
+
@created_at = Time.now
|
13
|
+
end
|
14
|
+
|
15
|
+
def expires_at
|
16
|
+
@created_at + @expires_in
|
17
|
+
end
|
18
|
+
|
19
|
+
def expired?
|
20
|
+
Time.now > expires_at
|
21
|
+
end
|
22
|
+
|
23
|
+
def to_s
|
24
|
+
@value
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module LeanMicrosoftGraph
|
4
|
+
module Resources
|
5
|
+
class TokenResource < ::LeanMicrosoftGraph::Resource
|
6
|
+
def initialize(credentials, adapter = Faraday.default_adapter, stubs = nil)
|
7
|
+
super(Faraday.new { |faraday| faraday.adapter(adapter, stubs)})
|
8
|
+
@credentials = credentials
|
9
|
+
end
|
10
|
+
|
11
|
+
def renew
|
12
|
+
url = "https://login.microsoftonline.com/#{@credentials.tenant_id}/oauth2/v2.0/token"
|
13
|
+
headers = { 'Content-Type' => 'application/x-www-form-urlencoded' }
|
14
|
+
body = {
|
15
|
+
'client_id' => @credentials.client_id,
|
16
|
+
'scope' => 'https://graph.microsoft.com/.default',
|
17
|
+
'client_secret' => @credentials.client_secret,
|
18
|
+
'grant_type' => 'client_credentials'
|
19
|
+
}
|
20
|
+
response = post_request(url, URI.encode_www_form(body), headers)
|
21
|
+
|
22
|
+
Token.new(response[:access_token], response[:expires_in].to_i)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module LeanMicrosoftGraph
|
4
|
+
module Resources
|
5
|
+
class UsersResource
|
6
|
+
class User
|
7
|
+
def initialize(response)
|
8
|
+
@response = response
|
9
|
+
end
|
10
|
+
|
11
|
+
def id = @response[:id]
|
12
|
+
|
13
|
+
def display_name = @response[:displayName]
|
14
|
+
|
15
|
+
def mail = @response[:mail]
|
16
|
+
|
17
|
+
def user_principal_name = @response[:userPrincipalName]
|
18
|
+
|
19
|
+
def job_title = @response[:jobTitle]
|
20
|
+
|
21
|
+
def mobile_phone = @response[:mobilePhone]
|
22
|
+
|
23
|
+
def business_phones = @response[:businessPhones]
|
24
|
+
|
25
|
+
def given_name = @response[:givenName]
|
26
|
+
|
27
|
+
def surname = @response[:surname]
|
28
|
+
|
29
|
+
def preferred_language = @response[:preferredLanguage]
|
30
|
+
|
31
|
+
def office_location = @response[:officeLocation]
|
32
|
+
|
33
|
+
def to_h
|
34
|
+
{
|
35
|
+
id: id,
|
36
|
+
display_name: display_name,
|
37
|
+
mail: mail,
|
38
|
+
user_principal_name: user_principal_name,
|
39
|
+
job_title: job_title,
|
40
|
+
mobile_phone: mobile_phone,
|
41
|
+
business_phones: business_phones,
|
42
|
+
given_name: given_name,
|
43
|
+
surname: surname,
|
44
|
+
preferred_language: preferred_language,
|
45
|
+
office_location: office_location
|
46
|
+
}
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module LeanMicrosoftGraph
|
4
|
+
module Resources
|
5
|
+
class UsersResource
|
6
|
+
class Users
|
7
|
+
include Enumerable
|
8
|
+
|
9
|
+
def initialize(response)
|
10
|
+
@response = response
|
11
|
+
end
|
12
|
+
|
13
|
+
def each(&block)
|
14
|
+
collection.each(&block)
|
15
|
+
end
|
16
|
+
|
17
|
+
def next_batch_reference = @response[:'@odata.nextLink']
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def collection
|
22
|
+
@collection ||= @response[:value].map { |user| User.new(user) }
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module LeanMicrosoftGraph
|
4
|
+
module Resources
|
5
|
+
class UsersResource < ::LeanMicrosoftGraph::Resource
|
6
|
+
def count
|
7
|
+
get_request('users/$count') do |req|
|
8
|
+
req.headers['ConsistencyLevel'] = 'eventual'
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def get_all(per_page)
|
13
|
+
response = get_request('users') do |req|
|
14
|
+
req.params['$top'] = per_page
|
15
|
+
end
|
16
|
+
|
17
|
+
Users.new(response)
|
18
|
+
end
|
19
|
+
|
20
|
+
def get_all_by_reference(url)
|
21
|
+
response = get_request(url)
|
22
|
+
|
23
|
+
Users.new(response)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'faraday_middleware'
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
module LeanMicrosoftGraph
|
6
|
+
require 'lean_microsoft_graph/version'
|
7
|
+
require 'lean_microsoft_graph/error'
|
8
|
+
require 'lean_microsoft_graph/resource'
|
9
|
+
require 'lean_microsoft_graph/client'
|
10
|
+
require 'lean_microsoft_graph/authentication/credentials'
|
11
|
+
require 'lean_microsoft_graph/authentication/token_retriever'
|
12
|
+
require 'lean_microsoft_graph/resources/token_resource'
|
13
|
+
require 'lean_microsoft_graph/resources/token_resource/token'
|
14
|
+
require 'lean_microsoft_graph/resources/users_resource'
|
15
|
+
require 'lean_microsoft_graph/resources/users_resource/user'
|
16
|
+
require 'lean_microsoft_graph/resources/users_resource/users'
|
17
|
+
end
|
metadata
CHANGED
@@ -1,15 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lean-microsoft-graph
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alberto Rocha
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
12
|
-
dependencies:
|
11
|
+
date: 2023-11-04 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: faraday
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.10'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.10'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: faraday_middleware
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.0'
|
13
41
|
description: This gem provides a set of methods to interact with Microsoft Graph API.
|
14
42
|
email:
|
15
43
|
- betogrun@gmail.com
|
@@ -19,13 +47,24 @@ extra_rdoc_files: []
|
|
19
47
|
files:
|
20
48
|
- CHANGELOG.md
|
21
49
|
- Gemfile
|
50
|
+
- Gemfile.lock
|
22
51
|
- LICENSE.txt
|
23
52
|
- README.md
|
24
53
|
- Rakefile
|
25
54
|
- bin/console
|
26
55
|
- bin/setup
|
27
|
-
- lib/
|
28
|
-
- lib/
|
56
|
+
- lib/lean_microsoft_graph.rb
|
57
|
+
- lib/lean_microsoft_graph/authentication/credentials.rb
|
58
|
+
- lib/lean_microsoft_graph/authentication/token_retriever.rb
|
59
|
+
- lib/lean_microsoft_graph/client.rb
|
60
|
+
- lib/lean_microsoft_graph/error.rb
|
61
|
+
- lib/lean_microsoft_graph/resource.rb
|
62
|
+
- lib/lean_microsoft_graph/resources/token_resource.rb
|
63
|
+
- lib/lean_microsoft_graph/resources/token_resource/token.rb
|
64
|
+
- lib/lean_microsoft_graph/resources/users_resource.rb
|
65
|
+
- lib/lean_microsoft_graph/resources/users_resource/user.rb
|
66
|
+
- lib/lean_microsoft_graph/resources/users_resource/users.rb
|
67
|
+
- lib/lean_microsoft_graph/version.rb
|
29
68
|
homepage: https://github.com/betogrun/lean-microsoft-graph
|
30
69
|
licenses:
|
31
70
|
- MIT
|
@@ -47,7 +86,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
47
86
|
- !ruby/object:Gem::Version
|
48
87
|
version: '0'
|
49
88
|
requirements: []
|
50
|
-
rubygems_version: 3.1
|
89
|
+
rubygems_version: 3.4.1
|
51
90
|
signing_key:
|
52
91
|
specification_version: 4
|
53
92
|
summary: "'lean-microsoft-graph' is a gem is a simple interface to Microsoft Graph
|