add_to_calendar_links 0.3.2 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: db13d2739854e9084dc5f20de1ba937af2760ca5722e99cd92b83ae59adb79da
4
- data.tar.gz: bdd83bb55237b2de0346e78a7c75752f02f4ea89ef522d5b4dc95e3b5f8f177c
3
+ metadata.gz: ff19e9aa3a6c509b5469cd27ff8f0b01cc82f07141cd0ed67e34f5eb43bfa65e
4
+ data.tar.gz: 94432081f0b675201b9aada3180aa03b4ddd28b6f22a74712510686c6c3e9faf
5
5
  SHA512:
6
- metadata.gz: 1df0b7a7307a37cb42614d6cc2ce9fbc8b8a42fae7c11abe995df5625a9b0622f1aa14ada6a983c7e0cafa5f870b368893cc1dbf15b6ce142692a0bda105c04d
7
- data.tar.gz: bfe123ceec2622a0b18c0020d65ac1b060614795f35bf9e8d51244e5a2730cda39a127f4f3ec6ec991e3a3670bc54d67ee73e3fa035c00207e7073ac97619ce9
6
+ metadata.gz: da4489eeed48856d3ecb2a34bef48d25eb31cedb38096f8e5bc77337099401729a054402f63456163ac42641b73a53290f13329241b63fe3737121632df88450
7
+ data.tar.gz: 48777ad3226a53f48e5bfc46d9e81df16d82f1dd40600dac72313a9d48a7198ec647ff2ada13a4502dac022a5c1c9e0314d7134182bbd8bf9c206a52a0a02908
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
- source "https://rubygems.org"
1
+ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in add_to_calendar.gemspec
4
4
  gemspec
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- add_to_calendar_links (0.3.1)
4
+ add_to_calendar_links (0.3.5)
5
5
  tzinfo (>= 1.1, < 3)
6
6
  tzinfo-data (~> 1.2021)
7
7
 
@@ -7,14 +7,13 @@ include ERB::Util
7
7
  require 'tzinfo'
8
8
  require 'date'
9
9
  require 'uri'
10
- # require 'pry'
11
10
 
12
11
  module AddToCalendarLinks
13
12
  class Error < StandardError; end
14
13
 
15
14
  class URLs
16
- attr_accessor :start_datetime, :end_datetime, :title, :timezone, :location, :url, :description, :add_url_to_description, :organizer, :strip_html
17
- 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)
18
17
  @start_datetime = start_datetime
19
18
  @end_datetime = end_datetime
20
19
  @title = title
@@ -25,6 +24,8 @@ module AddToCalendarLinks
25
24
  @add_url_to_description = add_url_to_description
26
25
  @organizer = URI.parse(organizer) if organizer
27
26
  @strip_html = strip_html
27
+ @sequence = sequence
28
+ @last_modified = last_modified
28
29
  validate_attributes
29
30
  end
30
31
 
@@ -58,25 +59,28 @@ module AddToCalendarLinks
58
59
 
59
60
  def yahoo_url
60
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
61
- calendar_url = "https://calendar.yahoo.com/?v=60&view=d&type=20"
62
+ calendar_url = "https://calendar.yahoo.com/?v=60&VIEW=d&TYPE=20"
62
63
  params = {}
63
- params[:title] = url_encode(title)
64
- params[:st] = utc_datetime(start_datetime)
64
+ params[:TITLE] = url_encode(title)
65
+ params[:ST] = utc_datetime(start_datetime)
65
66
  if end_datetime
67
+ # params[:ET] = utc_datetime(end_datetime)
66
68
  seconds = duration_seconds(start_datetime, end_datetime)
67
- params[:dur] = seconds_to_hours_minutes(seconds)
69
+ params[:DUR] = seconds_to_hours_minutes(seconds)
68
70
  else
69
- params[:dur] = "0100"
71
+ # params[:ET] = utc_datetime(start_datetime + 60*60)
72
+ params[:DUR] = "0100"
70
73
  end
71
- params[:desc] = url_encode(description) if description
74
+ params[:DESC] = url_encode(strip_html_tags(description)).truncate(3000) if description
75
+
72
76
  if add_url_to_description && url
