data_checks 0.1.1 → 0.3.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
  SHA256:
3
- metadata.gz: 75110dd7aeb5c0972a2f4a2bc018133627b3322b6491bbb491b0f395306cc8ec
4
- data.tar.gz: 2e882c3d2373d7accc19c7b1efc9cc74f690d76bec9693145f358ae436706d31
3
+ metadata.gz: 6b83ce0d2930d4e168a3622d8e233cc2a77893062508a0babad2faf9ec5e3f58
4
+ data.tar.gz: 23cf5db0c7fcb99baa1c65f815c36c554c06e0e5523ee29ce5c2ce6b0a9a3743
5
5
  SHA512:
6
- metadata.gz: 1f4ba9afdf6edb3afca680e9f3df7e9e0a16d650c5dcd2419c7784683d89fe10425b681d12228b504ad6652354bcf776cf4bd53d111ccbd3978c061d2f1ea34d
7
- data.tar.gz: 3d079a8442eb89134f27c26e65cd86825e850392fa98d85b130992910fe56126b42dbce30be4adeb5b6d3bca4ad7765321c8122ebcc4ceb3a294d6f2007a01e1
6
+ metadata.gz: e53875e40ada24436d58f31c6aa8e2e2eba0030283efb3cec5fd9ba1fae466f2297094c40d35c36594fea5a702b3c1846d164458f837f63476894c2f993a4eb5
7
+ data.tar.gz: 27ab0bb74134ed8f1d23d49a2e47ab3e6b24c0a25f09f73f7be1fa1a8e320de36bad91a7c93f94cd8eb098a72af83e0c078117140d3696b6ab21ef0b1dfed42c
data/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  ## master (unreleased)
2
2
 
3
+ ## 0.3.0 (2024-08-10)
4
+
5
+ - Drop support for older activerecord and ruby versions
6
+
7
+ ## 0.2.0 (2023-11-09)
8
+
9
+ - Add `ensure_equal` check method
10
+
11
+ ```ruby
12
+ ensure_equal :featured_projects, to: 100 do
13
+ FeaturedProject.count
14
+ end
15
+ ```
16
+
3
17
  ## 0.1.1 (2022-11-26)
4
18
 
5
19
  - Do not prematurely load `ActiveRecord::Base`
data/README.md CHANGED
@@ -4,6 +4,11 @@ This gem provides a small DSL to check your data for inconsistencies and anomali
4
4
 
