omnievent-icalendar 0.1.0.pre1 → 0.1.0.pre2

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: eac596fd4368bab161d6ee2a6a2d82934d7dfdcd3e7b0aad53c443b21aa91e05
4
- data.tar.gz: 3bac6210eb54e610aae86530ed7a331f9ebcc542a1203f6d927986ce0f8fdad4
3
+ metadata.gz: 4fa79ecad05173ba82fe902d262b306f62efc15e422c61913041f0fbfc307444
4
+ data.tar.gz: 96479a4d9592eb0933e04e3343ce0514b2bd4402ecf712c40b2ff5e406cfa864
5
5
  SHA512:
6
- metadata.gz: 0e5e5c18854bc19ad1289f07da2d15a73ba5f68ecf3ad97b18ad99d659466f5b0cab033d0022c5c0290605f4b858556a8b7f7a215b381cd5f664f109e91bd905
7
- data.tar.gz: c1ce879167ef15c0b5793833a8e62dc0e4f2599d66eac80f38c4f1ec5e917273a58ae9e923ce31a10baeee7813d9b2a630154f185cc6578fd2a947fdd0a2c65b
6
+ metadata.gz: 3539a526615916b232c394ae6399f9532a9d324d731c29baf19e06bbea75c2c383a310a43791d9991fa20855716ffd477a9fd38dae7d204b7ea9fabd364aea75
7
+ data.tar.gz: 64defa9e542f040b0bcc169d69cfc7bd2ae264ac80f158f1a76d840ba57e589f9dc3e7864d26c6fe228ed9caade086647d68e782e9722fc80996e06040c115b3
data/CHANGELOG.md CHANGED
@@ -3,3 +3,7 @@
3
3
  ## [0.1.0.pre1] - 2022-09-05
4
4
 
5
5
  - Pre release
6
+
7
+ ## [0.1.0.pre2] - 2022-10-21
8
+
9
+ - Add recurrence support
data/Gemfile.lock CHANGED
@@ -1,9 +1,10 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- omnievent-icalendar (0.1.0.pre1)
4
+ omnievent-icalendar (0.1.0.pre2)
5
5
  addressable (~> 2.7)
6
6
  icalendar
7
+ icalendar-recurrence (~> 1.1)
7
8
  omnievent
8
9
  open-uri
9
10
 
@@ -23,10 +24,13 @@ GEM
23
24
  hashie (5.0.0)
24
25
  icalendar (2.8.0)
25
26
  ice_cube (~> 0.16)
27
+ icalendar-recurrence (1.1.3)
28
+ icalendar (~> 2.0)
29
+ ice_cube (~> 0.16)
26
30
  ice_cube (0.16.4)
27
31
  iso-639 (0.3.5)
28
32
  json (2.6.2)
29
- omnievent (0.1.0.pre1)
33
+ omnievent (0.1.0.pre3)
30
34
  hashie (>= 3.4.6)
31
35
  iso-639 (~> 0.3.5)
32
36
  tzinfo (~> 2.0)
@@ -92,4 +96,4 @@ DEPENDENCIES
92
96
  webmock
93
97
 
94
98
  BUNDLED WITH
95
- 2.3.14
99
+ 2.3.24
data/README.md CHANGED
@@ -1,11 +1,11 @@
1
1
  # OmniEvent iCalendar (Pre Release)
2
2
 
