jekyll-google-calendar 0.1.1 → 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: 1946582c3cf64cd533e2375fadeb22cdfdc7730cec110103f9cfa693ce7eb802
4
- data.tar.gz: 3f3e2ec49bf29c049afa1185cddefebe106927da32c48d6aff2ae2fd42b62f4b
3
+ metadata.gz: 8639a693d7678ca5a0d13b964f91cc48e5f19290cefadba6464b0d449d6444c5
4
+ data.tar.gz: 2d4417316d13393970fc4112917eecc6390c3ca41a363692b6f079f4e26c727a
5
5
  SHA512:
6
- metadata.gz: 6d2861a5331541ebed48c88a7430188f073c966d1c10154daddd5cc64bd0d697322c0fa1625322c7880d5f844436e30f5e2ba3a0ed78ad34bb1a3d58ac25b07b
7
- data.tar.gz: 8326822b153152c8e32f51b2fcf5a50256b3c4d7c226dfbc0f21666a641d778222b89b120e56549cf8e23bad47d63b90d32a2c702ef0124617fba79b6cf17100
6
+ metadata.gz: 9657bc9d551096a5442b58164dcb9fe1ca30cbab0212d54b3a2fe28c9cf03dea6abd585fd4a5ad9c14b4f971b42373ca92cf6476737b52d2e77b41f1162788fb
7
+ data.tar.gz: b3634adee7ede9facbccbc2a635b89af94696049dff96177fc150ac76cb4181c97268c3207c00ea8418c4c5eea7c1bb5ac2038f4f5851b7933bac4a55a1c8831
@@ -0,0 +1,41 @@
1
+ require 'date'
2
+
3
+ module Jekyll
4
+ module Google
5
+ module Calendar
6
+ module EventListFilter
7
+ def get_google_calendar_events_by_date_offset(events, startOffset, endOffset, soft_max)
8
+ i = 0
9
+ newEvents = []
10
+ unless events.nil?
11
+ for event in events
12
+ date = event["start"]["date"] || event["start"]["dateTime"]
13
+ date = date.to_time
14
+
15
+ start_of_day = Time.new(Time.now.year, Time.now.month, Time.now.day) + 60*60*24 * startOffset
16
+ end_of_range = nil
17
+ if endOffset >= 0
18
+ end_of_range = Time.new(Time.now.year, Time.now.month, Time.now.day) + 60*60*24 * (endOffset + 1)
19
+ end
20
+
21
+ today = date < start_of_day + 60*60*24
22
+
23
+
24
+ if (date >= start_of_day.utc) && (!end_of_range || date < end_of_range)
25
+ if (today || i < soft_max)
26
+ newEvents.push(event)
27
+ i = i + 1
28
+ else
29
+ return newEvents
30
+ end
31
+ end
32
+ end
33
+ end
34
+ newEvents
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+
41
+ Liquid::Template.register_filter(Jekyll::Google::Calendar::EventListFilter)
@@ -1,12 +1,10 @@
1
1
  require 'google/apis/calendar_v3'
2
2
  require 'googleauth'
3
+ require_relative "event_list"
4
+ include Jekyll::Google::Calendar::EventListFilter
3
5
 
4
6
  GoogleCalendar = ::Google::Apis::CalendarV3
5
7
 
6
- #TODO: Handle case where calendar doesn't exist or is not readable
7
- #TODO: Add conference data to hash
8
- #TODO: Add remaining calendar response data to hash
9
-
10
8
  module Jekyll
11
9
  module Google
12
10
  module Calendar
@@ -31,6 +29,7 @@ module Jekyll
31
29
  end
32
30
  end
33
31
 
32
+
34
33
  ##
35
34
  # This class is a Generator that Jekyll will call to generate events from our Google Calendars
36
35
 
@@ -47,13 +46,70 @@ module Jekyll
47
46
  @gcallendar_config = site.config['gcalendar']
48
47
  raise 'Missing Google Calendar configuration in _config.yml' unless @gcallendar_config
49
48
  service = setup_calendar()
49
+ site.data["calendars"] = Hash.new
50
50
  @gcallendar_config['calendars'].each do |calendar|
51
51
  process_calendar(site, service, calendar['id'], calendar['look_ahead'], calendar['directory'], calendar['date_format'], calendar['layout'])
52
52
  end
53
+
54
+ unless @gcallendar_config["event_list_name"].nil?
55
+ events = []
56
+ unless site.data["calendars"].nil?
57
+ site.data["calendars"].each do |calendar|
58
+ events = events.concat(calendar[1])
59
+ end
60
+ events = get_google_calendar_events_by_date_offset(events,0,-1,1000)
61
+
62
+ page_size = @gcallendar_config['event_list_per_page']
63
+ pages = (events.length / page_size).ceil
64
+ for i in 0..(pages-1)
65
+ create_event_list_page(site, events.slice(i*page_size, page_size), @gcallendar_config['event_list_page_layout'], i+1, pages, events.length)
66
+ end
67
+ end
68
+ end
53
69
  end