73
- if params[:desc]
74
- params[:desc] << url_encode("\n\n#{url}")
77
+ if params[:DESC]
78
+ params[:DESC] << url_encode("\n\n#{url}")
75
79
  else
76
- params[:desc] = url_encode(url)
80
+ params[:DESC] = url_encode(url)
77
81
  end
78
82
  end
79
- params[:in_loc] = url_encode(location) if location
83
+ params[:IN_LOC] = url_encode(location) if location
80
84
 
81
85
  params.each do |key, value|
82
86
  calendar_url << "&#{key}=#{value}"
@@ -95,10 +99,48 @@ module AddToCalendarLinks
95
99
  microsoft("outlook.com")
96
100
  end
97
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
+
98
139
  def ical_url
99
140
  # Downloads a *.ics file provided as a data-uri
100
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"
101
142
  calendar_url = "data:text/calendar;charset=utf8,BEGIN:VCALENDAR%0AVERSION:2.0%0ABEGIN:VEVENT"
143
+
102
144
  params = {}
103
145
  params[:DTSTART] = utc_datetime(start_datetime)
104
146
  if end_datetime
@@ -108,7 +150,7 @@ module AddToCalendarLinks
108
150
  end
109
151
  params[:SUMMARY] = url_encode_ical(title, strip_html: true) #ical doesnt support html so remove all markup. Optional for other formats
110
152
  params[:URL] = url_encode(url) if url
111
- params[:DESCRIPTION] = url_encode_ical(description, strip_html: true) if description
153
+ params[:DESCRIPTION] = url_encode_ical(strip_html_tags(description, line_break_seperator: "\n")) if description
112
154
  if add_url_to_description && url
113
155
  if params[:DESCRIPTION]
114
156
  params[:DESCRIPTION] << "\\n\\n#{url_encode(url)}"
@@ -119,7 +161,10 @@ module AddToCalendarLinks
119
161
  params[:LOCATION] = url_encode_ical(location) if location
120
162
  params[:UID] = "-#{url_encode(url)}" if url
121
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
122
- params[:organizer] = organizer if organizer
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"
123
168
 
124
169
  new_line = "%0A"
125
170
  params.each do |key, value|
@@ -254,11 +299,10 @@ module AddToCalendarLinks
254
299
  def url_encode_ical(s, strip_html: @strip_html)
255
300
  # per https://tools.ietf.org/html/rfc5545#section-3.3.11
256
301
  string = s.dup # don't modify original input
257
-
258
- string = strip_html_tags(string) if strip_html
302
+ if strip_html
303
+ string = strip_html_tags(string)
304
+ end
259
305
  string.gsub!("\\", "\\\\\\") # \ >> \\ --yes, really: https://stackoverflow.com/questions/6209480/how-to-replace-backslash-with-double-backslash
260
- string.gsub!(",", "\\,")
261
- string.gsub!(";", "\\;")
262
306
  string.gsub!("\r\n", "\n") # so can handle all newlines the same
263
307
  string.split("\n").map { |e|
264
308
  if e.empty?
@@ -266,11 +310,19 @@ module AddToCalendarLinks
266
310
  else
267
311
  url_encode(e)
268
312
  end
269
- }.join("\\n")
313
+ }.compact.join("\\n").gsub(/(\\n){2,}/, "\\n\\n").strip
270
314
  end
271
315
 
272
- def strip_html_tags(description)
273
- description.dup.gsub(/<\/?[^>]*>/, "")
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!("&amp;", "and")
322
+ string.gsub!("&nbsp;", " ")
323
+ string.gsub!(/<\/?[^>]*>/, "")
324
+ string.gsub!(/(\\n){2,}/, "\\n\\n")
325
+ string.strip
274
326
  end
275
327
  end
276
328
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module AddToCalendarLinks
4
- VERSION = '0.3.2'
4
+ VERSION = '0.4'
5
5
  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.3.2
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-19 00:00:00.000000000 Z
12
+ date: 2021-03-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: tzinfo