Sha256: 5ba28e9d0d82c274ab8b3bd824b178627edee4bf9cff168e58d438fa4e16c978

Contents?: true

Size: 1.05 KB

Versions: 1

Compression:

Stored size: 1.05 KB

Contents

class Tenant
  PHONE_REGEX = /^\+?[78] ?[(-]?\d{3} ?[)-]?[ -]?\d{3}[ -]?\d{2}[ -]?\d{2}$/
  attr_reader :tenant_id, :first_name, :last_name, :phone

  def initialize(tenant_id, first_name, last_name, phone = nil)
    validate_null('tenant_id', tenant_id)
    validate_null('first_name', first_name)
    validate_null('last_name', last_name)

    validate_name_length(first_name, last_name)
    validate_phone(phone)

    @tenant_id = tenant_id
    @first_name = first_name
    @last_name = last_name
    @phone = phone
  end

  private

  def validate_null(name, value)
    if value.nil?
      raise ArgumentError, "Argument '#{name}' cannot be null"
    end
  end

  def validate_name_length(first_name, last_name)
    [first_name, last_name].each do |name|
      if name && name.length > 50
        raise ArgumentError, "Name exceeds 50 characters limit: #{name}"
      end
    end
  end

  def validate_phone(phone)
    if phone && !phone.match?(PHONE_REGEX)
      raise ArgumentError, "Invalid phone format: #{phone}"
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
shnaider_carproj-0.1.0 lib/models/tenant.rb