5
5
  [![Build Status](https://github.com/fatkodima/data_checks/actions/workflows/test.yml/badge.svg?branch=master)](https://github.com/fatkodima/data_checks/actions/workflows/test.yml)
6
6
 
7
+ ## Requirements
8
+
9
+ - ruby 3.0+
10
+ - activerecord 7.0+
11
+
7
12
  ## Installation
8
13
 
9
14
  Add this line to your application's Gemfile:
@@ -133,6 +138,7 @@ end
133
138
  * `ensure_any` will check that the result of a given block is `> 0`
134
139
  * `ensure_more` will check that the result of a given block is `>` than a given number or that it contains more than a given number of items
135
140
  * `ensure_less` will check that the result of a given block is `<` than a given number or that it contains less than a given number of items
141
+ * `ensure_equal` will check that the result of a given block is `==` to the given number or that it contains a given number of items
136
142
 
137
143
  ```ruby
138
144
  ensure_no :images_without_previews do
@@ -5,7 +5,7 @@ module DataChecks
5
5
  self.table_name = :data_checks_runs
6
6
 
7
7
  STATUSES = [:passing, :failing, :error]
8
- enum status: STATUSES.map { |status| [status, status.to_s] }.to_h
8
+ enum :status, STATUSES.index_with(&:to_s)
9
9
 
10
10
  serialize :backtrace
11
11
 
@@ -26,6 +26,10 @@ module DataChecks
26
26
  add_check(EnsureLess, name, options, block)
27
27
  end
28
28
 
29
+ def ensure_equal(name, **options, &block)
30
+ add_check(EnsureEqual, name, options, block)
31
+ end
32
+
29
33
  def notifier(name, **options)
30
34
  name = name.to_s
31
35
 
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DataChecks
4
+ class EnsureEqual < Check
5
+ private
6
+ def handle_result(result)
7
+ expected = options.fetch(:to)
8
+ passing = true
9
+ count = 0
10
+
11
+ case result
12
+ when Numeric
13
+ if result != expected
14
+ passing = false
15
+ count = result
16
+ end
17
+ when Enumerable
18
+ count = result.size
19
+ if count != expected
20
+ passing = false
21
+ entries = result
22
+ end
23
+ else
24
+ raise ArgumentError, "Unsupported result: '#{result.class.name}' for 'ensure_equal'"
25
+ end
26
+
27
+ CheckResult.new(check: self, passing: passing, count: count, entries: entries)
28
+ end
29
+ end
30
+ end
@@ -5,23 +5,17 @@ module DataChecks
5
5
  private
6
6
  def handle_result(result)
7
7
  expected = options.fetch(:than)
8
- passing = true
9
8
 
10
9
  case result
11
10
  when Numeric
12
11
  count = result
13
- if result >= expected
14
- passing = false
15
- end
16
- when Enumerable, ActiveRecord::Relation
17
- count = result.count
18
- if count >= expected
19
- passing = false
20
- end
12
+ when Enumerable
13
+ count = result.size
21
14
  else
22
15
  raise ArgumentError, "Unsupported result: '#{result.class.name}' for 'ensure_less'"
23
16
  end
24
17
 
18
+ passing = count < expected
25
19
  CheckResult.new(check: self, passing: passing, count: count)
26
20
  end
27
21
  end
@@ -5,23 +5,17 @@ module DataChecks
5
5
  private
6
6
  def handle_result(result)
7
7
  expected = options.fetch(:than)
8
- passing = true
9
8
 
10
9
  case result
11
10
  when Numeric
12
11
  count = result
13
- if result <= expected
14
- passing = false
15
- end
16
- when Enumerable, ActiveRecord::Relation
17
- count = result.count
18
- if count <= expected
19
- passing = false
20
- end
12
+ when Enumerable
13
+ count = result.size
21
14
  else
22
15
  raise ArgumentError, "Unsupported result: '#{result.class.name}' for 'ensure_more'"
23
16
  end
24
17
 
18
+ passing = count > expected
25
19
  CheckResult.new(check: self, passing: passing, count: count)
26
20
  end
27
21
  end
@@ -13,9 +13,8 @@ module DataChecks
13
13
  passing = false
14
14
  count = result
15
15
  end
16
- # In ActiveRecord <= 4.2 ActiveRecord::Relation is not an Enumerable!
17
- when Enumerable, ActiveRecord::Relation
18
- unless result.empty?
16
+ when Enumerable
17
+ unless result.to_a.empty? # loads records for ActiveRecord::Relation
19
18
  passing = false
20
19
  count = result.size
21
20
  entries = result
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DataChecks
4
- VERSION = "0.1.1"
4
+ VERSION = "0.3.0"
5
5
  end
data/lib/data_checks.rb CHANGED
@@ -12,6 +12,7 @@ module DataChecks
12
12
  autoload :CheckResult
13
13
  autoload :CheckRun
14
14
  autoload :Config
15
+ autoload :EnsureEqual
15
16
  autoload :EnsureLess
16
17
  autoload :EnsureMore
17
18
  autoload :EnsureNo
@@ -10,7 +10,7 @@ module DataChecks
10
10
  source_root File.expand_path("templates", __dir__)
11
11
 
12
12
  def create_migration_file
13
- migration_template("migration.rb", File.join(migrations_dir, "install_data_checks.rb"))
13
+ migration_template("migration.rb", File.join(db_migrate_path, "install_data_checks.rb"))
14
14
  end
15
15
 
16
16
  def copy_initializer_file
@@ -19,11 +19,7 @@ module DataChecks
19
19
 
20
20
  private
21
21
  def start_after
22
- self.class.next_migration_number(migrations_dir)
23
- end
24
-
25
- def migrations_dir
26
- ar_version >= 5.1 ? db_migrate_path : "db/migrate"
22
+ self.class.next_migration_number(db_migrate_path)
27
23
  end
28
24
 
29
25
  def ar_version
@@ -12,7 +12,8 @@ DataChecks.configure do
12
12
 
13
13
  # ==> Configure checks
14
14
  #
15
- # Available checks are :ensure_no, :ensure_any, :ensure_more, and :ensure_less.
15
+ # Available checks are :ensure_no, :ensure_any, :ensure_more, :ensure_less,
16
+ # and :ensure_equal.
16
17
  #
17
18
  # ensure_no :users_without_emails do
18
19
  # User.where(email: nil).count
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: data_checks
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - fatkodima
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-11-26 00:00:00.000000000 Z
11
+ date: 2024-08-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '4.2'
19
+ version: '7.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
- version: '4.2'
26
+ version: '7.0'
27
27
  description:
28
28
  email:
29
29
  - fatkodima123@gmail.com
@@ -39,6 +39,7 @@ files:
39
39
  - lib/data_checks/check_result.rb
40
40
  - lib/data_checks/check_run.rb
41
41
  - lib/data_checks/config.rb
42
+ - lib/data_checks/ensure_equal.rb
42
43
  - lib/data_checks/ensure_less.rb
43
44
  - lib/data_checks/ensure_more.rb
44
45
  - lib/data_checks/ensure_no.rb
@@ -73,14 +74,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
73
74
  requirements:
74
75
  - - ">="
75
76
  - !ruby/object:Gem::Version
76
- version: 2.3.0
77
+ version: 3.0.0
77
78
  required_rubygems_version: !ruby/object:Gem::Requirement
78
79
  requirements:
79
80
  - - ">="
80
81
  - !ruby/object:Gem::Version
81
82
  version: '0'
82
83
  requirements: []
83
- rubygems_version: 3.1.6
84
+ rubygems_version: 3.4.19
84
85
  signing_key:
85
86
  specification_version: 4
86
87
  summary: Regression testing for data