acts_as_scrubbable 2.1.3 → 2.1.5

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: 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