module PIM::Utils::EnhancedStruct

Public Class Methods

included(struct_class) click to toggle source
# File pim.rb, line 1728
def self.included struct_class
  raise "Class #{struct_class} must be a 'Struct'" unless struct_class < Struct
  struct_class.include GetterSetterAware
  struct_class.extend EnhancedStruct::Internal
end
new(*args) click to toggle source
Calls superclass method
# File pim.rb, line 1667
def initialize *args

  values = args[0]
  if values.is_a?(Hash)

    # Convert values to symbolized hash
    values = PIM::Utils.symbolized_snakeized_hash(values)

    # Delete all non-members
    values.delete_if { |k,v| !members.include?(k) }

    # Convert all date members
    date_members = self.class.instance_variable_get(:@__date_members)
    unless date_members.nil?
      date_members.each do |date_member|
        date = PIM::Utils.to_date(values[date_member])
        next if date.nil?
        values[date_member] = date
      end
    end

    # Apply conversions
    convert_members = self.class.instance_variable_get(:@__convert_members)
    unless convert_members.nil?
      convert_members.each_pair do |member, block|
        value = values[member]
        next if value.nil?
        values[member] = block.call(value)
      end
    end

    args[0] = values

  end

  super *args

end

Public Instance Methods

to_json(*args) click to toggle source

‘Struct’ cannot be correctly written out as JSON, so convert it to Hash first

# File pim.rb, line 1735
def to_json *args

  # Convert values back to "camelized" hash
  PIM::Utils.unsymbolized_camelized_hash(to_h).to_json(*args)

end