Skip to content

Commit

Permalink
Make the gem
Browse files Browse the repository at this point in the history
  • Loading branch information
searls committed Jan 1, 2019
1 parent 0acfab9 commit 141838d
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 6 deletions.
1 change: 0 additions & 1 deletion Rakefile
Expand Up @@ -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"]
Expand Down
22 changes: 17 additions & 5 deletions lib/todo_or_die.rb
@@ -1,19 +1,31 @@
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
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
1 change: 1 addition & 0 deletions test/test_helper.rb
Expand Up @@ -6,5 +6,6 @@
class UnitTest < Minitest::Test
def teardown
Timecop.return
TodoOrDie.reset
end
end
35 changes: 35 additions & 0 deletions test/todo_or_die_test.rb
Expand Up @@ -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

0 comments on commit 141838d

Please sign in to comment.