omnievent-icalendar 0.1.0.pre1 → 0.1.0.pre2

Sign up to get free protection for your applications and to get access to all the features.
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