31 lines
775 B
Ruby
31 lines
775 B
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
module Gitlab
|
||
|
module Utils
|
||
|
class SafeInlineHash
|
||
|
# Validates the hash size using `Gitlab::Utils::DeepSize` before merging keys using `Gitlab::Utils::InlineHash`
|
||
|
def initialize(hash, prefix: nil, connector: '.')
|
||
|
@hash = hash
|
||
|
end
|
||
|
|
||
|
def self.merge_keys!(hash, prefix: nil, connector: '.')
|
||
|
new(hash).merge_keys!(prefix: prefix, connector: connector)
|
||
|
end
|
||
|
|
||
|
def merge_keys!(prefix:, connector:)
|
||
|
raise ArgumentError, 'The Hash is too big' unless valid?
|
||
|
|
||
|
Gitlab::Utils::InlineHash.merge_keys(hash, prefix: prefix, connector: connector)
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
attr_reader :hash
|
||
|
|
||
|
def valid?
|
||
|
Gitlab::Utils::DeepSize.new(hash).valid?
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|