acts_as_scrubbable 2.1.3 → 2.1.5
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/.circleci/config.yml +109 -0
- data/Gemfile +12 -2
- data/acts_as_scrubbable.gemspec +1 -0
- data/lib/acts_as_scrubbable/scrub.rb +12 -14
- data/lib/acts_as_scrubbable/update_processor.rb +4 -2
- data/lib/acts_as_scrubbable/version.rb +1 -1
- data/spec/lib/acts_as_scrubbable/scrub_spec.rb +23 -4
- data/spec/lib/acts_as_scrubbable/task_runner_spec.rb +2 -1
- data/spec/lib/acts_as_scrubbable/update_processor_spec.rb +7 -1
- data/spec/support/database.rb +4 -0
- metadata +17 -3
- data/.github/workflows/pr-security.yaml +0 -32
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 78c5e20c000ca44b2113629dd0bd1f2b17f1e0f0fc02235b769a81e5d2522f14
|
4
|
+
data.tar.gz: 42fadcfbaecf25abde3745e41aea33672f8cfa8250b60b8d8a321210dd0be8ac
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7077e06618544ec4e97888b15bf375fa7547ba6b090d7b16068940d421275c0751133e45147765ebe4cee922e2dd82fd5c80be036d516b320f956cff7d52a0d9
|
7
|
+
data.tar.gz: 4edf71dd76d658eb1c92ee2ea77351ab748bc18042b3a6286210bade096ef1712e6a1508f76cce6667f96d0051ff6694985abb40df6852d591893cf5d69c1c37
|
@@ -0,0 +1,109 @@
|
|
1
|
+
version: 2.1
|
2
|
+
|
3
|
+
_references:
|
4
|
+
ruby_versions: &ruby_versions
|
5
|
+
ruby-version:
|
6
|
+
- "3.3.0"
|
7
|
+
- "3.2.2"
|
8
|
+
- "3.1.4"
|
9
|
+
- "3.0.6"
|
10
|
+
rails_version_prefixess: &rails_version_prefixes
|
11
|
+
rails-version-prefix:
|
12
|
+
- "7.1"
|
13
|
+
- "7.0"
|
14
|
+
- "6.1"
|
15
|
+
|
16
|
+
orbs:
|
17
|
+
ruby: circleci/ruby@2.1.0
|
18
|
+
|
19
|
+
jobs:
|
20
|
+
test:
|
21
|
+
parameters:
|
22
|
+
ruby-version:
|
23
|
+
type: string
|
24
|
+
rails-version-prefix:
|
25
|
+
type: string
|
26
|
+
|
27
|
+
executor:
|
28
|
+
name: ruby/default
|
29
|
+
tag: <<parameters.ruby-version>>
|
30
|
+
environment:
|
31
|
+
RAILS_VERSION_PREFIX: <<parameters.rails-version-prefix>>
|
32
|
+
steps:
|
33
|
+
- checkout
|
34
|
+
- ruby/install-deps:
|
35
|
+
# Have to set this since there's no lockfile
|
36
|
+
bundler-version: ">2"
|
37
|
+
# Do not use deployment mode, because we don't have a lockfile
|
38
|
+
path: "bundle"
|
39
|
+
# Always install the latest versions available
|
40
|
+
with-cache: false
|
41
|
+
- ruby/rspec-test
|
42
|
+
test-ruby-head:
|
43
|
+
parameters:
|
44
|
+
rails-version-prefix:
|
45
|
+
type: string
|
46
|
+
docker:
|
47
|
+
- image: cimg/base:stable
|
48
|
+
environment:
|
49
|
+
RAILS_VERSION: <<parameters.rails-version-prefix>>
|
50
|
+
steps:
|
51
|
+
- checkout
|
52
|
+
- ruby/install:
|
53
|
+
# RVM wants Ruby 2 for some reason to install Ruby head.
|
54
|
+
# But then it will use 2.7.8 by default in the future;
|
55
|
+
# we must use `rvm use ruby-head` before every command that matters
|
56
|
+
version: "2.7.8"
|
57
|
+
- ruby/install:
|
58
|
+
version: ruby-head
|
59
|
+
- restore_cache:
|
60
|
+
keys:
|
61
|
+
- v1-{{ arch }}-ruby-head-bundler
|
62
|
+
- run:
|
63
|
+
name: Install Ruby dependencies
|
64
|
+
command: |
|
65
|
+
rvm use ruby-head
|
66
|
+
ruby --version
|
67
|
+
gem install bundler
|
68
|
+
bundle config set path bundle
|
69
|
+
bundle update
|
70
|
+
- save_cache:
|
71
|
+
key: v1-{{ arch }}-ruby-head-bundler
|
72
|
+
paths:
|
73
|
+
- ./bundle
|
74
|
+
- run:
|
75
|
+
name: RSpec tests
|
76
|
+
command: |
|
77
|
+
rvm use ruby-head
|
78
|
+
ruby --version
|
79
|
+
mkdir -p /tmp/test-results/rspec
|
80
|
+
bundle exec rspec --profile 10 --format RspecJunitFormatter --out /tmp/test-results/rspec/results.xml --format progress
|
81
|
+
- store_test_results:
|
82
|
+
path: /tmp/test-results/rspec
|
83
|
+
|
84
|
+
workflows:
|
85
|
+
test:
|
86
|
+
jobs:
|
87
|
+
- test:
|
88
|
+
name: "test-ruby-<<matrix.ruby-version>>-rails-<<matrix.rails-version-prefix>>"
|
89
|
+
matrix:
|
90
|
+
parameters:
|
91
|
+
<<: *ruby_versions
|
92
|
+
<<: *rails_version_prefixes
|
93
|
+
test-head:
|
94
|
+
jobs:
|
95
|
+
- test:
|
96
|
+
name: "test-ruby-<<matrix.ruby-version>>-rails-main"
|
97
|
+
matrix:
|
98
|
+
parameters:
|
99
|
+
<<: *ruby_versions
|
100
|
+
rails-version-prefix:
|
101
|
+
- main
|
102
|
+
exclude:
|
103
|
+
- ruby-version: 3.0.6
|
104
|
+
rails-version-prefix: main
|
105
|
+
- test-ruby-head:
|
106
|
+
name: "test-ruby-head-rails-<<matrix.rails-version-prefix>>"
|
107
|
+
matrix:
|
108
|
+
parameters:
|
109
|
+
<<: *rails_version_prefixes
|
data/Gemfile
CHANGED
@@ -1,5 +1,15 @@
|
|
1
|
-
ruby '3.2.2'
|
2
|
-
|
3
1
|
source 'https://rubygems.org'
|
4
2
|
|
5
3
|
gemspec
|
4
|
+
|
5
|
+
# Lock Rails down in the matrix build, but not by default
|
6
|
+
rails_version_prefix = ENV.fetch("RAILS_VERSION_PREFIX", nil)
|
7
|
+
if rails_version_prefix == "main"
|
8
|
+
gem "activesupport", github: "rails/rails", branch: "main"
|
9
|
+
gem "activerecord", github: "rails/rails", branch: "main"
|
10
|
+
gem "railties", github: "rails/rails", branch: "main"
|
11
|
+
elsif rails_version_prefix
|
12
|
+
gem "activesupport", "~> #{rails_version_prefix}.0"
|
13
|
+
gem "activerecord", "~> #{rails_version_prefix}.0"
|
14
|
+
gem "railties", "~> #{rails_version_prefix}.0"
|
15
|
+
end
|
data/acts_as_scrubbable.gemspec
CHANGED
@@ -27,6 +27,7 @@ Gem::Specification.new do |s|
|
|
27
27
|
s.add_development_dependency 'pry-byebug' , '~> 3.2'
|
28
28
|
s.add_development_dependency 'terminal-notifier-guard' , '~> 1.6'
|
29
29
|
s.add_development_dependency 'activerecord-nulldb-adapter', '~> 1.0'
|
30
|
+
s.add_development_dependency 'rspec_junit_formatter'
|
30
31
|
|
31
32
|
s.files = `git ls-files`.split("\n")
|
32
33
|
s.test_files = `git ls-files -- spec/*`.split("\n")
|
@@ -4,24 +4,22 @@ module ActsAsScrubbable
|
|
4
4
|
def scrubbed_values
|
5
5
|
return unless self.class.scrubbable?
|
6
6
|
|
7
|
-
|
8
|
-
_updates = {}
|
7
|
+
_updates = {}
|
9
8
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
end
|
14
|
-
next if self.send(_field).blank?
|
15
|
-
|
16
|
-
if ActsAsScrubbable.scrub_map.keys.include?(value)
|
17
|
-
_updates[_field] = ActsAsScrubbable.scrub_map[value].call
|
18
|
-
else
|
19
|
-
puts "Undefined scrub: #{value} for #{self.class}#{_field}"
|
20
|
-
end
|
9
|
+
scrubbable_fields.each do |_field, value|
|
10
|
+
unless self.respond_to?(_field)
|
11
|
+
raise ArgumentError, "#{self.class} do not respond to #{_field}"
|
21
12
|
end
|
13
|
+
next if self.send(_field).blank?
|
22
14
|
|
23
|
-
|
15
|
+
if ActsAsScrubbable.scrub_map.keys.include?(value)
|
16
|
+
_updates[_field] = ActsAsScrubbable.scrub_map[value].call
|
17
|
+
else
|
18
|
+
puts "Undefined scrub: #{value} for #{self.class}.#{_field}"
|
19
|
+
end
|
24
20
|
end
|
21
|
+
|
22
|
+
_updates
|
25
23
|
end
|
26
24
|
end
|
27
25
|
end
|
@@ -8,8 +8,10 @@ module ActsAsScrubbable
|
|
8
8
|
def handle_batch(batch)
|
9
9
|
scrubbed_count = 0
|
10
10
|
batch.each do |obj|
|
11
|
-
|
12
|
-
|
11
|
+
obj.run_callbacks(:scrub) do
|
12
|
+
_updates = obj.scrubbed_values
|
13
|
+
obj.update_columns(_updates) unless _updates.empty?
|
14
|
+
end
|
13
15
|
scrubbed_count += 1
|
14
16
|
end
|
15
17
|
scrubbed_count
|
@@ -57,10 +57,29 @@ RSpec.describe ActsAsScrubbable::Scrub do
|
|
57
57
|
expect(_updates[:address1]).to be_nil
|
58
58
|
end
|
59
59
|
|
60
|
-
it '
|
61
|
-
|
62
|
-
|
63
|
-
|
60
|
+
it 'output no information when all scrubbers found' do
|
61
|
+
expect(STDOUT).to_not receive(:puts)
|
62
|
+
|
63
|
+
_updates = subject.scrubbed_values
|
64
|
+
end
|
65
|
+
|
66
|
+
context "scrubbable" do
|
67
|
+
subject { MissingScrubbableModel.new }
|
68
|
+
|
69
|
+
it 'outputs warning message' do
|
70
|
+
subject.first_name = "Johnny"
|
71
|
+
subject.last_name = "Frank"
|
72
|
+
|
73
|
+
allow(Faker::Name).to receive(:first_name).and_return("Larry")
|
74
|
+
allow(Faker::Name).to receive(:last_name).and_return("Baker")
|
75
|
+
|
76
|
+
expect(STDOUT).to receive(:puts).with('Undefined scrub: fake_first_name for MissingScrubbableModel.first_name')
|
77
|
+
expect(Faker::Name).to_not receive(:first_name)
|
78
|
+
|
79
|
+
_updates = subject.scrubbed_values
|
80
|
+
expect(_updates[:last_name]).to eq('Baker')
|
81
|
+
expect(_updates[:first_name]).to be_nil
|
82
|
+
end
|
64
83
|
end
|
65
84
|
end
|
66
85
|
end
|
@@ -53,10 +53,11 @@ RSpec.describe ActsAsScrubbable::TaskRunner do
|
|
53
53
|
it "scrubs all scrubbable classes", :aggregate_failures do
|
54
54
|
runner.extract_ar_classes
|
55
55
|
runner.scrub(num_of_batches: 1)
|
56
|
-
expect(processor).to have_received(:process).with(1).exactly(
|
56
|
+
expect(processor).to have_received(:process).with(1).exactly(4).times
|
57
57
|
expect(ActsAsScrubbable::ArClassProcessor).to have_received(:new).with(ScrubbableModel)
|
58
58
|
expect(ActsAsScrubbable::ArClassProcessor).to have_received(:new).with(AnotherScrubbableModel)
|
59
59
|
expect(ActsAsScrubbable::ArClassProcessor).to have_received(:new).with(AThirdScrubbableModel)
|
60
|
+
expect(ActsAsScrubbable::ArClassProcessor).to have_received(:new).with(MissingScrubbableModel)
|
60
61
|
expect(ActsAsScrubbable::ArClassProcessor).not_to have_received(:new).with(NonScrubbableModel)
|
61
62
|
end
|
62
63
|
|
@@ -15,5 +15,11 @@ RSpec.describe ActsAsScrubbable::UpdateProcessor do
|
|
15
15
|
|
16
16
|
expect(subject.send(:handle_batch, [model])).to eq 1
|
17
17
|
end
|
18
|
+
|
19
|
+
it "runs scrub callbacks" do
|
20
|
+
subject.send(:handle_batch, [model])
|
21
|
+
expect(model.scrubbing_begun).to be(true)
|
22
|
+
expect(model.scrubbing_finished).to be(true)
|
23
|
+
end
|
18
24
|
end
|
19
|
-
end
|
25
|
+
end
|
data/spec/support/database.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: acts_as_scrubbable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Samer Masry
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-07-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -210,6 +210,20 @@ dependencies:
|
|
210
210
|
- - "~>"
|
211
211
|
- !ruby/object:Gem::Version
|
212
212
|
version: '1.0'
|
213
|
+
- !ruby/object:Gem::Dependency
|
214
|
+
name: rspec_junit_formatter
|
215
|
+
requirement: !ruby/object:Gem::Requirement
|
216
|
+
requirements:
|
217
|
+
- - ">="
|
218
|
+
- !ruby/object:Gem::Version
|
219
|
+
version: '0'
|
220
|
+
type: :development
|
221
|
+
prerelease: false
|
222
|
+
version_requirements: !ruby/object:Gem::Requirement
|
223
|
+
requirements:
|
224
|
+
- - ">="
|
225
|
+
- !ruby/object:Gem::Version
|
226
|
+
version: '0'
|
213
227
|
description: ActsAsScrubbable helps you scrub your database the easy way with mock
|
214
228
|
data at the ActiveRecord level
|
215
229
|
email:
|
@@ -218,7 +232,7 @@ executables: []
|
|
218
232
|
extensions: []
|
219
233
|
extra_rdoc_files: []
|
220
234
|
files:
|
221
|
-
- ".
|
235
|
+
- ".circleci/config.yml"
|
222
236
|
- ".gitignore"
|
223
237
|
- ".rspec"
|
224
238
|
- ".travis.yml"
|
@@ -1,32 +0,0 @@
|
|
1
|
-
---
|
2
|
-
# onemedical/<repo>/.github/workflows/pr-security.yaml
|
3
|
-
#
|
4
|
-
# This is the workflow for distribution to repositories across the organization.
|
5
|
-
# It will call the reusable PR security workflow, and run scans against each PR.
|
6
|
-
name: PR Security
|
7
|
-
|
8
|
-
|
9
|
-
# yamllint disable-line rule:truthy
|
10
|
-
on:
|
11
|
-
pull_request:
|
12
|
-
branches: [main, master]
|
13
|
-
|
14
|
-
|
15
|
-
permissions:
|
16
|
-
# Required for workflows in private repositories.
|
17
|
-
contents: read
|
18
|
-
|
19
|
-
# Required for SARIF results upload to GHAS.
|
20
|
-
security-events: write
|
21
|
-
actions: read
|
22
|
-
|
23
|
-
|
24
|
-
jobs:
|
25
|
-
# Run the reusable workflow.
|
26
|
-
run-workflow:
|
27
|
-
name: Run Workflow
|
28
|
-
# yamllint disable-line rule:line-length
|
29
|
-
uses: onemedical/github-reusable-workflows/.github/workflows/reusable-pr-security.yaml@main
|
30
|
-
# The detect-secrets tool is used in some repositories, and generates false
|
31
|
-
# positives like the one below. Add comment to ignore.
|
32
|
-
secrets: inherit # pragma: allowlist secret
|