Sha256: f0a93345a09646109242c03c86a3556bc29d625ef3086ec7c26d32344c5ccdef

Contents?: true

Size: 876 Bytes

Versions: 1

Compression:

Stored size: 876 Bytes

Contents

class Customer
  EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+\z/i

  attr_reader :customer_id, :name, :email

  def initialize(customer_id, name, email = nil)
    validate_null('customer_id', customer_id)
    validate_null('name', name)

    validate_name_length(name)
    validate_email(email)

    @customer_id = customer_id
    @name = name
    @email = email
  end

  private

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

  def validate_name_length(name)
    if name.length > 100
      raise ArgumentError, "The number of characters in the name exceeds 100: #{name}"
    end
  end

  def validate_email(email)
    if email && !email.match?(EMAIL_REGEX)
      raise ArgumentError, "Invalid email format: #{email}"
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
jewerly_system-1.0.0 lib/source/models/customer.rb