place_calendar
Version, currently 4.30.090 versions
- 4.30.0latestJul 14, 2026
- 4.29.4not indexedJul 14, 2026
- 4.29.3not indexedJul 14, 2026
- 4.29.2not indexedJul 14, 2026
- 4.29.1not indexedJul 14, 2026
- 4.29.0not indexedJul 14, 2026
- 4.28.1not indexedJul 14, 2026
- 4.28.0not indexedJul 14, 2026
- 4.27.0not indexedJul 14, 2026
- 4.26.0not indexedJul 14, 2026
- 4.25.0not indexedJul 14, 2026
- 4.24.0not indexedJul 14, 2026
- 4.23.0not indexedJul 14, 2026
- 4.22.1not indexedJul 14, 2026
- 4.22.0not indexedJul 14, 2026
- 4.21.3not indexedJul 14, 2026
- 4.21.2not indexedJul 14, 2026
- 4.21.1not indexedJul 14, 2026
- 4.21.0not indexedJul 14, 2026
- 4.20.1not indexedJul 14, 2026
- 4.20.0not indexedJul 14, 2026
- 4.19.2not indexedJul 14, 2026
- 4.19.1not indexedJul 14, 2026
- 4.19.0not indexedJul 14, 2026
- 4.18.3not indexedJul 14, 2026
- 4.18.2not indexedJul 14, 2026
- 4.18.1not indexedJul 14, 2026
- 4.18.0not indexedJul 14, 2026
- 4.17.2not indexedJul 14, 2026
- 4.17.1not indexedJul 14, 2026
- 4.17.0not indexedJul 14, 2026
- 4.16.2not indexedJul 14, 2026
- 4.16.1not indexedJul 14, 2026
- 4.16.0not indexedJul 14, 2026
- 4.15.7not indexedJul 14, 2026
- 4.15.6not indexedJul 14, 2026
- 4.15.5not indexedJul 14, 2026
- 4.15.4not indexedJul 14, 2026
- 4.15.2not indexedJul 14, 2026
- 4.15.1not indexedJul 14, 2026
- 4.14.0not indexedJul 14, 2026
- 4.13.4not indexedJul 14, 2026
- 4.13.3not indexedJul 14, 2026
- 4.13.2not indexedJul 14, 2026
- 4.13.1not indexedJul 14, 2026
- 4.13.0not indexedJul 14, 2026
- 4.12.3not indexedJul 14, 2026
- 4.12.2not indexedJul 14, 2026
- 4.12.1not indexedJul 14, 2026
- 4.12.0not indexedJul 14, 2026
- 4.11.3not indexedJul 14, 2026
- 4.11.2not indexedJul 14, 2026
- 4.11.1not indexedJul 14, 2026
- 4.11.0not indexedJul 14, 2026
- 4.10.2not indexedJul 14, 2026
- 4.10.1not indexedJul 14, 2026
- 4.10.0not indexedJul 14, 2026
- 4.9.6not indexedJul 14, 2026
- 4.9.5not indexedJul 14, 2026
- 4.9.4not indexedJul 14, 2026
- 4.9.3not indexedJul 14, 2026
- 4.9.2not indexedJul 14, 2026
- 4.9.1not indexedJul 14, 2026
- 4.9.0not indexedJul 14, 2026
- 4.8.2not indexedJul 14, 2026
- 4.8.1not indexedJul 14, 2026
- 4.8.0not indexedJul 14, 2026
- 4.7.2not indexedJul 14, 2026
- 4.7.1not indexedJul 14, 2026
- 4.7.0not indexedJul 14, 2026
- 4.6.1not indexedJul 14, 2026
- 4.6.0not indexedJul 14, 2026
- 4.5.0not indexedJul 14, 2026
- 4.4.0not indexedJul 14, 2026
- 4.3.2not indexedJul 14, 2026
- 4.3.1not indexedJul 14, 2026
- 4.3.0not indexedJul 14, 2026
- 4.2.4not indexedJul 14, 2026
- 4.2.3not indexedJul 14, 2026
- 4.2.2not indexedJul 14, 2026
- 4.2.1not indexedJul 14, 2026
- 4.2.0not indexedJul 14, 2026
- 4.1.0not indexedJul 14, 2026
- 4.0.1not indexedJul 14, 2026
- 4.0.0not indexedJul 14, 2026
- 3.0.1not indexedJul 14, 2026
- 3.0.0not indexedJul 14, 2026
- 2.0.1not indexedJul 14, 2026
- 2.0.0not indexedJul 14, 2026
- 1.0.0not indexedJul 14, 2026
github.com/PlaceOS/calendar
an abstraction layer for various calendaring systems such as Office365 and Google Cal
3 stars
4 dependents
License: MIT
Installation
# Add this to your shard.yml
dependencies:
place_calendar:
github: PlaceOS/calendar
version: ~> 4.30.0Then run:
shards installshard.yml
- Crystal
>= 0.36.1- License
- MIT
- Author
- Toby Carvan
Dependencies
Runtime Dependencies
- email*github: arcage/crystal-email
- google>= 3.4.0github: PlaceOS/google
- office365>= 1.23.0github: PlaceOS/office365
- pegmatite*github: jemc/crystal-pegmatite
Development Dependencies
README
calendar
PlaceCalendar provides a standardised interface for cloud based calendaring solutions, with Office365 and Google currently supported.
Endpoints are provided for
- Users (list)
- Calendars (list, get)
- Events (list, get, create, update, delete)
- Attachments (list, get, create, update, delete)
- Availability (get)
Installation
-
Add the dependency to your
shard.yml:dependencies: place_calendar: github: PlaceOS/calendar -
Run
shards install
Usage
require "place_calendar"
Office365 Configuration
o365_creds = {
tenant: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
client_id: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
client_secret: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
}
client = PlaceCalendar::Client.new(**o365_creds)
Google Configuration
google_creds = {
file_path: "/path/to/your/credtions.json",
scopes: ["https://www.googleapis.com/auth/calendar", "https://www.googleapis.com/auth/directory.user.readonly", "https://www.googleapis.com/auth/drive"],
domain: "yourdomain.com"
}
client = PlaceCalendar::Client.new(**google_creds)
Users
list = client.list_users
Calendars
# list calendars
calendars = client.list_calendars("mailbox@domain.com")
# get a calendar
calendar = client.get_calendar("mailbox@domain.com", calendar_id)
Events
# list events
list = client.list_events("mailbox@domain.com")
# get an event
event = client.get_event("mailbox@domain.com", event_id)
# create an event
e = PlaceCalendar::Event.new
e.title = "My New Meeting"
e.body = "All about my new meeting"
e.event_start = Time.local
e.event_end = Time.local + 30.minutes
a.attendees << {name: "John Smith", email: "john.smith@domain.com"}
new_event = client.create_event(user_id: "mailbox@domain.com", event: e)
# update an event
new_event.attendees << {name: "Foo Bar", email: "foo.bar@domain.com"}
client.update_event(user_id: "mailbox@domain.com", event: new_event)
# delete an event
client.delete_event(user_id: "mailbox@domain.com", id: new_event.id)
# recurring events
daily_recurrence = PlaceCalendar::Recurrence.new(
Time.local, # recurrence start time
Time.local + 14.days, # recurrence end time
2, # recurrence interval
"daily" # recurrent pattern, daily, weekly, or monthly
)
my_event.recurrence = daily_recurrence
client.update_event(user_id: "mailbox@domain.com", id: my_event.id)
Attachments
# list attachments
attachments = client.list_attachments(user_id: "mailbox@domain.com", event_id: my_event.id)
# get an attachment
attachment = client.get_attachent(user_id: "mailbox@domain.com", event_id: my_event.id, id: "123")
# create an attachment
my_attachment = PlaceCalendar::Attachment.new(name: "filename.ext", content_bytes: File.read("filename.ext"))
client.create_attachment(user_id: "mailbox@domain.com", event_id: event.id, attachment: my_attachment)
# delete an attachment
client.delete_attachment(user_id: "mailbox@domain.com", event_id: my_event.id, attachment_id: my_attachment.id)
Availability
# get availability for multiple uers
# this will return an array of PlaceCalendar::Availability objects, one for each of the emails in the array, for the time period specified
schedule = client.get_availability("mailbox@domain.com", ["me@domain.com", "you@domain.com", "them@domain.com"], Time.local - 1.week, Time.local + 1.week)
Development
TODO: Write development instructions here
Contributing
- Fork it (https://github.com/your-github-user/place_calendar/fork)
- Create your feature branch (
git checkout -b my-new-feature) - Commit your changes (
git commit -am 'Add some feature') - Push to the branch (
git push origin my-new-feature) - Create a new Pull Request
Contributors
- Toby Carvan - creator and maintainer
Documentation
Built from the current release. The first visit to a release nobody has asked for starts its build.
Links
This release
- Version
4.30.0- Tagged
- Jul 14, 2026
- Commit
b94b7df702ea- Crystal
>= 0.36.1- Indexed
- yes
Dependents
Repository
github.com/PlaceOS/calendar
Metadata
- Created
- Aug 12, 2026
- Updated
- Sep 22, 2026
- Synced
- Sep 22, 2026
- Versions
- 90