module NameEntity

  module Quality
    def email_address=(email_address)
      self.primary_email_address = Quickbooks::Model::EmailAddress.new(email_address)
    end

    def email_address
      primary_email_address
    end

    def names_cannot_contain_invalid_characters
      [:display_name, :given_name, :middle_name, :family_name, :print_on_check_name].each do |property|
        value = send(property).to_s
        if value.index(':')
          errors.add(property, ":#{property} cannot contain a colon (:).")
        end
      end
    end

    def email_address_is_valid
      if primary_email_address
        address = primary_email_address.address
        unless address.index('@') && address.index('.')
          errors.add(:primary_email_address, "Email address must contain @ and . (dot)")
        end
      end
    end
  end

  module PermitAlterations

    def valid_for_update?
      if sync_token.nil?
        errors.add(:sync_token, "Missing required attribute SyncToken for update")
      end
      errors.empty?
    end

    def valid_for_create?
      valid?
      errors.empty?
    end

    # To delete an account Intuit requires we provide Id and SyncToken fields
    def valid_for_deletion?
      return false if(id.nil? || sync_token.nil?)
      id.to_i > 0 && !sync_token.to_s.empty? && sync_token.to_i >= 0
    end
  end
end

module NameEntity

  module Quality
    def email_address=(email_address)
      self.primary_email_address = Quickbooks::Model::EmailAddress.new(email_address)
    end

    def email_address
      primary_email_address
    end

    def names_cannot_contain_invalid_characters
      [:name, :display_name, :given_name, :middle_name, :family_name, :print_on_check_name].each do |property|
        next unless respond_to? property
        value = send(property).to_s
        if value.index(':')
          errors.add(property, ":#{property} cannot contain a colon (:).")
        end
      end
    end

    def email_address_is_valid
      if primary_email_address
        address = primary_email_address.address
        unless address.index('@') && address.index('.')
          errors.add(:primary_email_address, "Email address must contain @ and . (dot)")
        end
      end
    end
  end

  module PermitAlterations

    def valid_for_update?
      if sync_token.nil?
        errors.add(:sync_token, "Missing required attribute SyncToken for update")
      end
      errors.empty?
    end

    def valid_for_create?
      valid?
      errors.empty?
    end

    # To delete an account Intuit requires we provide Id and SyncToken fields
    def valid_for_deletion?
      return false if(id.nil? || sync_token.nil?)
      id.to_i > 0 && !sync_token.to_s.empty? && sync_token.to_i >= 0
    end
  end
end

Fix bug in NameEntity string validation where it would crash when the method calling names_cannot_contain_invalid_characters didn't have every single property.
Fix bug in NameEntity string validation where it would crash when the method calling names_cannot_contain_invalid_characters didn't have every single property.
