class Rokaki::FilterModel::DeepAssignStruct
Attributes
keys[R]
struct[RW]
value[R]
Public Class Methods
new(keys:, value:, struct: nil)
click to toggle source
# File lib/rokaki/filter_model/deep_assign_struct.rb, line 6 def initialize(keys:, value:, struct: nil) @keys = keys @value = value @struct = struct end
Public Instance Methods
call()
click to toggle source
# File lib/rokaki/filter_model/deep_assign_struct.rb, line 14 def call base_keys = keys i = base_keys.length - 1 base_keys.reverse_each.reduce (value) do |struc,key| i -= 1 cur_keys = base_keys[0..i] if struct val = struct.dig(*cur_keys) val[key] = struc p val return val else if key.is_a?(Integer) struct = [struc] else { key=>struc } end end end end
Private Instance Methods
deep_construct(keys, value)
click to toggle source
# File lib/rokaki/filter_model/deep_assign_struct.rb, line 39 def deep_construct(keys, value) if keys.last.is_a?(Integer) rstruct = struct[keys.last] = value else rstruct = { keys.last => value } end keys[0..-2].reverse_each.reduce (rstruct) do |struc,key| if key.is_a?(Integer) [struc] else { key=>struc } end end end