add_to_calendar_links 0.3.6 → 0.4
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/lib/add_to_calendar_links.rb +70 -21
- data/lib/add_to_calendar_links/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ff19e9aa3a6c509b5469cd27ff8f0b01cc82f07141cd0ed67e34f5eb43bfa65e
|
4
|
+
data.tar.gz: 94432081f0b675201b9aada3180aa03b4ddd28b6f22a74712510686c6c3e9faf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: da4489eeed48856d3ecb2a34bef48d25eb31cedb38096f8e5bc77337099401729a054402f63456163ac42641b73a53290f13329241b63fe3737121632df88450
|
7
|
+
data.tar.gz: 48777ad3226a53f48e5bfc46d9e81df16d82f1dd40600dac72313a9d48a7198ec647ff2ada13a4502dac022a5c1c9e0314d7134182bbd8bf9c206a52a0a02908
|
@@ -12,8 +12,8 @@ module AddToCalendarLinks
|
|
12
12
|
class Error < StandardError; end
|
13
13
|
|
14
14
|
class URLs
|
15
|
-
attr_accessor :start_datetime, :end_datetime, :title, :timezone, :location, :url, :description, :add_url_to_description, :organizer, :strip_html
|
16
|
-
def initialize(start_datetime:, end_datetime: nil, title:, timezone:, location: nil, url: nil, description: nil, add_url_to_description: true, organizer: nil, strip_html: false)
|
15
|
+
attr_accessor :start_datetime, :end_datetime, :title, :timezone, :location, :url, :description, :add_url_to_description, :organizer, :strip_html, :sequence, :last_modified
|
16
|
+
def initialize(start_datetime:, end_datetime: nil, title:, timezone:, location: nil, url: nil, description: nil, add_url_to_description: true, organizer: nil, strip_html: false, sequence: nil, last_modified: Time.now.utc)
|
17
17
|
@start_datetime = start_datetime
|
18
18
|
@end_datetime = end_datetime
|
19
19
|
@title = title
|
@@ -24,6 +24,8 @@ module AddToCalendarLinks
|
|
24
24
|
@add_url_to_description = add_url_to_description
|
25
25
|
@organizer = URI.parse(organizer) if organizer
|
26
26
|
@strip_html = strip_html
|
27
|
+
@sequence = sequence
|
28
|
+
@last_modified = last_modified
|
27
29
|
validate_attributes
|
28
30
|
end
|
29
31
|
|
@@ -57,25 +59,28 @@ module AddToCalendarLinks
|
|
57
59
|
|
58
60
|
def yahoo_url
|
59
61
|
# Eg. https://calendar.yahoo.com/?v=60&view=d&type=20&title=Holly%27s%208th%20Birthday!&st=20200615T170000Z&dur=0100&desc=Join%20us%20to%20celebrate%20with%20lots%20of%20games%20and%20cake!&in_loc=7%20Apartments,%20London
|
60
|
-
calendar_url = "https://calendar.yahoo.com/?v=60&
|
62
|
+
calendar_url = "https://calendar.yahoo.com/?v=60&VIEW=d&TYPE=20"
|
61
63
|
params = {}
|
62
|
-
params[:
|
63
|
-
params[:
|
64
|
+
params[:TITLE] = url_encode(title)
|
65
|
+
params[:ST] = utc_datetime(start_datetime)
|
64
66
|
if end_datetime
|
67
|
+
# params[:ET] = utc_datetime(end_datetime)
|
65
68
|
seconds = duration_seconds(start_datetime, end_datetime)
|
66
|
-
params[:
|
69
|
+
params[:DUR] = seconds_to_hours_minutes(seconds)
|
67
70
|
else
|
68
|
-
params[:
|
71
|
+
# params[:ET] = utc_datetime(start_datetime + 60*60)
|
72
|
+
params[:DUR] = "0100"
|
69
73
|
end
|
70
|
-
params[:
|
74
|
+
params[:DESC] = url_encode(strip_html_tags(description)).truncate(3000) if description
|
75
|
+
|
71
76
|
if add_url_to_description && url
|
72
|
-
if params[:
|
73
|
-
params[:
|
77
|
+
if params[:DESC]
|
78
|
+
params[:DESC] << url_encode("\n\n#{url}")
|
74
79
|
else
|
75
|
-
params[:
|
80
|
+
params[:DESC] = url_encode(url)
|
76
81
|
end
|
77
82
|
end
|
78
|
-
params[:
|
83
|
+
params[:IN_LOC] = url_encode(location) if location
|
79
84
|
|
80
85
|
params.each do |key, value|
|
81
86
|
calendar_url << "&#{key}=#{value}"
|
@@ -94,10 +99,48 @@ module AddToCalendarLinks
|
|
94
99
|
microsoft("outlook.com")
|
95
100
|
end
|
96
101
|
|
102
|
+
def ical_file
|
103
|
+
calendar_url = "BEGIN:VCALENDAR\nVERSION:2.0\nBEGIN:VEVENT"
|
104
|
+
|
105
|
+
params = {}
|
106
|
+
params[:DTSTART] = utc_datetime(start_datetime)
|
107
|
+
if end_datetime
|
108
|
+
params[:DTEND] = utc_datetime(end_datetime)
|
109
|
+
else
|
110
|
+
params[:DTEND] = utc_datetime(start_datetime + 60*60) # 1 hour later
|
111
|
+
end
|
112
|
+
params[:SUMMARY] = strip_html_tags(title) #ical doesnt support html so remove all markup. Optional for other formats
|
113
|
+
params[:URL] = url if url
|
114
|
+
params[:DESCRIPTION] = strip_html_tags(description).strip if description
|
115
|
+
if add_url_to_description && url
|
116
|
+
if params[:DESCRIPTION]
|
117
|
+
params[:DESCRIPTION] << "\\n\\n#{url}"
|
118
|
+
else
|
119
|
+
params[:DESCRIPTION] = url
|
120
|
+
end
|
121
|
+
end
|
122
|
+
params[:LOCATION] = strip_html_tags(location) if location
|
123
|
+
params[:UID] = "-#{url}" if url
|
124
|
+
params[:UID] = "-#{utc_datetime(start_datetime)}-#{title}" unless params[:UID] # set uid based on starttime and title only if url is unavailable
|
125
|
+
params[:ORGANIZER] = organizer if organizer
|
126
|
+
params[:SEQUENCE] = sequence if sequence
|
127
|
+
params[:LASTMODIFIED] = format_date_google(last_modified) if last_modified
|
128
|
+
params[:METHOD] = "REQUEST"
|
129
|
+
|
130
|
+
params.each do |key, value|
|
131
|
+
calendar_url << "\n#{key}:#{value}"
|
132
|
+
end
|
133
|
+
|
134
|
+
calendar_url << "\nEND:VEVENT\nEND:VCALENDAR"
|
135
|
+
|
136
|
+
return calendar_url
|
137
|
+
end
|
138
|
+
|
97
139
|
def ical_url
|
98
140
|
# Downloads a *.ics file provided as a data-uri
|
99
141
|
# Eg. "data:text/calendar;charset=utf8,BEGIN:VCALENDAR%0AVERSION:2.0%0ABEGIN:VEVENT%0ADTSTART:20200512T123000Z%0ADTEND:20200512T160000Z%0ASUMMARY:Holly%27s%208th%20Birthday%21%0AURL:https%3A%2F%2Fwww.example.com%2Fevent-details%0ADESCRIPTION:Come%20join%20us%20for%20lots%20of%20fun%20%26%20cake%21\\n\\nhttps%3A%2F%2Fwww.example.com%2Fevent-details%0ALOCATION:Flat%204%5C%2C%20The%20Edge%5C%2C%2038%20Smith-Dorrien%20St%5C%2C%20London%5C%2C%20N1%207GU%0AUID:-https%3A%2F%2Fwww.example.com%2Fevent-details%0AEND:VEVENT%0AEND:VCALENDAR"
|
100
142
|
calendar_url = "data:text/calendar;charset=utf8,BEGIN:VCALENDAR%0AVERSION:2.0%0ABEGIN:VEVENT"
|
143
|
+
|
101
144
|
params = {}
|
102
145
|
params[:DTSTART] = utc_datetime(start_datetime)
|
103
146
|
if end_datetime
|
@@ -107,7 +150,7 @@ module AddToCalendarLinks
|
|
107
150
|
end
|
108
151
|
params[:SUMMARY] = url_encode_ical(title, strip_html: true) #ical doesnt support html so remove all markup. Optional for other formats
|
109
152
|
params[:URL] = url_encode(url) if url
|
110
|
-
params[:DESCRIPTION] = url_encode_ical(description,
|
153
|
+
params[:DESCRIPTION] = url_encode_ical(strip_html_tags(description, line_break_seperator: "\n")) if description
|
111
154
|
if add_url_to_description && url
|
112
155
|
if params[:DESCRIPTION]
|
113
156
|
params[:DESCRIPTION] << "\\n\\n#{url_encode(url)}"
|
@@ -118,7 +161,10 @@ module AddToCalendarLinks
|
|
118
161
|
params[:LOCATION] = url_encode_ical(location) if location
|
119
162
|
params[:UID] = "-#{url_encode(url)}" if url
|
120
163
|
params[:UID] = "-#{utc_datetime(start_datetime)}-#{url_encode_ical(title)}" unless params[:UID] # set uid based on starttime and title only if url is unavailable
|
121
|
-
params[:
|
164
|
+
params[:ORGANIZER] = organizer if organizer
|
165
|
+
params[:SEQUENCE] = sequence if sequence
|
166
|
+
params[:LASTMODIFIED] = format_date_google(last_modified) if last_modified
|
167
|
+
params[:METHOD] = "REQUEST"
|
122
168
|
|
123
169
|
new_line = "%0A"
|
124
170
|
params.each do |key, value|
|
@@ -254,11 +300,6 @@ module AddToCalendarLinks
|
|
254
300
|
# per https://tools.ietf.org/html/rfc5545#section-3.3.11
|
255
301
|
string = s.dup # don't modify original input
|
256
302
|
if strip_html
|
257
|
-
string.gsub!("<br>", "\n")
|
258
|
-
string.gsub!("<p>", "\n")
|
259
|
-
string.gsub!("</p>", "\n")
|
260
|
-
string.gsub!("&", "and")
|
261
|
-
string.gsub!(" ", " ")
|
262
303
|
string = strip_html_tags(string)
|
263
304
|
end
|
264
305
|
string.gsub!("\\", "\\\\\\") # \ >> \\ --yes, really: https://stackoverflow.com/questions/6209480/how-to-replace-backslash-with-double-backslash
|
@@ -272,8 +313,16 @@ module AddToCalendarLinks
|
|
272
313
|
}.compact.join("\\n").gsub(/(\\n){2,}/, "\\n\\n").strip
|
273
314
|
end
|
274
315
|
|
275
|
-
def strip_html_tags(description)
|
276
|
-
description.dup
|
316
|
+
def strip_html_tags(description, line_break_seperator: "\\n")
|
317
|
+
string = description.dup
|
318
|
+
string.gsub!("<br>", line_break_seperator)
|
319
|
+
string.gsub!("<p>", line_break_seperator)
|
320
|
+
string.gsub!("</p>", line_break_seperator)
|
321
|
+
string.gsub!("&", "and")
|
322
|
+
string.gsub!(" ", " ")
|
323
|
+
string.gsub!(/<\/?[^>]*>/, "")
|
324
|
+
string.gsub!(/(\\n){2,}/, "\\n\\n")
|
325
|
+
string.strip
|
277
326
|
end
|
278
327
|
end
|
279
328
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: add_to_calendar_links
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: '0.4'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jared Turner
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2021-03-
|
12
|
+
date: 2021-03-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: tzinfo
|