54
70
 
55
71
  private
56
72
 
73
+ def create_event_list_page(site, event_list, layout, event_list_page, event_list_pages, total_events)
74
+ dir = @gcallendar_config["event_list_name"]
75
+ path = "/" + (dir[-1] == "/" ? dir : dir + "/") + event_list_page .to_s
76
+ if (event_list_page == 1)
77
+ path = "/" + (dir[-1] == "/" ? dir : dir + "/")
78
+ end
79
+
80
+ prev_path = nil
81
+ prev_page = nil
82
+ if (event_list_page > 1)
83
+ prev_page = event_list_page-1
84
+ prev_path = "/" + (dir[-1] == "/" ? dir : dir + "/") + (event_list_page-1).to_s
85
+ if (event_list_page == 2)
86
+ prev_path = "/" + (dir[-1] == "/" ? dir : dir + "/")
87
+ end
88
+ end
89
+
90
+ next_path = nil
91
+ next_page = nil
92
+ if (event_list_page <= event_list_pages)
93
+ next_page = event_list_page+1
94
+ next_path = "/" + (dir[-1] == "/" ? dir : dir + "/") + (event_list_page+1).to_s
95
+ if (event_list_page == 2)
96
+ next_path = "/" + (dir[-1] == "/" ? dir : dir + "/")
97
+ end
98
+ end
99
+
100
+ paginator = {"page" => event_list_page,
101
+ "per_page" => @gcallendar_config['event_list_per_page'],
102
+ "events" => event_list,
103
+ "total_events" => total_events,
104
+ "total_pages" => event_list_pages,
105
+ "previous_page" => prev_page,
106
+ "previous_page_path" => prev_path,
107
+ "next_page" => next_page,
108
+ "next_page_path" => next_path}
109
+
110
+ site.pages << EventListPage.new(site, site.source, path, 'index.html', layout, paginator)
111
+ end
112
+
57
113
  def setup_calendar()
58
114
  scope = 'https://www.googleapis.com/auth/calendar'
59
115
  calendar = GoogleCalendar::CalendarService.new
@@ -69,6 +125,7 @@ module Jekyll
69
125
  page_token = nil
70
126
  calendar_data = nil
71
127
  end_time = DateTime.now + look_ahead
128
+ site.data["calendars"][calendar_id] = []
72
129
  begin
73
130
  response = get_events(calendar, calendar_id, page_token, end_time)
74
131
  calendar_data = calendar_data ? calendar_data : hash_calendar_data(response)
@@ -106,6 +163,7 @@ module Jekyll
106
163
  path += "-" + overlap.length.to_s
107
164
  end
108
165
  site.pages << EventPage.new(site, site.source, path, 'index.html', layout, hash, calendar_data, calendar_id)
166
+ site.data["calendars"][calendar_id].push(hash);
109
167
  end
110
168
 
111
169
  def hash_calendar_data(response)
@@ -205,6 +263,21 @@ module Jekyll
205
263
  hash
206
264
  end
207
265
  end
266
+
267
+ class EventListPage < Page
268
+ def initialize(site, base, dir, name, layout, paginator)
269
+ @site = site
270
+ @base = base
271
+ @dir = dir
272
+ @name = name
273
+ self.process(@name)
274
+ self.data = site.layouts[layout].data.dup
275
+ self.content = site.layouts[layout].content.dup
276
+ self.data['layout'] = layout
277
+ self.data['events'] = paginator
278
+ end
279
+ end
280
+
208
281
  end
209
282
  end
210
283
  end
@@ -1,7 +1,7 @@
1
1
  module Jekyll
2
2
  module Google
3
3
  module Calendar
4
- VERSION = "0.1.1"
4
+ VERSION = "0.2.0"
5
5
  end
6
6
  end
7
7
  end
@@ -1,2 +1,3 @@
1
1
  require "jekyll/google/calendar/version"
2
2
  require "jekyll/google/calendar/generator"
3
+ require "jekyll/google/calendar/event_list"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-google-calendar
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Gundry
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-10-04 00:00:00.000000000 Z
11
+ date: 2019-10-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -61,6 +61,7 @@ extensions: []
61
61
  extra_rdoc_files: []
62
62
  files:
63
63
  - lib/jekyll-google-calendar.rb
64
+ - lib/jekyll/google/calendar/event_list.rb
64
65
  - lib/jekyll/google/calendar/generator.rb
65
66
  - lib/jekyll/google/calendar/version.rb
66
67
  homepage: https://github.com/davidgundry/jekyll-google-calendar