boolean_timestamp 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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: