Class: MarkdownExec::HashDelegator

Inherits:
HashDelegatorParent show all
Defined in:
lib/hash_delegator.rb

Instance Attribute Summary

Attributes inherited from HashDelegatorParent

#most_recent_loaded_filename, #pass_args, #run_state

Class Method Summary collapse

Methods inherited from HashDelegatorParent

#add_menu_chrome_blocks!, #append_chrome_block, #append_divider, #append_inherited_lines, #apply_shell_color_option, #assign_key_value_in_bash, #block_state_for_name_from_cli, #blocks_from_nested_files, #calc_logged_stdout_filename, #cfile, #check_file_existence, #collect_required_code_lines, #command_execute, #compile_execute_and_trigger_reuse, #contains_wildcards?, #copy_to_clipboard, #count_blocks_in_filename, #create_and_add_chrome_block, #create_and_add_chrome_blocks, #create_divider, #debounce_allows, #debounce_reset, #determine_block_state, #display_required_code, #divider_formatting_present?, #do_save_execution_output, #document_menu_loop, #dump_and_warn_block_state, #dump_delobj, #exec_bash_next_state, #execute_required_lines, #execute_shell_type, #fetch_color, #format_and_execute_command, #format_expression, #format_multiline_body_as_title, #format_references_send_color, #formatted_expression, #get_block_summary, #handle_back_or_continue, #handle_stream, #ii_execute_block, #ii_parse_document, #ii_user_choice, #initial_state, #initialize, #iter_blocks_from_nested_files, #link_block_data_eval, #link_history_push_and_next, #link_load_format_data, #load_auto_opts_block, #load_cli_or_user_selected_block, #load_filespec_from_expression, #load_filespec_wildcard_expansion, #manage_cli_selection_state, #mdoc_and_blocks_from_nested_files, #mdoc_menu_and_blocks_from_nested_files, #menu_chrome_colored_option, #menu_chrome_formatted_option, #method_missing, #output_color_formatted, #output_execution_result, #output_execution_summary, #output_labeled_value, #pop_add_current_code_to_head_and_trigger_load, #pop_link_history_and_trigger_load, #post_execution_process, #prepare_blocks_menu, #print_formatted_option, #process_block_based_on_type, #process_string_array, #prompt_approve_repeat, #prompt_for_filespec_with_wildcard, #prompt_for_user_approval, #prompt_select_code_filename, #prompt_select_continue, #prompt_user_exit, #push_link_history_and_trigger_load, #puts_gets_oprompt_, #read_show_options_and_trigger_reuse, #respond_to?, #runtime_exception, #save_filespec_from_expression, #save_filespec_wildcard_expansion, #save_to_file, #select_option_with_metadata, #set_delob_filename_block_name, #set_delobj_menu_loop_vars, #set_environment_variables_for_block, #should_add_back_option?, #start_fenced_block, #string_send_color, #update_line_and_block_state, #wait_for_stream_processing, #wait_for_user_selected_block, #wait_for_user_selection, #write_command_file, #write_inherited_lines_to_file

Methods included from HashDelegatorSelf

#apply_color_from_hash, #block_find, #code_merge, #count_matches_in_lines, #create_directory_for_file, #create_file_and_write_string_with_permissions, #default_block_title_from_body, #delete_consecutive_blank_lines!, #error_handler, #format_execution_streams, #indent_all_lines, #initialize_fcb_names, #join_code_lines, #merge_lists, #next_link_state, #parse_yaml_data_from_body, #read_required_blocks_from_temp_file, #remove_file_without_standard_errors, #safeval, #set_file_permissions, #tty_prompt_without_disabled_symbol, #update_menu_attrib_yield_selected, #write_execution_output_to_file, #yield_line_if_selected

Methods included from CompactionHelpers

#compact_and_convert_array_to_hash, #compact_and_index_hash, #compact_hash

Constructor Details

This class inherits a constructor from MarkdownExec::HashDelegatorParent

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class MarkdownExec::HashDelegatorParent

Class Method Details

.clean_hash_recursively(obj) ⇒ Object

Recursively cleans the given object (hash or struct) from unwanted values.



2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
# File 'lib/hash_delegator.rb', line 2480

def self.clean_hash_recursively(obj)
  obj.each do |key, value|
    cleaned_value = clean_value(value) # Clean and possibly convert value
    obj[key] = cleaned_value if value.is_a?(Hash) || value.is_a?(Struct)
  end

  obj.reject! { |_key, value| [nil, '', [], {}, nil].include?(value) } if obj.is_a?(Hash)

  obj
end

.clean_value(value) ⇒ Object

Cleans a value, handling both Hash and Struct types. For Structs, the cleaned version is converted to a hash.



2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
# File 'lib/hash_delegator.rb', line 2465

def self.clean_value(value)
  case value
  when Hash
    clean_hash_recursively(value)
  when Struct
    struct_hash = value.to_h # Convert the Struct to a hash
    clean_hash_recursively(struct_hash) # Clean the hash
    # Return the cleaned hash instead of updating the Struct

  else
    value
  end
end


2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
# File 'lib/hash_delegator.rb', line 2491

def self.next_link_state(*args, **kwargs, &block)
  super
  # result = super

  # @logger ||= StdOutErrLogger.new
  # @logger.unknown(
  #   HashDelegator.clean_hash_recursively(
  #     { "HashDelegator.next_link_state":
  #         { 'args': args,
  #           'at': Time.now.strftime('%FT%TZ'),
  #           'for': /[^\/]+:\d+/.match(caller.first)[0],
  #           'kwargs': kwargs,
  #           'return': result } }
  #   )
  # )

  # result
end