Sha256: 6d733912e820fc5446b0eadcf8b513f841385fc243d4a7caf5158c6a8154ba90

Contents?: true

Size: 1.69 KB

Versions: 9

Compression:

Stored size: 1.69 KB

Contents

# frozen_string_literal: true

require 'date'

module FFakerTW
  module Time
    extend ModuleUtils
    extend self

    MONTHS = %w[
      January February March April May June July August September October November December
    ].freeze
    DAYS_OF_WEEK = %w[Monday Tuesday Wednesday Thursday Friday Saturday Sunday].freeze

    def month
      fetch_sample(MONTHS)
    end

    def day_of_week(options = {})
      fetch_sample(DAYS_OF_WEEK)[0..(options[:long] ? 10 : 2)]
    end

    def datetime(params = {})
      years_back = params[:year_range] || 5
      latest_year = params[:year_latest] || 0
      year = (rand * years_back).ceil + (::DateTime.now.year - latest_year - years_back)
      month = rand(1..12)
      day = rand(1..Date.new(year, month, -1).day)
      hours = params[:hours] || rand(0..23)
      minutes = params[:minutes] || rand(0..59)
      series = [date = ::DateTime.new(year, month, day, hours, minutes)]
      return date unless params[:series]

      params[:series].each do |some_time_after|
        series << series.last + (rand * some_time_after).ceil
      end
      series
    end

    def date(params = {})
      datetime(params).to_date
    end

    def between(from, to)
      from_value = convert_to_time(from)
      to_value = convert_to_time(to)
      ::Time.at(from_value + rand * (to_value.to_f - from_value.to_f))
    end

    private

    def convert_to_time(value)
      case value.class.name
      when 'String'
        DateTime.parse(value).to_time
      when 'Date', 'DateTime', 'ActiveSupport::TimeWithZone'
        value.to_time
      when 'Time'
        value
      else
        raise "FFakerTW cannot convert #{value.class} '#{value}' to Time"
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
ffakerTW-1.8.0 lib/ffakerTW/time.rb
ffakerTW-1.7.0 lib/ffakerTW/time.rb
ffakerTW-1.6.0 lib/ffakerTW/time.rb
ffakerTW-1.5.0 lib/ffakerTW/time.rb
ffakerTW-1.4.0 lib/ffakerTW/time.rb
ffakerTW-1.3.0 lib/ffakerTW/time.rb
ffakerTW-1.2.0 lib/ffakerTW/time.rb
ffakerTW-1.1.0 lib/ffakerTW/time.rb
ffakerTW-0.1.0 lib/ffakerTW/time.rb