Skip to content

Commit a13f476

Browse files
committed
Add option for weekly and daily and hourly events
1 parent 315d2e3 commit a13f476

File tree

3 files changed

+66
-15
lines changed

3 files changed

+66
-15
lines changed

event.rb

+28-7
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# frozen_string_literal: true
22

33
require "date"
4+
require "time"
45

56
class MeetupEvent
67
# Can be used like so:
@@ -20,16 +21,38 @@ def self.parse_duration(iso8601_duration)
2021
parts.join(", ") + " long"
2122
end
2223

23-
def self.within_next_two_weeks?(date_string)
24+
def self.within_next_week?(date_string)
2425
date = Date.parse(date_string)
2526
today = Date.today
26-
date >= today && date <= (today + 14)
27+
date >= today && date <= (today + 7)
2728
end
2829

29-
def self.format_slack(group)
30+
def self.within_next_day?(date_string)
31+
date = Date.parse(date_string)
32+
today = Date.today
33+
# today = Date.parse('2024-07-29T10:00-04:00')
34+
date == today
35+
end
36+
37+
def self.within_next_hour?(date_string)
38+
datetime = Time.parse(date_string)
39+
now = Time.now
40+
# now = Time.parse('2024-07-29T18:00-04:00')
41+
one_hour_from_now = now + 3600
42+
datetime >= now && datetime <= one_hour_from_now
43+
end
44+
45+
def self.format_slack(group, announcement_type)
3046
return if group["eventSearch"]["count"] == 0
3147

32-
return unless within_next_two_weeks?(group["eventSearch"]["edges"][0]["node"]["dateTime"])
48+
date_string = group["eventSearch"]["edges"][0]["node"]["dateTime"]
49+
if announcement_type == "weekly"
50+
return unless within_next_week?(date_string)
51+
elsif announcement_type == "daily"
52+
return unless within_next_day?(date_string)
53+
else
54+
return unless within_next_hour?(date_string)
55+
end
3356

3457
event_blocks = [{
3558
type: "section",
@@ -57,9 +80,7 @@ def self.format_slack(group)
5780
}
5881
]
5982
},
60-
{
61-
type: "divider"
62-
}]
83+
]
6384

6485
if group["name"] == "Tampa Devs"
6586
event_blocks[0][:text][:text].prepend(":tampadevs: ")

main.rb

+17-2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,15 @@ def initialize
1313
end
1414

1515
def fetch
16+
argument = ARGV[0]
17+
if argument == '--weekly'
18+
announcement_type = 'weekly'
19+
elsif argument == '--daily'
20+
announcement_type = 'daily'
21+
else
22+
announcement_type = 'hourly'
23+
end
24+
1625
groups = JSON.parse(Net::HTTP.get(URI("https://events.api.tampa.dev/")))
1726

1827
sorted_events = []
@@ -25,18 +34,24 @@ def fetch
2534
sorted_events.sort! { |a, b| DateTime.parse(a["eventSearch"]["edges"][0]["node"]["dateTime"]) <=> DateTime.parse(b["eventSearch"]["edges"][0]["node"]["dateTime"]) }
2635

2736
sorted_events.each do |group|
28-
event = MeetupEvent.format_slack(group)
37+
event = MeetupEvent.format_slack(group, announcement_type)
2938
formatted_events << event unless event.nil?
3039
end
3140

41+
# fencepost
42+
formatted_events[0...-1].each do |element|
43+
element << { type: "divider" }
44+
end
45+
3246
if formatted_events.empty?
3347
puts "No events to post, exiting with nothing to do."
3448
exit
3549
end
3650

37-
Slack.syndicate(formatted_events, @dry_run)
51+
Slack.syndicate(formatted_events, announcement_type, @dry_run)
3852
end
3953
end
4054

4155
syn = EventSyndicator.new
4256
syn.fetch
57+

slack.rb

+21-6
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,10 @@ def initialize
1717
@message = []
1818
end
1919

20-
def self.syndicate(events, dry_run)
20+
def self.syndicate(events, announcement_type, dry_run)
2121
return if events.empty?
2222

23+
@announcement_type = announcement_type
2324
@payload = payload(events)
2425

2526
if dry_run
@@ -30,12 +31,19 @@ def self.syndicate(events, dry_run)
3031
end
3132

3233
def self.payload(events)
34+
if @announcement_type == 'weekly'
35+
header_text = ":balloon: Upcoming Events"
36+
elsif @announcement_type == 'daily'
37+
header_text = ":earth_americas: Happening Today"
38+
else
39+
header_text = ":loudspeaker: Happening Soon"
40+
end
3341
header = [
3442
{
35-
type: "section",
43+
type: "header",
3644
text: {
37-
type: "mrkdwn",
38-
text: ":balloon: Upcoming events:"
45+
type: "plain_text",
46+
text: header_text,
3947
}
4048
},
4149
{
@@ -44,6 +52,7 @@ def self.payload(events)
4452
]
4553

4654
footer = [
55+
{ type: "divider" },
4756
{
4857
type: "actions",
4958
elements: [
@@ -91,7 +100,13 @@ def self.payload(events)
91100
}
92101
]
93102

94-
[header, events.reduce([], :concat), footer].reduce([], :concat)
103+
elements = [header, events.reduce([], :concat)]
104+
puts @announcement_type
105+
if @announcement_type == 'weekly'
106+
elements << footer
107+
end
108+
109+
elements.reduce([], :concat)
95110
end
96111

97112
def self.message_json
@@ -103,7 +118,7 @@ def self.message_json
103118
def self.post
104119
return if @payload.length == 0
105120

106-
targets = [ENV["TD_SLACK_WEBHOOK"], ENV["TBT_SLACK_WEBHOOK"], ENV["TBUX_SLACK_WEBHOOK"]]
121+
targets = [ENV["TD_SLACK_WEBHOOK"]]
107122

108123
targets.each do |t|
109124
uri = URI.parse(t)

0 commit comments

Comments
 (0)