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