masking 1.1.0 → 1.1.1
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 +9 -4
- data/.github/workflows/acceptance_test_mariadb.yml +57 -1
- data/.github/workflows/acceptance_test_mysql.yml +1 -1
- data/.rubocop.yml +7 -1
- data/.rubocop_todo.yml +105 -0
- data/.ruby-version +1 -1
- data/CHANGELOG.md +10 -0
- data/Dockerfile +3 -1
- data/Gemfile +20 -0
- data/Gemfile.lock +67 -51
- data/README.md +18 -8
- data/acceptance/expected_query_result.txt +36 -30
- data/acceptance/import_dumpfile.sql +3 -1
- data/acceptance/masking.yml +2 -0
- data/acceptance/run_test.sh +1 -1
- data/docker-compose/mariadb1010.yml +17 -0
- data/docker-compose/mariadb1011.yml +17 -0
- data/docker-compose/mariadb105.yml +17 -0
- data/docker-compose/mariadb106.yml +17 -0
- data/docker-compose/mariadb107.yml +17 -0
- data/docker-compose/mariadb108.yml +17 -0
- data/docker-compose/mariadb109.yml +17 -0
- data/lib/masking/cli/error_message.rb +1 -1
- data/lib/masking/config/target_columns/column.rb +19 -5
- data/lib/masking/config/target_columns/method/string_binary_distinctor.rb +3 -3
- data/lib/masking/config/target_columns/method/type/base.rb +25 -0
- data/lib/masking/config/target_columns/method/type/binary.rb +19 -0
- data/lib/masking/config/target_columns/method/type/boolean.rb +27 -0
- data/lib/masking/config/target_columns/method/type/date.rb +28 -0
- data/lib/masking/config/target_columns/method/type/extension/ignore_null.rb +24 -0
- data/lib/masking/config/target_columns/method/type/float.rb +19 -0
- data/lib/masking/config/target_columns/method/type/integer.rb +19 -0
- data/lib/masking/config/target_columns/method/{null.rb → type/null.rb} +5 -5
- data/lib/masking/config/target_columns/method/type/string.rb +37 -0
- data/lib/masking/config/target_columns/method/type/time.rb +26 -0
- data/lib/masking/config/target_columns/method.rb +14 -10
- data/lib/masking/insert_statement/sql_builder.rb +2 -2
- data/lib/masking/insert_statement.rb +1 -1
- data/lib/masking/sql_dump_line.rb +1 -0
- data/lib/masking/version.rb +1 -1
- data/masking.gemspec +1 -18
- metadata +24 -181
- data/lib/masking/config/target_columns/method/binary.rb +0 -23
- data/lib/masking/config/target_columns/method/boolean.rb +0 -29
- data/lib/masking/config/target_columns/method/date.rb +0 -30
- data/lib/masking/config/target_columns/method/float.rb +0 -23
- data/lib/masking/config/target_columns/method/integer.rb +0 -23
- data/lib/masking/config/target_columns/method/string.rb +0 -33
- data/lib/masking/config/target_columns/method/time.rb +0 -28
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8229ba5463b487ff90ed68d770ce32e07d5d02859c12836eae99dc465ebe1378
|
4
|
+
data.tar.gz: 3b046df36bc1576e02412df76de34fa03c31583e4d8cc89c0c417dcbe86f09fd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3cd6d9271cbcdadc50281189db5e4ed73111996544d47ddb553b33e4d82a838d7dcc95b649ca6462cf9f1742256602feb22f973cba98adf5ebebb7b3fbb3ff79
|
7
|
+
data.tar.gz: f0dd87ee111bd69ef6586ce3aa18baf9b7734b8843c8d00b2480308244db7e98cb87f04f196ccd530d1690b0697f039dd7683ae60f147a8b66971ff762c0459e
|
data/.circleci/config.yml
CHANGED
@@ -14,10 +14,14 @@ test_attributes: &test_attributes
|
|
14
14
|
name: output Ruby version (debug)
|
15
15
|
command: docker run --entrypoint sh masking-$RUBY_VERSION-$CIRCLE_SHA1 -c "ruby -v" # debug
|
16
16
|
- run:
|
17
|
-
name: run test
|
18
|
-
command: docker run --entrypoint sh -e CI -e CODECOV_TOKEN masking-$RUBY_VERSION-$CIRCLE_SHA1 -c "bundle exec
|
17
|
+
name: run test & rubocop & notes
|
18
|
+
command: docker run --entrypoint sh -e CI -e CODECOV_TOKEN masking-$RUBY_VERSION-$CIRCLE_SHA1 -c "bundle exec rake"
|
19
19
|
|
20
20
|
jobs:
|
21
|
+
test-ruby32:
|
22
|
+
<<: *test_attributes
|
23
|
+
environment:
|
24
|
+
RUBY_VERSION: '3.2'
|
21
25
|
test-ruby31:
|
22
26
|
<<: *test_attributes
|
23
27
|
environment:
|
@@ -38,7 +42,8 @@ jobs:
|
|
38
42
|
workflows:
|
39
43
|
'CircleCI: build':
|
40
44
|
jobs:
|
45
|
+
- test-ruby32
|
46
|
+
- test-ruby31
|
47
|
+
- test-ruby30
|
41
48
|
- test-ruby26
|
42
49
|
- test-ruby27
|
43
|
-
- test-ruby30
|
44
|
-
- test-ruby31
|
@@ -2,10 +2,66 @@ name: Acceptance Test MariaDB
|
|
2
2
|
on:
|
3
3
|
push:
|
4
4
|
branches:
|
5
|
-
-
|
5
|
+
- main
|
6
6
|
pull_request:
|
7
7
|
|
8
8
|
jobs:
|
9
|
+
mariadb1011:
|
10
|
+
runs-on: ubuntu-latest
|
11
|
+
steps:
|
12
|
+
- uses: actions/checkout@v1
|
13
|
+
with:
|
14
|
+
fetch-depth: 1 # shallow clone
|
15
|
+
- name: run test
|
16
|
+
run: docker-compose/acceptance_test.sh mariadb1011 docker-compose-ci.yml
|
17
|
+
mariadb1010:
|
18
|
+
runs-on: ubuntu-latest
|
19
|
+
steps:
|
20
|
+
- uses: actions/checkout@v1
|
21
|
+
with:
|
22
|
+
fetch-depth: 1 # shallow clone
|
23
|
+
- name: run test
|
24
|
+
run: docker-compose/acceptance_test.sh mariadb1010 docker-compose-ci.yml
|
25
|
+
mariadb109:
|
26
|
+
runs-on: ubuntu-latest
|
27
|
+
steps:
|
28
|
+
- uses: actions/checkout@v1
|
29
|
+
with:
|
30
|
+
fetch-depth: 1 # shallow clone
|
31
|
+
- name: run test
|
32
|
+
run: docker-compose/acceptance_test.sh mariadb109 docker-compose-ci.yml
|
33
|
+
mariadb108:
|
34
|
+
runs-on: ubuntu-latest
|
35
|
+
steps:
|
36
|
+
- uses: actions/checkout@v1
|
37
|
+
with:
|
38
|
+
fetch-depth: 1 # shallow clone
|
39
|
+
- name: run test
|
40
|
+
run: docker-compose/acceptance_test.sh mariadb108 docker-compose-ci.yml
|
41
|
+
mariadb107:
|
42
|
+
runs-on: ubuntu-latest
|
43
|
+
steps:
|
44
|
+
- uses: actions/checkout@v1
|
45
|
+
with:
|
46
|
+
fetch-depth: 1 # shallow clone
|
47
|
+
- name: run test
|
48
|
+
run: docker-compose/acceptance_test.sh mariadb107 docker-compose-ci.yml
|
49
|
+
mariadb106:
|
50
|
+
runs-on: ubuntu-latest
|
51
|
+
steps:
|
52
|
+
- uses: actions/checkout@v1
|
53
|
+
with:
|
54
|
+
fetch-depth: 1 # shallow clone
|
55
|
+
- name: run test
|
56
|
+
run: docker-compose/acceptance_test.sh mariadb106 docker-compose-ci.yml
|
57
|
+
mariadb105:
|
58
|
+
runs-on: ubuntu-latest
|
59
|
+
steps:
|
60
|
+
- uses: actions/checkout@v1
|
61
|
+
with:
|
62
|
+
fetch-depth: 1 # shallow clone
|
63
|
+
- name: run test
|
64
|
+
run: docker-compose/acceptance_test.sh mariadb105 docker-compose-ci.yml
|
9
65
|
mariadb104:
|
10
66
|
runs-on: ubuntu-latest
|
11
67
|
steps:
|
data/.rubocop.yml
CHANGED
@@ -1,11 +1,17 @@
|
|
1
|
+
inherit_from: .rubocop_todo.yml
|
2
|
+
|
3
|
+
require:
|
4
|
+
- rubocop-rspec
|
5
|
+
|
1
6
|
AllCops:
|
7
|
+
NewCops: enable
|
2
8
|
Exclude:
|
3
9
|
- 'vendor/**/*'
|
4
10
|
- 'spec/fixtures/**/*'
|
5
11
|
- 'tmp/**/*'
|
6
12
|
TargetRubyVersion: 2.6
|
7
13
|
|
8
|
-
|
14
|
+
Layout/LineLength:
|
9
15
|
Max: 120
|
10
16
|
|
11
17
|
Metrics/BlockLength:
|
data/.rubocop_todo.yml
ADDED
@@ -0,0 +1,105 @@
|
|
1
|
+
# This configuration was generated by
|
2
|
+
# `rubocop --auto-gen-config`
|
3
|
+
# on 2023-02-26 19:42:34 UTC using RuboCop version 1.46.0.
|
4
|
+
# The point is for the user to remove these configuration records
|
5
|
+
# one by one as the offenses are removed from the code base.
|
6
|
+
# Note that changes in the inspected code, or installation of new
|
7
|
+
# versions of RuboCop, may require this file to be generated again.
|
8
|
+
|
9
|
+
# Offense count: 1
|
10
|
+
RSpec/AnyInstance:
|
11
|
+
Exclude:
|
12
|
+
- 'spec/masking/config_spec.rb'
|
13
|
+
|
14
|
+
# Offense count: 39
|
15
|
+
# Configuration parameters: Prefixes, AllowedPatterns.
|
16
|
+
# Prefixes: when, with, without
|
17
|
+
RSpec/ContextWording:
|
18
|
+
Exclude:
|
19
|
+
- 'spec/integration/commandline_spec.rb'
|
20
|
+
- 'spec/masking/cli_spec.rb'
|
21
|
+
- 'spec/masking/config/target_columns/column_spec.rb'
|
22
|
+
- 'spec/masking/config/target_columns/method/binary_spec.rb'
|
23
|
+
- 'spec/masking/config/target_columns/method/string_binary_distinctor_spec.rb'
|
24
|
+
- 'spec/masking/config/target_columns/method_spec.rb'
|
25
|
+
- 'spec/masking/config/target_columns_spec.rb'
|
26
|
+
- 'spec/masking/config_spec.rb'
|
27
|
+
- 'spec/masking/data_mask_processor/cache_spec.rb'
|
28
|
+
- 'spec/masking/insert_statement_spec.rb'
|
29
|
+
- 'spec/masking/sql_dump_line_spec.rb'
|
30
|
+
|
31
|
+
# Offense count: 1
|
32
|
+
# Configuration parameters: IgnoredMetadata.
|
33
|
+
RSpec/DescribeClass:
|
34
|
+
Exclude:
|
35
|
+
- '**/spec/features/**/*'
|
36
|
+
- '**/spec/requests/**/*'
|
37
|
+
- '**/spec/routing/**/*'
|
38
|
+
- '**/spec/system/**/*'
|
39
|
+
- '**/spec/views/**/*'
|
40
|
+
- 'spec/integration/commandline_spec.rb'
|
41
|
+
|
42
|
+
# Offense count: 6
|
43
|
+
# Configuration parameters: CountAsOne.
|
44
|
+
RSpec/ExampleLength:
|
45
|
+
Max: 7
|
46
|
+
|
47
|
+
# Offense count: 1
|
48
|
+
RSpec/ExpectInHook:
|
49
|
+
Exclude:
|
50
|
+
- 'spec/masking/insert_statement_spec.rb'
|
51
|
+
|
52
|
+
# Offense count: 4
|
53
|
+
RSpec/ExpectOutput:
|
54
|
+
Exclude:
|
55
|
+
- 'spec/masking/cli_spec.rb'
|
56
|
+
|
57
|
+
# Offense count: 1
|
58
|
+
RSpec/MessageChain:
|
59
|
+
Exclude:
|
60
|
+
- 'spec/masking_spec.rb'
|
61
|
+
|
62
|
+
# Offense count: 16
|
63
|
+
# Configuration parameters: .
|
64
|
+
# SupportedStyles: have_received, receive
|
65
|
+
RSpec/MessageSpies:
|
66
|
+
EnforcedStyle: receive
|
67
|
+
|
68
|
+
# Offense count: 5
|
69
|
+
RSpec/MultipleExpectations:
|
70
|
+
Max: 3
|
71
|
+
|
72
|
+
# Offense count: 44
|
73
|
+
# Configuration parameters: EnforcedStyle, IgnoreSharedExamples.
|
74
|
+
# SupportedStyles: always, named_only
|
75
|
+
RSpec/NamedSubject:
|
76
|
+
Exclude:
|
77
|
+
- 'spec/masking/cli/error_message_spec.rb'
|
78
|
+
- 'spec/masking/config/target_columns/column_spec.rb'
|
79
|
+
- 'spec/masking/config/target_columns/method/binary_spec.rb'
|
80
|
+
- 'spec/masking/config/target_columns/method/string_spec.rb'
|
81
|
+
- 'spec/masking/config/target_columns/method_spec.rb'
|
82
|
+
- 'spec/masking/config/target_columns/table_spec.rb'
|
83
|
+
- 'spec/masking/config/target_columns_spec.rb'
|
84
|
+
- 'spec/masking/config_spec.rb'
|
85
|
+
- 'spec/masking/insert_statement/sql_builder_spec.rb'
|
86
|
+
- 'spec/masking/insert_statement_spec.rb'
|
87
|
+
- 'spec/masking_spec.rb'
|
88
|
+
|
89
|
+
# Offense count: 19
|
90
|
+
# Configuration parameters: AllowedGroups.
|
91
|
+
RSpec/NestedGroups:
|
92
|
+
Max: 5
|
93
|
+
|
94
|
+
# Offense count: 4
|
95
|
+
RSpec/RepeatedExampleGroupDescription:
|
96
|
+
Exclude:
|
97
|
+
- 'spec/integration/commandline_spec.rb'
|
98
|
+
- 'spec/masking/cli_spec.rb'
|
99
|
+
|
100
|
+
# Offense count: 3
|
101
|
+
RSpec/StubbedMock:
|
102
|
+
Exclude:
|
103
|
+
- 'spec/masking/cli_spec.rb'
|
104
|
+
- 'spec/masking/config/target_columns/method_spec.rb'
|
105
|
+
- 'spec/masking/sql_dump_line_spec.rb'
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.1
|
1
|
+
3.2.1
|
data/CHANGELOG.md
CHANGED
@@ -7,12 +7,22 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
7
7
|
|
8
8
|
## [Unreleased]
|
9
9
|
|
10
|
+
## [v1.1.1] - 2023-04-03
|
11
|
+
|
12
|
+
### Added
|
13
|
+
|
14
|
+
- add ignore NULL option [#66](https://github.com/kibitan/masking/pull/66) requested feature by [#59](https://github.com/kibitan/masking/pull/59) from @spyro2000
|
15
|
+
- add MariaDB 10.5, 10.6, 10.7, 10.8, 10.9, 10.10, 10.11 support [#65](https://github.com/kibitan/masking/pull/65)
|
16
|
+
- add Ruby 3.2 support [#64](https://github.com/kibitan/masking/pull/64)
|
17
|
+
- update development libraries [#61](https://github.com/kibitan/masking/pull/61)
|
18
|
+
|
10
19
|
## [v1.1.0] - 2023-02-25 Happy #ruby30th Birthday🎉
|
11
20
|
|
12
21
|
### Added
|
13
22
|
|
14
23
|
- add Ruby 3.0 support [#55](https://github.com/kibitan/masking/pull/55)
|
15
24
|
- add Ruby 3.1 support [#60](https://github.com/kibitan/masking/pull/60)
|
25
|
+
- drop Ruby 2.5 support [#60](https://github.com/kibitan/masking/pull/60)
|
16
26
|
|
17
27
|
### Security
|
18
28
|
|
data/Dockerfile
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
ARG ruby_version=2
|
1
|
+
ARG ruby_version=3.2
|
2
2
|
|
3
3
|
FROM ruby:$ruby_version-alpine AS builder
|
4
4
|
RUN apk add --no-cache build-base git
|
@@ -23,4 +23,6 @@ RUN chown app /app
|
|
23
23
|
USER app
|
24
24
|
COPY --from=builder /usr/local/bundle/ /usr/local/bundle/
|
25
25
|
COPY --chown=app . ./
|
26
|
+
# workaround: at some reason, ruby-prof is not recognized in Ruby 2.6 image https://app.circleci.com/pipelines/github/kibitan/masking/197/workflows/8cbdb843-a42f-413a-ab2f-9c5f74397d43/jobs/512
|
27
|
+
RUN bundle
|
26
28
|
ENTRYPOINT ["bundle", "exec", "exe/masking"]
|
data/Gemfile
CHANGED
@@ -4,5 +4,25 @@ source 'https://rubygems.org'
|
|
4
4
|
|
5
5
|
git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
|
6
6
|
|
7
|
+
gem 'bundler'
|
8
|
+
gem 'rake'
|
9
|
+
gem 'rake-notes'
|
10
|
+
gem 'ruby-prof'
|
11
|
+
|
12
|
+
# linter/static analyzer
|
13
|
+
gem 'mdl'
|
14
|
+
gem 'rubocop'
|
15
|
+
gem 'rubocop-rspec'
|
16
|
+
|
17
|
+
# test
|
18
|
+
gem 'codecov'
|
19
|
+
gem 'rspec'
|
20
|
+
gem 'simplecov'
|
21
|
+
|
22
|
+
# debug
|
23
|
+
gem 'pry'
|
24
|
+
gem 'pry-byebug'
|
25
|
+
gem 'tapp'
|
26
|
+
|
7
27
|
# Specify your gem's dependencies in masking.gemspec
|
8
28
|
gemspec
|
data/Gemfile.lock
CHANGED
@@ -1,83 +1,98 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
masking (1.1.
|
4
|
+
masking (1.1.1)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
8
8
|
specs:
|
9
|
-
ast (2.4.
|
10
|
-
byebug (11.
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
9
|
+
ast (2.4.2)
|
10
|
+
byebug (11.1.3)
|
11
|
+
chef-utils (18.1.0)
|
12
|
+
concurrent-ruby
|
13
|
+
codecov (0.6.0)
|
14
|
+
simplecov (>= 0.15, < 0.22)
|
15
|
+
coderay (1.1.3)
|
15
16
|
colored (1.2)
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
json (2.3
|
20
|
-
kramdown (2.
|
17
|
+
concurrent-ruby (1.2.2)
|
18
|
+
diff-lcs (1.5.0)
|
19
|
+
docile (1.4.0)
|
20
|
+
json (2.6.3)
|
21
|
+
kramdown (2.4.0)
|
21
22
|
rexml
|
22
23
|
kramdown-parser-gfm (1.1.0)
|
23
24
|
kramdown (~> 2.0)
|
24
|
-
mdl (0.
|
25
|
-
kramdown (~> 2.
|
26
|
-
kramdown-parser-gfm (~> 1.
|
25
|
+
mdl (0.12.0)
|
26
|
+
kramdown (~> 2.3)
|
27
|
+
kramdown-parser-gfm (~> 1.1)
|
27
28
|
mixlib-cli (~> 2.1, >= 2.1.1)
|
28
29
|
mixlib-config (>= 2.2.1, < 4)
|
29
|
-
|
30
|
-
|
31
|
-
mixlib-
|
30
|
+
mixlib-shellout
|
31
|
+
method_source (1.0.0)
|
32
|
+
mixlib-cli (2.1.8)
|
33
|
+
mixlib-config (3.0.27)
|
32
34
|
tomlrb
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
35
|
+
mixlib-shellout (3.2.7)
|
36
|
+
chef-utils
|
37
|
+
parallel (1.22.1)
|
38
|
+
parser (3.2.1.0)
|
39
|
+
ast (~> 2.4.1)
|
40
|
+
pry (0.14.2)
|
41
|
+
coderay (~> 1.1)
|
42
|
+
method_source (~> 1.0)
|
43
|
+
pry-byebug (3.10.1)
|
40
44
|
byebug (~> 11.0)
|
41
|
-
pry (
|
42
|
-
rainbow (3.
|
43
|
-
rake (13.0.
|
45
|
+
pry (>= 0.13, < 0.15)
|
46
|
+
rainbow (3.1.1)
|
47
|
+
rake (13.0.6)
|
44
48
|
rake-notes (0.2.2)
|
45
49
|
colored
|
46
50
|
rake
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
rspec-
|
51
|
-
rspec-
|
52
|
-
|
53
|
-
|
54
|
-
|
51
|
+
regexp_parser (2.7.0)
|
52
|
+
rexml (3.2.5)
|
53
|
+
rspec (3.12.0)
|
54
|
+
rspec-core (~> 3.12.0)
|
55
|
+
rspec-expectations (~> 3.12.0)
|
56
|
+
rspec-mocks (~> 3.12.0)
|
57
|
+
rspec-core (3.12.1)
|
58
|
+
rspec-support (~> 3.12.0)
|
59
|
+
rspec-expectations (3.12.2)
|
55
60
|
diff-lcs (>= 1.2.0, < 2.0)
|
56
|
-
rspec-support (~> 3.
|
57
|
-
rspec-mocks (3.
|
61
|
+
rspec-support (~> 3.12.0)
|
62
|
+
rspec-mocks (3.12.3)
|
58
63
|
diff-lcs (>= 1.2.0, < 2.0)
|
59
|
-
rspec-support (~> 3.
|
60
|
-
rspec-support (3.
|
61
|
-
rubocop (
|
62
|
-
|
64
|
+
rspec-support (~> 3.12.0)
|
65
|
+
rspec-support (3.12.0)
|
66
|
+
rubocop (1.46.0)
|
67
|
+
json (~> 2.3)
|
63
68
|
parallel (~> 1.10)
|
64
|
-
parser (>= 2.
|
69
|
+
parser (>= 3.2.0.0)
|
65
70
|
rainbow (>= 2.2.2, < 4.0)
|
71
|
+
regexp_parser (>= 1.8, < 3.0)
|
72
|
+
rexml (>= 3.2.5, < 4.0)
|
73
|
+
rubocop-ast (>= 1.26.0, < 2.0)
|
66
74
|
ruby-progressbar (~> 1.7)
|
67
|
-
unicode-display_width (>=
|
68
|
-
|
69
|
-
|
70
|
-
|
75
|
+
unicode-display_width (>= 2.4.0, < 3.0)
|
76
|
+
rubocop-ast (1.26.0)
|
77
|
+
parser (>= 3.2.1.0)
|
78
|
+
rubocop-capybara (2.17.1)
|
79
|
+
rubocop (~> 1.41)
|
80
|
+
rubocop-rspec (2.18.1)
|
81
|
+
rubocop (~> 1.33)
|
82
|
+
rubocop-capybara (~> 2.17)
|
83
|
+
ruby-prof (1.6.1)
|
84
|
+
ruby-progressbar (1.11.0)
|
85
|
+
simplecov (0.21.2)
|
71
86
|
docile (~> 1.1)
|
72
87
|
simplecov-html (~> 0.11)
|
73
88
|
simplecov_json_formatter (~> 0.1)
|
74
89
|
simplecov-html (0.12.3)
|
75
|
-
simplecov_json_formatter (0.1.
|
90
|
+
simplecov_json_formatter (0.1.4)
|
76
91
|
tapp (1.5.1)
|
77
92
|
thor
|
78
|
-
thor (1.
|
79
|
-
tomlrb (
|
80
|
-
unicode-display_width (
|
93
|
+
thor (1.2.1)
|
94
|
+
tomlrb (2.0.3)
|
95
|
+
unicode-display_width (2.4.2)
|
81
96
|
|
82
97
|
PLATFORMS
|
83
98
|
ruby
|
@@ -93,6 +108,7 @@ DEPENDENCIES
|
|
93
108
|
rake-notes
|
94
109
|
rspec
|
95
110
|
rubocop
|
111
|
+
rubocop-rspec
|
96
112
|
ruby-prof
|
97
113
|
simplecov
|
98
114
|
tapp
|
data/README.md
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
# MasKING🤴
|
2
2
|
|
3
|
-
[](https://circleci.com/gh/kibitan/masking/tree/main)
|
4
|
+
[](https://github.com/kibitan/masking/actions?query=workflow%3A%22Acceptance+Test+MySQL%22+branch%3Amain)
|
5
|
+
[](https://github.com/kibitan/masking/actions?query=workflow%3A%22Acceptance+Test+MariaDB%22+branch%3Amain)
|
6
6
|
|
7
|
-
[](https://codecov.io/gh/kibitan/masking)
|
8
8
|
[](https://codeclimate.com/github/kibitan/masking/maintainability)
|
9
9
|
[](https://badge.fury.io/rb/masking)
|
10
10
|
|
@@ -18,12 +18,12 @@ gem install masking
|
|
18
18
|
|
19
19
|
## Requirement
|
20
20
|
|
21
|
-
* Ruby 2.6/2.7/3.0/3.1
|
21
|
+
* Ruby 2.6/2.7/3.0/3.1/3.2
|
22
22
|
|
23
|
-
##
|
23
|
+
## Supporting RDBMS
|
24
24
|
|
25
25
|
* MySQL: 5.5<sup>[1](#footnote1)</sup>, 5.6, 5.7, 8.0
|
26
|
-
* MariaDB: 5.5, 10.0<sup>[2](#footnote2)</sup>, 10.1, 10.2, 10.3, 10.4
|
26
|
+
* MariaDB: 5.5, 10.0<sup>[2](#footnote2)</sup>, 10.1, 10.2, 10.3, 10.4, 10.5, 10.6, 10.7, 10.8, 10.9, 10.10, 10.11
|
27
27
|
|
28
28
|
## Usage
|
29
29
|
|
@@ -47,6 +47,9 @@ gem install masking
|
|
47
47
|
OTk6enp56enmlpaWNjY6Ojo4SEhP/++f/++f/++f/++f/++f/++f/++f/++f/+
|
48
48
|
+f/++f/++f/++f/++f/++SH+Dk1hZGUgd2l0aCBHSU1QACwAAAAADAAMAAAFLC
|
49
49
|
AgjoEwnuNAFOhpEMTRiggcz4BNJHrv/zCFcLiwMWYNG84BwwEeECcgggoBADs=
|
50
|
+
# When a column name is suffixed with `?`, the original NULL value will not be anonymized.
|
51
|
+
# This option can be beneficial for simulating SQL execution that closely resembles the original data.
|
52
|
+
nullable_string?: anonymized nullable %{n} string
|
50
53
|
```
|
51
54
|
|
52
55
|
A value will be implicitly converted to a compatible type. If you prefer to explicitly convert, you could use a tag as defined in [YAML Version 1.1](http://yaml.org/spec/current.html#id2503753)
|
@@ -160,6 +163,13 @@ The docker-compose file names for other database versions, specify that file.
|
|
160
163
|
* MySQL 5.7: [`docker-compose/mysql57.yml`](./docker-compose/mysql57.yml)
|
161
164
|
* MySQL 5.6: [`docker-compose/mysql56.yml`](./docker-compose/mysql56.yml)
|
162
165
|
* MySQL 5.5<sup>[1](#footnote1)</sup>: [`docker-compose/mysql55.yml`](./docker-compose/mysql55.yml)
|
166
|
+
* MariaDB 10.11: [`docker-compose/mariadb1011.yml`](./docker-compose/mariadb1011.yml)
|
167
|
+
* MariaDB 10.10: [`docker-compose/mariadb1010.yml`](./docker-compose/mariadb1010.yml)
|
168
|
+
* MariaDB 10.9: [`docker-compose/mariadb109.yml`](./docker-compose/mariadb109.yml)
|
169
|
+
* MariaDB 10.8: [`docker-compose/mariadb108.yml`](./docker-compose/mariadb108.yml)
|
170
|
+
* MariaDB 10.7: [`docker-compose/mariadb107.yml`](./docker-compose/mariadb107.yml)
|
171
|
+
* MariaDB 10.6: [`docker-compose/mariadb106.yml`](./docker-compose/mariadb106.yml)
|
172
|
+
* MariaDB 10.5: [`docker-compose/mariadb105.yml`](./docker-compose/mariadb105.yml)
|
163
173
|
* MariaDB 10.4: [`docker-compose/mariadb104.yml`](./docker-compose/mariadb104.yml)
|
164
174
|
* MariaDB 10.3: [`docker-compose/mariadb103.yml`](./docker-compose/mariadb103.yml)
|
165
175
|
* MariaDB 10.2: [`docker-compose/mariadb102.yml`](./docker-compose/mariadb102.yml)
|
@@ -238,7 +248,7 @@ The gem is available as open source under the terms of the [MIT License](https:/
|
|
238
248
|
|
239
249
|
## Code of Conduct
|
240
250
|
|
241
|
-
Everyone interacting in the Masking project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/kibitan/masking/blob/
|
251
|
+
Everyone interacting in the Masking project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/kibitan/masking/blob/main/CODE_OF_CONDUCT.md).
|
242
252
|
|
243
253
|
<a name="footnote1">1</a>: <small> MySQL 5.5 is already not supported by [official](https://www.mysql.com/support/supportedplatforms/database.html)</small>
|
244
254
|
|
@@ -1,33 +1,39 @@
|
|
1
1
|
*************************** 1. row ***************************
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
binary_or_blob: \x92
|
2
|
+
id: 1
|
3
|
+
string: anonymized string
|
4
|
+
email: anonymized+1@example.com
|
5
|
+
integer: 12345
|
6
|
+
float: 123.45
|
7
|
+
boolean: 1
|
8
|
+
null: NULL
|
9
|
+
date: 2018-08-24
|
10
|
+
time: 2018-08-24 15:54:06
|
11
|
+
binary_or_blob: \x92
|
12
|
+
nullable_string: string1
|
13
|
+
nullable_integer: NULL
|
12
14
|
*************************** 2. row ***************************
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
binary_or_blob: \x92\x92
|
15
|
+
id: 2
|
16
|
+
string: anonymized string
|
17
|
+
email: anonymized+2@example.com
|
18
|
+
integer: 12345
|
19
|
+
float: 123.45
|
20
|
+
boolean: 1
|
21
|
+
null: NULL
|
22
|
+
date: 2018-08-24
|
23
|
+
time: 2018-08-24 15:54:06
|
24
|
+
binary_or_blob: \x92\x92
|
25
|
+
nullable_string: NULL
|
26
|
+
nullable_integer: 33333
|
23
27
|
*************************** 3. row ***************************
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
binary_or_blob: NULL
|
28
|
+
id: 3
|
29
|
+
string: anonymized string
|
30
|
+
email: anonymized+3@example.com
|
31
|
+
integer: 12345
|
32
|
+
float: 123.45
|
33
|
+
boolean: 1
|
34
|
+
null: NULL
|
35
|
+
date: 2018-08-24
|
36
|
+
time: 2018-08-24 15:54:06
|
37
|
+
binary_or_blob: NULL
|
38
|
+
nullable_string: string3
|
39
|
+
nullable_integer: 33333
|
@@ -33,6 +33,8 @@ CREATE TABLE `users` (
|
|
33
33
|
`date` date DEFAULT NULL,
|
34
34
|
`time` timestamp NULL DEFAULT NULL,
|
35
35
|
`binary_or_blob` binary(11) DEFAULT NULL,
|
36
|
+
`nullable_string` varchar(20) DEFAULT '',
|
37
|
+
`nullable_integer` int(11) DEFAULT NULL,
|
36
38
|
PRIMARY KEY (`id`)
|
37
39
|
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
|
38
40
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
@@ -43,7 +45,7 @@ CREATE TABLE `users` (
|
|
43
45
|
|
44
46
|
LOCK TABLES `users` WRITE;
|
45
47
|
/*!40000 ALTER TABLE `users` DISABLE KEYS */;
|
46
|
-
INSERT INTO `users` (`id`, `string`, `email`, `integer`, `float`, `boolean`, `null`, `date`, `time`, `binary_or_blob`) VALUES (1,'example@exa','test@example.com',1245,2.1,1,-321,NULL,NULL,_binary '\\x92\0\0\0\0\0\0\0'),(2,'あいうえお','invalid@email',0,-23.4422,0,321,NULL,NULL,_binary '\\x92\\x92\0\0\0'),(3,'+-l;a*&^%$','chikahiro@test.com',-1,21.2321,NULL,-231321,'2019-10-31','2019-10-31 16:27:21',NULL);
|
48
|
+
INSERT INTO `users` (`id`, `string`, `email`, `integer`, `float`, `boolean`, `null`, `date`, `time`, `binary_or_blob`, `nullable_string`, `nullable_integer`) VALUES (1,'example@exa','test@example.com',1245,2.1,1,-321,NULL,NULL,_binary '\\x92\0\0\0\0\0\0\0','abcde',NULL),(2,'あいうえお','invalid@email',0,-23.4422,0,321,NULL,NULL,_binary '\\x92\\x92\0\0\0',NULL,12),(3,'+-l;a*&^%$','chikahiro@test.com',-1,21.2321,NULL,-231321,'2019-10-31','2019-10-31 16:27:21',NULL,'abc123',-123);
|
47
49
|
/*!40000 ALTER TABLE `users` ENABLE KEYS */;
|
48
50
|
UNLOCK TABLES;
|
49
51
|
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
|
data/acceptance/masking.yml
CHANGED
@@ -7,6 +7,8 @@ users:
|
|
7
7
|
'null': NULL
|
8
8
|
date: 2018-08-24
|
9
9
|
time: 2018-08-24 15:54:06
|
10
|
+
nullable_string?: string%{n}
|
11
|
+
nullable_integer?: 33333
|
10
12
|
## TODO: something not working well with binary...
|
11
13
|
# binary_or_blob: !binary |
|
12
14
|
# R0lGODlhDAAMAIQAAP//9/X17unp5WZmZgAAAOfn515eXvPz7Y6OjuDg4J+fn5
|
data/acceptance/run_test.sh
CHANGED
@@ -22,4 +22,4 @@ mysql -h "$MYSQL_HOST" -u "$MYSQL_USER" -p"$MYSQL_PASSWORD" "$MYSQL_DBNAME" < "$
|
|
22
22
|
|
23
23
|
## compare
|
24
24
|
mysql -h "$MYSQL_HOST" -u "$MYSQL_USER" -p"$MYSQL_PASSWORD" "$MYSQL_DBNAME" -e 'SELECT * FROM users ORDER BY id;' --vertical > "$FILEDIR/tmp/query_result.txt"
|
25
|
-
diff "$FILEDIR/
|
25
|
+
diff "$FILEDIR/expected_query_result.txt" "$FILEDIR/tmp/query_result.txt" && echo 'test passed!'
|
@@ -0,0 +1,17 @@
|
|
1
|
+
version: '3.7'
|
2
|
+
|
3
|
+
services:
|
4
|
+
app:
|
5
|
+
build:
|
6
|
+
target: with-mysql-client
|
7
|
+
depends_on:
|
8
|
+
- mariadb1010
|
9
|
+
entrypoint: docker-compose/wait-for-mysql.sh mariadb1010
|
10
|
+
|
11
|
+
mariadb1010:
|
12
|
+
image: mariadb:10.10
|
13
|
+
environment:
|
14
|
+
MYSQL_RANDOM_ROOT_PASSWORD: 'yes'
|
15
|
+
MYSQL_USER: mysqluser
|
16
|
+
MYSQL_PASSWORD: password
|
17
|
+
MYSQL_DATABASE: mydb
|