Sha256: d4b854819dce4dee1b1003199d4b7cde22d796ae4646a5e0d4d455589becdf45

Contents?: true

Size: 1.55 KB

Versions: 21

Compression:

Stored size: 1.55 KB

Contents

# frozen_string_literal: true

require 'active_model'
require_relative '../support/descriptable'
require_relative '../support/presentable'
require_relative '../validators/description_validator'

module Dsu
  module Models
    # This class represents something someone might want to share at their
    # daily standup (DSU).
    class Entry
      include ActiveModel::Model
      include Support::Descriptable
      include Support::Presentable

      validates_with Validators::DescriptionValidator

      attr_reader :description, :options

      def initialize(description:, options: {})
        raise ArgumentError, 'description is the wrong object type' unless description.is_a?(String)

        # Make sure to call the setter method so that the description is cleaned up.
        self.description = description
        @options = options || {}
      end

      class << self
        def clean_description(description)
          return if description.nil?

          description.strip.gsub(/\s+/, ' ')
        end
      end

      def description=(description)
        @description = self.class.clean_description description
      end

      def to_h
        { description: description }
      end

      # Override == and hash so that we can compare Entry objects based
      # on description alone. This is useful for comparing entries in
      # an array, for example.
      def ==(other)
        return false unless other.is_a?(Entry)

        description == other.description
      end
      alias eql? ==

      def hash
        description.hash
      end
    end
  end
end

Version data entries

21 entries across 21 versions & 1 rubygems

Version Path
dsu-2.3.2 lib/dsu/models/entry.rb
dsu-2.3.1 lib/dsu/models/entry.rb
dsu-2.3.0 lib/dsu/models/entry.rb
dsu-2.2.2 lib/dsu/models/entry.rb
dsu-2.2.1 lib/dsu/models/entry.rb
dsu-2.2.0 lib/dsu/models/entry.rb
dsu-2.2.0.rc.2 lib/dsu/models/entry.rb
dsu-2.2.0.rc.1 lib/dsu/models/entry.rb
dsu-2.1.4 lib/dsu/models/entry.rb
dsu-2.1.3 lib/dsu/models/entry.rb
dsu-2.1.2 lib/dsu/models/entry.rb
dsu-2.1.1 lib/dsu/models/entry.rb
dsu-2.0.8 lib/dsu/models/entry.rb
dsu-2.0.7 lib/dsu/models/entry.rb
dsu-2.0.6 lib/dsu/models/entry.rb
dsu-2.0.5 lib/dsu/models/entry.rb
dsu-2.0.4 lib/dsu/models/entry.rb
dsu-2.0.3 lib/dsu/models/entry.rb
dsu-2.0.2 lib/dsu/models/entry.rb
dsu-2.0.1 lib/dsu/models/entry.rb