Module: Familia::Features::SafeDump::ClassMethods

Included in:
Familia::Features::SafeDump
Defined in:
lib/familia/features/safe_dump.rb

Overview

SafeDump::ClassMethods

These methods become available on the model class

Instance Method Summary collapse

Instance Method Details

#safe_dump_field(field_name, callable = nil) ⇒ Object

Define a single safe dump field

Parameters:

  • field_name (Symbol)

    The name of the field

  • callable (Proc, nil) (defaults to: nil)

    Optional callable to transform the value



61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/familia/features/safe_dump.rb', line 61

def safe_dump_field(field_name, callable = nil)
  @safe_dump_field_map ||= {}

  field_name = field_name.to_sym
  field_value = callable || lambda { |obj|
    if obj.respond_to?(:[]) && obj[field_name]
      obj[field_name] # Familia::DataType classes
    elsif obj.respond_to?(field_name)
      obj.send(field_name) # Regular method calls
    end
  }

  @safe_dump_field_map[field_name] = field_value
end

#safe_dump_field_mapObject

Returns the field map used for dumping



100
101
102
# File 'lib/familia/features/safe_dump.rb', line 100

def safe_dump_field_map
  @safe_dump_field_map || {}
end

#safe_dump_field_namesObject

Returns an array of safe dump field names in the order they were defined



95
96
97
# File 'lib/familia/features/safe_dump.rb', line 95

def safe_dump_field_names
  (@safe_dump_field_map || {}).keys
end

#safe_dump_fields(*fields) ⇒ Object

Define multiple safe dump fields at once

Parameters:

  • fields (Array)

    Mixed array of symbols and hashes



78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/familia/features/safe_dump.rb', line 78

def safe_dump_fields(*fields)
  # If no arguments, return field names (getter behavior)
  return safe_dump_field_names if fields.empty?

  # Otherwise, define fields (setter behavior)
  fields.each do |field|
    if field.is_a?(Symbol)
      safe_dump_field(field)
    elsif field.is_a?(Hash)
      field.each do |name, callable|
        safe_dump_field(name, callable)
      end
    end
  end
end

#set_safe_dump_fields(*fields) ⇒ Object

Legacy method for setting safe dump fields (for backward compatibility)



105
106
107
# File 'lib/familia/features/safe_dump.rb', line 105

def set_safe_dump_fields(*fields)
  safe_dump_fields(*fields)
end