Add this line to your application's Gemfile:
gem'ms_graph_rest'And then execute:
$ bundle install
Or install it yourself as:
$ gem install ms_graph_rest
Getting a new client
client=MsGraphRest.new_client(access_token: access_token)Reference : https://docs.microsoft.com/en-us/graph/api/user-list
# Get all usersresult=client.users.getresult.eachdo |user|
putsuser.display_nameputsuser.mailputsuser.mail_nicknameputsuser.other_mailsputsuser.proxy_addressesputsuser.user_principal_nameend# Get a user account using a sign-in nameresult=client.users.filter("identities/any(c:c/issuerAssignedId eq 'j.smith@yahoo.com')").select("displayName,id").getresult.eachdo |user|
putsuser.display_nameend# Get Next Pageifresult.get_next_querynext_result=client.users(**result.get_next_query)next_result.eachdo |user|
putsuser.display_nameendend# Get users including their last sign-in timeresult=client.users.select("displayName,userPrincipalName,signInActivity").getputsresult.odata_contextresult.eachdo |user|
putsuser.display_nameputsuser.user_principal_nameputsuser.sign_in_activity.last_sign_in_date_timeputsuser.sign_in_activity.last_sign_in_request_idend# Get users including their last sign-in timeresult=client.users.select("displayName,userPrincipalName,signInActivity").getresult.eachdo |user|
putsuser.display_nameputsuser.user_principal_nameputsuser.sign_in_activity.last_sign_in_date_timeputsuser.sign_in_activity.last_sign_in_request_idend# List the last sign-in time of users with a specific display nameresult=client.users.filter('startswith(displayName,\'Eric\'),').select('displayName,signInActivity').getresult.eachdo |user|
putsuser.display_nameputsuser.sign_in_activity.last_sign_in_date_timeputsuser.sign_in_activity.last_sign_in_request_idendresult=client.subscriptions.create(change_type: "created",notification_url: "https://webhook.azurewebsites.net/api/send/myNotifyClient",resource: "me/mailFolders('Inbox')/messages",expiration_date_time: "2016-11-20T18:23:45.9356913Z",client_state: "secretClientValue")putsresult.odata_contextputsresult.idputsresult.resourceputsresult.application_idputsresult.change_typeputsresult.client_stateputsresult.notification_urlputsresult.expiration_date_timeputsresult.creator_idresult=client.subscriptions.update("7f105c7d-2dc5-4530-97cd-4e7ae6534c07",expiration_date_time: "2016-11-20T18:23:45.9356913Z")putsresult.idputsresult.resourceputsresult.application_idputsresult.change_typeputsresult.client_stateputsresult.notification_urlputsresult.expiration_date_timeputsresult.creator_idputsresult.include_resource_dataclient.subscriptions.delete("7f105c7d-2dc5-4530-97cd-4e7ae6534c07")reference https://docs.microsoft.com/en-us/graph/api/user-list-messages?view=graph-rest-1.0&tabs=http
result=client.messages.select([:id,:sender,:subject]).getresult.eachdo |message|
putsmessage.idputsmessage.subjectputsmessage.sender.email_address.nameputsmessage.sender.email_address.addressendusing $filter and $orderBy on another user's box
result=client.messages("users/person@example.com").filter("createdDateTime ge #{1.week.ago.iso8601} and createdDateTime lt #{1.day.ago.iso8601}").order_by('createdDateTime asc').getresult.eachdo |message|
putsmessage.idputsmessage.subjectputsmessage.sender.email_address.nameputsmessage.sender.email_address.addressendreference https://docs.microsoft.com/en-us/graph/api/user-list-calendarview?view=graph-rest-1.0&tabs=http
result=client.calendar_view.get(start_date_time: '2020-01-01T19:00:00-08:00',end_date_time: '2020-01-02T19:00:00-08:00')result.eachdo |event|
putsevent.original_start_time_zoneputsevent.original_end_time_zoneputsevent.response_status.responseputsevent.response_status.timeputsevent.i_cal_u_idputsevent.reminder_minutes_before_startputsevent.is_reminder_onendusing select and different user
result=client.calendar_view("users/person@example.com").select('subject,body,bodyPreview,organizer,attendees,start,end,location').get(start_date_time: 1.day.ago,end_date_time: Time.current)putsresult.odata.contextresult.eachdo |event|
putsevent.idputsevent.odata_etagputsevent.subjectputsevent.body_previewputsevent.body.content_typeputsevent.body.contentputsevent.start.date_timeputsevent.start.time_zoneputsevent.end.date_timeputsevent.end.time_zoneputsevent.end.date_timeputsevent.location.display_nameputsevent.location.location_typeputsevent.location.unique_idputsevent.location.unique_id_typeevent.attendees.eachdo |attendee|
putsattendee.typeputsattendee.status.responseputsattendee.status.timeputsattendee.email_address.nameputsattendee.email_address.addressendputsorganizer.email_address.nameputsorganizer.email_address.addressendgetting next link query params
result=client.calendar_view.get(start_date_time: '2020-01-01T19:00:00-08:00',end_date_time: '2020-01-02T19:00:00-08:00')putsresult.odata_next_link# ...?endDateTime=2021-01-12T22%3a39%3a15Z&startDateTime=2020-01-12T22%3a39%3a15Z&%24top=10&%24skip=10putsresult.next_get_query# {start_date_time: '2020-01-01T19:00:00-08:00', end_date_time: '2020-01-02T19:00:00-08:00', skip: 10}next_result=client.calendar_view(**result.next_get_query)reference https://docs.microsoft.com/en-us/graph/api/group-list?view=graph-rest-1.0&tabs=http
result=client.groups.getresult.eachdo |group|
putsgroup.idputsgroup.display_nameputsgroup.descriptionputsgroup.group_typesputsgroup.visibilityputsgroup.created_date_timeputsgroup.mailputsgroup.mail_enabledputsevent.mail_nicknameputsevent.security_enabled# etcendusing select and next link query params
result=client.groups.select([:id,:display_name,:description,:mail,:mail_enabled]).getresult.eachdo |group|
putsgroup.idputsgroup.display_nameputsgroup.descriptionputsgroup.mailputsgroup.mail_enabledendnext_result=client.groups(**result.next_get_query)reference https://docs.microsoft.com/en-us/graph/api/planneruser-list-tasks?view=graph-rest-1.0&tabs=http
client.planner_tasks('me').getclient.planner_tasks('users/id-here').getclient.planner_tasks('drive/root/createdByUser').getclient.planner_tasks.get# default's to meresult=client.planner_tasks.getresult.eachdo |task|
putstask.idputstask.created_by.user.idputstask.plan_idputstask.bucket_idputstask.titleputstask.order_hintputstask.assignee_priorityputstask.created_date_time# etcendreference https://docs.microsoft.com/en-us/graph/api/resources/todotasklist?view=graph-rest-1.0
Fetch the users todo lists. Note the user always have one default list.
result=client.todo_lists.getresult.eachdo |todo_list|
putstodo_list.display_nameputs" Id: #{todo_list.id}"puts" Default List: #{todo_list.wellknownListName == 'defaultList'}"puts""endFetch tasks for a todo list like this
todo_list=client.todo_lists.get.first.idtasks=client.todo_list_tasks(todo_list).gettasks.eachdo |task|
putstask.titleputstask.bodyputstask.sendSee all attributes here: https://docs.microsoft.com/en-us/graph/api/todotask-update?view=graph-rest-1.0&tabs=http
You can make the http requests read from file instead of make actual http requests.
MsGraphRest.use_fake=trueMsGraphRest.fake_folder="#{__dir__}/fake_client"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.
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.
Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/ms_graph_rest.