chamber 2.14.3 → 3.0.0rc1
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
- checksums.yaml.gz.sig +0 -0
- data/lib/chamber/adapters/cloud/heroku.rb +4 -4
- data/lib/chamber/binary/circle_ci.rb +8 -7
- data/lib/chamber/binary/heroku.rb +8 -7
- data/lib/chamber/binary/runner.rb +11 -10
- data/lib/chamber/binary/travis.rb +7 -3
- data/lib/chamber/commands/securable.rb +4 -1
- data/lib/chamber/context_resolver.rb +0 -1
- data/lib/chamber/encryption_methods/public_key.rb +1 -27
- data/lib/chamber/encryption_methods/ssl.rb +2 -28
- data/lib/chamber/file.rb +5 -28
- data/lib/chamber/file_set.rb +1 -7
- data/lib/chamber/filters/decryption_filter.rb +6 -6
- data/lib/chamber/filters/encryption_filter.rb +8 -5
- data/lib/chamber/filters/environment_filter.rb +11 -10
- data/lib/chamber/filters/failed_decryption_filter.rb +4 -1
- data/lib/chamber/filters/insecure_filter.rb +1 -2
- data/lib/chamber/filters/namespace_filter.rb +9 -5
- data/lib/chamber/filters/secure_filter.rb +5 -3
- data/lib/chamber/filters/translate_secure_keys_filter.rb +5 -3
- data/lib/chamber/instance.rb +7 -14
- data/lib/chamber/keys/base.rb +2 -2
- data/lib/chamber/refinements/array.rb +20 -0
- data/lib/chamber/refinements/deep_dup.rb +58 -0
- data/lib/chamber/refinements/enumerable.rb +20 -9
- data/lib/chamber/refinements/hash.rb +51 -0
- data/lib/chamber/rubinius_fix.rb +1 -1
- data/lib/chamber/settings.rb +24 -41
- data/lib/chamber/types/secured.rb +13 -13
- data/lib/chamber/version.rb +1 -1
- data/lib/chamber.rb +0 -11
- data.tar.gz.sig +4 -1
- metadata +24 -39
- metadata.gz.sig +0 -0
- data/lib/chamber/core_ext/hash.rb +0 -15
- data/lib/chamber/errors/non_conforming_key.rb +0 -8
@@ -1,10 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require '
|
3
|
+
require 'chamber/refinements/hash'
|
4
|
+
require 'chamber/refinements/deep_dup'
|
4
5
|
|
5
6
|
module Chamber
|
6
7
|
module Filters
|
7
8
|
class NamespaceFilter
|
9
|
+
using ::Chamber::Refinements::Hash
|
10
|
+
using ::Chamber::Refinements::DeepDup
|
11
|
+
|
8
12
|
def self.execute(**args)
|
9
13
|
new(**args).__send__(:execute)
|
10
14
|
end
|
@@ -13,7 +17,7 @@ class NamespaceFilter
|
|
13
17
|
:namespaces
|
14
18
|
|
15
19
|
def initialize(data:, namespaces:, **_args)
|
16
|
-
self.data =
|
20
|
+
self.data = data.deep_dup
|
17
21
|
self.namespaces = namespaces
|
18
22
|
end
|
19
23
|
|
@@ -21,11 +25,11 @@ class NamespaceFilter
|
|
21
25
|
|
22
26
|
def execute
|
23
27
|
if data_is_namespaced?
|
24
|
-
namespaces.each_with_object(
|
25
|
-
filtered_data.
|
28
|
+
namespaces.each_with_object({}) do |namespace, filtered_data|
|
29
|
+
filtered_data.deep_merge!(data[namespace]) if data[namespace]
|
26
30
|
end
|
27
31
|
else
|
28
|
-
|
32
|
+
data
|
29
33
|
end
|
30
34
|
end
|
31
35
|
|
@@ -1,10 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require '
|
3
|
+
require 'chamber/refinements/deep_dup'
|
4
4
|
|
5
5
|
module Chamber
|
6
6
|
module Filters
|
7
7
|
class SecureFilter
|
8
|
+
using ::Chamber::Refinements::DeepDup
|
9
|
+
|
8
10
|
def self.execute(**args)
|
9
11
|
new(**args).__send__(:execute)
|
10
12
|
end
|
@@ -13,14 +15,14 @@ class SecureFilter
|
|
13
15
|
:secure_key_token
|
14
16
|
|
15
17
|
def initialize(data:, secure_key_prefix:, **_args)
|
16
|
-
self.data =
|
18
|
+
self.data = data.deep_dup
|
17
19
|
self.secure_key_token = /\A#{Regexp.escape(secure_key_prefix)}/
|
18
20
|
end
|
19
21
|
|
20
22
|
protected
|
21
23
|
|
22
24
|
def execute(raw_data = data)
|
23
|
-
settings =
|
25
|
+
settings = {}
|
24
26
|
|
25
27
|
raw_data.each_pair do |key, value|
|
26
28
|
secure_value = if value.respond_to? :each_pair
|
@@ -1,10 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require '
|
3
|
+
require 'chamber/refinements/deep_dup'
|
4
4
|
|
5
5
|
module Chamber
|
6
6
|
module Filters
|
7
7
|
class TranslateSecureKeysFilter
|
8
|
+
using ::Chamber::Refinements::DeepDup
|
9
|
+
|
8
10
|
def self.execute(**args)
|
9
11
|
new(**args).__send__(:execute)
|
10
12
|
end
|
@@ -13,14 +15,14 @@ class TranslateSecureKeysFilter
|
|
13
15
|
:secure_key_token
|
14
16
|
|
15
17
|
def initialize(data:, secure_key_prefix:, **_args)
|
16
|
-
self.data = data.
|
18
|
+
self.data = data.deep_dup
|
17
19
|
self.secure_key_token = /\A#{Regexp.escape(secure_key_prefix)}/
|
18
20
|
end
|
19
21
|
|
20
22
|
protected
|
21
23
|
|
22
24
|
def execute(raw_data = data)
|
23
|
-
settings =
|
25
|
+
settings = {}
|
24
26
|
|
25
27
|
raw_data.each_pair do |key, value|
|
26
28
|
value = execute(value) if value.respond_to? :each_pair
|
data/lib/chamber/instance.rb
CHANGED
@@ -3,9 +3,12 @@
|
|
3
3
|
require 'chamber/configuration'
|
4
4
|
require 'chamber/file_set'
|
5
5
|
require 'chamber/settings'
|
6
|
+
require 'chamber/refinements/hash'
|
6
7
|
|
7
8
|
module Chamber
|
8
9
|
class Instance
|
10
|
+
using ::Chamber::Refinements::Hash
|
11
|
+
|
9
12
|
attr_accessor :configuration,
|
10
13
|
:files
|
11
14
|
|
@@ -63,11 +66,11 @@ class Instance
|
|
63
66
|
end
|
64
67
|
|
65
68
|
def encrypt(data, **args)
|
66
|
-
config = configuration.to_hash.
|
69
|
+
config = configuration.to_hash.deep_merge(**args)
|
67
70
|
|
68
71
|
Settings
|
69
72
|
.new(
|
70
|
-
**config.
|
73
|
+
**config.deep_merge(
|
71
74
|
settings: data,
|
72
75
|
pre_filters: [Filters::EncryptionFilter],
|
73
76
|
post_filters: [],
|
@@ -77,11 +80,11 @@ class Instance
|
|
77
80
|
end
|
78
81
|
|
79
82
|
def decrypt(data, **args)
|
80
|
-
config = configuration.to_hash.
|
83
|
+
config = configuration.to_hash.deep_merge(**args)
|
81
84
|
|
82
85
|
Settings
|
83
86
|
.new(
|
84
|
-
**config.
|
87
|
+
**config.deep_merge(
|
85
88
|
settings: data,
|
86
89
|
pre_filters: [Filters::NamespaceFilter],
|
87
90
|
post_filters: [
|
@@ -92,15 +95,5 @@ class Instance
|
|
92
95
|
)
|
93
96
|
.to_hash
|
94
97
|
end
|
95
|
-
|
96
|
-
def method_missing(name, *args)
|
97
|
-
return settings.public_send(name, *args) if settings.respond_to?(name)
|
98
|
-
|
99
|
-
super
|
100
|
-
end
|
101
|
-
|
102
|
-
def respond_to_missing?(name, include_private = false)
|
103
|
-
settings.respond_to?(name, include_private)
|
104
|
-
end
|
105
98
|
end
|
106
99
|
end
|
data/lib/chamber/keys/base.rb
CHANGED
@@ -39,13 +39,13 @@ class Base
|
|
39
39
|
namespaces.map { |n| namespace_to_key_path(n) }
|
40
40
|
end
|
41
41
|
|
42
|
-
# rubocop:disable Performance/ChainArrayAllocation
|
42
|
+
# rubocop:disable Performance/ChainArrayAllocation
|
43
43
|
def filenames=(other)
|
44
44
|
@filenames = Array(other)
|
45
45
|
.map { |o| Pathname.new(o) }
|
46
46
|
.compact
|
47
47
|
end
|
48
|
-
# rubocop:enable Performance/ChainArrayAllocation
|
48
|
+
# rubocop:enable Performance/ChainArrayAllocation
|
49
49
|
|
50
50
|
def namespaces=(other)
|
51
51
|
@namespaces = other + %w{signature}
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rspectacular'
|
4
|
+
require 'chamber/refinements/enumerable'
|
5
|
+
|
6
|
+
module Chamber
|
7
|
+
module Refinements
|
8
|
+
module Array
|
9
|
+
refine ::Array do
|
10
|
+
def deep_transform_keys(&block)
|
11
|
+
Refinements::Enumerable.deep_transform_keys(self, &block)
|
12
|
+
end
|
13
|
+
|
14
|
+
def deep_transform_values(&block)
|
15
|
+
Refinements::Enumerable.deep_transform_values(nil, self, &block)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Chamber
|
4
|
+
module Refinements
|
5
|
+
module DeepDup
|
6
|
+
refine ::Array do
|
7
|
+
unless method_defined?(:deep_dup)
|
8
|
+
def deep_dup
|
9
|
+
map do |i|
|
10
|
+
if i.respond_to?(:deep_dup)
|
11
|
+
i.deep_dup
|
12
|
+
else
|
13
|
+
begin
|
14
|
+
i.dup
|
15
|
+
rescue ::TypeError
|
16
|
+
# Hack for < Ruby 2.4 since FalseClass, TrueClass, Fixnum, etc can't be
|
17
|
+
# dupped
|
18
|
+
i
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
refine ::Object do
|
27
|
+
unless method_defined?(:deep_dup)
|
28
|
+
def deep_dup
|
29
|
+
begin
|
30
|
+
dup
|
31
|
+
rescue ::TypeError
|
32
|
+
# Hack for < Ruby 2.4 since FalseClass, TrueClass, Fixnum, etc can't be
|
33
|
+
# dupped
|
34
|
+
self
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
refine ::Hash do
|
41
|
+
unless method_defined?(:deep_dup)
|
42
|
+
def deep_dup
|
43
|
+
dup.tap do |hash|
|
44
|
+
each_pair do |key, value|
|
45
|
+
if key.frozen? && key.is_a?(::String)
|
46
|
+
hash[key] = value.deep_dup
|
47
|
+
else
|
48
|
+
hash.delete(key)
|
49
|
+
hash[key.deep_dup] = value.deep_dup
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -1,25 +1,36 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'chamber/errors/non_conforming_key'
|
4
|
-
|
5
3
|
module Chamber
|
6
4
|
module Refinements
|
7
5
|
class Enumerable
|
8
|
-
def self.
|
6
|
+
def self.deep_transform_keys(object, &block)
|
9
7
|
case object
|
10
8
|
when ::Hash
|
11
|
-
object.
|
12
|
-
|
13
|
-
warn "WARNING: Non-String settings keys are deprecated and will be removed in Chamber 3.0. You attempted to access the '#{key}' setting. See https://github.com/thekompanee/chamber/wiki/Upgrading-To-Chamber-3.0#all-settings-keys-are-now-stored-as-strings for full details. Called from: '#{caller.to_a.first}'" unless key == yield(key) # rubocop:disable Layout/LineLength
|
14
|
-
|
15
|
-
deep_validate_keys(value, &block)
|
9
|
+
object.each_with_object({}) do |(key, value), result|
|
10
|
+
result[yield(key)] = deep_transform_keys(value, &block)
|
16
11
|
end
|
17
12
|
when ::Array
|
18
|
-
object.map { |
|
13
|
+
object.map { |e| deep_transform_keys(e, &block) }
|
19
14
|
else
|
20
15
|
object
|
21
16
|
end
|
22
17
|
end
|
18
|
+
|
19
|
+
def self.deep_transform_values(key, value, &block)
|
20
|
+
case value
|
21
|
+
when ::Hash
|
22
|
+
value.each_with_object({}) do |(k, v), memo|
|
23
|
+
memo[k] = deep_transform_values(k, v, &block)
|
24
|
+
end
|
25
|
+
when ::Array
|
26
|
+
yield(
|
27
|
+
key,
|
28
|
+
value.map { |v| deep_transform_values(nil, v, &block) }
|
29
|
+
)
|
30
|
+
else
|
31
|
+
yield(key, value)
|
32
|
+
end
|
33
|
+
end
|
23
34
|
end
|
24
35
|
end
|
25
36
|
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rspectacular'
|
4
|
+
require 'chamber/refinements/hash'
|
5
|
+
require 'chamber/refinements/enumerable'
|
6
|
+
|
7
|
+
module Chamber
|
8
|
+
module Refinements
|
9
|
+
module Hash
|
10
|
+
refine ::Hash do
|
11
|
+
def deep_strip!
|
12
|
+
each do |key, value|
|
13
|
+
if value.respond_to?(:strip)
|
14
|
+
self[key] = value.strip
|
15
|
+
elsif value.respond_to?(:deep_strip!)
|
16
|
+
self[key] = value.deep_strip!
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def deep_transform_keys(&block)
|
22
|
+
Refinements::Enumerable.deep_transform_keys(self, &block)
|
23
|
+
end
|
24
|
+
|
25
|
+
def deep_transform_values(&block)
|
26
|
+
Refinements::Enumerable.deep_transform_values(nil, self, &block)
|
27
|
+
end
|
28
|
+
|
29
|
+
unless method_defined?(:deep_merge)
|
30
|
+
def deep_merge(other, &block)
|
31
|
+
dup.deep_merge!(other, &block)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
unless method_defined?(:deep_merge!)
|
36
|
+
def deep_merge!(other, &block)
|
37
|
+
merge!(other) do |key, value_1, value_2|
|
38
|
+
if value_1.is_a?(::Hash) && value_2.is_a?(::Hash)
|
39
|
+
value_1.deep_merge(value_2, &block)
|
40
|
+
elsif block
|
41
|
+
yield(key, value_1, value_2)
|
42
|
+
else
|
43
|
+
value_2
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
data/lib/chamber/rubinius_fix.rb
CHANGED
data/lib/chamber/settings.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'hashie/mash'
|
4
3
|
require 'chamber/namespace_set'
|
5
4
|
require 'chamber/filters/namespace_filter'
|
6
5
|
require 'chamber/filters/encryption_filter'
|
@@ -10,19 +9,24 @@ require 'chamber/filters/secure_filter'
|
|
10
9
|
require 'chamber/filters/translate_secure_keys_filter'
|
11
10
|
require 'chamber/filters/insecure_filter'
|
12
11
|
require 'chamber/filters/failed_decryption_filter'
|
13
|
-
require 'chamber/refinements/
|
12
|
+
require 'chamber/refinements/deep_dup'
|
13
|
+
require 'chamber/refinements/hash'
|
14
14
|
|
15
15
|
###
|
16
16
|
# Internal: Represents the base settings storage needed for Chamber.
|
17
17
|
#
|
18
18
|
module Chamber
|
19
19
|
class Settings
|
20
|
+
using ::Chamber::Refinements::Hash
|
21
|
+
using ::Chamber::Refinements::DeepDup
|
22
|
+
|
20
23
|
attr_accessor :decryption_keys,
|
21
24
|
:encryption_keys,
|
22
25
|
:post_filters,
|
23
26
|
:pre_filters,
|
24
27
|
:secure_key_prefix
|
25
28
|
attr_reader :namespaces
|
29
|
+
attr_writer :raw_data
|
26
30
|
|
27
31
|
# rubocop:disable Metrics/ParameterLists
|
28
32
|
def initialize(
|
@@ -42,15 +46,12 @@ class Settings
|
|
42
46
|
settings: {},
|
43
47
|
**_args
|
44
48
|
)
|
45
|
-
|
46
|
-
::Chamber::Refinements::Enumerable.deep_validate_keys(settings, &:to_s)
|
47
|
-
|
48
49
|
self.decryption_keys = decryption_keys
|
49
50
|
self.encryption_keys = encryption_keys
|
50
51
|
self.namespaces = namespaces
|
51
52
|
self.post_filters = post_filters
|
52
53
|
self.pre_filters = pre_filters
|
53
|
-
self.raw_data = settings
|
54
|
+
self.raw_data = settings.deep_dup
|
54
55
|
self.secure_key_prefix = secure_key_prefix
|
55
56
|
end
|
56
57
|
# rubocop:enable Metrics/ParameterLists
|
@@ -113,7 +114,7 @@ class Settings
|
|
113
114
|
# Returns a Hash
|
114
115
|
#
|
115
116
|
def to_hash
|
116
|
-
data.
|
117
|
+
data.dup
|
117
118
|
end
|
118
119
|
|
119
120
|
###
|
@@ -146,11 +147,11 @@ class Settings
|
|
146
147
|
flattened_name_hash = {}
|
147
148
|
|
148
149
|
hash.each_pair do |key, value|
|
149
|
-
flattened_name_components = parent_keys.
|
150
|
+
flattened_name_components = parent_keys.deep_dup.push(key)
|
150
151
|
|
151
152
|
if value.respond_to?(:each_pair)
|
152
|
-
flattened_name_hash
|
153
|
-
|
153
|
+
flattened_name_hash
|
154
|
+
.deep_merge!(to_flattened_name_hash(value, flattened_name_components))
|
154
155
|
else
|
155
156
|
flattened_name_hash[flattened_name_components] = value
|
156
157
|
end
|
@@ -196,7 +197,7 @@ class Settings
|
|
196
197
|
other_settings = case other
|
197
198
|
when Settings
|
198
199
|
other
|
199
|
-
when Hash
|
200
|
+
when ::Hash
|
200
201
|
Settings.new(settings: other)
|
201
202
|
end
|
202
203
|
|
@@ -205,7 +206,7 @@ class Settings
|
|
205
206
|
encryption_keys: encryption_keys.any? ? encryption_keys : other_settings.encryption_keys,
|
206
207
|
decryption_keys: decryption_keys.any? ? decryption_keys : other_settings.decryption_keys,
|
207
208
|
namespaces: (namespaces + other_settings.namespaces),
|
208
|
-
settings: raw_data.
|
209
|
+
settings: raw_data.deep_merge(other_settings.raw_data),
|
209
210
|
)
|
210
211
|
# rubocop:enable Layout/LineLength
|
211
212
|
end
|
@@ -232,10 +233,10 @@ class Settings
|
|
232
233
|
end
|
233
234
|
|
234
235
|
def [](key)
|
235
|
-
warn "WARNING: Bracket access will require strings instead of symbols in Chamber 3.0. You attempted to access the '#{key}' setting. See https://github.com/thekompanee/chamber/wiki/Upgrading-To-Chamber-3.0#removal-of-bracket-indifferent-access for full details.
|
236
|
-
warn "WARNING: Accessing a non-existent key ('#{key}') with brackets will fail in Chamber 3.0. See https://github.com/thekompanee/chamber/wiki/Upgrading-To-Chamber-3.0#bracket-access-now-fails-on-non-existent-keys for full details.
|
236
|
+
warn "WARNING: Bracket access will require strings instead of symbols in Chamber 3.0. You attempted to access the '#{key}' setting. See https://github.com/thekompanee/chamber/wiki/Upgrading-To-Chamber-3.0#removal-of-bracket-indifferent-access for full details." if key.is_a?(::Symbol) # rubocop:disable Layout/LineLength
|
237
|
+
warn "WARNING: Accessing a non-existent key ('#{key}') with brackets will fail in Chamber 3.0. See https://github.com/thekompanee/chamber/wiki/Upgrading-To-Chamber-3.0#bracket-access-now-fails-on-non-existent-keys for full details." unless data.has_key?(key) # rubocop:disable Layout/LineLength
|
237
238
|
|
238
|
-
data.
|
239
|
+
data.fetch(key)
|
239
240
|
end
|
240
241
|
|
241
242
|
def dig!(*args)
|
@@ -253,14 +254,14 @@ class Settings
|
|
253
254
|
end
|
254
255
|
|
255
256
|
def securable
|
256
|
-
Settings.new(**metadata.
|
257
|
+
Settings.new(**metadata.deep_merge(
|
257
258
|
settings: raw_data,
|
258
259
|
pre_filters: [Filters::SecureFilter],
|
259
260
|
))
|
260
261
|
end
|
261
262
|
|
262
263
|
def secure
|
263
|
-
Settings.new(**metadata.
|
264
|
+
Settings.new(**metadata.deep_merge(
|
264
265
|
settings: raw_data,
|
265
266
|
pre_filters: [Filters::EncryptionFilter],
|
266
267
|
post_filters: [Filters::TranslateSecureKeysFilter],
|
@@ -268,34 +269,15 @@ class Settings
|
|
268
269
|
end
|
269
270
|
|
270
271
|
def insecure
|
271
|
-
Settings.new(**metadata.
|
272
|
+
Settings.new(**metadata.deep_merge(
|
272
273
|
settings: raw_data,
|
273
274
|
pre_filters: [Filters::InsecureFilter],
|
274
275
|
post_filters: [Filters::TranslateSecureKeysFilter],
|
275
276
|
))
|
276
277
|
end
|
277
278
|
|
278
|
-
def method_missing(name, *args)
|
279
|
-
if data.respond_to?(name)
|
280
|
-
warn "WARNING: Object notation access is deprecated and will be removed in Chamber 3.0. You attempted to access the '#{name}' setting. See https://github.com/thekompanee/chamber/wiki/Upgrading-To-Chamber-3.0#removal-of-object-notation-access for full details. Called from: '#{caller.to_a.first}'" # rubocop:disable Layout/LineLength
|
281
|
-
warn "WARNING: Predicate methods are deprecated and will be removed in Chamber 3.0. You attempted to access the '#{name}' setting. See https://github.com/thekompanee/chamber/wiki/Upgrading-To-Chamber-3.0#removal-of-predicate-accessors for full details. Called from: '#{caller.to_a.first}'" if name.to_s.end_with?('?') # rubocop:disable Layout/LineLength
|
282
|
-
|
283
|
-
data.public_send(name, *args)
|
284
|
-
else
|
285
|
-
super
|
286
|
-
end
|
287
|
-
end
|
288
|
-
|
289
|
-
def respond_to_missing?(name, include_private = false)
|
290
|
-
data.respond_to?(name, include_private)
|
291
|
-
end
|
292
|
-
|
293
279
|
protected
|
294
280
|
|
295
|
-
def raw_data=(new_raw_data)
|
296
|
-
@raw_data = Hashie::Mash.new(new_raw_data)
|
297
|
-
end
|
298
|
-
|
299
281
|
def namespaces=(raw_namespaces)
|
300
282
|
@namespaces = NamespaceSet.new(raw_namespaces)
|
301
283
|
end
|
@@ -303,15 +285,16 @@ class Settings
|
|
303
285
|
# rubocop:disable Naming/MemoizedInstanceVariableName
|
304
286
|
def raw_data
|
305
287
|
@filtered_raw_data ||= pre_filters.inject(@raw_data) do |filtered_data, filter|
|
306
|
-
filter.execute(**{ data: filtered_data }.
|
288
|
+
filter.execute(**{ data: filtered_data }.deep_merge(metadata))
|
307
289
|
end
|
308
290
|
end
|
309
291
|
# rubocop:enable Naming/MemoizedInstanceVariableName
|
310
292
|
|
311
293
|
def data
|
312
|
-
@data ||= post_filters
|
313
|
-
|
314
|
-
|
294
|
+
@data ||= post_filters
|
295
|
+
.inject(raw_data) do |filtered_data, filter|
|
296
|
+
filter.execute(**{ data: filtered_data }.deep_merge(metadata))
|
297
|
+
end
|
315
298
|
end
|
316
299
|
|
317
300
|
def metadata
|
@@ -37,14 +37,14 @@ class Secured < CHAMBER_TYPE_VALUE_SUPERCLASS
|
|
37
37
|
|
38
38
|
def cast(value)
|
39
39
|
case value
|
40
|
-
when Hash
|
40
|
+
when ::Hash
|
41
41
|
value
|
42
|
-
when String
|
43
|
-
::
|
44
|
-
when NilClass
|
42
|
+
when ::String
|
43
|
+
::JSON.parse(value)
|
44
|
+
when ::NilClass
|
45
45
|
nil
|
46
46
|
else
|
47
|
-
fail ArgumentError, 'Any attributes encrypted with Chamber must be either a Hash or a valid JSON string'
|
47
|
+
fail ::ArgumentError, 'Any attributes encrypted with Chamber must be either a Hash or a valid JSON string'
|
48
48
|
end
|
49
49
|
end
|
50
50
|
alias type_cast_from_user cast
|
@@ -54,19 +54,19 @@ class Secured < CHAMBER_TYPE_VALUE_SUPERCLASS
|
|
54
54
|
|
55
55
|
return if value.nil?
|
56
56
|
|
57
|
-
Chamber.decrypt(value,
|
58
|
-
|
59
|
-
|
57
|
+
::Chamber.decrypt(value,
|
58
|
+
decryption_keys: decryption_keys,
|
59
|
+
encryption_keys: encryption_keys)
|
60
60
|
end
|
61
61
|
alias type_cast_from_database deserialize
|
62
62
|
|
63
63
|
def serialize(value)
|
64
|
-
fail ArgumentError, 'Any attributes encrypted with Chamber must be a Hash' unless value.is_a?(Hash)
|
64
|
+
fail ::ArgumentError, 'Any attributes encrypted with Chamber must be a Hash' unless value.is_a?(::Hash)
|
65
65
|
|
66
|
-
::
|
67
|
-
Chamber.encrypt(value,
|
68
|
-
|
69
|
-
|
66
|
+
::JSON.dump(
|
67
|
+
::Chamber.encrypt(value,
|
68
|
+
decryption_keys: decryption_keys,
|
69
|
+
encryption_keys: encryption_keys),
|
70
70
|
)
|
71
71
|
end
|
72
72
|
alias type_cast_for_database serialize
|
data/lib/chamber/version.rb
CHANGED
data/lib/chamber.rb
CHANGED
@@ -81,16 +81,6 @@ module Chamber
|
|
81
81
|
instance.to_s(**args)
|
82
82
|
end
|
83
83
|
|
84
|
-
def method_missing(name, *args)
|
85
|
-
return instance.public_send(name, *args) if instance.respond_to?(name)
|
86
|
-
|
87
|
-
super
|
88
|
-
end
|
89
|
-
|
90
|
-
def respond_to_missing?(name, include_private = false)
|
91
|
-
instance.respond_to?(name, include_private)
|
92
|
-
end
|
93
|
-
|
94
84
|
module_function :[],
|
95
85
|
:configuration,
|
96
86
|
:decrypt,
|
@@ -103,7 +93,6 @@ module Chamber
|
|
103
93
|
:instance,
|
104
94
|
:instance=,
|
105
95
|
:load,
|
106
|
-
:method_missing,
|
107
96
|
:namespaces,
|
108
97
|
:respond_to_missing?,
|
109
98
|
:secure,
|
data.tar.gz.sig
CHANGED
@@ -1 +1,4 @@
|
|
1
|
-
|
1
|
+
`�1�O���ϓ��G�o0�s9m_��v� TB�Ą���DZc�c�[P!�ۨ�t�����J�N(O���!y����"�Ye(emg�`!��OV���V?i���ȟ�s��z��IV�
|
2
|
+
M!=������e�(�iV�Tw���ƾ$U����Lu+l܃�5��ӗ�Yf�ޤ][�T��寲VI�CҞ�-�\�a�%�
|
3
|
+
5W:bL��K���E8�J��.!Hk�p�)�ׁ�+�p�-�7@�q����R��d��m�
|
4
|
+
R�\=���ݾ���ֳ��ھc
|