cal-invite 0.2.0 → 0.2.1
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/.rdoc_options +1 -2
- data/CHANGELOG.md +7 -0
- data/CONFIGURATION.md +3 -3
- data/lib/cal_invite/providers/google.rb +4 -0
- data/lib/cal_invite/providers/office365.rb +6 -2
- data/lib/cal_invite/providers/outlook.rb +7 -3
- data/lib/cal_invite/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: acfc7fb8536f80559ceccfb16ab9d19a79d3b29ee7d5dc082859d5676e600951
|
|
4
|
+
data.tar.gz: 244cac5a83e5874bdc037bb13d8550fae3691acddac5403a5fe98714d726f9d6
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: '0318e32174bf7946585e98498661c76c2470b05c06a17fa08a469c04ec006485613af7b70bf874c195405eb079e3d993d3ec43a54fe4e2ee457773245c782b65'
|
|
7
|
+
data.tar.gz: e328f2f90f38e8104f2180ce79b14cdf12868817d936e28dc52e561aef9c3f58c9f0deb06de35c3173512c8fa78f083229a49f218e6ab1130402c477fcf2da06
|
data/.rdoc_options
CHANGED
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Cal Invite
|
|
2
2
|
|
|
3
|
+
## [v0.2.1] - 2026-08-10
|
|
4
|
+
|
|
5
|
+
- `:google` provider: honor `Event#attendees`/`show_attendees` (`add=`), `Event#timezone` (`ctz=`), `Event#rrule` (`recur=`), and `Event#busy` (`crm=BUSY`/`AVAILABLE`) in the generated Google Calendar URL — these were already modeled on `Event` for the ics providers but never wired into `:google`.
|
|
6
|
+
- `:outlook`/`:office365` providers: honor `Event#busy` via `freebusy=`.
|
|
7
|
+
- `:outlook`/`:office365` providers: fix stale deep-link URLs. Switched from the legacy `outlook.live.com/calendar/0/action/compose` and `outlook.office.com/owa/` hosts to the currently documented `outlook.live.com/calendar/deeplink/compose` and `outlook.office.com/calendar/deeplink/compose`, and added the required `rru=addevent` param.
|
|
8
|
+
- CI: fix Rails 6 + Ruby 3.3/3.4 test failures (missing `logger`/`mutex_m`/`bigdecimal` requires), fix RDoc doc generation (stale `.rdoc_options` crashing the darkfish generator and silently excluding all of `lib/`), and fix a GitHub Pages deploy deadlock (duplicate `concurrency: group: "pages"` between `main.yml` and the reusable `documentation.yml`).
|
|
9
|
+
|
|
3
10
|
## [v0.2.0] - 2026-08-09
|
|
4
11
|
|
|
5
12
|
- Add `Event#organizer` and a `method:` option (`:publish`/`:request`/`:cancel`) to `generate_calendar_url`, so ics/ical output can carry `METHOD:REQUEST`/`METHOD:CANCEL` + `ORGANIZER`/`SEQUENCE`/`STATUS`, matching what mail clients (Gmail, Outlook, Apple Mail) need to render an attached `.ics` as an RSVP-capable meeting invite (or a real cancellation) rather than a plain file
|
data/CONFIGURATION.md
CHANGED
|
@@ -79,9 +79,9 @@ Pass one of these symbols to `generate_calendar_url`:
|
|
|
79
79
|
|
|
80
80
|
| Symbol | Output | Notes |
|
|
81
81
|
|-------------|----------------------------------|-------|
|
|
82
|
-
| `:google` | Google Calendar URL | |
|
|
83
|
-
| `:outlook` | Outlook (outlook.live.com) URL | |
|
|
84
|
-
| `:office365`| Outlook 365 URL | |
|
|
82
|
+
| `:google` | Google Calendar URL | Honors `attendees`/`show_attendees` (`add=`), `timezone` (`ctz=`), `rrule` (`recur=`), `busy` (`crm=BUSY`/`AVAILABLE`). |
|
|
83
|
+
| `:outlook` | Outlook (outlook.live.com) URL | Honors `attendees`/`show_attendees` (`to=`), `busy` (`freebusy=`). |
|
|
84
|
+
| `:office365`| Outlook 365 URL | Honors `attendees`/`show_attendees` (`to=`), `busy` (`freebusy=`). |
|
|
85
85
|
| `:yahoo` | Yahoo Calendar URL | |
|
|
86
86
|
| `:ical` | `.ics` content (`METHOD:PUBLISH` or `:REQUEST`) | Apple iCal / any iCalendar-compatible app |
|
|
87
87
|
| `:ics` | `.ics` content (`METHOD:PUBLISH` or `:REQUEST`) | Generic RFC 5545 file |
|
|
@@ -109,6 +109,10 @@ module CalInvite
|
|
|
109
109
|
description_parts << "Virtual Meeting URL: #{format_url}" if format_url
|
|
110
110
|
params[:details] = url_encode(description_parts.join("\n\n")) if description_parts.any?
|
|
111
111
|
params[:location] = url_encode(format_location) if format_location
|
|
112
|
+
params[:ctz] = url_encode(event.timezone) if event.timezone
|
|
113
|
+
params[:add] = url_encode(attendee_emails.join(',')) if attendee_emails.any?
|
|
114
|
+
params[:recur] = url_encode("RRULE:#{event.rrule}") if event.rrule
|
|
115
|
+
params[:crm] = event.busy ? 'BUSY' : 'AVAILABLE' unless event.busy.nil?
|
|
112
116
|
params
|
|
113
117
|
end
|
|
114
118
|
|
|
@@ -52,6 +52,7 @@ module CalInvite
|
|
|
52
52
|
params = {
|
|
53
53
|
subject: url_encode(event.title),
|
|
54
54
|
path: '/calendar/action/compose',
|
|
55
|
+
rru: 'addevent',
|
|
55
56
|
allday: 'true'
|
|
56
57
|
}
|
|
57
58
|
|
|
@@ -73,7 +74,8 @@ module CalInvite
|
|
|
73
74
|
def generate_single_event
|
|
74
75
|
params = {
|
|
75
76
|
subject: url_encode(event.title),
|
|
76
|
-
path: '/calendar/action/compose'
|
|
77
|
+
path: '/calendar/action/compose',
|
|
78
|
+
rru: 'addevent'
|
|
77
79
|
}
|
|
78
80
|
|
|
79
81
|
raise ArgumentError, "Start time is required" unless event.start_time
|
|
@@ -119,6 +121,8 @@ module CalInvite
|
|
|
119
121
|
params[:to] = url_encode(attendee_emails.join(';'))
|
|
120
122
|
end
|
|
121
123
|
|
|
124
|
+
params[:freebusy] = event.busy ? 'busy' : 'free' unless event.busy.nil?
|
|
125
|
+
|
|
122
126
|
params
|
|
123
127
|
end
|
|
124
128
|
|
|
@@ -128,7 +132,7 @@ module CalInvite
|
|
|
128
132
|
# @return [String] The complete Office 365 calendar URL
|
|
129
133
|
def build_url(params)
|
|
130
134
|
query = params.map { |k, v| "#{k}=#{v}" }.join('&')
|
|
131
|
-
"https://outlook.office.com/
|
|
135
|
+
"https://outlook.office.com/calendar/deeplink/compose?#{query}"
|
|
132
136
|
end
|
|
133
137
|
end
|
|
134
138
|
end
|
|
@@ -55,7 +55,8 @@ module CalInvite
|
|
|
55
55
|
# @return [String] The Outlook.com calendar URL for an all-day event
|
|
56
56
|
def generate_all_day_event
|
|
57
57
|
params = {
|
|
58
|
-
path: '/calendar/
|
|
58
|
+
path: '/calendar/action/compose',
|
|
59
|
+
rru: 'addevent',
|
|
59
60
|
subject: url_encode(event.title),
|
|
60
61
|
allday: 'true'
|
|
61
62
|
}
|
|
@@ -77,7 +78,8 @@ module CalInvite
|
|
|
77
78
|
# @raise [ArgumentError] If start_time or end_time is missing
|
|
78
79
|
def generate_single_event
|
|
79
80
|
params = {
|
|
80
|
-
path: '/calendar/
|
|
81
|
+
path: '/calendar/action/compose',
|
|
82
|
+
rru: 'addevent',
|
|
81
83
|
subject: url_encode(event.title)
|
|
82
84
|
}
|
|
83
85
|
|
|
@@ -124,6 +126,8 @@ module CalInvite
|
|
|
124
126
|
params[:to] = url_encode(attendee_emails.join(';'))
|
|
125
127
|
end
|
|
126
128
|
|
|
129
|
+
params[:freebusy] = event.busy ? 'busy' : 'free' unless event.busy.nil?
|
|
130
|
+
|
|
127
131
|
params
|
|
128
132
|
end
|
|
129
133
|
|
|
@@ -133,7 +137,7 @@ module CalInvite
|
|
|
133
137
|
# @return [String] The complete Outlook.com calendar URL
|
|
134
138
|
def build_url(params)
|
|
135
139
|
query = params.map { |k, v| "#{k}=#{v}" }.join('&')
|
|
136
|
-
"https://outlook.live.com/calendar/
|
|
140
|
+
"https://outlook.live.com/calendar/deeplink/compose?#{query}"
|
|
137
141
|
end
|
|
138
142
|
end
|
|
139
143
|
end
|
data/lib/cal_invite/version.rb
CHANGED