Sha256: bbba44749f337ef887278e1b78e4127b3c89ca36496439698c92a22e90f1afeb

Contents?: true

Size: 1.77 KB

Versions: 7

Compression:

Stored size: 1.77 KB

Contents

# frozen_string_literal: true

require 'time'
require 'active_support/core_ext/numeric/time'
require_relative '../../models/entry_group'
require_relative '../../support/colorable'
require_relative '../../support/say'
require_relative '../../support/time_formatable'

module Dsu
  module Views
    module EntryGroup
      class Show
        include Support::Colorable
        include Support::Say
        include Support::TimeFormatable

        def initialize(entry_group:, options: {})
          raise ArgumentError, 'entry_group is nil' if entry_group.nil?
          raise ArgumentError, 'entry_group is the wrong object type' unless entry_group.is_a?(Models::EntryGroup)
          raise ArgumentError, 'options is nil' if options.nil?
          raise ArgumentError, 'options is the wrong object type' unless options.is_a?(Hash)

          @entry_group = entry_group
          @options = options || {}
        end

        def call
          render!
        end
        alias render call

        private

        attr_reader :entry_group, :options

        def render!
          say formatted_time(time: entry_group.time), HIGHLIGHT
          say('(no entries available for this day)') and return if entry_group.entries.empty?

          entry_group.entries.each_with_index do |entry, index|
            prefix = "#{format('%03s', index + 1)}. "
            description = colorize_string(string: entry.description, mode: :bold)
            entry_info = "#{prefix} #{description}"
            unless entry.valid?
              entry_info = "#{entry_info} (validation failed: #{entry_errors(entry_group_deleter_service)})"
            end
            say entry_info
          end
        end

        def entry_errors(entry)
          entry.errors.full_messages.join(', ')
        end
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
dsu-1.2.1 lib/dsu/views/entry_group/show.rb
dsu-1.2.0 lib/dsu/views/entry_group/show.rb
dsu-1.1.2 lib/dsu/views/entry_group/show.rb
dsu-1.1.1 lib/dsu/views/entry_group/show.rb
dsu-1.1.0.alpha.2 lib/dsu/views/entry_group/show.rb
dsu-1.1.0.alpha.1 lib/dsu/views/entry_group/show.rb
dsu-1.0.0 lib/dsu/views/entry_group/show.rb