Satchel
Satchel

Reputation: 16724

how do I enable recurring reminders for different users in ruby?

Currently, the users for my app set a specific date and time for a single reminder (using the Chronic gem).

I have a cron job which runs every 10 minutes and checks if the time in the reminder is < Time.now at which point, it sends the reminder and marks that reminder as sent.

However, I want them to be able to specify recurring reminders. The customer should be able to say, "Every other day at 10am".

I can use ice_cube for the recurring part it seems. Then I use Chronic to come up with the start time which will have the day and recurring time.

But I don't have a good way to make it recurring since these are not separate events in the data base.

Here is what I have tried:

``` reminder = response.body['results'] #array of recurring reminders with start_epoch and 'via' d {reminder}

  reminder.count.times do |i|

    schedule = IceCube::Schedule.new(now = Time.at(reminder[i]['value']['start_epoch'])) # get the initial start day and time
    schedule.add_recurrence_rule(IceCube::Rule.daily) #makes this a daily recurring, but how can I allow this to be customizable?

    if schedule.next_occurrence(Chronic.parse('today at 12:01AM')) < Time.now # Check if today's occurence has happened yet
      bot_response = BotResponse.get_bot_response(bot_client_id, reminder[i]['value']['bot_input_keyword'])

      if reminder[i]['value']['via'] == 'slack'
        slack_response = BotMessage.send_slack(reminder[i]['value']['slack_channel'], 
                                               bot_response[:bot_response])
        d {slack_response} 

      end #if
    end #if
  end #do

```

Questions:

Upvotes: 0

Views: 372

Answers (1)

beaorn
beaorn

Reputation: 454

Have you considered trying the whenever gem to implement recurring tasks through cron jobs? I think you should be able to set the schedule times dynamically in the whenever schedule.rb file, see related issue here: Rails - Whenever gem - Dynamic values

Upvotes: 0

Related Questions