add_to_calendar 0.1.0 → 0.2.0

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: 1424db1a7b175365602cda45a451d53eabaf14e67058003ef7b024d6984d93bd
4
- data.tar.gz: 9e050f1eaf3fb403493000f1487bff404636c5f778b59b72f421caaf5dc00379
3
+ metadata.gz: b1fba2b9dfdd72ba02d3d29413d1035c6f726569610e18227802cfd85f11e7af
4
+ data.tar.gz: ab89af6a02c276049dbbcac88fca397e37c3305084836a5e8467629064d414f2
5
5
  SHA512:
6
- metadata.gz: 175b9b699feba0968eb11516e95b84f894bc4a4f7c721d7e65b0af084bd005436a8e6655bf71e50d77fb48ae930cb0ab788ba0cbce4d2c8b23aec1c05fb7e91b
7
- data.tar.gz: e98fcbb260cd9ff707d227df4f37113860592af5397932ce2d356e8bd928a3f219827d5e7e48f6e446feb0fdd2349f7e8fa94383b2dc29b13d6088a94e64eb33
6
+ metadata.gz: ddc95426b93e001ea114f67b587b721ddea084d2f7607316181ee8c56e002a5c881ae10653d0a4ba9f4fdfee57c918f92e3d3320f54e4cbf9a9bf79faea59b8d
7
+ data.tar.gz: 4b0015473216a8da08b990ee5e290e80e8e2b8b873971a2197c84da30aaa1489d6878a10c03ed5efbffa5f719148b60434ca99dbeee1eee6cdbd3fccdf3a3a03
@@ -0,0 +1,12 @@
1
+ # These are supported funding model platforms
2
+
3
+ github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
4
+ patreon: # Replace with a single Patreon username
5
+ open_collective: # Replace with a single Open Collective username
6
+ ko_fi: jaredlt
7
+ tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
8
+ community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
9
+ liberapay: # Replace with a single Liberapay username
10
+ issuehunt: # Replace with a single IssueHunt username
11
+ otechie: # Replace with a single Otechie username
12
+ custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
data/.gitignore CHANGED
@@ -6,3 +6,4 @@
6
6
  /pkg/
7
7
  /spec/reports/
8
8
  /tmp/
9
+ *.gem
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- add_to_calendar (0.1.0)
4
+ add_to_calendar (0.2.0)
5
5
  tzinfo (~> 2.0.2)
6
6
  tzinfo-data (~> 1.2020.1)
7
7
 
@@ -15,7 +15,7 @@ GEM
15
15
  pry (0.13.1)
16
16
  coderay (~> 1.1)
17
17
  method_source (~> 1.0)
18
- rake (12.3.3)
18
+ rake (13.0.1)
19
19
  tzinfo (2.0.2)
20
20
  concurrent-ruby (~> 1.0)
21
21
  tzinfo-data (1.2020.1)
@@ -29,7 +29,7 @@ DEPENDENCIES
29
29
  bundler (~> 2.0)
30
30
  minitest (~> 5.0)
31
31
  pry (~> 0.13.1)
32
- rake (~> 12.3.3)
32
+ rake (~> 13.0.1)
33
33
 
34
34
  BUNDLED WITH
35
35
  2.0.2
data/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # AddToCalendar
2
2
 
3
- A ruby gem to generate 'Add To Calendar' URLs for Google, Apple, Office 365*, Outlook and Yahoo calendars.
3
+ A ruby gem to generate 'Add To Calendar' URLs for Apple, Google, Office 365, Outlook, Outlook.com and Yahoo calendars.
4
4
 
