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