Sha256: 717119fb838497ec0e055b19263b7939673173e5908b6e4dcf47b54aa0c4be0a

Contents?: true

Size: 1.35 KB

Versions: 42

Compression:

Stored size: 1.35 KB

Contents

# frozen_string_literal: true

module Renalware
  class WeekPeriod
    attr_reader :year, :week_number, :date_on_first_day_of_week

    def self.from_date(date)
      date = date.to_date
      new(week_number: date.cweek, year: date.cwyear)
    end

    def initialize(week_number:, year:)
      @week_number = week_number.to_i
      @year = year.to_i
      validate_week_number
      validate_year
      @date_on_first_day_of_week = Date.commercial(@year, @week_number)
    end

    def next
      self.class.from_date(date_on_first_day_of_week + 1.week)
    end

    def previous
      self.class.from_date(date_on_first_day_of_week - 1.week)
    end

    def to_a
      [week_number, year]
    end

    def to_s
      "#{I18n.l(date_on_first_day_of_week, format: :long)} " \
      "to #{I18n.l(last_day_of_week, format: :long)}"
    end

    # The date of last day of the week (a Sunday)
    def last_day_of_week
      @last_day_of_week ||= (date_on_first_day_of_week + 1.week - 1.minute).to_date
    end

    def validate_week_number
      if week_number < 1 || week_number > 53
        raise(ArgumentError, "invalid date: week_number must be 1-53")
      end
    end

    def validate_year
      raise(ArgumentError, "invalid date year must be >= 2000") if year <= 2000
    end

    def to_h
      {
        year: year,
        week_number: week_number
      }
    end
  end
end

Version data entries

42 entries across 42 versions & 1 rubygems

Version Path
renalware-core-2.0.159 lib/renalware/week_period.rb
renalware-core-2.0.158 lib/renalware/week_period.rb
renalware-core-2.0.157 lib/renalware/week_period.rb
renalware-core-2.0.156 lib/renalware/week_period.rb
renalware-core-2.0.155 lib/renalware/week_period.rb
renalware-core-2.0.153 lib/renalware/week_period.rb
renalware-core-2.0.152 lib/renalware/week_period.rb
renalware-core-2.0.151 lib/renalware/week_period.rb
renalware-core-2.0.149 lib/renalware/week_period.rb
renalware-core-2.0.148 lib/renalware/week_period.rb
renalware-core-2.0.147 lib/renalware/week_period.rb
renalware-core-2.0.146 lib/renalware/week_period.rb
renalware-core-2.0.145 lib/renalware/week_period.rb
renalware-core-2.0.144 lib/renalware/week_period.rb
renalware-core-2.0.143 lib/renalware/week_period.rb
renalware-core-2.0.142 lib/renalware/week_period.rb
renalware-core-2.0.141 lib/renalware/week_period.rb
renalware-core-2.0.140 lib/renalware/week_period.rb
renalware-core-2.0.139 lib/renalware/week_period.rb
renalware-core-2.0.138 lib/renalware/week_period.rb