Class: Remi::Transform::DateDiff

Inherits:
Remi::Transform show all
Defined in:
lib/remi/transform.rb

Overview

Public: Used to calculate differences between dates by a given measure.

measure - One of :days, :months, or :years. (default: :days).

Examples:

DateDiff.new(:months).to_proc.call([Date.new(2016,1,30), Date.new(2016,3,1)]) # => 2

Instance Attribute Summary

Attributes inherited from Remi::Transform

#multi_args, #source_metadata, #target_metadata

Instance Method Summary collapse

Methods inherited from Remi::Transform

#call, #to_proc

Constructor Details

#initialize(measure = :days, *args, **kargs, &block) ⇒ DateDiff

Returns a new instance of DateDiff.



373
374
375
376
377
# File 'lib/remi/transform.rb', line 373

def initialize(measure = :days, *args, **kargs, &block)
  super
  @multi_args = true
  @measure = measure
end

Instance Method Details

#transform(row) ⇒ Object



379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
# File 'lib/remi/transform.rb', line 379

def transform(row)
  row = SourceToTargetMap::Row[row]
  from_date = row[row.keys[0]]
  to_date = row[row.keys[1]]

  case @measure.to_sym
  when :days
    (to_date - from_date).to_i
  when :months
    (to_date.year * 12 + to_date.month) - (from_date.year * 12 + from_date.month)
  when :years
    to_date.year - from_date.year
  else
    raise ArgumentError, "Unknown date difference measure: #{@measure}"
  end
end