Class: Pipl::DOB

Inherits:
Field show all
Defined in:
lib/pipl/fields.rb

Instance Attribute Summary collapse

Attributes inherited from Field

#current, #inferred, #last_seen, #valid_since

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Field

base_params_from_hash, extra_metadata, from_hash

Methods included from Utils

alnum_chars, alpha_chars, date_to_str, extract_rate_limits, is_valid_url?, str_to_date, titleize, to_utf8

Constructor Details

#initialize(params = {}) ⇒ DOB

Returns a new instance of DOB.

[View source]

451
452
453
454
455
# File 'lib/pipl/fields.rb', line 451

def initialize(params={})
  super params
  @date_range = params[:date_range]
  @display = params[:display]
end

Instance Attribute Details

#date_rangeObject

Returns the value of attribute date_range.


449
450
451
# File 'lib/pipl/fields.rb', line 449

def date_range
  @date_range
end

#displayObject

Returns the value of attribute display.


449
450
451
# File 'lib/pipl/fields.rb', line 449

def display
  @display
end

Class Method Details

.from_age(age) ⇒ Object

[View source]

467
468
469
# File 'lib/pipl/fields.rb', line 467

def self.from_age(age)
  self.from_age_range(age, age)
end

.from_age_range(start_age, end_age) ⇒ Object

Raises:

  • (ArgumentError)
[View source]

471
472
473
474
475
476
477
478
479
480
481
482
483
# File 'lib/pipl/fields.rb', line 471

def self.from_age_range(start_age, end_age)
  raise ArgumentError.new('start_age and end_age can\'t be negative') if start_age < 0 || end_age < 0

  if start_age > end_age
    start_age, end_age = end_age, start_age
  end

  today = Date.today
  start_date = today << end_age * 12
  start_date = start_date - 1
  end_date = today << start_age * 12
  self.new({date_range: Pipl::DateRange.new(start_date, end_date)})
end

.from_birth_date(birth_date) ⇒ Object

Raises:

  • (ArgumentError)
[View source]

462
463
464
465
# File 'lib/pipl/fields.rb', line 462

def self.from_birth_date(birth_date)
  raise ArgumentError.new('birth_date can\'t be in the future') unless birth_date <= Date.today
  self.new({date_range: DateRange.new(birth_date, birth_date)})
end

.from_birth_year(birth_year) ⇒ Object

Raises:

  • (ArgumentError)
[View source]

457
458
459
460
# File 'lib/pipl/fields.rb', line 457

def self.from_birth_year(birth_year)
  raise ArgumentError.new('birth_year must be positive') unless birth_year > 0
  self.new({date_range: DateRange.from_years_range(birth_year, birth_year)})
end

Instance Method Details

#ageObject

[View source]

489
490
491
492
493
494
495
496
497
# File 'lib/pipl/fields.rb', line 489

def age
  unless @date_range.nil?
    dob = @date_range.middle
    today = Date.today
    diff = today.year - dob.year
    diff = diff - 1 if dob.month > today.month || (dob.month >= today.month && dob.day > today.day)
    diff
  end
end

#age_rangeObject

[View source]

499
500
501
502
503
504
505
506
507
508
# File 'lib/pipl/fields.rb', line 499

def age_range
  if @date_range
    return [self.age, self.age] unless @date_range.start && @date_range.end
    start_age = DOB.new({date_range: Pipl::DateRange.new(@date_range.start, @date_range.start)}).age
    end_age = DOB.new({date_range: Pipl::DateRange.new(@date_range.end, @date_range.end)}).age
    return end_age, start_age
  else
    return nil, nil
  end
end

#is_searchable?Boolean

Returns:

  • (Boolean)
[View source]

514
515
516
# File 'lib/pipl/fields.rb', line 514

def is_searchable?
  ! @date_range.nil?
end

#to_hashObject

[View source]

510
511
512
# File 'lib/pipl/fields.rb', line 510

def to_hash
  {date_range: @date_range.to_hash} if @date_range
end

#to_sObject

[View source]

485
486
487
# File 'lib/pipl/fields.rb', line 485

def to_s
  @display || Pipl::Utils.to_utf8(age.to_s)
end