phi_attrs 0.1.2 → 0.2.2
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 +5 -5
- data/.github/workflows/build.yml +25 -0
- data/.github/workflows/publish.yml +28 -0
- data/.gitignore +5 -0
- data/.rubocop.yml +91 -0
- data/Appraisals +15 -3
- data/CHANGELOG.md +17 -0
- data/DISCLAIMER.txt +15 -0
- data/Dockerfile +1 -1
- data/Gemfile +2 -0
- data/LICENSE.txt +1 -1
- data/README.md +409 -11
- data/Rakefile +13 -0
- data/bin/console +6 -0
- data/bin/helpers/docker +12 -0
- data/bin/rubo_fix +6 -0
- data/bin/run_tests +19 -0
- data/bin/setup +2 -0
- data/bin/ssh_to_container +0 -0
- data/config.ru +2 -2
- data/docker-compose.yml +2 -0
- data/docker/start.sh +0 -0
- data/gemfiles/rails_5.1.gemfile +8 -0
- data/gemfiles/{rails_5.0.gemfile → rails_5.2.gemfile} +2 -2
- data/gemfiles/rails_6.0.gemfile +8 -0
- data/lib/phi_attrs.rb +26 -15
- data/lib/phi_attrs/configure.rb +29 -11
- data/lib/phi_attrs/exceptions.rb +5 -1
- data/lib/phi_attrs/formatter.rb +5 -3
- data/lib/phi_attrs/logger.rb +13 -1
- data/lib/phi_attrs/phi_record.rb +635 -48
- data/lib/phi_attrs/railtie.rb +5 -2
- data/lib/phi_attrs/rspec.rb +43 -0
- data/lib/phi_attrs/version.rb +3 -1
- data/phi_attrs.gemspec +17 -5
- metadata +94 -26
- data/.travis.yml +0 -5
data/lib/phi_attrs/railtie.rb
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'phi_attrs'
|
|
2
4
|
require 'rails'
|
|
3
5
|
|
|
4
6
|
module PhiAttrs
|
|
5
7
|
class Railtie < Rails::Railtie
|
|
6
|
-
initializer 'phi_attrs.initialize' do
|
|
8
|
+
initializer 'phi_attrs.initialize' do |_app|
|
|
7
9
|
ActiveSupport.on_load(:active_record) do
|
|
8
|
-
ActiveRecord::Base.send :extend, PhiAttrs
|
|
10
|
+
ActiveRecord::Base.send :extend, PhiAttrs::Model
|
|
11
|
+
ActionController::Base.send :include, PhiAttrs::Controller
|
|
9
12
|
end
|
|
10
13
|
end
|
|
11
14
|
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
require 'rspec/expectations'
|
|
2
|
+
|
|
3
|
+
DO_NOT_SPECIFY = "do not specify `allowed_by` or `with_access_reason` for negated `allow_phi_access`"
|
|
4
|
+
|
|
5
|
+
RSpec::Matchers.define :allow_phi_access do
|
|
6
|
+
match do |result|
|
|
7
|
+
@allowed = result.phi_allowed?
|
|
8
|
+
@user_id_matches = @user_id.nil? || @user_id == result.phi_allowed_by
|
|
9
|
+
@reason_matches = @reason.nil? || @reason == result.phi_access_reason
|
|
10
|
+
|
|
11
|
+
@allowed && @user_id_matches && @reason_matches
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
match_when_negated do |result|
|
|
15
|
+
raise ArgumentError, DO_NOT_SPECIFY unless @user_id.nil? && @reason.nil?
|
|
16
|
+
|
|
17
|
+
!result.phi_allowed?
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
chain :allowed_by do |user_id|
|
|
21
|
+
@user_id = user_id
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
chain :with_access_reason do |reason|
|
|
25
|
+
@reason = reason
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# :nocov:
|
|
29
|
+
failure_message do |result|
|
|
30
|
+
msgs = []
|
|
31
|
+
|
|
32
|
+
msgs = ['PHI Access was not allowed.'] unless @allowed
|
|
33
|
+
msgs << "PHI Access was allowed by '#{result.phi_allowed_by}' (not '#{@user_id}')." unless @user_id_matches
|
|
34
|
+
msgs << "PHI Access was allowed because '#{result.phi_access_reason}' (not because '#{@reason}')." unless @reason_matches
|
|
35
|
+
|
|
36
|
+
msgs.join "\n"
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
failure_message_when_negated do |result|
|
|
40
|
+
"PHI access was allowed by '#{result.phi_allowed_by}', because '#{result.phi_access_reason}'"
|
|
41
|
+
end
|
|
42
|
+
# :nocov:
|
|
43
|
+
end
|
data/lib/phi_attrs/version.rb
CHANGED
data/phi_attrs.gemspec
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
|
|
2
3
|
lib = File.expand_path('lib', __dir__)
|
|
3
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
@@ -12,6 +13,13 @@ Gem::Specification.new do |spec|
|
|
|
12
13
|
spec.summary = 'PHI Access Restriction & Logging for Rails ActiveRecord'
|
|
13
14
|
spec.homepage = 'http://www.apsis.io'
|
|
14
15
|
spec.license = 'MIT'
|
|
16
|
+
spec.post_install_message = %q`
|
|
17
|
+
Thank you for installing phi_attrs! By installing this gem,
|
|
18
|
+
you acknowledge and agree to the disclaimer as provided in the
|
|
19
|
+
DISCLAIMER.txt file.
|
|
20
|
+
|
|
21
|
+
For full details, see: https://github.com/apsislabs/phi_attrs/blob/master/DISCLAIMER.txt
|
|
22
|
+
`
|
|
15
23
|
|
|
16
24
|
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
|
17
25
|
f.match(%r{^(test|spec|features)/})
|
|
@@ -23,13 +31,17 @@ Gem::Specification.new do |spec|
|
|
|
23
31
|
spec.add_runtime_dependency 'rails', '>= 4.2.0'
|
|
24
32
|
spec.add_runtime_dependency 'request_store', '~> 1.4'
|
|
25
33
|
|
|
26
|
-
spec.add_development_dependency 'appraisal'
|
|
27
|
-
spec.add_development_dependency 'bundler', '~>
|
|
34
|
+
spec.add_development_dependency 'appraisal'
|
|
35
|
+
spec.add_development_dependency 'bundler', '~> 2.0'
|
|
28
36
|
spec.add_development_dependency 'byebug'
|
|
29
|
-
spec.add_development_dependency '
|
|
30
|
-
spec.add_development_dependency '
|
|
37
|
+
spec.add_development_dependency 'chandler'
|
|
38
|
+
spec.add_development_dependency 'combustion'
|
|
39
|
+
spec.add_development_dependency 'factory_bot_rails'
|
|
40
|
+
spec.add_development_dependency 'faker'
|
|
41
|
+
spec.add_development_dependency 'rake'
|
|
31
42
|
spec.add_development_dependency 'rspec', '~> 3.7'
|
|
32
43
|
spec.add_development_dependency 'rspec-rails', '~> 3.7'
|
|
44
|
+
spec.add_development_dependency 'rubocop'
|
|
33
45
|
spec.add_development_dependency 'simplecov', '~> 0.16'
|
|
34
|
-
spec.add_development_dependency '
|
|
46
|
+
spec.add_development_dependency 'tzinfo-data'
|
|
35
47
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: phi_attrs
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Wyatt Kirby
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2020-11-20 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rails
|
|
@@ -42,30 +42,30 @@ dependencies:
|
|
|
42
42
|
name: appraisal
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
44
44
|
requirements:
|
|
45
|
-
- - "
|
|
45
|
+
- - ">="
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: '
|
|
47
|
+
version: '0'
|
|
48
48
|
type: :development
|
|
49
49
|
prerelease: false
|
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
51
|
requirements:
|
|
52
|
-
- - "
|
|
52
|
+
- - ">="
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: '
|
|
54
|
+
version: '0'
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
56
|
name: bundler
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
58
58
|
requirements:
|
|
59
59
|
- - "~>"
|
|
60
60
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: '
|
|
61
|
+
version: '2.0'
|
|
62
62
|
type: :development
|
|
63
63
|
prerelease: false
|
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
65
|
requirements:
|
|
66
66
|
- - "~>"
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
|
-
version: '
|
|
68
|
+
version: '2.0'
|
|
69
69
|
- !ruby/object:Gem::Dependency
|
|
70
70
|
name: byebug
|
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -80,34 +80,76 @@ dependencies:
|
|
|
80
80
|
- - ">="
|
|
81
81
|
- !ruby/object:Gem::Version
|
|
82
82
|
version: '0'
|
|
83
|
+
- !ruby/object:Gem::Dependency
|
|
84
|
+
name: chandler
|
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
|
86
|
+
requirements:
|
|
87
|
+
- - ">="
|
|
88
|
+
- !ruby/object:Gem::Version
|
|
89
|
+
version: '0'
|
|
90
|
+
type: :development
|
|
91
|
+
prerelease: false
|
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
+
requirements:
|
|
94
|
+
- - ">="
|
|
95
|
+
- !ruby/object:Gem::Version
|
|
96
|
+
version: '0'
|
|
83
97
|
- !ruby/object:Gem::Dependency
|
|
84
98
|
name: combustion
|
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
|
86
100
|
requirements:
|
|
87
|
-
- - "
|
|
101
|
+
- - ">="
|
|
88
102
|
- !ruby/object:Gem::Version
|
|
89
|
-
version: 0
|
|
103
|
+
version: '0'
|
|
90
104
|
type: :development
|
|
91
105
|
prerelease: false
|
|
92
106
|
version_requirements: !ruby/object:Gem::Requirement
|
|
93
107
|
requirements:
|
|
94
|
-
- - "
|
|
108
|
+
- - ">="
|
|
109
|
+
- !ruby/object:Gem::Version
|
|
110
|
+
version: '0'
|
|
111
|
+
- !ruby/object:Gem::Dependency
|
|
112
|
+
name: factory_bot_rails
|
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
|
114
|
+
requirements:
|
|
115
|
+
- - ">="
|
|
116
|
+
- !ruby/object:Gem::Version
|
|
117
|
+
version: '0'
|
|
118
|
+
type: :development
|
|
119
|
+
prerelease: false
|
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
121
|
+
requirements:
|
|
122
|
+
- - ">="
|
|
123
|
+
- !ruby/object:Gem::Version
|
|
124
|
+
version: '0'
|
|
125
|
+
- !ruby/object:Gem::Dependency
|
|
126
|
+
name: faker
|
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
|
128
|
+
requirements:
|
|
129
|
+
- - ">="
|
|
95
130
|
- !ruby/object:Gem::Version
|
|
96
|
-
version: 0
|
|
131
|
+
version: '0'
|
|
132
|
+
type: :development
|
|
133
|
+
prerelease: false
|
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
135
|
+
requirements:
|
|
136
|
+
- - ">="
|
|
137
|
+
- !ruby/object:Gem::Version
|
|
138
|
+
version: '0'
|
|
97
139
|
- !ruby/object:Gem::Dependency
|
|
98
140
|
name: rake
|
|
99
141
|
requirement: !ruby/object:Gem::Requirement
|
|
100
142
|
requirements:
|
|
101
|
-
- - "
|
|
143
|
+
- - ">="
|
|
102
144
|
- !ruby/object:Gem::Version
|
|
103
|
-
version: '
|
|
145
|
+
version: '0'
|
|
104
146
|
type: :development
|
|
105
147
|
prerelease: false
|
|
106
148
|
version_requirements: !ruby/object:Gem::Requirement
|
|
107
149
|
requirements:
|
|
108
|
-
- - "
|
|
150
|
+
- - ">="
|
|
109
151
|
- !ruby/object:Gem::Version
|
|
110
|
-
version: '
|
|
152
|
+
version: '0'
|
|
111
153
|
- !ruby/object:Gem::Dependency
|
|
112
154
|
name: rspec
|
|
113
155
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -136,6 +178,20 @@ dependencies:
|
|
|
136
178
|
- - "~>"
|
|
137
179
|
- !ruby/object:Gem::Version
|
|
138
180
|
version: '3.7'
|
|
181
|
+
- !ruby/object:Gem::Dependency
|
|
182
|
+
name: rubocop
|
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
|
184
|
+
requirements:
|
|
185
|
+
- - ">="
|
|
186
|
+
- !ruby/object:Gem::Version
|
|
187
|
+
version: '0'
|
|
188
|
+
type: :development
|
|
189
|
+
prerelease: false
|
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
191
|
+
requirements:
|
|
192
|
+
- - ">="
|
|
193
|
+
- !ruby/object:Gem::Version
|
|
194
|
+
version: '0'
|
|
139
195
|
- !ruby/object:Gem::Dependency
|
|
140
196
|
name: simplecov
|
|
141
197
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -151,19 +207,19 @@ dependencies:
|
|
|
151
207
|
- !ruby/object:Gem::Version
|
|
152
208
|
version: '0.16'
|
|
153
209
|
- !ruby/object:Gem::Dependency
|
|
154
|
-
name:
|
|
210
|
+
name: tzinfo-data
|
|
155
211
|
requirement: !ruby/object:Gem::Requirement
|
|
156
212
|
requirements:
|
|
157
|
-
- - "
|
|
213
|
+
- - ">="
|
|
158
214
|
- !ruby/object:Gem::Version
|
|
159
|
-
version: '
|
|
215
|
+
version: '0'
|
|
160
216
|
type: :development
|
|
161
217
|
prerelease: false
|
|
162
218
|
version_requirements: !ruby/object:Gem::Requirement
|
|
163
219
|
requirements:
|
|
164
|
-
- - "
|
|
220
|
+
- - ">="
|
|
165
221
|
- !ruby/object:Gem::Version
|
|
166
|
-
version: '
|
|
222
|
+
version: '0'
|
|
167
223
|
description:
|
|
168
224
|
email:
|
|
169
225
|
- wyatt@apsis.io
|
|
@@ -171,23 +227,32 @@ executables: []
|
|
|
171
227
|
extensions: []
|
|
172
228
|
extra_rdoc_files: []
|
|
173
229
|
files:
|
|
230
|
+
- ".github/workflows/build.yml"
|
|
231
|
+
- ".github/workflows/publish.yml"
|
|
174
232
|
- ".gitignore"
|
|
175
233
|
- ".rspec"
|
|
176
|
-
- ".
|
|
234
|
+
- ".rubocop.yml"
|
|
177
235
|
- Appraisals
|
|
236
|
+
- CHANGELOG.md
|
|
237
|
+
- DISCLAIMER.txt
|
|
178
238
|
- Dockerfile
|
|
179
239
|
- Gemfile
|
|
180
240
|
- LICENSE.txt
|
|
181
241
|
- README.md
|
|
182
242
|
- Rakefile
|
|
183
243
|
- bin/console
|
|
244
|
+
- bin/helpers/docker
|
|
245
|
+
- bin/rubo_fix
|
|
246
|
+
- bin/run_tests
|
|
184
247
|
- bin/setup
|
|
185
248
|
- bin/ssh_to_container
|
|
186
249
|
- config.ru
|
|
187
250
|
- docker-compose.yml
|
|
188
251
|
- docker/start.sh
|
|
189
252
|
- gemfiles/.bundle/config
|
|
190
|
-
- gemfiles/rails_5.
|
|
253
|
+
- gemfiles/rails_5.1.gemfile
|
|
254
|
+
- gemfiles/rails_5.2.gemfile
|
|
255
|
+
- gemfiles/rails_6.0.gemfile
|
|
191
256
|
- lib/phi_attrs.rb
|
|
192
257
|
- lib/phi_attrs/configure.rb
|
|
193
258
|
- lib/phi_attrs/exceptions.rb
|
|
@@ -195,13 +260,17 @@ files:
|
|
|
195
260
|
- lib/phi_attrs/logger.rb
|
|
196
261
|
- lib/phi_attrs/phi_record.rb
|
|
197
262
|
- lib/phi_attrs/railtie.rb
|
|
263
|
+
- lib/phi_attrs/rspec.rb
|
|
198
264
|
- lib/phi_attrs/version.rb
|
|
199
265
|
- phi_attrs.gemspec
|
|
200
266
|
homepage: http://www.apsis.io
|
|
201
267
|
licenses:
|
|
202
268
|
- MIT
|
|
203
269
|
metadata: {}
|
|
204
|
-
post_install_message:
|
|
270
|
+
post_install_message: "\n Thank you for installing phi_attrs! By installing this
|
|
271
|
+
gem,\n you acknowledge and agree to the disclaimer as provided in the\n DISCLAIMER.txt
|
|
272
|
+
file.\n\n For full details, see: https://github.com/apsislabs/phi_attrs/blob/master/DISCLAIMER.txt\n
|
|
273
|
+
\ "
|
|
205
274
|
rdoc_options: []
|
|
206
275
|
require_paths:
|
|
207
276
|
- lib
|
|
@@ -216,8 +285,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
216
285
|
- !ruby/object:Gem::Version
|
|
217
286
|
version: '0'
|
|
218
287
|
requirements: []
|
|
219
|
-
|
|
220
|
-
rubygems_version: 2.6.13
|
|
288
|
+
rubygems_version: 3.0.3
|
|
221
289
|
signing_key:
|
|
222
290
|
specification_version: 4
|
|
223
291
|
summary: PHI Access Restriction & Logging for Rails ActiveRecord
|