Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ekohe/ruby-office365
A simple ruby library to interact with Microsoft Graph and Office 365 API.
https://github.com/ekohe/ruby-office365
access-token api azure calendars contacts events graph-api mailboxes microsoft oauth2 office365 refresh-token rest ruby token
Last synced: 4 months ago
JSON representation
A simple ruby library to interact with Microsoft Graph and Office 365 API.
- Host: GitHub
- URL: https://github.com/ekohe/ruby-office365
- Owner: ekohe
- License: mit
- Created: 2022-10-19T11:39:28.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2024-08-14T16:06:19.000Z (6 months ago)
- Last Synced: 2024-09-14T18:04:15.666Z (5 months ago)
- Topics: access-token, api, azure, calendars, contacts, events, graph-api, mailboxes, microsoft, oauth2, office365, refresh-token, rest, ruby, token
- Language: Ruby
- Homepage:
- Size: 73.2 KB
- Stars: 3
- Watchers: 5
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE.md
Awesome Lists containing this project
README
# Office 365 (2024)
A simple ruby library to interact with Microsoft Graph **[Explorer](https://developer.microsoft.com/en-us/graph/graph-explorer)** and Office 365 API## Installation
Install the gem and add to the application's Gemfile by executing:
$ bundle add ruby-office365
If bundler is not being used to manage dependencies, install the gem by executing:
$ gem install ruby-office365
## Features
- Supports user's mailboxes, calendars, contacts, events
- Supports refresh token## Configuration
You can pass configuration options as a block to `Office365::REST::Client.new`.
- tenant_id: optional, only required for refresh_token
- client_id: optional, only required for refresh_token
- client_secret: optional, only required for refresh_token
- access_token: required for fetch mailbox, calendars, contacts data
- refresh_token: optional, only required for refresh_token
- debug: optional, default false, output the request information### Used to get data from MS Graph API
```ruby
client = Office365::REST::Client.new do |config|
config.access_token = "YOUR_ACCESS_TOKEN"
config.debug = "true/false" # Optional, default to false, output the information in the request
end
```### For refresh token
```ruby
client = Office365::REST::Client.new do |config|
config.tenant_id = "YOUR_ORG_TENANT_ID"
config.client_id = "YOUR_APP_CLIENT_ID"
config.client_secret = "YOUR_APP_CLIENT_SECRET"
config.refresh_token = "YOUR_REFRESH_TOKEN"
config.debug = "true/false" # Optional, default to false, output the information in the request
end
```## Usage
After configuring a `client`, you can do the following things.
**Response structure**
- results: wrap all data into results
- next_link: get the new link for the next page of data**A simple way to convert an office365 object to JSON**
- as_json: convert office365 object to JSON format
**Get my profile by access token**
```ruby
irb(main):004:0> response = client.me
irb(main):010:0> response.display_name
=> "Hello World"
irb(main):004:0> response.as_json
=> {
:odata_context=>"https://graph.microsoft.com/v1.0/$metadata#users/$entity",
:display_name=>"Hello World",
:surname=>"Hello",
:given_name=>"World",
:id=>"d7e954e0b50095ad",
:user_principal_name=>"[email protected]",
:business_phones=>[],
:job_title=>nil,
:mail=>nil,
:mobile_phone=>nil,
:office_location=>nil,
:preferred_language=>nil
}
```**Get my calendars by access token**
```ruby
irb(main):005:0> client.calendars
irb(main):005:0> client.calendars[:results]
irb(main):005:0> client.calendars[:next_link]
```**Get my events by access token**
```ruby
irb(main):005:0> client.events
irb(main):005:0> client.events[:results]
irb(main):005:0> client.events[:next_link]
```**Get my event by id**
```ruby
irb(main):005:0> client.event('identifier')
irb(main):005:0> client.event('identifier')[:results]
```Results will return an array even if it is a single result.
**Get my mails by access token**
```ruby
irb(main):005:0> client.messages
irb(main):005:0> client.messages[:results]
irb(main):005:0> client.messages({ filter: "createdDateTime lt 2022-01-01" })
irb(main):005:0> client.messages({ filter: "createdDateTime lt 2022-01-01", next_link: 'https://....' })
```**Get my contacts by access token**
```ruby
irb(main):018:0> response = client.contacts
irb(main):020:0> client.contacts[:results][0].display_name
=> "Encore S."
irb(main):018:0> response[:results][0].as_json
=> {
:odata_etag=>"W/\"EQAAABYAAACbUc86NQthQ7+Mvj19ecwVAABjabQj\"",
:id=>"AQMkADAwATM3ZmYAZS00ZTU5LWY3NwBjLTAwAi0wMAoARgAAA4QFHqPHk4JJj7ZVaRPCKk4HAJtRzzo1C2FDv4y_PX15zBUAAAIBDgAAAJtRzzo1C2FDv4y_PX15zBUAAABja1I_AAAA",
:created_date_time=>"2022-10-24T02:48:56Z",
:last_modified_date_time=>"2022-10-24T02:48:57Z",
:change_key=>"EQAAABYAAACbUc86NQthQ7+Mvj19ecwVAABjabQj",
:categories=>[],
:parent_folder_id=>"AQMkADAwATM3ZmYAZS00ZTU5LWY3NwBjLTAwAi0wMAoALgAAA4QFHqPHk4JJj7ZVaRPCKk4BAJtRzzo1C2FDv4y_PX15zBUAAAIBDgAAAA==",
:birthday=>nil,
:file_as=>"",
:display_name=>"Name S.",
:given_name=>"Name",
:initials=>nil,
:middle_name=>nil,
:nick_name=>nil,
:surname=>"S.",
:title=>nil,
:yomi_given_name=>nil,
:yomi_surname=>nil,
:yomi_company_name=>"",
:generation=>nil,
:im_addresses=>[],
:job_title=>"",
:company_name=>nil,
:department=>"",
:office_location=>"",
:profession=>nil,
:business_home_page=>"",
:assistant_name=>"",
:manager=>"",
:home_phones=>[],
:mobile_phone=>"",
:business_phones=>[],
:spouse_name=>"",
:personal_notes=>"",
:children=>[],
:email_addresses=>[{"name"=>"[email protected]", "address"=>"[email protected]"}],
:home_address=>{},
:business_address=>{},
:other_address=>{}
}
```**Refresh access token by refresh token**
```ruby
irb(main):005:0> response = client.refresh_token!
irb(main):005:0> response.scope
=> "openid User.Read profile email"
irb(main):005:0> response.access_token
=> "eyJ0eXAiOiJKV1QiLCJub25jZSI6ImFDYUladFJ6M3RSc3dFaktxUHdGbF9kVlFmbjJabG85Mjlkb2xaeFBhZm8iLCJhbGciOiJSUzI1NiIsIng1dCI6IjJaUXBKM1VwYmpBWVhZR2FYRUpsOGxWMFRPSSIsImtpZCI6IjJaUXBKM1VwYmpBWVhZR2FYRUpsOGxWMFRPSSJ9..."
irb(main):005:0> response.refresh_token
=> "0.ARgA7EiQdLv1qECnFqPfrznKsT9ERYaGfG9Ki5WzQtEllj8YAJk.AgABAAEAAAD--DLA3VO7QrddgJg7WevrAgDs_wQA9P-Q1ODlBsrdZi-5s2mfLtEsavBgiEhGcz1KEf26fMrGFU3LM_og5l6wjSAtQ83XHLuje0_KYGol26_LGV_uH0F1MwCFR1N3ctwg4_...."
```**Create Subscription: it will create a webhook for Office365**
```ruby
args = {
changeType: "updated,deleted",
notificationUrl: "https://hello-world.com/office365/notifications",
lifecycleNotificationUrl: "https://hello-world.com/office365/lifecycle_notifications",
resource: "/me/{type}",
expirationDateTime: "2024-08-07T12:00:00.0000000Z",
clientState: "SecretClientState"
}irb(main):005:0> subscription = client.create_subscription(args)
```will return the subscription object `Office365::Models::Subscription`
**Renew Subscription**
```ruby
args = {
identifier: "subscription-identifier",
expirationDateTime: "2024-08-08T12:00:00.0000000Z"
}irb(main):005:0> subscription = client.renew_subscription(args)
```will return the subscription object `Office365::Models::Subscription`
## Development
After checking out the repo, run `bin/setup` to install dependencies. Then, run `bundle exec rspec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
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 the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
## Copyright
Copyright (c) 2022 Encore Shao. See LICENSE for details.
## Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/ekohe/ruby-office365.