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 +4 -4
- data/CHANGELOG.md +4 -0
- data/Gemfile.lock +7 -3
- data/README.md +2 -4
- data/lib/omnievent/icalendar/version.rb +1 -1
- data/lib/omnievent/strategies/icalendar.rb +47 -9
- data/omnievent-icalendar.gemspec +1 -0
- metadata +17 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4fa79ecad05173ba82fe902d262b306f62efc15e422c61913041f0fbfc307444
|
4
|
+
data.tar.gz: 96479a4d9592eb0933e04e3343ce0514b2bd4402ecf712c40b2ff5e406cfa864
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3539a526615916b232c394ae6399f9532a9d324d731c29baf19e06bbea75c2c383a310a43791d9991fa20855716ffd477a9fd38dae7d204b7ea9fabd364aea75
|
7
|
+
data.tar.gz: 64defa9e542f040b0bcc169d69cfc7bd2ae264ac80f158f1a76d840ba57e589f9dc3e7864d26c6fe228ed9caade086647d68e782e9722fc80996e06040c115b3
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
omnievent-icalendar (0.1.0.
|
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.
|
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.
|
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,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:
|
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
|
data/omnievent-icalendar.gemspec
CHANGED
@@ -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.
|
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-
|
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.
|
154
|
+
rubygems_version: 3.1.6
|
141
155
|
signing_key:
|
142
156
|
specification_version: 4
|
143
157
|
summary: OmniEvent iCalendar strategy
|