class RemindMe::Reminder::Generator

Public Class Methods

generate(source_location, reminder_comment, parser) click to toggle source
# File lib/remind_me/reminder/generator.rb, line 27
def self.generate(source_location, reminder_comment, parser)
  parser.reset
  begin
    reminder_comment_ast = parser.class.parse(reminder_comment)
  rescue Parser::SyntaxError => e
    return [unparsable_reminder(source_location, e)]
  end
  relevant_reminders_classes = relevant_reminders_classes(reminder_comment_ast)
  return [unknown_reminder(source_location, reminder_comment)] if relevant_reminders_classes.empty?

  create_reminders_from(reminder_comment_ast, source_location, relevant_reminders_classes)
end
load_predefined_reminders() click to toggle source
# File lib/remind_me/reminder/generator.rb, line 18
def self.load_predefined_reminders
  predefined_remiders = Dir.entries(File.dirname(__FILE__)).select do |path|
    !path.end_with?('base_reminder.rb') && path.end_with?('_reminder.rb')
  end
  predefined_remiders.each { |f| require_relative f }
end
register(reminder_klass) click to toggle source
# File lib/remind_me/reminder/generator.rb, line 9
def self.register(reminder_klass)
  @registered_reminders ||= Set.new
  @registered_reminders << reminder_klass
end
registered_reminders() click to toggle source
# File lib/remind_me/reminder/generator.rb, line 14
def self.registered_reminders
  @registered_reminders.dup
end

Private Class Methods

create_reminders_from(reminder_comment_ast, source_location, relevant_reminders_classes) click to toggle source
# File lib/remind_me/reminder/generator.rb, line 46
def self.create_reminders_from(reminder_comment_ast, source_location, relevant_reminders_classes)
  relevant_reminders_classes.map do |reminder_class|
    reminder_class.build_from(reminder_comment_ast, source_location)
  end
end
relevant_reminders_classes(reminder_comment_ast) click to toggle source
# File lib/remind_me/reminder/generator.rb, line 40
def self.relevant_reminders_classes(reminder_comment_ast)
  registered_reminders.select do |reminder_class|
    reminder_class.applicable_to_ast?(reminder_comment_ast)
  end
end
unknown_reminder(source_location, reminder_comment) click to toggle source
# File lib/remind_me/reminder/generator.rb, line 52
def self.unknown_reminder(source_location, reminder_comment)
  RemindMe::Reminder::InvalidReminder
    .new(source_location,
         "REMIND_ME comment in #{source_location}: found '#{reminder_comment}' but it was "\
           'not applicable to any known reminder processors')
end
unparsable_reminder(source_location, error) click to toggle source
# File lib/remind_me/reminder/generator.rb, line 59
def self.unparsable_reminder(source_location, error)
  RemindMe::Reminder::InvalidReminder
    .new(source_location,
         "REMIND_ME comment in #{source_location}: unable to parse, message: #{error.message}")
end