Module: Familia::Features::SafeDump::ModelClassMethods

Defined in:
lib/familia/features/safe_dump.rb

Overview

SafeDump::ModelClassMethods

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



64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/familia/features/safe_dump.rb', line 64

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



103
104
105
# File 'lib/familia/features/safe_dump.rb', line 103

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



98
99
100
# File 'lib/familia/features/safe_dump.rb', line 98

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



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

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)



108
109
110
# File 'lib/familia/features/safe_dump.rb', line 108

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