todo_or_die 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.circleci/config.yml +24 -0
- data/Gemfile.lock +2 -2
- data/LICENSE.txt +20 -0
- data/README.md +42 -38
- data/lib/todo_or_die.rb +6 -1
- data/lib/todo_or_die/version.rb +1 -1
- data/todo_or_die.gemspec +1 -1
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b194253e28740bfc137b7ef030efcf8387fe3acf0b91983eb69b961691a1c4eb
|
4
|
+
data.tar.gz: 8566f5e5b156ff958ee22aaca60f663d372cd0bea69ffacc5218c86441ce2a1c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fe91f1b1b86bb5a7077a8fa5f35bb25d25f598e4f6c40a319c0a771d755d79905191aa9a2b06982cf33cfc5bdcfa1af0553cd798d53d80580d6c5e27be70ae3e
|
7
|
+
data.tar.gz: 75480ce8dbf70cf14db4ba6e9592530ef40ef15fa173f841dc7cba0e1a1be3f1965031472ec7cd6def55b9a00d737994d984c4f41dc916436b267ec004b1349c
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# Ruby CircleCI 2.0 configuration file
|
2
|
+
#
|
3
|
+
# Check https://circleci.com/docs/2.0/language-ruby/ for more details
|
4
|
+
#
|
5
|
+
version: 2
|
6
|
+
jobs:
|
7
|
+
build:
|
8
|
+
docker:
|
9
|
+
- image: circleci/ruby:2.4.1-node-browsers
|
10
|
+
|
11
|
+
working_directory: ~/repo
|
12
|
+
|
13
|
+
steps:
|
14
|
+
- checkout
|
15
|
+
|
16
|
+
- run:
|
17
|
+
name: install dependencies
|
18
|
+
command: |
|
19
|
+
bundle install --retry=3
|
20
|
+
|
21
|
+
- run:
|
22
|
+
name: run tests
|
23
|
+
command: bundle exec rake
|
24
|
+
|
data/Gemfile.lock
CHANGED
data/LICENSE.txt
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2019 Justin Searls
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
# TODO or Die!
|
2
2
|
|
3
|
+
<img src="https://user-images.githubusercontent.com/79303/50570550-f41a6180-0d5d-11e9-8033-7ea4dfb7261c.jpg" height="360" alt="TODO or Die NES cart"/>
|
4
|
+
|
5
|
+
[](https://circleci.com/gh/searls/todo_or_die/tree/master)
|
6
|
+
|
3
7
|
## Usage
|
4
8
|
|
5
9
|
Stick this in your Gemfile and bundle it:
|
@@ -18,11 +22,9 @@ To understand why you would ever call a method to write a comment, read on.
|
|
18
22
|
|
19
23
|
### The awful way you used to procrastinate
|
20
24
|
|
21
|
-
In the Bad Old Days™, if you had a bit of code you knew needed to change
|
22
|
-
you might leave yourself a code comment to remind yourself
|
23
|
-
|
24
|
-
|
25
|
-
Here's the real world example code comment that inspired this gem:
|
25
|
+
In the Bad Old Days™, if you had a bit of code you knew you needed to change
|
26
|
+
later, you might leave yourself a code comment to remind yourself to change it.
|
27
|
+
For example, here's the real world code comment that inspired this gem:
|
26
28
|
|
27
29
|
``` ruby
|
28
30
|
class UsersController < ApiController
|
@@ -41,11 +43,10 @@ actual support incident (long story).
|
|
41
43
|
### The cool new way you put off coding now
|
42
44
|
|
43
45
|
So I did what any programmer would do in the face of an intractable social
|
44
|
-
problem: I wrote code in the vain hope of solving
|
45
|
-
anyone.
|
46
|
+
problem: I wrote code in the vain hope of solving things without needing to talk
|
47
|
+
to anyone. And now this gem exists.
|
46
48
|
|
47
|
-
To use
|
48
|
-
this:
|
49
|
+
To use it, try replacing one of your TODO comments with something like this:
|
49
50
|
|
50
51
|
``` ruby
|
51
52
|
class UsersController < ApiController
|
@@ -61,7 +62,7 @@ raise an error whenever this class is loaded until someone deals with it.
|
|
61
62
|
|
62
63
|
### What kind of error?
|
63
64
|
|
64
|
-
It depends on whether
|
65
|
+
It depends on whether you're using [Rails](https://rubyonrails.org) or not.
|
65
66
|
|
66
67
|
#### When you're writing Real Ruby
|
67
68
|
|
@@ -70,26 +71,28 @@ raise a `TodoOrDie::OverdueError` whenever a TODO is overdue. The message looks
|
|
70
71
|
like this:
|
71
72
|
|
72
73
|
```
|
73
|
-
TODO: "Visit Wisconsin" came due on 2016-11-
|
74
|
+
TODO: "Visit Wisconsin" came due on 2016-11-09. Do it!
|
74
75
|
```
|
75
76
|
|
76
77
|
#### When `Rails` is a thing
|
77
78
|
|
78
79
|
If TodoOrDie sees that `Rails` is defined, it'll assume you probably don't want
|
79
80
|
this tool to run outside development and test, so it'll log the error message to
|
80
|
-
`Rails.logger.warn` in production
|
81
|
+
`Rails.logger.warn` in production (while still raising the error in development
|
82
|
+
and test).
|
81
83
|
|
82
|
-
### Wait, won't
|
84
|
+
### Wait, won't sprinkling time bombs throughout my app ruin my weekend?
|
83
85
|
|
84
|
-
Sure will! It's TODO or Die, not TODO and Remember to Pace Yourself.
|
86
|
+
Sure will! It's "TODO or Die", not "TODO and Remember to Pace Yourself".
|
85
87
|
|
86
|
-
Still,
|
87
|
-
to
|
88
|
-
actually does](lib/todo_or_die.rb) before
|
89
|
-
|
88
|
+
Still, someone will probably get mad if you break production because you forgot
|
89
|
+
to follow through on removing an A/B test, so I'd [strongly recommend you read
|
90
|
+
what the default hook actually does](lib/todo_or_die.rb#L8-L16) before this gem
|
91
|
+
leads to you losing your job. (Speaking of, please note the lack of any warranty
|
92
|
+
in `todo_or_die`'s [license](LICENSE.txt).)
|
90
93
|
|
91
|
-
|
92
|
-
lambda/proc/
|
94
|
+
To appease your boss, you may customize the gem's behavior by passing in your
|
95
|
+
own `call`'able lambda/proc/dingus like this:
|
93
96
|
|
94
97
|
```ruby
|
95
98
|
TodoOrDie.config(
|
@@ -102,29 +105,30 @@ TodoOrDie.config(
|
|
102
105
|
```
|
103
106
|
|
104
107
|
Now, any `TodoOrDie()` invocations in your codebase (other than Karen's) will be
|
105
|
-
ignored. (You can
|
108
|
+
ignored. (You can restore the default hook with `TodoOrDie.reset`).
|
106
109
|
|
107
110
|
## When is this useful?
|
108
111
|
|
109
|
-
|
110
|
-
you lack some other reliable means of
|
111
|
-
will actually follow through on making the
|
112
|
+
This gem may come in handy whenever you know the code _will_ need to change,
|
113
|
+
but it can't be changed just yet, and you lack some other reliable means of
|
114
|
+
ensuring yourself (or your team) will actually follow through on making the
|
115
|
+
change later.
|
112
116
|
|
113
|
-
|
114
|
-
Law](https://www.quora.com/What-resources-could-I-read-about-Leblancs-law)
|
115
|
-
states that `Later == Never
|
116
|
-
by software teams around the world. Some common examples:
|
117
|
+
This is a good time to recall [LeBlanc's
|
118
|
+
Law](https://www.quora.com/What-resources-could-I-read-about-Leblancs-law),
|
119
|
+
which states that `Later == Never`. Countless proofs of this theorem have been
|
120
|
+
reproduced by software teams around the world. Some common examples:
|
117
121
|
|
118
|
-
* A feature flag was added to the app,
|
119
|
-
|
120
|
-
delete` comment to keep it company
|
121
|
-
* A failing test
|
122
|
-
|
123
|
-
|
124
|
-
* You're a real funny
|
125
|
-
|
122
|
+
* A feature flag was added to the app a long time ago, but the old code path is
|
123
|
+
still present, even after the flag had been enabled for everyone. Except now
|
124
|
+
there's also a useless `TODO: delete` comment to keep it company
|
125
|
+
* A failing test was blocking the build and someone felt an urgent pressure to
|
126
|
+
deploy the app anyway. So, rather than fix the test, Bill commented it out
|
127
|
+
"for now"
|
128
|
+
* You're a real funny guy and you think it'd be hilarious to make a bunch of
|
129
|
+
Aaron's tests start failing on Christmas morning
|
126
130
|
|
127
|
-
|
131
|
+
## Pro-tip
|
128
132
|
|
129
133
|
Cute Rails date helpers are awesome, but don't think you're going to be able to
|
130
134
|
do this and actually accomplish anything:
|
@@ -133,4 +137,4 @@ do this and actually accomplish anything:
|
|
133
137
|
TodoOrDie("Update after APIv2 goes live", 2.weeks.from_now)
|
134
138
|
```
|
135
139
|
|
136
|
-
|
140
|
+
It will never be two weeks from now.
|
data/lib/todo_or_die.rb
CHANGED
@@ -12,7 +12,7 @@ module TodoOrDie
|
|
12
12
|
if defined?(Rails) && Rails.env.production?
|
13
13
|
Rails.logger.warn(error_message)
|
14
14
|
else
|
15
|
-
raise TodoOrDie::OverdueTodo.
|
15
|
+
raise TodoOrDie::OverdueTodo, error_message, TodoOrDie.__clean_backtrace(caller)
|
16
16
|
end
|
17
17
|
},
|
18
18
|
}.freeze
|
@@ -25,6 +25,11 @@ module TodoOrDie
|
|
25
25
|
def self.reset
|
26
26
|
@config = DEFAULT_CONFIG.dup
|
27
27
|
end
|
28
|
+
|
29
|
+
FILE_PATH_REGEX = Regexp.new(Regexp.quote(__dir__)).freeze
|
30
|
+
def self.__clean_backtrace(stack)
|
31
|
+
stack.delete_if {|line| line =~ FILE_PATH_REGEX }
|
32
|
+
end
|
28
33
|
end
|
29
34
|
|
30
35
|
# The main event
|
data/lib/todo_or_die/version.rb
CHANGED
data/todo_or_die.gemspec
CHANGED
@@ -9,7 +9,7 @@ Gem::Specification.new do |spec|
|
|
9
9
|
spec.email = ["searls@gmail.com"]
|
10
10
|
|
11
11
|
spec.summary = "Write TODOs in code that ensure you actually do them"
|
12
|
-
spec.homepage = "https://github.com/
|
12
|
+
spec.homepage = "https://github.com/searls/todo_or_die"
|
13
13
|
|
14
14
|
spec.files = Dir.chdir(File.expand_path("..", __FILE__)) do
|
15
15
|
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: todo_or_die
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Justin Searls
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-02-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -87,9 +87,11 @@ executables: []
|
|
87
87
|
extensions: []
|
88
88
|
extra_rdoc_files: []
|
89
89
|
files:
|
90
|
+
- ".circleci/config.yml"
|
90
91
|
- ".gitignore"
|
91
92
|
- Gemfile
|
92
93
|
- Gemfile.lock
|
94
|
+
- LICENSE.txt
|
93
95
|
- README.md
|
94
96
|
- Rakefile
|
95
97
|
- bin/console
|
@@ -98,7 +100,7 @@ files:
|
|
98
100
|
- lib/todo_or_die/overdue_error.rb
|
99
101
|
- lib/todo_or_die/version.rb
|
100
102
|
- todo_or_die.gemspec
|
101
|
-
homepage: https://github.com/
|
103
|
+
homepage: https://github.com/searls/todo_or_die
|
102
104
|
licenses: []
|
103
105
|
metadata: {}
|
104
106
|
post_install_message:
|