jekyll-ical-tag 1.0.2

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 5b682456bd14cbe8d3461a834f13069b3a3f21b784262cd34539544f7f75cf1d
4
+ data.tar.gz: 7b8e9cf431e0461b8e42e8dd9dee886e3ac162b3ea98803827b1f4eca7f8dc14
5
+ SHA512:
6
+ metadata.gz: 2f85c6e83e0169978388495bb42ed92a4015aa6a7db3445fd574e056f23de724980933c466415ef50a26214dd3150a29640d163b21a2c86266eaf1bdb43c740a
7
+ data.tar.gz: 6616759701233047f4fd9994ff4d2d58426900d3e30fb46fcf19628719d400b9ffa86321417ea0876ac3bea6d0b257f8922fe73be526c5ebb410b2e73253bdb2
data/.gitignore ADDED
@@ -0,0 +1,2 @@
1
+ .DS_Store
2
+ .bundle
data/Gemfile ADDED
@@ -0,0 +1,13 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'jekyll', require: false
4
+
5
+ gem 'api_cache'
6
+ gem 'icalendar'
7
+ gem 'activesupport'
8
+
9
+ group :development, :test do
10
+ gem 'pry'
11
+ gem 'rspec'
12
+ gem 'nokogiri'
13
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,97 @@
1
+ GEM
2
+ remote: https://rubygems.org/
3
+ specs:
4
+ activesupport (5.2.1)
5
+ concurrent-ruby (~> 1.0, >= 1.0.2)
6
+ i18n (>= 0.7, < 2)
7
+ minitest (~> 5.1)
8
+ tzinfo (~> 1.1)
9
+ addressable (2.5.2)
10
+ public_suffix (>= 2.0.2, < 4.0)
11
+ api_cache (0.3.0)
12
+ coderay (1.1.2)
13
+ colorator (1.1.0)
14
+ concurrent-ruby (1.0.5)
15
+ diff-lcs (1.3)
16
+ ffi (1.9.25)
17
+ forwardable-extended (2.6.0)
18
+ i18n (1.1.1)
19
+ concurrent-ruby (~> 1.0)
20
+ icalendar (2.5.0)
21
+ ice_cube (~> 0.16)
22
+ ice_cube (0.16.3)
23
+ jekyll (3.6.3)
24
+ addressable (~> 2.4)
25
+ colorator (~> 1.0)
26
+ jekyll-sass-converter (~> 1.0)
27
+ jekyll-watch (~> 1.1)
28
+ kramdown (~> 1.14)
29
+ liquid (~> 4.0)
30
+ mercenary (~> 0.3.3)
31
+ pathutil (~> 0.9)
32
+ rouge (>= 1.7, < 3)
33
+ safe_yaml (~> 1.0)
34
+ jekyll-sass-converter (1.5.2)
35
+ sass (~> 3.4)
36
+ jekyll-watch (1.5.1)
37
+ listen (~> 3.0)
38
+ kramdown (1.17.0)
39
+ liquid (4.0.1)
40
+ listen (3.1.5)
41
+ rb-fsevent (~> 0.9, >= 0.9.4)
42
+ rb-inotify (~> 0.9, >= 0.9.7)
43
+ ruby_dep (~> 1.2)
44
+ mercenary (0.3.6)
45
+ method_source (0.9.0)
46
+ mini_portile2 (2.4.0)
47
+ minitest (5.11.3)
48
+ nokogiri (1.10.1)
49
+ mini_portile2 (~> 2.4.0)
50
+ pathutil (0.16.1)
51
+ forwardable-extended (~> 2.6)
52
+ pry (0.11.3)
53
+ coderay (~> 1.1.0)
54
+ method_source (~> 0.9.0)
55
+ public_suffix (3.0.3)
56
+ rb-fsevent (0.10.3)
57
+ rb-inotify (0.9.10)
58
+ ffi (>= 0.5.0, < 2)
59
+ rouge (2.2.1)
60
+ rspec (3.7.0)
61
+ rspec-core (~> 3.7.0)
62
+ rspec-expectations (~> 3.7.0)
63
+ rspec-mocks (~> 3.7.0)
64
+ rspec-core (3.7.0)
65
+ rspec-support (~> 3.7.0)
66
+ rspec-expectations (3.7.0)
67
+ diff-lcs (>= 1.2.0, < 2.0)
68
+ rspec-support (~> 3.7.0)
69
+ rspec-mocks (3.7.0)
70
+ diff-lcs (>= 1.2.0, < 2.0)
71
+ rspec-support (~> 3.7.0)
72
+ rspec-support (3.7.0)
73
+ ruby_dep (1.5.0)
74
+ safe_yaml (1.0.4)
75
+ sass (3.6.0)
76
+ sass-listen (~> 4.0.0)
77
+ sass-listen (4.0.0)
78
+ rb-fsevent (~> 0.9, >= 0.9.4)
79
+ rb-inotify (~> 0.9, >= 0.9.7)
80
+ thread_safe (0.3.6)
81
+ tzinfo (1.2.5)
82
+ thread_safe (~> 0.1)
83
+
84
+ PLATFORMS
85
+ ruby
86
+
87
+ DEPENDENCIES
88
+ activesupport
89
+ api_cache
90
+ icalendar
91
+ jekyll
92
+ nokogiri
93
+ pry
94
+ rspec
95
+
96
+ BUNDLED WITH
97
+ 1.17.3
data/README.md ADDED
@@ -0,0 +1,52 @@
1
+ # Jekyll ical tag
2
+
3
+ Author: Ricky Chilcott https://www.rakefire.io
4
+
5
+ Description: Pull ICS feed and provide a for-like loop of calendar events
6
+
7
+ ## Installation
8
+
9
+ To your Gemfile:
10
+
11
+ `gem 'jekyll-ical-tag', git: "https://github.com/Rakefire/jekyll-ical-tag.git"`
12
+
13
+ To your `_config.yml`
14
+
15
+ ```yml
16
+ plugins:
17
+ - jekyll-ical-tag
18
+ ```
19
+
20
+ ## Syntax
21
+
22
+ ```html
23
+ {% calendar url: https://space.floern.com/launch.ics reverse: true only_future: true %}
24
+ {{ event.summary }}
25
+ {{ event.description }}
26
+ {{ event.simple_html_description }}
27
+ {{ event.start_time }}
28
+ {{ event.end_time }}
29
+ {{ event.url }}
30
+ {{ event.attendees }}
31
+ {% endcalendar %}
32
+ ```
33
+
34
+ ## Options
35
+
36
+ - `reverse` - Defaults to 'false', ordering events by start_time (or reverse start_time).
37
+ - `only_past` - Defaults to 'false', limits returned events to start_times before now.
38
+ - `only_future` - Defaults to 'false', limits returned events to start_time after now.
39
+
40
+ - `before_date` - limits returned events to dates before a specific date. This gets parsed with Ruby's Time.parse (e.g. 01-01-2018)
41
+ - `after_date` - limits returned events to dates before a specific date. This gets parsed with Ruby's Time.parse (e.g. 01-01-2018).
42
+
43
+ ## Event Attributes:
44
+
45
+ - `summary` - Title or name of event
46
+ - `description` - Notes/description of event
47
+ - `simple_html_description` - Notes/description of event with urls auto-linked
48
+ - `location` - Location of event
49
+ - `start_time` - start time of event
50
+ - `end_time` - end time of event
51
+ - `url` - url of event, if provided, if not, take the first url from the description.
52
+ - `attendees` - [Array] of attendees names/emails
@@ -0,0 +1,189 @@
1
+ require "api_cache"
2
+ require "active_support"
3
+ require "icalendar"
4
+
5
+ class CalendarParser
6
+ def initialize(url)
7
+ @url = URI.unescape(url)
8
+ end
9
+
10
+ def events
11
+ @events ||= Icalendar::Event.parse(ics_feed).sort { |e1, e2| e1.dtstart <=> e2.dtstart }
12
+ end
13
+
14
+ private
15
+
16
+ def ics_feed
17
+ @ics_feed ||= APICache.get(@url)
18
+ end
19
+ end
20
+
21
+ class CalendarLimiter
22
+ def initialize(parser, options = {})
23
+ @parser = parser
24
+ @options = options
25
+ end
26
+
27
+ def events
28
+ case
29
+ when options[:only] == :future
30
+ now = Time.now
31
+ parser.events.select do |event|
32
+ event.dtstart.to_time >= now
33
+ end
34
+ when options[:only] == :past
35
+ now = Time.now
36
+ parser.events.select do |event|
37
+ event.dtstart.to_time < now
38
+ end
39
+ when options[:reverse]
40
+ parser.events.reverse
41
+ when options[:after_date]
42
+ parser.events.select do |event|
43
+ event.dtstart.to_time >= options[:after_date]
44
+ end
45
+ when options[:before_date]
46
+ parser.events.select do |event|
47
+ event.dtstart.to_time < options[:before_date]
48
+ end
49
+ else
50
+ parser.events
51
+ end
52
+ end
53
+
54
+ private
55
+
56
+ attr_reader :parser, :options
57
+ end
58
+
59
+ module Jekyll
60
+ class CalendarTag < Liquid::Block
61
+ include Convertible
62
+
63
+ def initialize(tag_name, markup, parse_context)
64
+ super
65
+
66
+ @markup = markup
67
+
68
+ scan_attributes!
69
+ set_reverse!
70
+ set_url!
71
+ set_only!
72
+ set_before_date!
73
+ set_after_date!
74
+ end
75
+
76
+ def render(context)
77
+ context.registers[:ical] ||= Hash.new(0)
78
+
79
+ result = []
80
+
81
+ parser = CalendarParser.new(@url)
82
+ parser = CalendarLimiter.new(parser, only: @only)
83
+ parser = CalendarLimiter.new(parser, reverse: @reverse)
84
+ parser = CalendarLimiter.new(parser, before_date: @before_date)
85
+ parser = CalendarLimiter.new(parser, after_date: @after_date)
86
+
87
+ events = parser.events
88
+ length = events.length
89
+
90
+ context.stack do
91
+ events.each_with_index do |event, index|
92
+
93
+ attendees = event.attendee.map(&:to_s).map {|a| a.slice!("mailto:"); a }
94
+
95
+ context['event'] = {
96
+ 'index' => index,
97
+ 'uid' => event.uid,
98
+ 'summary' => event.summary,
99
+ 'description' => event.description,
100
+ 'location' => event.location,
101
+ 'url' => event.url&.to_s,
102
+ 'start_time' => event.dtstart&.to_time,
103
+ 'end_time' => event.dtend&.to_time,
104
+ 'attendees' => attendees,
105
+ }
106
+
107
+ context['forloop'] = {
108
+ 'name' => 'calendar',
109
+ 'length' => length,
110
+ 'index' => index + 1,
111
+ 'index0' => index,
112
+ 'rindex' => length - index,
113
+ 'rindex0' => length - index - 1,
114
+ 'first' => (index == 0),
115
+ 'last' => (index == length - 1)
116
+ }
117
+
118
+ result << nodelist.map do |n|
119
+ if n.respond_to? :render
120
+ n.render(context)
121
+ else
122
+ n
123
+ end
124
+ end.join
125
+ end
126
+ end
127
+
128
+ result
129
+ end
130
+
131
+ private
132
+
133
+ def scan_attributes!
134
+ @attributes = {}
135
+ @markup.scan(Liquid::TagAttributes) do |key, value|
136
+ @attributes[key] = value
137
+ end
138
+ end
139
+
140
+ def set_reverse!
141
+ @reverse = @attributes['order'] == 'reverse'
142
+ end
143
+
144
+ def set_url!
145
+ @url = @attributes['url']
146
+ raise "No URL provided" unless @url
147
+ end
148
+
149
+ def set_only!
150
+ only_future = @attributes["only_future"] == "true"
151
+ only_past = @attributes["only_past"] == "true"
152
+
153
+ raise "Set only_future OR only_past, not both" if only_future && only_past
154
+ @only =
155
+ case
156
+ when only_future
157
+ :future
158
+ when only_past
159
+ :past
160
+ else
161
+ :all
162
+ end
163
+ end
164
+
165
+ def set_before_date!
166
+ @before_date =
167
+ begin
168
+ if @attributes['before_date']
169
+ Time.parse(@attributes['before_date'])
170
+ end
171
+ rescue => e
172
+ nil
173
+ end
174
+ end
175
+
176
+ def set_after_date!
177
+ @after_date =
178
+ begin
179
+ if @attributes['after_date']
180
+ Time.parse(@attributes['after_date'])
181
+ end
182
+ rescue => e
183
+ nil
184
+ end
185
+ end
186
+ end
187
+ end
188
+
189
+ Liquid::Template.register_tag('ical', Jekyll::CalendarTag)
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path("lib", __dir__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+
6
+ require 'jekyll'
7
+ require "jekyll-ical-tag/version"
8
+
9
+ Gem::Specification.new do |spec|
10
+ spec.name = "jekyll-ical-tag"
11
+ spec.version = Jekyll::IcalTag::VERSION
12
+ spec.authors = ["Ricky Chilcott"]
13
+ spec.email = ["ricky@rakefire.io"]
14
+ spec.summary = "A Jekyll plugin to pull ICS feed and provide a for-like loop of calendar events"
15
+ spec.homepage = "https://github.com/rakefire/jekyll-ical-tag"
16
+ spec.license = "MIT"
17
+
18
+ # Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
19
+ # delete this section to allow pushing this gem to any host.
20
+ if spec.respond_to?(:metadata)
21
+ spec.metadata["allowed_push_host"] = "https://rubygems.org"
22
+ else
23
+ raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
24
+ end
25
+
26
+ spec.required_ruby_version = ">= 2.3.0"
27
+
28
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r!^(test|spec|features)/!) }
29
+ spec.bindir = "exe"
30
+ spec.executables = spec.files.grep(%r!^exe/!) { |f| File.basename(f) }
31
+ spec.require_paths = ["lib"]
32
+
33
+ spec.add_dependency "jekyll", "~> 3.3"
34
+ spec.add_dependency "api_cache"
35
+ spec.add_dependency "activesupport"
36
+ spec.add_dependency "icalendar"
37
+ spec.add_dependency "pry"
38
+
39
+ spec.add_development_dependency "bundler", "~> 1.15"
40
+ spec.add_development_dependency "rspec", "~> 3.5"
41
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Jekyll
4
+ class IcalTag
5
+ class CalendarLimiter
6
+ def initialize(parser, options = {})
7
+ @parser = parser
8
+ @options = options
9
+ end
10
+
11
+ def events
12
+ case
13
+ when options[:only] == :future
14
+ now = Time.now
15
+ parser.events.select do |event|
16
+ event.dtstart.to_time >= now
17
+ end
18
+ when options[:only] == :past
19
+ now = Time.now
20
+ parser.events.select do |event|
21
+ event.dtstart.to_time < now
22
+ end
23
+ when options[:reverse]
24
+ parser.events.reverse
25
+ when options[:after_date]
26
+ parser.events.select do |event|
27
+ event.dtstart.to_time >= options[:after_date]
28
+ end
29
+ when options[:before_date]
30
+ parser.events.select do |event|
31
+ event.dtstart.to_time < options[:before_date]
32
+ end
33
+ else
34
+ parser.events
35
+ end
36
+ end
37
+
38
+ private
39
+
40
+ attr_reader :parser, :options
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "api_cache"
4
+ require "active_support"
5
+ require "icalendar"
6
+
7
+ module Jekyll
8
+ class IcalTag
9
+ class CalendarParser
10
+ def initialize(url)
11
+ @url = URI.unescape(url)
12
+ end
13
+
14
+ def events
15
+ @events ||= begin
16
+ Icalendar::Event.parse(ics_feed)
17
+ .sort { |e1, e2| e1.dtstart <=> e2.dtstart }
18
+ .map{|e| Jekyll::IcalTag::Event.new(e) }
19
+ end
20
+ end
21
+
22
+ private
23
+
24
+ def ics_feed
25
+ @ics_feed ||= APICache.get(@url)
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "uri"
4
+
5
+ module Jekyll
6
+ class IcalTag
7
+ class Event
8
+ URL_REGEX = /(?:(?:https?|ftp):\/\/)(?:\S+(?::\S*)?@)?(?:(?!10(?:\.\d{1,3}){3})(?!127(?:\.\d{1,3}){3})(?!169\.254(?:\.\d{1,3}){2})(?!192\.168(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]+-?)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]+-?)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?/
9
+ extend Forwardable
10
+
11
+ def initialize(event)
12
+ @event = event
13
+ end
14
+
15
+ def_delegators :event, :attendee, :uid, :summary, :description, :location, :url, :dtstart, :dtend
16
+
17
+ def simple_html_description
18
+ @simple_html_description ||= begin
19
+ description.clone.tap do |d|
20
+ description_urls.each do |url|
21
+ d.gsub! url, %(<a href='#{url}'>#{url}</a>)
22
+ end
23
+ end
24
+ end
25
+ end
26
+
27
+ def attendees
28
+ attendee.map(&:to_s).map {|a| a.slice!("mailto:"); a }
29
+ end
30
+
31
+ def description_urls
32
+ @description_urls ||= description.scan(URL_REGEX).to_a
33
+ end
34
+
35
+ private
36
+
37
+ attr_reader :event
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,8 @@
1
+
2
+ # frozen_string_literal: true
3
+
4
+ module Jekyll
5
+ class IcalTag < Liquid::Block
6
+ VERSION = "1.0.2"
7
+ end
8
+ end
@@ -0,0 +1,138 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "jekyll"
4
+ require "jekyll-ical-tag/version"
5
+ require "pry"
6
+
7
+ module Jekyll
8
+ class IcalTag < Liquid::Block
9
+ require_relative "jekyll-ical-tag/event"
10
+ require_relative "jekyll-ical-tag/calendar_parser"
11
+ require_relative "jekyll-ical-tag/calendar_limiter"
12
+
13
+ include Convertible
14
+
15
+ def initialize(tag_name, markup, parse_context)
16
+ super
17
+ @markup = markup
18
+
19
+ scan_attributes!
20
+ set_reverse!
21
+ set_url!
22
+ set_only!
23
+ set_before_date!
24
+ set_after_date!
25
+ end
26
+
27
+ def render(context)
28
+ context.registers[:ical] ||= Hash.new(0)
29
+
30
+ result = []
31
+
32
+ parser = CalendarParser.new(@url)
33
+ parser = CalendarLimiter.new(parser, only: @only)
34
+ parser = CalendarLimiter.new(parser, reverse: @reverse)
35
+ parser = CalendarLimiter.new(parser, before_date: @before_date)
36
+ parser = CalendarLimiter.new(parser, after_date: @after_date)
37
+
38
+ events = parser.events
39
+ length = events.length
40
+
41
+ context.stack do
42
+ events.each_with_index do |event, index|
43
+ context['event'] = {
44
+ 'index' => index,
45
+ 'uid' => event.uid.presence,
46
+ 'summary' => event.summary.presence,
47
+ 'description' => event.description.presence,
48
+ 'simple_html_description' => event.simple_html_description.presence,
49
+ 'location' => event.location.presence,
50
+ 'url' => event.url&.to_s.presence || event.description_urls.first,
51
+ 'start_time' => event.dtstart&.to_time.presence,
52
+ 'end_time' => event.dtend&.to_time.presence,
53
+ 'attendees' => event.attendees,
54
+ }
55
+
56
+ context['forloop'] = {
57
+ 'name' => 'ical',
58
+ 'length' => length,
59
+ 'index' => index + 1,
60
+ 'index0' => index,
61
+ 'rindex' => length - index,
62
+ 'rindex0' => length - index - 1,
63
+ 'first' => (index == 0),
64
+ 'last' => (index == length - 1)
65
+ }
66
+
67
+ result << nodelist.map do |n|
68
+ if n.respond_to? :render
69
+ n.render(context)
70
+ else
71
+ n
72
+ end
73
+ end.join
74
+ end
75
+ end
76
+
77
+ result
78
+ end
79
+
80
+ private
81
+
82
+ def scan_attributes!
83
+ @attributes = {}
84
+ @markup.scan(Liquid::TagAttributes) do |key, value|
85
+ @attributes[key] = value
86
+ end
87
+ end
88
+
89
+ def set_reverse!
90
+ @reverse = @attributes['order'] == 'reverse'
91
+ end
92
+
93
+ def set_url!
94
+ @url = @attributes['url']
95
+ raise "No URL provided" unless @url
96
+ end
97
+
98
+ def set_only!
99
+ only_future = @attributes["only_future"] == "true"
100
+ only_past = @attributes["only_past"] == "true"
101
+
102
+ raise "Set only_future OR only_past, not both" if only_future && only_past
103
+ @only =
104
+ case
105
+ when only_future
106
+ :future
107
+ when only_past
108
+ :past
109
+ else
110
+ :all
111
+ end
112
+ end
113
+
114
+ def set_before_date!
115
+ @before_date =
116
+ begin
117
+ if @attributes['before_date']
118
+ Time.parse(@attributes['before_date'])
119
+ end
120
+ rescue => e
121
+ nil
122
+ end
123
+ end
124
+
125
+ def set_after_date!
126
+ @after_date =
127
+ begin
128
+ if @attributes['after_date']
129
+ Time.parse(@attributes['after_date'])
130
+ end
131
+ rescue => e
132
+ nil
133
+ end
134
+ end
135
+ end
136
+ end
137
+
138
+ Liquid::Template.register_tag('ical', Jekyll::IcalTag)
metadata ADDED
@@ -0,0 +1,155 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jekyll-ical-tag
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Ricky Chilcott
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2019-02-01 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: jekyll
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '3.3'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '3.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: api_cache
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: activesupport
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: icalendar
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: bundler
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.15'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '1.15'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rspec
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '3.5'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '3.5'
111
+ description:
112
+ email:
113
+ - ricky@rakefire.io
114
+ executables: []
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - ".gitignore"
119
+ - Gemfile
120
+ - Gemfile.lock
121
+ - README.md
122
+ - _plugins/ical_tag.rb
123
+ - jekyll-ical-tag.gemspec
124
+ - lib/jekyll-ical-tag.rb
125
+ - lib/jekyll-ical-tag/calendar_limiter.rb
126
+ - lib/jekyll-ical-tag/calendar_parser.rb
127
+ - lib/jekyll-ical-tag/event.rb
128
+ - lib/jekyll-ical-tag/version.rb
129
+ homepage: https://github.com/rakefire/jekyll-ical-tag
130
+ licenses:
131
+ - MIT
132
+ metadata:
133
+ allowed_push_host: https://rubygems.org
134
+ post_install_message:
135
+ rdoc_options: []
136
+ require_paths:
137
+ - lib
138
+ required_ruby_version: !ruby/object:Gem::Requirement
139
+ requirements:
140
+ - - ">="
141
+ - !ruby/object:Gem::Version
142
+ version: 2.3.0
143
+ required_rubygems_version: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - ">="
146
+ - !ruby/object:Gem::Version
147
+ version: '0'
148
+ requirements: []
149
+ rubyforge_project:
150
+ rubygems_version: 2.7.6
151
+ signing_key:
152
+ specification_version: 4
153
+ summary: A Jekyll plugin to pull ICS feed and provide a for-like loop of calendar
154
+ events
155
+ test_files: []