Class: Synthra::Types::DateTime::DateBetween

Inherits:
Base
  • Object
show all
Defined in:
lib/synthra/types/date_time/dates.rb

Overview

DateBetween type

Instance Method Summary collapse

Instance Method Details

#generate_edge(rng, context, args) ⇒ Object



359
360
361
362
# File 'lib/synthra/types/date_time/dates.rb', line 359

def generate_edge(rng, context, args)
  anchor = TimeTravel.anchor_date || Date.today
  [anchor - 365, anchor].sample(random: rng.instance_variable_get(:@random))
end

#generate_invalid(rng, context, args) ⇒ Object



364
365
366
# File 'lib/synthra/types/date_time/dates.rb', line 364

def generate_invalid(rng, context, args)
  [nil, "not a date", 123, [], {}].sample(random: rng.instance_variable_get(:@random))
end

#generate_random(rng, context, args) ⇒ Date

Generate random date between range

Parameters:

Options Hash (args):

  • :start (String, Date)

    start date

  • :from (String, Date)

    alias for :start

  • :end (String, Date)

    end date

  • :to (String, Date)

    alias for :end

Returns:

  • (Date)

    generated date



346
347
348
349
350
351
352
353
354
355
356
357
# File 'lib/synthra/types/date_time/dates.rb', line 346

def generate_random(rng, context, args)
  reference_date = TimeTravel.anchor_date || Date.today
  start_date = parse_date(args[:start] || args[:from] || (reference_date - 365))
  end_date = parse_date(args[:end] || args[:to] || reference_date)

  # Ensure valid range
  start_date, end_date = end_date, start_date if start_date > end_date

  # Generate random date in range
  days = (end_date - start_date).to_i
  start_date + rng.int(0, days)
end

#parse_date(date) ⇒ Object (private)



370
371
372
373
374
375
376
377
378
379
380
381
382
# File 'lib/synthra/types/date_time/dates.rb', line 370

def parse_date(date)
  case date
  when Date
    date
  when String
    Date.parse(date)
  else
    TimeTravel.anchor_date || Date.today
  end

rescue StandardError
  TimeTravel.anchor_date || Date.today
end