chamber 2.14.3 → 3.0.0rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/lib/chamber/adapters/cloud/heroku.rb +4 -4
  4. data/lib/chamber/binary/circle_ci.rb +8 -7
  5. data/lib/chamber/binary/heroku.rb +8 -7
  6. data/lib/chamber/binary/runner.rb +11 -10
  7. data/lib/chamber/binary/travis.rb +7 -3
  8. data/lib/chamber/commands/securable.rb +4 -1
  9. data/lib/chamber/context_resolver.rb +0 -1
  10. data/lib/chamber/encryption_methods/public_key.rb +1 -27
  11. data/lib/chamber/encryption_methods/ssl.rb +2 -28
  12. data/lib/chamber/file.rb +5 -28
  13. data/lib/chamber/file_set.rb +1 -7
  14. data/lib/chamber/filters/decryption_filter.rb +6 -6
  15. data/lib/chamber/filters/encryption_filter.rb +8 -5
  16. data/lib/chamber/filters/environment_filter.rb +11 -10
  17. data/lib/chamber/filters/failed_decryption_filter.rb +4 -1
  18. data/lib/chamber/filters/insecure_filter.rb +1 -2
  19. data/lib/chamber/filters/namespace_filter.rb +9 -5
  20. data/lib/chamber/filters/secure_filter.rb +5 -3
  21. data/lib/chamber/filters/translate_secure_keys_filter.rb +5 -3
  22. data/lib/chamber/instance.rb +7 -14
  23. data/lib/chamber/keys/base.rb +2 -2
  24. data/lib/chamber/refinements/array.rb +20 -0
  25. data/lib/chamber/refinements/deep_dup.rb +58 -0
  26. data/lib/chamber/refinements/enumerable.rb +20 -9
  27. data/lib/chamber/refinements/hash.rb +51 -0
  28. data/lib/chamber/rubinius_fix.rb +1 -1
  29. data/lib/chamber/settings.rb +24 -41
  30. data/lib/chamber/types/secured.rb +13 -13
  31. data/lib/chamber/version.rb +1 -1
  32. data/lib/chamber.rb +0 -11
  33. data.tar.gz.sig +4 -1
  34. metadata +24 -39
  35. metadata.gz.sig +0 -0
  36. data/lib/chamber/core_ext/hash.rb +0 -15
  37. data/lib/chamber/errors/non_conforming_key.rb +0 -8
@@ -1,10 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'hashie/mash'
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 = Hashie::Mash.new(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(Hashie::Mash.new) do |namespace, filtered_data|
25
- filtered_data.merge!(data[namespace]) if data[namespace]
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
- Hashie::Mash.new(data)
32
+ data
29
33
  end
30
34
  end
31
35
 
@@ -1,10 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'hashie/mash'
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 = Hashie::Mash.new(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 = Hashie::Mash.new
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 'hashie/mash'
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.dup
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 = Hashie::Mash.new
25
+ settings = {}
24
26
 
25
27
  raw_data.each_pair do |key, value|
26
28
  value = execute(value) if value.respond_to? :each_pair
@@ -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.merge(**args)
69
+ config = configuration.to_hash.deep_merge(**args)
67
70
 
68
71
  Settings
69
72
  .new(
70
- **config.merge(
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.merge(**args)
83
+ config = configuration.to_hash.deep_merge(**args)
81
84
 
82
85
  Settings
83
86
  .new(
84
- **config.merge(
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
@@ -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, Performance/MapCompact
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, Performance/MapCompact
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.deep_validate_keys(object, &block)
6
+ def self.deep_transform_keys(object, &block)
9
7
  case object
10
8
  when ::Hash
11
- object.each do |(key, value)|
12
- # fail ::Chamber::Errors::NonConformingKey unless key == yield(key)
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 { |v| deep_validate_keys(v, &block) }
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
@@ -5,7 +5,7 @@ require 'pathname'
5
5
  unless Pathname.instance_methods.include?(:write)
6
6
  class Pathname
7
7
  def write(*args)
8
- IO.write @path, *args # rubocop:disable Security/IoMethods
8
+ IO.write @path, *args
9
9
  end
10
10
  end
11
11
  end
@@ -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/enumerable'
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.to_hash
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.dup.push(key)
150
+ flattened_name_components = parent_keys.deep_dup.push(key)
150
151
 
151
152
  if value.respond_to?(:each_pair)
152
- flattened_name_hash.merge! to_flattened_name_hash(value,
153
- flattened_name_components)
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.merge(other_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. Called from: '#{caller.to_a.first}'" if key.is_a?(::Symbol) # rubocop:disable Layout/LineLength
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. Called from: '#{caller.to_a.first}'" unless data.has_key?(key) # rubocop:disable Layout/LineLength
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.[](key)
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.merge(
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.merge(
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.merge(
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 }.merge(metadata))
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.inject(raw_data) do |filtered_data, filter|
313
- filter.execute(**{ data: filtered_data }.merge(metadata))
314
- end
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
- ::ActiveSupport::JSON.decode(value)
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
- decryption_keys: decryption_keys,
59
- encryption_keys: encryption_keys)
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
- ::ActiveSupport::JSON.encode(
67
- Chamber.encrypt(value,
68
- decryption_keys: decryption_keys,
69
- encryption_keys: encryption_keys),
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Chamber
4
- VERSION = '2.14.3'
4
+ VERSION = '3.0.0rc1'
5
5
  end
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
- ~Hߊ�{��BZ�׷����9B{l Jg��b3BmP��ᩚwֺ`c4}�zߓ����&?�"���4��5I*�M֔o�Gw̩�����%����p��0���T��uK�[� <ZԿ�j9��_n��I�4O��[ W��c{3�/�>{i�(DZN�p���+BB:�.c&P%���o
1
+ `�1�O���ϓ��G�o0�s9m_��v TB�Ą���DZcc[P!�ۨ�t�����JN(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