time_for_a_boolean 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/.ruby-version +1 -1
- data/CONTRIBUTING.md +39 -0
- data/LICENSE +1 -1
- data/README.md +67 -17
- data/Rakefile +5 -0
- data/lib/time_for_a_boolean/version.rb +1 -1
- data/lib/time_for_a_boolean.rb +4 -1
- data/spec/time_for_a_boolean_spec.rb +12 -2
- data/time_for_a_boolean.gemspec +2 -1
- metadata +32 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b911b8e5eb898861b4bd685d9cca9077c24d2ac3
|
4
|
+
data.tar.gz: 4b608bfe50aad84b8db5de8420acb6652eb2dd56
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3de77ccb1b78cf796faee950ef48f9593e7890480ba6407a0332ac6e13e5e64c48426f7be82f47fa6c2e7bf9828081e420f01300464a5098e0e5a4b82eefbc62
|
7
|
+
data.tar.gz: 28e4d3a903284312c50a1f4c69c474b39eb6114ae1f905a96d74ccbb580f73aa2f70f9468e46d894161c074a4caac29725ccec1af5bc809aaa0129e4d0f9f416
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
2.1.2
|
data/CONTRIBUTING.md
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
# Contributing
|
2
|
+
|
3
|
+
I love pull requests. Here's a quick guide:
|
4
|
+
|
5
|
+
1. Fork the repo.
|
6
|
+
2. Run the tests. I only take pull requests with passing tests, and it's great
|
7
|
+
to know that you have a clean slate: `bundle && rake`
|
8
|
+
3. Add a test for your change. Only refactoring and documentation changes
|
9
|
+
require no new tests. If you are adding functionality or fixing a bug, I need
|
10
|
+
a test!
|
11
|
+
4. Make the test pass.
|
12
|
+
5. Make sure your changes adhere to the
|
13
|
+
[thoughtbot Style Guide](https://github.com/thoughtbot/guides/tree/master/style)
|
14
|
+
6. Write an [awesome] [commit] [message].
|
15
|
+
[awesome]: http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html
|
16
|
+
[commit]: http://robots.thoughtbot.com/post/48933156625/5-useful-tips-for-a-better-commit-message
|
17
|
+
[message]: http://rakeroutes.com/blog/deliberate-git/
|
18
|
+
6. Push to your fork and submit a pull request.
|
19
|
+
7. At this point you're waiting on us. I like to at least comment on, if not
|
20
|
+
accept, pull requests within a few days (and, typically, one business
|
21
|
+
day). I may suggest some changes or improvements or alternatives.
|
22
|
+
|
23
|
+
## Increase your chances of getting merged
|
24
|
+
|
25
|
+
Some things that will increase the chance that your pull request is accepted,
|
26
|
+
taken straight from the Ruby on Rails guide:
|
27
|
+
|
28
|
+
1. Use Rails idioms and helpers
|
29
|
+
2. Include tests that fail without your code, and pass with it
|
30
|
+
3. Update the documentation, the surrounding one, examples elsewhere, guides,
|
31
|
+
whatever is affected by your contribution
|
32
|
+
4. Syntax:
|
33
|
+
* Two spaces, no tabs.
|
34
|
+
* No trailing whitespace. Blank lines should not have any space.
|
35
|
+
* Prefer `&&`/`||` over `and`/`or`.
|
36
|
+
* `MyClass.my_method(my_arg)` not `my_method( my_arg )` or `my_method my_arg`.
|
37
|
+
* `a = b` and not `a=b`.
|
38
|
+
* Follow the conventions you see used in the source already.
|
39
|
+
5. And in case I didn't emphasize it enough: I love tests!
|
data/LICENSE
CHANGED
data/README.md
CHANGED
@@ -1,29 +1,79 @@
|
|
1
|
-
|
1
|
+
Time for A Boolean
|
2
|
+
==================
|
2
3
|
|
3
|
-
|
4
|
+
[](https://travis-ci.org/calebthompson/time_for_a_boolean)
|
5
|
+
[](https://codeclimate.com/github/calebthompson/time_for_a_boolean)
|
6
|
+
[](https://coveralls.io/r/calebthompson/time_for_a_boolean)
|
4
7
|
|
5
|
-
## Installation
|
6
8
|
|
7
|
-
|
9
|
+
> Sally: Hey, we need to add a flag to Post
|
8
10
|
|
9
|
-
|
11
|
+
> Jean: What for?
|
10
12
|
|
11
|
-
|
13
|
+
> Sally: Well, we want to let users "delete" posts, but not actually lose the
|
14
|
+
data.
|
12
15
|
|
13
|
-
|
16
|
+
> Jean: Sounds reasonable. But what about later, when we have to know _when_ a
|
17
|
+
post was deleted?
|
14
18
|
|
15
|
-
|
19
|
+
> Sally: That's a good point, but if we add a timestamp now we have to write all
|
20
|
+
sorts of methods to keep a nice interface on Post...
|
16
21
|
|
17
|
-
|
22
|
+
> Jean: Time for A Boolean!
|
18
23
|
|
19
|
-
|
24
|
+
Wait, what?
|
25
|
+
-----------
|
20
26
|
|
21
|
-
|
27
|
+
```
|
28
|
+
rails generate migration AddDeletedAtToPosts deleted_at:timestamp
|
29
|
+
```
|
22
30
|
|
23
|
-
|
31
|
+
```ruby
|
32
|
+
class Post < ActiveRecord::Base
|
33
|
+
time_for_a_boolean :deleted
|
34
|
+
...
|
35
|
+
end
|
36
|
+
```
|
24
37
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
38
|
+
```ruby
|
39
|
+
class PostsController < ApplicationController
|
40
|
+
def show
|
41
|
+
@post = Post.find(params[:id])
|
42
|
+
if @post.deleted?
|
43
|
+
raise ActiveRecord::RecordNotFound
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def destroy
|
48
|
+
post = Post.find(params[:id])
|
49
|
+
post.deleted = true
|
50
|
+
post.save
|
51
|
+
redirect_to posts_url
|
52
|
+
end
|
53
|
+
end
|
54
|
+
```
|
55
|
+
|
56
|
+
You keep on saying things and I don't get it.
|
57
|
+
---------------------------------------------
|
58
|
+
|
59
|
+
Okay, let's take a look at what happens.
|
60
|
+
|
61
|
+
When we call `time_for_a_boolean :deleted` in the Post class definition, several
|
62
|
+
methods are defined:
|
63
|
+
|
64
|
+
| Method | Description
|
65
|
+
| --------------- | -----------
|
66
|
+
| `Post#deleted` | `true` if `Post#deleted_at` is set, `false` otherwise
|
67
|
+
| `Post#deleted?` | Alias for `Post#deleted`
|
68
|
+
| `Post#deleted=` | Sets the timestamp to `DateTime.now` if the new value is true, and `nil` otherwise
|
69
|
+
|
70
|
+
These methods allow you to use a timestamp as you would a boolean value in your
|
71
|
+
application.
|
72
|
+
|
73
|
+
Okay... why?
|
74
|
+
------------
|
75
|
+
|
76
|
+
* Audit for when a flag was set. Future you wants this.
|
77
|
+
* `COUNT(posts.deleted_at)` gives you the count of deleted posts, which is
|
78
|
+
useful when writing a report. Define and use `Post.deleted.count` when you
|
79
|
+
have Ruby available.
|
data/Rakefile
CHANGED
data/lib/time_for_a_boolean.rb
CHANGED
@@ -4,7 +4,10 @@ require 'time_for_a_boolean/railtie'
|
|
4
4
|
|
5
5
|
module TimeForABoolean
|
6
6
|
def time_for_a_boolean(attribute)
|
7
|
-
define_method(attribute)
|
7
|
+
define_method(attribute) do
|
8
|
+
!send("#{attribute}_at").nil? &&
|
9
|
+
send("#{attribute}_at") <= -> { DateTime.now }.()
|
10
|
+
end
|
8
11
|
alias_method "#{attribute}?", attribute
|
9
12
|
define_method("#{attribute}=") do |value|
|
10
13
|
if value
|
@@ -1,3 +1,6 @@
|
|
1
|
+
require 'coveralls'
|
2
|
+
Coveralls.wear!
|
3
|
+
|
1
4
|
require 'time_for_a_boolean'
|
2
5
|
|
3
6
|
describe TimeForABoolean do
|
@@ -22,7 +25,7 @@ describe TimeForABoolean do
|
|
22
25
|
describe 'attribute method' do
|
23
26
|
it 'calls nil? on the backing timestamp' do
|
24
27
|
klass.time_for_a_boolean :attribute
|
25
|
-
timestamp = double(nil?:
|
28
|
+
timestamp = double(nil?: true)
|
26
29
|
object.stub(attribute_at: timestamp)
|
27
30
|
|
28
31
|
object.attribute
|
@@ -32,7 +35,7 @@ describe TimeForABoolean do
|
|
32
35
|
|
33
36
|
it 'is true if the attribute is not nil' do
|
34
37
|
klass.time_for_a_boolean :attribute
|
35
|
-
object.stub(attribute_at:
|
38
|
+
object.stub(attribute_at: DateTime.now - 10)
|
36
39
|
|
37
40
|
expect(object.attribute).to be_true
|
38
41
|
end
|
@@ -43,6 +46,13 @@ describe TimeForABoolean do
|
|
43
46
|
|
44
47
|
expect(object.attribute).to be_false
|
45
48
|
end
|
49
|
+
|
50
|
+
it 'is false if the attribute time is in the future' do
|
51
|
+
klass.time_for_a_boolean :attribute
|
52
|
+
object.stub(attribute_at: Time.now + 86400) # one day in the future
|
53
|
+
|
54
|
+
expect(object.attribute).to be_false
|
55
|
+
end
|
46
56
|
end
|
47
57
|
|
48
58
|
describe 'the query method' do
|
data/time_for_a_boolean.gemspec
CHANGED
@@ -13,7 +13,7 @@ Gem::Specification.new do |spec|
|
|
13
13
|
or subscribed.
|
14
14
|
DESCRIPTION
|
15
15
|
spec.summary = 'Back boolean values with timestamps'
|
16
|
-
spec.homepage = 'https://github.com/
|
16
|
+
spec.homepage = 'https://github.com/calebthompson/time_for_a_boolean'
|
17
17
|
spec.license = 'MIT'
|
18
18
|
|
19
19
|
spec.files = `git ls-files`.split($/)
|
@@ -23,6 +23,7 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.add_dependency 'rails'
|
24
24
|
|
25
25
|
spec.add_development_dependency 'bundler', '~> 1.3'
|
26
|
+
spec.add_development_dependency 'coveralls'
|
26
27
|
spec.add_development_dependency 'rake'
|
27
28
|
spec.add_development_dependency 'rspec'
|
28
29
|
end
|
metadata
CHANGED
@@ -1,69 +1,83 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: time_for_a_boolean
|
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
|
- Caleb Thompson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-07-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - ~>
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '1.3'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - ~>
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '1.3'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: coveralls
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: rake
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
44
58
|
requirements:
|
45
|
-
- -
|
59
|
+
- - ">="
|
46
60
|
- !ruby/object:Gem::Version
|
47
61
|
version: '0'
|
48
62
|
type: :development
|
49
63
|
prerelease: false
|
50
64
|
version_requirements: !ruby/object:Gem::Requirement
|
51
65
|
requirements:
|
52
|
-
- -
|
66
|
+
- - ">="
|
53
67
|
- !ruby/object:Gem::Version
|
54
68
|
version: '0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: rspec
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
58
72
|
requirements:
|
59
|
-
- -
|
73
|
+
- - ">="
|
60
74
|
- !ruby/object:Gem::Version
|
61
75
|
version: '0'
|
62
76
|
type: :development
|
63
77
|
prerelease: false
|
64
78
|
version_requirements: !ruby/object:Gem::Requirement
|
65
79
|
requirements:
|
66
|
-
- -
|
80
|
+
- - ">="
|
67
81
|
- !ruby/object:Gem::Version
|
68
82
|
version: '0'
|
69
83
|
description: |2
|
@@ -75,9 +89,10 @@ executables: []
|
|
75
89
|
extensions: []
|
76
90
|
extra_rdoc_files: []
|
77
91
|
files:
|
78
|
-
- .gitignore
|
79
|
-
- .ruby-gemset
|
80
|
-
- .ruby-version
|
92
|
+
- ".gitignore"
|
93
|
+
- ".ruby-gemset"
|
94
|
+
- ".ruby-version"
|
95
|
+
- CONTRIBUTING.md
|
81
96
|
- Gemfile
|
82
97
|
- LICENSE
|
83
98
|
- README.md
|
@@ -87,7 +102,7 @@ files:
|
|
87
102
|
- lib/time_for_a_boolean/version.rb
|
88
103
|
- spec/time_for_a_boolean_spec.rb
|
89
104
|
- time_for_a_boolean.gemspec
|
90
|
-
homepage: https://github.com/
|
105
|
+
homepage: https://github.com/calebthompson/time_for_a_boolean
|
91
106
|
licenses:
|
92
107
|
- MIT
|
93
108
|
metadata: {}
|
@@ -97,17 +112,17 @@ require_paths:
|
|
97
112
|
- lib
|
98
113
|
required_ruby_version: !ruby/object:Gem::Requirement
|
99
114
|
requirements:
|
100
|
-
- -
|
115
|
+
- - ">="
|
101
116
|
- !ruby/object:Gem::Version
|
102
117
|
version: '0'
|
103
118
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
104
119
|
requirements:
|
105
|
-
- -
|
120
|
+
- - ">="
|
106
121
|
- !ruby/object:Gem::Version
|
107
122
|
version: '0'
|
108
123
|
requirements: []
|
109
124
|
rubyforge_project:
|
110
|
-
rubygems_version: 2.
|
125
|
+
rubygems_version: 2.2.2
|
111
126
|
signing_key:
|
112
127
|
specification_version: 4
|
113
128
|
summary: Back boolean values with timestamps
|