Sha256: 0cfc4d386f5435ca3b415dedc8f5b1fff61cf7afce1c3af1cbb3bff3ff0101ff

Contents?: true

Size: 1.07 KB

Versions: 4

Compression:

Stored size: 1.07 KB

Contents

require 'time_distribution/smart_duration'

module TimeDistribution
  class Task
    attr_reader :subject, :time_taken, :desc

    # @param [#to_s] subject The subject on which the task was completed. E.g. A course or project.
    # @param [#to_s] time_taken The amount of time taken on the task (Compatible with +ChronicDuration+ parsing, or a range of times that conform to +Chronic+ parsing).
    # @param [#to_s] desc The task's description.
    def initialize(subject, time_taken, desc)
      @subject = subject
      @time_taken = SmartDuration.parse(time_taken)
      @desc = desc
    end

    def to_s() "#{to_headline}: #{to_desc}" end

    def to_desc() @desc.strip end

    def to_headline
      "#{to_hours_s} hours of #{@subject}"
    end

    def to_hours
      @time_taken.total / (60 * 60).to_f
    end

    def to_hours_s
      format('%0.2f', to_hours)
    end

    def to_ssv
      format(
        "%-30s%10s",
        (
          if block_given?
            yield(@subject)
          else
            @subject
          end
        ),
        to_hours_s
      )
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
time_distribution-2.1.3 lib/time_distribution/task.rb
time_distribution-2.1.2 lib/time_distribution/task.rb
time_distribution-2.1.1 lib/time_distribution/task.rb
time_distribution-2.1.0 lib/time_distribution/task.rb