5
- *Office 365 not yet available
5
+ If this gem brings you some value feel free to buy me a coffee :) [![ko-fi](https://www.ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/P5P71PK9T)
6
6
 
7
7
  ## Installation
8
8
 
@@ -41,6 +41,13 @@ Or install it yourself as:
41
41
  @cal.yahoo_url
42
42
  #=> "https://calendar.yahoo.com/?v=60&view=d&type=20&title=Christmas%20party%21&st=20201212T133000Z&dur=0100"
43
43
 
44
+ @cal.office365_url
45
+ #=> "https://outlook.office.com/calendar/0/deeplink/compose?path=/calendar/action/compose&rru=addevent&subject=Christmas%20party%21&startdt=2020-12-12T13:30:00Z&enddt=2020-12-12T14:30:00Z"
46
+
47
+ # For outlook.com, different to Outlook the desktop application below
48
+ @cal.outlook_com_url
49
+ #=> "https://outlook.live.com/calendar/0/deeplink/compose?path=/calendar/action/compose&rru=addevent&subject=Christmas%20party%21&startdt=2020-12-12T13:30:00Z&enddt=2020-12-12T14:30:00Z"
50
+
44
51
  # ical provides a data-uri which will download a properly formatted *.ics file (see 'Creating HTML links' section)
45
52
  @cal.ical_url
46
53
  #=> "data:text/calendar;charset=utf8,BEGIN:VCALENDAR%0AVERSION:2.0%0ABEGIN:VEVENT%0ADTSTART=20201212T133000Z%0ADTEND=20201212T143000Z%0ASUMMARY=Christmas%20party%21%0AUID=-20201212T133000Z-Christmas%20party%21%0AEND:VEVENT%0AEND:VCALENDAR"
@@ -107,6 +114,10 @@ cal = AddToCalendar::URLs.new(event_attributes)
107
114
 
108
115
  - Read the [Wiki](https://github.com/jaredlt/add_to_calendar/wiki) for more specific details
109
116
 
117
+ ## Why build this?
118
+
119
+ I couldn't find an approriate gem or javascript library that did exactly what I wanted. So I decided to scratch my own itch to solve a problem for a startup I'm working on: https://www.littlefutures.org
120
+
110
121
  ## Development
111
122
 
112
123
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -26,11 +26,13 @@ Gem::Specification.new do |spec|
26
26
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
27
27
  spec.require_paths = ["lib"]
28
28
 
29
+ spec.required_ruby_version = '>= 2.0'
30
+
29
31
  spec.add_dependency "tzinfo", "~> 2.0.2"
30
32
  spec.add_dependency "tzinfo-data", "~> 1.2020.1"
31
33
 
32
34
  spec.add_development_dependency "bundler", "~> 2.0"
33
- spec.add_development_dependency "rake", "~> 12.3.3"
35
+ spec.add_development_dependency "rake", "~> 13.0.1"
34
36
  spec.add_development_dependency "minitest", "~> 5.0"
35
37
  spec.add_development_dependency "pry", "~> 0.13.1"
36
38
  end
@@ -1,6 +1,7 @@
1
1
  require "add_to_calendar/version"
2
2
 
3
- # needed for url_encode method
3
+ # erb util needed for url_encode method
4
+ # CGI::escape uses + instead of %20 which doesn't work for ical files
4
5
  require "erb"
5
6
  include ERB::Util
6
7
  require 'tzinfo'
@@ -32,9 +33,9 @@ module AddToCalendar
32
33
  params = {}
33
34
  params[:text] = url_encode(title)
34
35
  if end_datetime
35
- params[:dates] = "#{format_date(start_datetime)}/#{format_date(end_datetime)}"
36
+ params[:dates] = "#{format_date_google(start_datetime)}/#{format_date_google(end_datetime)}"
36
37
  else
37
- params[:dates] = "#{format_date(start_datetime)}/#{format_date(start_datetime + 60*60)}" # end time is 1 hour later
38
+ params[:dates] = "#{format_date_google(start_datetime)}/#{format_date_google(start_datetime + 60*60)}" # end time is 1 hour later
38
39
  end
39
40
  params[:ctz] = timezone.identifier
40
41
  params[:location] = url_encode(location) if location
@@ -54,10 +55,6 @@ module AddToCalendar
54
55
  return calendar_url
55
56
  end
56
57
 
57
- # def office_365_url
58
-
59
- # end
60
-
61
58
  def yahoo_url
62
59
  # 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
63
60
  calendar_url = "https://calendar.yahoo.com/?v=60&view=d&type=20"
@@ -87,6 +84,16 @@ module AddToCalendar
87
84
  return calendar_url
88
85
  end
89
86
 
87
+ def office365_url
88
+ # Eg. https://outlook.live.com/calendar/0/deeplink/compose?path=/calendar/action/compose&rru=addevent&subject=Holly%27s%208th%20Birthday%21&startdt=2020-05-12T12:30:00Z&enddt=2020-05-12T16:00:00Z&body=Come%20join%20us%20for%20lots%20of%20fun%20%26%20cake%21%0A%0Ahttps%3A%2F%2Fwww.example.com%2Fevent-details&location=Flat%204%2C%20The%20Edge%2C%2038%20Smith-Dorrien%20St%2C%20London%2C%20N1%207GU
89
+ microsoft("office365")
90
+ end
91
+
92
+ def outlook_com_url
93
+ # Eg. https://outlook.live.com/calendar/0/deeplink/compose?path=/calendar/action/compose&rru=addevent&subject=Holly%27s%208th%20Birthday%21&startdt=2020-05-12T12:30:00Z&enddt=2020-05-12T16:00:00Z&body=Come%20join%20us%20for%20lots%20of%20fun%20%26%20cake%21%0A%0Ahttps%3A%2F%2Fwww.example.com%2Fevent-details&location=Flat%204%2C%20The%20Edge%2C%2038%20Smith-Dorrien%20St%2C%20London%2C%20N1%207GU
94
+ microsoft("outlook.com")
95
+ end
96
+
90
97
  def ical_url
91
98
  # Downloads a *.ics file provided as a data:text href
92
99
  # Eg. data:text/calendar;charset=utf8,BEGIN:VCALENDAR%0AVERSION:2.0%0ABEGIN:VEVENT%0ADTSTART=20200610T123000Z%0ADTEND=20200610T133000Z%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%2C%20The%20Edge%2C%2038%20Smith-Dorrien%20St%2C%20London%2C%20N1%207GU%0AUID=-https%3A%2F%2Fwww.example.com%2Fevent-details%0AEND:VEVENT%0AEND:VCALENDAR
@@ -152,6 +159,40 @@ module AddToCalendar
152
159
  end
153
160
  end
154
161
 
162
+ def microsoft(service)
163
+ # Eg.
164
+ if service == "outlook.com"
165
+ calendar_url = "https://outlook.live.com/calendar/0/deeplink/compose?path=/calendar/action/compose&rru=addevent"
166
+ elsif service == "office365"
167
+ calendar_url = "https://outlook.office.com/calendar/0/deeplink/compose?path=/calendar/action/compose&rru=addevent"
168
+ else
169
+ raise MicrosoftServiceError, ":service must be 'outlook.com' or 'office365'. '#{service}' given"
170
+ end
171
+ params = {}
172
+ params[:subject] = url_encode(title)
173
+ params[:startdt] = utc_datetime_microsoft(start_datetime)
174
+ if end_datetime
175
+ params[:enddt] = utc_datetime_microsoft(end_datetime)
176
+ else
177
+ params[:enddt] = utc_datetime_microsoft(start_datetime + 60*60) # 1 hour later
178
+ end
179
+ params[:body] = url_encode(description) if description
180
+ if add_url_to_description && url
181
+ if params[:body]
182
+ params[:body] << url_encode("\n\n#{url}")
183
+ else
184
+ params[:body] = url_encode(url)
185
+ end
186
+ end
187
+ params[:location] = url_encode(location) if location
188
+
189
+ params.each do |key, value|
190
+ calendar_url << "&#{key}=#{value}"
191
+ end
192
+
193
+ return calendar_url
194
+ end
195
+
155
196
  def utc_datetime(datetime)
156
197
  t = timezone.local_time(
157
198
  datetime.strftime("%Y").to_i,
@@ -162,11 +203,23 @@ module AddToCalendar
162
203
  datetime.strftime("%S").to_i
163
204
  ).utc
164
205
 
165
- formatted = t.strftime('%Y%m%dT%H%M%SZ')
206
+ return t.strftime('%Y%m%dT%H%M%SZ')
207
+ end
208
+
209
+ def utc_datetime_microsoft(datetime)
210
+ t = timezone.local_time(
211
+ datetime.strftime("%Y").to_i,
212
+ datetime.strftime("%m").to_i,
213
+ datetime.strftime("%d").to_i,
214
+ datetime.strftime("%H").to_i,
215
+ datetime.strftime("%M").to_i,
216
+ datetime.strftime("%S").to_i
217
+ ).utc
218
+
219
+ return t.strftime('%Y-%m-%dT%H:%M:%SZ')
166
220
  end
167
221
 
168
- # Google Calendar format (rename method?)
169
- def format_date(start_datetime)
222
+ def format_date_google(start_datetime)
170
223
  start_datetime.strftime('%Y%m%dT%H%M%S')
171
224
  end
172
225
 
@@ -1,3 +1,3 @@
1
1
  module AddToCalendar
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: add_to_calendar
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jared Turner
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-05-13 00:00:00.000000000 Z
11
+ date: 2020-06-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: tzinfo
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 12.3.3
61
+ version: 13.0.1
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 12.3.3
68
+ version: 13.0.1
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: minitest
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -101,6 +101,7 @@ executables: []
101
101
  extensions: []
102
102
  extra_rdoc_files: []
103
103
  files:
104
+ - ".github/FUNDING.yml"
104
105
  - ".gitignore"
105
106
  - ".travis.yml"
106
107
  - Gemfile
@@ -128,7 +129,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
128
129
  requirements:
129
130
  - - ">="
130
131
  - !ruby/object:Gem::Version
131
- version: '0'
132
+ version: '2.0'
132
133
  required_rubygems_version: !ruby/object:Gem::Requirement
133
134
  requirements:
134
135
  - - ">="