boolean_timestamp 0.1.0 → 0.2.0
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/.editorconfig +13 -0
- data/.gitignore +4 -0
- data/.rspec +1 -1
- data/.rubocop.yml +15 -0
- data/.travis.yml +37 -1
- data/Appraisals +29 -0
- data/CHANGELOG.md +16 -0
- data/Gemfile +4 -0
- data/README.md +4 -0
- data/Rakefile +28 -1
- data/boolean_timestamp.gemspec +14 -0
- data/gemfiles/activerecord_4_0.gemfile +13 -0
- data/gemfiles/activerecord_4_1.gemfile +13 -0
- data/gemfiles/activerecord_4_2.gemfile +13 -0
- data/gemfiles/activerecord_5_0.gemfile +11 -0
- data/gemfiles/activerecord_5_1.gemfile +11 -0
- data/gemfiles/activerecord_5_2.gemfile +11 -0
- data/lib/boolean_timestamp.rb +31 -14
- data/lib/boolean_timestamp/version.rb +1 -1
- metadata +114 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d21405437d75d25dba8e1cf2e1d603ec07566e51
|
4
|
+
data.tar.gz: de877be8cd743e254a8ea588cc6dbfe5eb288646
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f3221ee68e848abe810ecc12787469ede525da70db4a7e63ace8aaec3d4d1efb6242c26a24d6d42762bf853d7e8c43816f86b7b9d6227d18011b7d57e0b799f2
|
7
|
+
data.tar.gz: 355fed7f3a1e01661149f71ff464b9f01a6d39448f195e6da2cfcc2c939a19442f55b65ca42de1bbaa169cda8e1d6de64f82139fb729d044f00d8b29dd68f05d
|
data/.editorconfig
ADDED
data/.gitignore
CHANGED
data/.rspec
CHANGED
data/.rubocop.yml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
Metrics/LineLength:
|
2
|
+
Max: 100
|
3
|
+
|
4
|
+
Style/StringLiterals:
|
5
|
+
EnforcedStyle: double_quotes
|
6
|
+
ConsistentQuotesInMultiline: true
|
7
|
+
|
8
|
+
Style/TrailingCommaInArguments:
|
9
|
+
EnforcedStyleForMultiline: comma
|
10
|
+
|
11
|
+
Style/TrailingCommaInArrayLiteral:
|
12
|
+
EnforcedStyleForMultiline: comma
|
13
|
+
|
14
|
+
Style/TrailingCommaInHashLiteral:
|
15
|
+
EnforcedStyleForMultiline: comma
|
data/.travis.yml
CHANGED
@@ -1,5 +1,41 @@
|
|
1
1
|
sudo: false
|
2
|
+
env:
|
3
|
+
global:
|
4
|
+
- CC_TEST_REPORTER_ID=a7a2478b2a951030d73fbb60cb2b78e485ab91fbd4f608e891cb2bf98b285998
|
5
|
+
- COVERAGE=true
|
2
6
|
language: ruby
|
3
7
|
rvm:
|
4
|
-
- 2.3
|
8
|
+
- 2.3
|
9
|
+
- 2.4
|
10
|
+
- 2.5
|
11
|
+
- 2.6
|
12
|
+
gemfile:
|
13
|
+
- gemfiles/activerecord_4_0.gemfile
|
14
|
+
- gemfiles/activerecord_4_1.gemfile
|
15
|
+
- gemfiles/activerecord_4_2.gemfile
|
16
|
+
- gemfiles/activerecord_5_0.gemfile
|
17
|
+
- gemfiles/activerecord_5_1.gemfile
|
18
|
+
- gemfiles/activerecord_5_2.gemfile
|
19
|
+
matrix:
|
20
|
+
exclude:
|
21
|
+
- rvm: 2.4
|
22
|
+
gemfile: gemfiles/activerecord_4_0.gemfile
|
23
|
+
- rvm: 2.4
|
24
|
+
gemfile: gemfiles/activerecord_4_1.gemfile
|
25
|
+
- rvm: 2.5
|
26
|
+
gemfile: gemfiles/activerecord_4_0.gemfile
|
27
|
+
- rvm: 2.5
|
28
|
+
gemfile: gemfiles/activerecord_4_1.gemfile
|
29
|
+
- rvm: 2.6
|
30
|
+
gemfile: gemfiles/activerecord_4_0.gemfile
|
31
|
+
- rvm: 2.6
|
32
|
+
gemfile: gemfiles/activerecord_4_1.gemfile
|
5
33
|
before_install: gem install bundler -v 1.16.2
|
34
|
+
before_script:
|
35
|
+
- curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
|
36
|
+
- chmod +x ./cc-test-reporter
|
37
|
+
- ./cc-test-reporter before-build
|
38
|
+
script:
|
39
|
+
- bundle exec rake spec:all
|
40
|
+
after_script:
|
41
|
+
- ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
|
data/Appraisals
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
appraise "activerecord-4-0" do
|
2
|
+
gem "activerecord", "~> 4.0.13"
|
3
|
+
gem "mysql2", "~> 0.3.21"
|
4
|
+
gem "pg", "~> 0.21.0"
|
5
|
+
end
|
6
|
+
|
7
|
+
appraise "activerecord-4-1" do
|
8
|
+
gem "activerecord", "~> 4.1.16"
|
9
|
+
gem "mysql2", "~> 0.3.21"
|
10
|
+
gem "pg", "~> 0.21.0"
|
11
|
+
end
|
12
|
+
|
13
|
+
appraise "activerecord-4-2" do
|
14
|
+
gem "activerecord", "~> 4.2.10"
|
15
|
+
gem "mysql2", "~> 0.3.21"
|
16
|
+
gem "pg", "~> 0.21.0"
|
17
|
+
end
|
18
|
+
|
19
|
+
appraise "activerecord-5-0" do
|
20
|
+
gem "activerecord", "~> 5.0.6"
|
21
|
+
end
|
22
|
+
|
23
|
+
appraise "activerecord-5-1" do
|
24
|
+
gem "activerecord", "~> 5.1.6"
|
25
|
+
end
|
26
|
+
|
27
|
+
appraise "activerecord-5-2" do
|
28
|
+
gem "activerecord", "~> 5.2.0"
|
29
|
+
end
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
# Changelog
|
2
|
+
|
3
|
+
## [Unreleased]
|
4
|
+
|
5
|
+
## [0.2.0] - 2018-07-31
|
6
|
+
### Added
|
7
|
+
- Support for Rails 4.x (in addition to 5.x)
|
8
|
+
- Support for MySQL and PostgreSQL
|
9
|
+
- Official support for Ruby >= 2.3, <= 2.6
|
10
|
+
|
11
|
+
## 0.1.0 - 2018-07-03
|
12
|
+
### Added
|
13
|
+
- Copy/paste of code from app where it was originally used
|
14
|
+
|
15
|
+
[Unreleased]: https://github.com/molawson/boolean_timestamp/compare/v0.2.0...HEAD
|
16
|
+
[0.2.0]: https://github.com/molawson/boolean_timestamp/compare/v0.1.0...v0.2.0
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
# BooleanTimestamp
|
2
2
|
|
3
|
+
[](https://travis-ci.org/molawson/boolean_timestamp)
|
4
|
+
[](https://codeclimate.com/github/molawson/boolean_timestamp/maintainability)
|
5
|
+
[](https://codeclimate.com/github/molawson/boolean_timestamp/test_coverage)
|
6
|
+
|
3
7
|
True/False fields have a great simplicity about them, and many times they're perfect for the job!
|
4
8
|
But, it's not uncommon end up in a place where you'd really love to keep some degree of simplicity with a little more detail about when the value was changed.
|
5
9
|
Sometimes you'll want to display that information to the user and other times you'll keep it for auditing or debugging purposes.
|
data/Rakefile
CHANGED
@@ -3,4 +3,31 @@ require "rspec/core/rake_task"
|
|
3
3
|
|
4
4
|
RSpec::Core::RakeTask.new(:spec)
|
5
5
|
|
6
|
-
|
6
|
+
namespace :spec do
|
7
|
+
desc "Run tests with sqlite3 adapter"
|
8
|
+
task :sqlite do
|
9
|
+
ENV["DB_ADAPTER"] = "sqlite"
|
10
|
+
Rake::Task["spec"].execute
|
11
|
+
end
|
12
|
+
|
13
|
+
desc "Run tests with mysql2 adapter"
|
14
|
+
task :mysql do
|
15
|
+
ENV["DB_ADAPTER"] = "mysql"
|
16
|
+
Rake::Task["spec"].execute
|
17
|
+
end
|
18
|
+
|
19
|
+
desc "Run tests with postgresql adapter"
|
20
|
+
task :postgres do
|
21
|
+
ENV["DB_ADAPTER"] = "postgres"
|
22
|
+
Rake::Task["spec"].execute
|
23
|
+
end
|
24
|
+
|
25
|
+
desc "Run tests with all adapters"
|
26
|
+
task :all do
|
27
|
+
Rake::Task["spec:sqlite"].execute
|
28
|
+
Rake::Task["spec:mysql"].execute
|
29
|
+
Rake::Task["spec:postgres"].execute
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
task default: :spec
|
data/boolean_timestamp.gemspec
CHANGED
@@ -18,6 +18,12 @@ Gem::Specification.new do |spec|
|
|
18
18
|
beginning and adds very little code to your app.}
|
19
19
|
spec.homepage = "https://github.com/molawson/boolean_timestamp"
|
20
20
|
spec.license = "MIT"
|
21
|
+
spec.metadata = {
|
22
|
+
"homepage_uri" => "https://github.com/molawson/boolean_timestamp",
|
23
|
+
"changelog_uri" => "https://github.com/molawson/boolean_timestamp/blob/master/CHANGELOG.md",
|
24
|
+
"source_code_uri" => "https://github.com/molawson/boolean_timestamp",
|
25
|
+
"bug_tracker_uri" => "https://github.com/molawson/boolean_timestamp/issues",
|
26
|
+
}
|
21
27
|
|
22
28
|
# Specify which files should be added to the gem when it is released.
|
23
29
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
@@ -28,7 +34,15 @@ Gem::Specification.new do |spec|
|
|
28
34
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
29
35
|
spec.require_paths = ["lib"]
|
30
36
|
|
37
|
+
spec.add_development_dependency "appraisal"
|
31
38
|
spec.add_development_dependency "bundler", "~> 1.16"
|
32
39
|
spec.add_development_dependency "rake", "~> 10.0"
|
33
40
|
spec.add_development_dependency "rspec", "~> 3.0"
|
41
|
+
spec.add_development_dependency "rubocop", "0.54.0"
|
42
|
+
spec.add_development_dependency "sqlite3"
|
43
|
+
spec.add_development_dependency "mysql2"
|
44
|
+
spec.add_development_dependency "pg"
|
45
|
+
spec.add_development_dependency "timecop"
|
46
|
+
|
47
|
+
spec.add_dependency "activerecord", "> 4.0"
|
34
48
|
end
|
data/lib/boolean_timestamp.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
require "boolean_timestamp/version"
|
2
2
|
|
3
|
+
require "active_record"
|
4
|
+
|
3
5
|
module BooleanTimestamp
|
4
6
|
def self.included(base)
|
5
7
|
base.extend ClassMethods
|
@@ -14,29 +16,44 @@ module BooleanTimestamp
|
|
14
16
|
unless column_names.include?(column_name)
|
15
17
|
raise(
|
16
18
|
ArgumentError,
|
17
|
-
"Can't build methods from unknown column '#{fully_qualified_column_name}'",
|
19
|
+
"Can't build boolean methods from unknown column '#{fully_qualified_column_name}'",
|
18
20
|
)
|
19
21
|
end
|
22
|
+
define_boolean_timestamp_scopes(method_name, fully_qualified_column_name)
|
23
|
+
define_boolean_timestamp_accessors(method_name, column_name)
|
24
|
+
end
|
20
25
|
|
21
|
-
|
22
|
-
where("#{fully_qualified_column_name} <= ?", Time.current)
|
23
|
-
end
|
26
|
+
private
|
24
27
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
28
|
+
def define_boolean_timestamp_scopes(method_name, fully_qualified_column_name)
|
29
|
+
scope(method_name, -> { where("#{fully_qualified_column_name} <= ?", Time.current) })
|
30
|
+
|
31
|
+
scope(
|
32
|
+
"not_#{method_name}",
|
33
|
+
lambda do
|
34
|
+
where(
|
35
|
+
"#{fully_qualified_column_name} IS NULL OR #{fully_qualified_column_name} > ?",
|
36
|
+
Time.current,
|
37
|
+
)
|
38
|
+
end,
|
39
|
+
)
|
40
|
+
end
|
41
|
+
|
42
|
+
def define_boolean_timestamp_accessors(method_name, column_name)
|
43
|
+
false_values = if ActiveRecord::VERSION::MAJOR >= 5
|
44
|
+
ActiveModel::Type::Boolean::FALSE_VALUES
|
45
|
+
else
|
46
|
+
ActiveRecord::ConnectionAdapters::Column::FALSE_VALUES
|
47
|
+
end
|
31
48
|
|
32
|
-
define_method
|
49
|
+
define_method(method_name) do
|
33
50
|
public_send(column_name).present? && !public_send(column_name).future?
|
34
51
|
end
|
35
52
|
|
36
|
-
alias_method
|
53
|
+
alias_method("#{method_name}?", method_name)
|
37
54
|
|
38
|
-
define_method
|
39
|
-
if
|
55
|
+
define_method("#{method_name}=") do |value|
|
56
|
+
if false_values.include?(value)
|
40
57
|
public_send("#{column_name}=", nil)
|
41
58
|
elsif !public_send(method_name)
|
42
59
|
public_send("#{column_name}=", Time.current)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: boolean_timestamp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mo Lawson
|
@@ -10,6 +10,20 @@ bindir: exe
|
|
10
10
|
cert_chain: []
|
11
11
|
date: 2018-07-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: appraisal
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: bundler
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -52,6 +66,90 @@ dependencies:
|
|
52
66
|
- - "~>"
|
53
67
|
- !ruby/object:Gem::Version
|
54
68
|
version: '3.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rubocop
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 0.54.0
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 0.54.0
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: sqlite3
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: mysql2
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: pg
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: timecop
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: activerecord
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '4.0'
|
146
|
+
type: :runtime
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '4.0'
|
55
153
|
description: |-
|
56
154
|
True/False fields have a great simplicity about them, and many times
|
57
155
|
they're perfect for the job! But, it's not uncommon end up in a place where you'd really love to
|
@@ -65,9 +163,13 @@ executables: []
|
|
65
163
|
extensions: []
|
66
164
|
extra_rdoc_files: []
|
67
165
|
files:
|
166
|
+
- ".editorconfig"
|
68
167
|
- ".gitignore"
|
69
168
|
- ".rspec"
|
169
|
+
- ".rubocop.yml"
|
70
170
|
- ".travis.yml"
|
171
|
+
- Appraisals
|
172
|
+
- CHANGELOG.md
|
71
173
|
- CODE_OF_CONDUCT.md
|
72
174
|
- Gemfile
|
73
175
|
- LICENSE.txt
|
@@ -76,12 +178,22 @@ files:
|
|
76
178
|
- bin/console
|
77
179
|
- bin/setup
|
78
180
|
- boolean_timestamp.gemspec
|
181
|
+
- gemfiles/activerecord_4_0.gemfile
|
182
|
+
- gemfiles/activerecord_4_1.gemfile
|
183
|
+
- gemfiles/activerecord_4_2.gemfile
|
184
|
+
- gemfiles/activerecord_5_0.gemfile
|
185
|
+
- gemfiles/activerecord_5_1.gemfile
|
186
|
+
- gemfiles/activerecord_5_2.gemfile
|
79
187
|
- lib/boolean_timestamp.rb
|
80
188
|
- lib/boolean_timestamp/version.rb
|
81
189
|
homepage: https://github.com/molawson/boolean_timestamp
|
82
190
|
licenses:
|
83
191
|
- MIT
|
84
|
-
metadata:
|
192
|
+
metadata:
|
193
|
+
homepage_uri: https://github.com/molawson/boolean_timestamp
|
194
|
+
changelog_uri: https://github.com/molawson/boolean_timestamp/blob/master/CHANGELOG.md
|
195
|
+
source_code_uri: https://github.com/molawson/boolean_timestamp
|
196
|
+
bug_tracker_uri: https://github.com/molawson/boolean_timestamp/issues
|
85
197
|
post_install_message:
|
86
198
|
rdoc_options: []
|
87
199
|
require_paths:
|