Sha256: 311827dae166a56b0cc0f3151f26d0f844e1cbd563d5d1eea2b7930f94d3521d

Contents?: true

Size: 1.08 KB

Versions: 3

Compression:

Stored size: 1.08 KB

Contents

# frozen_string_literal: true

require 'deco_lite'
require 'securerandom'

module Dsu
  module Models
    class Entry < DecoLite::Model
      validates :uuid, presence: true, format: {
        with: /\A[0-9a-f]{8}\z/i,
        message: 'is the wrong format. ' \
                 '0-9, a-f, and 8 characters were expected.' \
      }
      validates :description, presence: true, length: { minimum: 2, maximum: 256 }

      def initialize(description:, uuid: nil)
        raise ArgumentError, 'description is nil' if description.nil?
        raise ArgumentError, 'description is the wrong object type' unless description.is_a?(String)
        raise ArgumentError, 'uuid is the wrong object type' unless uuid.is_a?(String) || uuid.nil?

        uuid ||= SecureRandom.uuid[0..7]

        super(hash: {
          uuid: uuid,
          description: description
        })
      end

      def required_fields
        %i[uuid description]
      end

      def ==(other)
        return false unless other.is_a?(Entry)

        uuid == other.uuid && description == other.description
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
dsu-0.1.0.alpha.4 lib/dsu/models/entry.rb
dsu-0.1.0.alpha.3 lib/dsu/models/entry.rb
dsu-0.1.0.alpha.2 lib/dsu/models/entry.rb