diff --git a/Rakefile b/Rakefile index 130eb80..9645e15 100644 --- a/Rakefile +++ b/Rakefile @@ -3,7 +3,6 @@ require "rake/testtask" require "standard/rake" Rake::TestTask.new(:test) do |t| - t.warning = false t.libs << "test" t.libs << "lib" t.test_files = FileList["test/**/*_test.rb"] diff --git a/lib/todo_or_die.rb b/lib/todo_or_die.rb index 681d621..887f828 100644 --- a/lib/todo_or_die.rb +++ b/lib/todo_or_die.rb @@ -1,10 +1,24 @@ -require "date" - require "todo_or_die/version" require "todo_or_die/overdue_error" # The namespace module TodoOrDie + DEFAULT_CONFIG = { + die: ->(message, due_at) { + raise TodoOrDie::OverdueTodo.new <<~MSG + TODO: "#{message}" came due on #{due_at.strftime("%Y-%m-%d")}. Do it! + MSG + }, + }.freeze + + def self.config(options = {}) + @config ||= reset + @config.merge!(options) + end + + def self.reset + @config = DEFAULT_CONFIG.dup + end end # The main event @@ -12,8 +26,6 @@ def TodoOrDie(message, by:) # rubocop:disable Naming/MethodName due_at = by.to_time if Time.now >= due_at - raise TodoOrDie::OverdueTodo.new <<~MSG - TODO: "#{message}" came due on #{due_at.strftime("%Y-%m-%d")}. Do it! - MSG + TodoOrDie.config[:die].call(message, due_at) end end diff --git a/test/test_helper.rb b/test/test_helper.rb index 99e07be..a075a91 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -6,5 +6,6 @@ class UnitTest < Minitest::Test def teardown Timecop.return + TodoOrDie.reset end end diff --git a/test/todo_or_die_test.rb b/test/todo_or_die_test.rb index 866cf8e..57d1128 100644 --- a/test/todo_or_die_test.rb +++ b/test/todo_or_die_test.rb @@ -20,4 +20,39 @@ def test_due_todo_blows_up TODO: "Fix stuff" came due on 2200-02-04. Do it! MSG end + + def test_config_custom_explosion + Timecop.travel(Date.civil(2200, 2, 5)) + actual_message, actual_by = nil + TodoOrDie.config( + die: ->(message, by) { + actual_message = message + actual_by = by + "pants" + } + ) + some_time = Time.parse("2200-02-04") + + result = TodoOrDie("kaka", by: some_time) + + assert_equal result, "pants" + assert_equal actual_message, "kaka" + assert_same actual_by, some_time + end + + def test_config_and_reset + some_lambda = -> {} + TodoOrDie.config(die: some_lambda) + + assert_equal TodoOrDie.config[:die], some_lambda + assert_equal TodoOrDie.config({})[:die], some_lambda + + TodoOrDie.reset + + assert_equal TodoOrDie.config[:die], TodoOrDie::DEFAULT_CONFIG[:die] + end + + def test_has_version + assert TodoOrDie::VERSION + end end