From 54d721abd4f76f48cf5dee25211eaf9ad6fba731 Mon Sep 17 00:00:00 2001 From: ricola Date: Sun, 1 Mar 2026 13:18:32 -0600 Subject: [PATCH 1/3] Use Sinatra config in whenever --- Gemfile | 1 + Gemfile.lock | 7 +++++++ config/schedule.rb | 6 +++--- vedia.rb | 6 ------ 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/Gemfile b/Gemfile index 2b75e8a..4bb57e8 100644 --- a/Gemfile +++ b/Gemfile @@ -12,3 +12,4 @@ gem 'bcrypt' gem 'gettext' gem 'mail' gem 'redcarpet' +gem 'whenever' diff --git a/Gemfile.lock b/Gemfile.lock index 249f759..955384c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -23,6 +23,7 @@ GEM bcrypt (3.1.20) benchmark (0.4.0) bigdecimal (3.1.9) + chronic (0.10.2) concurrent-ruby (1.3.5) connection_pool (2.5.0) date (3.4.1) @@ -92,11 +93,16 @@ GEM singleton (0.3.0) sqlite3 (2.6.0) mini_portile2 (~> 2.8.0) + sqlite3 (2.6.0-arm64-darwin) + sqlite3 (2.6.0-x86_64-darwin) + sqlite3 (2.6.0-x86_64-linux-gnu) text (1.3.1) tilt (2.6.0) timeout (0.4.3) tzinfo (2.0.6) concurrent-ruby (~> 1.0) + whenever (1.1.2) + chronic (>= 0.6.3) PLATFORMS arm64-darwin @@ -117,6 +123,7 @@ DEPENDENCIES sinatra sinatra-activerecord sqlite3 + whenever BUNDLED WITH 2.3.15 diff --git a/config/schedule.rb b/config/schedule.rb index 6247285..8d24c53 100644 --- a/config/schedule.rb +++ b/config/schedule.rb @@ -1,6 +1,6 @@ -if ENV['RACK_ENV'] - set :environment, ENV['RACK_ENV'] -end +require_relative '../vedia' + +set :environment_variable, 'RACK_ENV' every 5.minutes do rake "close_expired_votes" diff --git a/vedia.rb b/vedia.rb index 36a524f..daa2261 100644 --- a/vedia.rb +++ b/vedia.rb @@ -1,10 +1,4 @@ require 'sinatra' - -# Set environment before requiring 'sinatra/activerecord' to make `whenever` uses the database. -if ENV['RAILS_ENV'] - set :environment, ENV['RAILS_ENV'] -end - require 'sinatra/activerecord' require 'bcrypt' require 'gettext' From b1a0b21c476d25a8657b59d984129fa858b6c7b2 Mon Sep 17 00:00:00 2001 From: ricola Date: Sun, 1 Mar 2026 13:23:41 -0600 Subject: [PATCH 2/3] Configure mailto and path with Sinatra --- config/schedule.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/config/schedule.rb b/config/schedule.rb index 8d24c53..c72feae 100644 --- a/config/schedule.rb +++ b/config/schedule.rb @@ -1,5 +1,7 @@ require_relative '../vedia' +env 'MAILTO', Sinatra::Application.settings.admin +set :path, Sinatra::Application.settings.path set :environment_variable, 'RACK_ENV' every 5.minutes do From 0e291dc31c08d8560f0861d7a20c081553394b6a Mon Sep 17 00:00:00 2001 From: ricola Date: Sun, 1 Mar 2026 15:44:42 -0600 Subject: [PATCH 3/3] Allow changing closing date --- vedia.rb | 23 +++++++++++++++++++++-- views/admin_votes.erb | 40 +++++++++++++++++++++++++++++++++++++++- 2 files changed, 60 insertions(+), 3 deletions(-) diff --git a/vedia.rb b/vedia.rb index daa2261..4403543 100644 --- a/vedia.rb +++ b/vedia.rb @@ -260,7 +260,22 @@ get '/admin/votes/:id' do erb :admin_votes end -get '/admin/votes/:id/organizers/:user/delete' do +post '/admin/votes/:id' do + require_admin + @vote = Vote.find(params[:id]) + if params.has_key?('year') + new_expiry = TZInfo::Timezone.get(session[:timezone]).local_time(params['year'].to_i, params['month'].to_i, params['day'].to_i, params['hour'].to_i, params['minute'].to_i) + if (@vote.state == 'open' or @vote.state == 'closed') and new_expiry > Time.now + puts "change" + @vote.expire_on = new_expiry + @vote.state = 'open' + @vote.save + end + end + erb :admin_votes +end + +get 'admin/votes/:id/organizers/:user/delete' do require_admin rating = Organizer.where(vote: params[:id]).where(user: params[:user]).each do |organizer| organizer.destroy @@ -644,8 +659,12 @@ helpers do "#{TZInfo::Timezone.get(session[:timezone]).to_local(timestamp).strftime('%F')}" end + def format_timezone + session[:timezone].gsub('_', ' ') + end + def format_date_and_time(timestamp) - "#{TZInfo::Timezone.get(session[:timezone]).to_local(timestamp).strftime('%F %R')} (#{session[:timezone].gsub('_', ' ')})" + "#{TZInfo::Timezone.get(session[:timezone]).to_local(timestamp).strftime('%F %R')} (#{format_timezone})" end def markdown(markdown) diff --git a/views/admin_votes.erb b/views/admin_votes.erb index b580872..6275f24 100644 --- a/views/admin_votes.erb +++ b/views/admin_votes.erb @@ -12,7 +12,45 @@

<%= _("Description: %{description}") % { description: @vote.description } %>

-

<%= _("Closing date: %{date}") % { date: @vote.expire_on ? format_date_and_time(@vote.expire_on) : _("None") } %>

+<% if @vote.state == 'closed' or @vote.state == 'open' %> +
+

+ <%= _("Closing date: ") %> + <% year = Time.now.strftime('%Y').to_i %> + + - + + - + +   + + : + + (<%= format_timezone %>) + +

+
+<% end %>

<%= _("State: %{state}") % { state: @vote.state } %>