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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1a0ff2de747c18b6c294b6b9a53678ac1199a749a11be93bab4af93b8ab4617d
4
- data.tar.gz: c08188280a75f0015bfee4f2cd8f896db4ac2294c7df4826bf63e1f72a05e6db
3
+ metadata.gz: acfc7fb8536f80559ceccfb16ab9d19a79d3b29ee7d5dc082859d5676e600951
4
+ data.tar.gz: 244cac5a83e5874bdc037bb13d8550fae3691acddac5403a5fe98714d726f9d6
5
5
  SHA512:
6
- metadata.gz: 83cd15e9cbf2aa3360e353aaf7fcd893fdd73d003a8de959b5c3258230560e4b3d56df060e6589fa3661945471393c085990d0d45628443b08b3eec3fad258db
7
- data.tar.gz: f0d296b4789394ded4394f884b8a26c3041e47af5b16c7e7891b4317565fb35c72726788f95ce73ec0b7247816c18b4c253534f062535076022c5d337888706b
6
+ metadata.gz: '0318e32174bf7946585e98498661c76c2470b05c06a17fa08a469c04ec006485613af7b70bf874c195405eb079e3d993d3ec43a54fe4e2ee457773245c782b65'
7
+ data.tar.gz: e328f2f90f38e8104f2180ce79b14cdf12868817d936e28dc52e561aef9c3f58c9f0deb06de35c3173512c8fa78f083229a49f218e6ab1130402c477fcf2da06
data/.rdoc_options CHANGED
@@ -1,8 +1,7 @@
1
1
  ---
2
2
  encoding: UTF-8
3
- static_path: ["./doc/images"]
4
3
  charset: UTF-8
5
- exclude: ["vendor/*", "tmp/*", ".*/*"]
4
+ exclude: ["vendor/*", "tmp/*"]
6
5
  hyperlink_all: true
7
6
  line_numbers: true
8
7
  locale: en
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/owa/?#{query}"
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/0/action/compose',
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/0/action/compose',
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/0/action/compose?#{query}"
140
+ "https://outlook.live.com/calendar/deeplink/compose?#{query}"
137
141
  end
138
142
  end
139
143
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CalInvite
4
- VERSION = "0.2.0"
4
+ VERSION = "0.2.1"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cal-invite
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stephane Paquet