3
+ > Please note that this gem is pre release and is not yet ready for production.
4
+
3
5
  This gem contains a generic iCalendar strategy for [OmniEvent](https://github.com/paviliondev/omnievent).
4
6
 
5
7
  ## Installation
6
8
 
7
- > Please note that this gem is pre release and is not yet ready for production.
8
-
9
9
  First install [OmniEvent](https://rubygems.org/gems/omnievent).
10
10
 
11
11
  $ gem install omnievent
@@ -16,8 +16,6 @@ Then install this gem:
16
16
 
17
17
  ## Usage
18
18
 
19
- > Please note that this gem is pre release and is not yet ready for production.
20
-
21
19
  Please see ["Usage" in the OmniEvent Readme](https://github.com/paviliondev/omnievent#usage)
22
20
 
23
21
  ## Development
@@ -2,6 +2,6 @@
2
2
 
3
3
  module OmniEvent
4
4
  module Icalendar
5
- VERSION = "0.1.0.pre1"
5
+ VERSION = "0.1.0.pre2"
6
6
  end
7
7
  end
@@ -2,6 +2,7 @@
2
2
 
3
3
  require_relative "../../omnievent/icalendar/version"
4
4
  require "icalendar"
5
+ require "icalendar-recurrence"
5
6
  require "open-uri"
6
7
  require "addressable/uri"
7
8
 
@@ -14,6 +15,7 @@ module OmniEvent
14
15
  include OmniEvent::Strategy
15
16
 
16
17
  option :name, "icalendar"
18
+ option :expand_recurrences
17
19
  option :uri, ""
18
20
 
19
21
  def raw_events
@@ -32,6 +34,8 @@ module OmniEvent
32
34
  result += calendar.events
33
35
  end
34
36
 
37
+ result = expand_recurrences(result) if options.expand_recurrences
38
+
35
39
  result
36
40
  end
37
41
 
@@ -44,18 +48,10 @@ module OmniEvent
44
48
  url: raw_event.url.to_s
45
49
  }
46
50
 
47
- metadata = {
48
- uid: format_uid(raw_event),
49
- taxonomies: raw_event.categories.to_s,
50
- status: convert_status(raw_event.status),
51
- created_at: format_time(raw_event.created),
52
- updated_at: format_time(raw_event.last_modified)
53
- }
54
-
55
51
  OmniEvent::EventHash.new(
56
52
  provider: name,
57
53
  data: data,
58
- metadata: metadata
54
+ metadata: retrieve_metadata(raw_event)
59
55
  )
60
56
  end
61
57
 
@@ -76,6 +72,28 @@ module OmniEvent
76
72
  end
77
73
  end
78
74
 
75
+ def retrieve_metadata(event)
76
+ metadata = {
77
+ uid: format_uid(event),
78
+ taxonomies: event.categories.to_s,
79
+ status: convert_status(event.status),
80
+ created_at: format_time(event.created),
81
+ updated_at: format_time(event.last_modified),
82
+ sequence: nil,
83
+ series_id: nil,
84
+ occurrence_id: nil
85
+ }
86
+
87
+ metadata[:sequence] = event.sequence.to_s if event.sequence
88
+
89
+ if event.recurrence_id
90
+ metadata[:series_id] = event.uid.to_s
91
+ metadata[:occurrence_id] = event.recurrence_id.to_s
92
+ end
93
+
94
+ metadata
95
+ end
96
+
79
97
  def format_uid(event)
80
98
  # See https://datatracker.ietf.org/doc/html/rfc5545#section-3.8.4.4
81
99
  event_uid = event.uid.to_s
@@ -96,6 +114,26 @@ module OmniEvent
96
114
  "published"
97
115
  end
98
116
  end
117
+
118
+ def expand_recurrences(events)
119
+ events.each_with_object([]) do |event, res|
120
+ schedule = ::Icalendar::Recurrence::Schedule.new(event)
121
+
122
+ occurrences = if options.from_time && options.to_time
123
+ schedule.occurrences_between(options.from_time, options.to_time)
124
+ else
125
+ schedule.all_occurrences
126
+ end
127
+
128
+ occurrences.each do |occurrence|
129
+ occurrence_event = event.clone
130
+ occurrence_event.recurrence_id = occurrence.start_time
131
+ occurrence_event.dtstart = occurrence.start_time
132
+ occurrence_event.dtend = occurrence.end_time
133
+ res << occurrence_event
134
+ end
135
+ end
136
+ end
99
137
  end
100
138
  end
101
139
  end
@@ -30,6 +30,7 @@ Gem::Specification.new do |spec|
30
30
 
31
31
  spec.add_dependency "addressable", "~> 2.7"
32
32
  spec.add_dependency "icalendar"
33
+ spec.add_dependency "icalendar-recurrence", "~> 1.1"
33
34
  spec.add_dependency "omnievent"
34
35
  spec.add_dependency "open-uri"
35
36
  spec.add_development_dependency "byebug"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: omnievent-icalendar
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0.pre1
4
+ version: 0.1.0.pre2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Angus McLeod
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-10-03 00:00:00.000000000 Z
11
+ date: 2022-10-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: icalendar-recurrence
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.1'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.1'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: omnievent
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -137,7 +151,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
137
151
  - !ruby/object:Gem::Version
138
152
  version: 1.3.1
139
153
  requirements: []
140
- rubygems_version: 3.1.4
154
+ rubygems_version: 3.1.6
141
155
  signing_key:
142
156
  specification_version: 4
143
157
  summary: OmniEvent iCalendar strategy