class Faker::Json
def add_depth_to_json(json: shallow_json, width: 3, options: { key: 'Name.first_name', value: 'Name.first_name' })
-
(Hash{String => String})
-
Parameters:
-
options
(Hash
) -- Specifies a Faker gem class to use for nested keys and for values, respectably. options_hash = {key: Class.method, value: Class.method} -
width
(Integer
) -- Specifies the number of nested key-value pairs. -
json
(Hash{String => String}
) -- Specifies a Json.shallow_json and uses its keys as keys of the nested JSON.
def add_depth_to_json(json: shallow_json, width: 3, options: { key: 'Name.first_name', value: 'Name.first_name' }) options[:key] = "Faker::#{options[:key]}" options[:value] = "Faker::#{options[:value]}" hash = JSON.parse(json) hash.each do |key, _| add_hash_to_bottom(hash, [key], width, options) end JSON.generate(hash) end
def add_hash(key_array, hash, width, options)
def add_hash(key_array, hash, width, options) string_to_eval = 'hash' key_array.length.times do |index| string_to_eval << "['#{key_array[index]}']" end string_to_eval << " = #{build_shallow_hash(width, options)}" eval(string_to_eval) hash end
def add_hash_to_bottom(hash, key_array, width, options)
def add_hash_to_bottom(hash, key_array, width, options) key_string = build_keys_from_array(key_array) if eval("hash#{key_string}").is_a?(::Hash) eval("hash#{key_string}").each do |key, _| key_array << key add_hash_to_bottom(hash, key_array, width, options) end else add_hash(key_array, hash, width, options) key_array.pop end end
def build_keys_from_array(key_array)
def build_keys_from_array(key_array) key_string = '' key_array.each do |value| key_string << "['#{value}']" end key_string end
def build_shallow_hash(width, options)
def build_shallow_hash(width, options) key = options[:key] value = options[:value] hash = {} width.times do hash[eval(key)] = eval(value) end hash end
def shallow_json(width: 3, options: { key: 'Name.first_name', value: 'Name.first_name' })
-
(Hash{String => String})
-
Parameters:
-
options
(Hash
) -- Specifies a Faker gem class to use for keys and for values, respectably. options_hash = {key: Class.method, value: Class.method} -
width
(Integer
) -- Specifies the number of key-value pairs.
def shallow_json(width: 3, options: { key: 'Name.first_name', value: 'Name.first_name' }) options[:key] = "Faker::#{options[:key]}" options[:value] = "Faker::#{options[:value]}" hash = build_shallow_hash(width, options) JSON.generate(hash) end