@@ -37,6 +37,20 @@ def new_events
3737 upcoming_events . select { |event | !existing_ids . include? ( event . service_id ) }
3838 end
3939
40+ def new_past_events
41+ existing_ids = past_existing_events . map ( &:service_id )
42+
43+ past_events . select { |event | !existing_ids . include? ( event . service_id ) }
44+ end
45+
46+ def past_events
47+ @past_events ||= fetch_past_events . tap do |events |
48+ events . select! { |event | event . event_name . include? ( filter ) } if filter . present?
49+ events . reject! { |event | Array ( exclude ) . any? { |e | event . event_name . include? ( e ) } } if exclude . present?
50+ events . sort_by { |event | [ event . event_date , event . event_name ] }
51+ end
52+ end
53+
4054 def missing_events
4155 upcoming_ids = upcoming_events . map ( &:service_id )
4256
@@ -47,6 +61,10 @@ def upcomping_existing_events
4761 existing_events . select { |event | event [ "date" ] . between? ( Date . today - 1 , Date . today + 120 ) }
4862 end
4963
64+ def past_existing_events
65+ existing_events . select { |event | event [ "date" ] < Date . today }
66+ end
67+
5068 def existing_events
5169 Meetup . for_group ( self )
5270 end
@@ -69,6 +87,19 @@ def tz
6987
7088 private
7189
90+ def fetch_past_events
91+ case service
92+ when "meetupdotcom"
93+ fetch_past_meetup_events
94+ when "luma"
95+ fetch_luma_events . select { |event | event . date < Date . today }
96+ when "ical"
97+ fetch_ical_events . select { |event | event . date < Date . today }
98+ else
99+ raise "Unsupported service: #{ service } "
100+ end
101+ end
102+
72103 def fetch_events
73104 case service
74105 when "meetupdotcom"
@@ -82,6 +113,12 @@ def fetch_events
82113 end
83114 end
84115
116+ def fetch_past_meetup_events
117+ result = MeetupClient ::Client . query ( PastEventsQuery , variables : { groupId : id } )
118+ events = Array ( result . original_hash . dig ( "data" , "groupByUrlname" , "pastEvents" , "edges" ) )
119+ events . map { |event | MeetupEvent . new ( object : OpenStruct . new ( event [ "node" ] ) , group : self ) }
120+ end
121+
85122 def fetch_meetup_events
86123 result = MeetupClient ::Client . query ( EventsQuery , variables : { groupId : id } )
87124 events = Array ( result . original_hash . dig ( "data" , "groupByUrlname" , "upcomingEvents" , "edges" ) )
0 commit comments