Report abuse


			
  def parsed_sort_code
    @parsed_sort_code ||= sort_code.to_s.scan(/../)
  end
  
  %w{first middle last}.each_with_index do |segment, index|
    define_method "sort_code_#{segment}" do
      parsed_sort_code[index]
    end
    
    define_method "sort_code_#{segment}=" do |value|
      self.sort_code ||= "      "
      self.sort_code[index * 2, 2] = value
    end
  end
  
  def sort_code=(new_value)
    write_attribute :sort_code, new_value.gsub(/[^[:alnum:]\s]/, "")
  end