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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0b7213a56a968fe06418cb0639712b173b05a51694c4bd1cc87403998d23850c
4
- data.tar.gz: 638e8280f0f658e0923d961a0e8421f9413ba6cca907520ca22a24a0a24de7ee
3
+ metadata.gz: 78c5e20c000ca44b2113629dd0bd1f2b17f1e0f0fc02235b769a81e5d2522f14
4
+ data.tar.gz: 42fadcfbaecf25abde3745e41aea33672f8cfa8250b60b8d8a321210dd0be8ac
5
5
  SHA512:
6
- metadata.gz: e10d3afaa5741048ab4202ebcb68bfe06277854b88a2ce7ed0b4674686b77a051a3969d58c57bb52430c45da9cd36ec66760a80fa4c0d019be380774b42521b7
7
- data.tar.gz: d97258aa692015c1683d50805e1437f55fd8babfec9753ed4ac05a5f5543dd9f5fb701d102ccc40c19ea5449ef02370fc394a0f0dc85e3f7e6173c2648736819
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
@@ -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
- run_callbacks(:scrub) do
8
- _updates = {}
7
+ _updates = {}
9
8
 
10
- scrubbable_fields.each do |_field, value|
11
- unless self.respond_to?(_field)
12
- raise ArgumentError, "#{self.class} do not respond to #{_field}"
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
- _updates
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
- _updates = obj.scrubbed_values
12
- obj.update_columns(_updates) unless _updates.empty?
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
@@ -1,3 +1,3 @@
1
1
  module ActsAsScrubbable
2
- VERSION = '2.1.3'
2
+ VERSION = '2.1.5'
3
3
  end
@@ -57,10 +57,29 @@ RSpec.describe ActsAsScrubbable::Scrub do
57
57
  expect(_updates[:address1]).to be_nil
58
58
  end
59
59
 
60
- it 'runs scrub callbacks' do
61
- subject.scrubbed_values
62
- expect(subject.scrubbing_begun).to be(true)
63
- expect(subject.scrubbing_finished).to be(true)
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(3).times
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
@@ -53,3 +53,7 @@ end
53
53
  class AThirdScrubbableModel < ActiveRecord::Base
54
54
  acts_as_scrubbable :active => :boolean
55
55
  end
56
+
57
+ class MissingScrubbableModel < ScrubbableModel
58
+ acts_as_scrubbable :last_name, :first_name => :fake_first_name
59
+ end
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.3
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: 2023-12-15 00:00:00.000000000 Z
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
- - ".github/workflows/pr-security.yaml"
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