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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fa77410638ccd7e9f530f70dbbf8520f73371831
4
- data.tar.gz: 69daa232a006ea0ade189ce119c32db4063da18f
3
+ metadata.gz: d21405437d75d25dba8e1cf2e1d603ec07566e51
4
+ data.tar.gz: de877be8cd743e254a8ea588cc6dbfe5eb288646
5
5
  SHA512:
6
- metadata.gz: c8c650545996f14611bb959e3ffc781f0beffb2647a67c169c3e05cd6eeb7770b1a4436628c43a28f0fce52c35ab8adcc1c62e7918a29696a944f21dfc954e9a
7
- data.tar.gz: '0549fdf90555decd93a9859efe58ebab76a253c03b6e07579ca8a807709932632ae41e05f104d79742e4289a46250ee547d7298cb188155c17a50eff61bb7c1c'
6
+ metadata.gz: f3221ee68e848abe810ecc12787469ede525da70db4a7e63ace8aaec3d4d1efb6242c26a24d6d42762bf853d7e8c43816f86b7b9d6227d18011b7d57e0b799f2
7
+ data.tar.gz: 355fed7f3a1e01661149f71ff464b9f01a6d39448f195e6da2cfcc2c939a19442f55b65ca42de1bbaa169cda8e1d6de64f82139fb729d044f00d8b29dd68f05d
data/.editorconfig ADDED
@@ -0,0 +1,13 @@
1
+ # editorconfig.org
2
+
3
+ root = true
4
+
5
+ [*]
6
+ indent_style = space
7
+ indent_size = 2
8
+ charset = utf-8
9
+ insert_final_newline = true
10
+ trim_trailing_whitespace = true
11
+
12
+ [*.md]
13
+ trim_trailing_whitespace = false
data/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
+ /*.gem
1
2
  /.bundle/
2
3
  /.yardoc
3
4
  /_yardoc/
@@ -6,6 +7,9 @@
6
7
  /pkg/
7
8
  /spec/reports/
8
9
  /tmp/
10
+ /Gemfile.lock
11
+ /gemfiles/*.lock
12
+ /gemfiles/.bundle/
9
13
 
10
14
  # rspec failure tracking
11
15
  .rspec_status
data/.rspec CHANGED
@@ -1,3 +1,3 @@
1
- --format documentation
1
+ --format progress
2
2
  --color
3
3
  --require spec_helper
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.7
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
@@ -4,3 +4,7 @@ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
4
 
5
5
  # Specify your gem's dependencies in boolean_timestamp.gemspec
6
6
  gemspec
7
+
8
+ group :test do
9
+ gem "simplecov", require: false
10
+ end
data/README.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # BooleanTimestamp
2
2
 
3
+ [![Build Status](https://travis-ci.org/molawson/boolean_timestamp.svg?branch=master)](https://travis-ci.org/molawson/boolean_timestamp)
4
+ [![Maintainability](https://api.codeclimate.com/v1/badges/23eb9fb7a853d24551fa/maintainability)](https://codeclimate.com/github/molawson/boolean_timestamp/maintainability)
5
+ [![Test Coverage](https://api.codeclimate.com/v1/badges/23eb9fb7a853d24551fa/test_coverage)](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
- task :default => :spec
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
@@ -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
@@ -0,0 +1,13 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", "~> 4.0.13"
6
+ gem "mysql2", "~> 0.3.21"
7
+ gem "pg", "~> 0.21.0"
8
+
9
+ group :test do
10
+ gem "simplecov", require: false
11
+ end
12
+
13
+ gemspec path: "../"
@@ -0,0 +1,13 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", "~> 4.1.16"
6
+ gem "mysql2", "~> 0.3.21"
7
+ gem "pg", "~> 0.21.0"
8
+
9
+ group :test do
10
+ gem "simplecov", require: false
11
+ end
12
+
13
+ gemspec path: "../"
@@ -0,0 +1,13 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", "~> 4.2.10"
6
+ gem "mysql2", "~> 0.3.21"
7
+ gem "pg", "~> 0.21.0"
8
+
9
+ group :test do
10
+ gem "simplecov", require: false
11
+ end
12
+
13
+ gemspec path: "../"
@@ -0,0 +1,11 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", "~> 5.0.6"
6
+
7
+ group :test do
8
+ gem "simplecov", require: false
9
+ end
10
+
11
+ gemspec path: "../"
@@ -0,0 +1,11 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", "~> 5.1.6"
6
+
7
+ group :test do
8
+ gem "simplecov", require: false
9
+ end
10
+
11
+ gemspec path: "../"
@@ -0,0 +1,11 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", "~> 5.2.0"
6
+
7
+ group :test do
8
+ gem "simplecov", require: false
9
+ end
10
+
11
+ gemspec path: "../"
@@ -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
- define_singleton_method(method_name) do
22
- where("#{fully_qualified_column_name} <= ?", Time.current)
23
- end
26
+ private
24
27
 
25
- define_singleton_method("not_#{method_name}") do
26
- where(
27
- "#{fully_qualified_column_name} IS NULL OR #{fully_qualified_column_name} > ?",
28
- Time.current,
29
- )
30
- end
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 method_name do
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 "#{method_name}?", method_name
53
+ alias_method("#{method_name}?", method_name)
37
54
 
38
- define_method "#{method_name}=" do |value|
39
- if ActiveModel::Type::Boolean::FALSE_VALUES.include?(value)
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)
@@ -1,3 +1,3 @@
1
1
  module BooleanTimestamp
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
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.1.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: