Class: Remi::Transform::EnforceType

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

Overview

Public: Enforces the type declared in the :type metadata field (if it exists)

Examples:

tform = EnforceType.new
tform. = { type: :date, in_format: '%m/%d/%Y' }
tform.to_proc.call('02/22/2013') # => Date.new(2013,2,22)

tform = EnforceType.new
tform. = { type: :integer }
tform.to_proc.call('12') # => 12

tform = EnforceType.new
tform. = { type: :integer }
tform.to_proc.call('12A') # => ArgumentError: invalid value for Integer(): "12A"

Instance Attribute Summary

Attributes inherited from Remi::Transform

#multi_arg, #source_metadata, #target_metadata

Instance Method Summary collapse

Methods inherited from Remi::Transform

#call, #to_proc

Constructor Details

#initialize(*args, **kargs, &block) ⇒ EnforceType

Returns a new instance of EnforceType.



440
441
442
# File 'lib/remi/transform.rb', line 440

def initialize(*args, **kargs, &block)
  super
end

Instance Method Details

#blank_handler(value) ⇒ Object



462
463
464
465
466
467
468
469
470
# File 'lib/remi/transform.rb', line 462

def blank_handler(value)
  return value unless value.blank?

  if if_blank.respond_to? :to_proc
    if_blank.to_proc.call(value)
  else
    if_blank
  end
end

#if_blankObject



456
457
458
459
460
# File 'lib/remi/transform.rb', line 456

def if_blank
  return @if_blank if @if_blank_set
  @if_blank_set = true
  @if_blank = .fetch(:if_blank, nil)
end

#in_formatObject



448
449
450
# File 'lib/remi/transform.rb', line 448

def in_format
  @in_format ||= .fetch(:in_format, '')
end

#scaleObject



452
453
454
# File 'lib/remi/transform.rb', line 452

def scale
  @scale ||= .fetch(:scale, 0)
end

#transform(value) ⇒ Object



472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
# File 'lib/remi/transform.rb', line 472

def transform(value)
  if value.blank?
    blank_handler(value)
  else
    case type
    when :string
      value
    when :integer
      Integer(value)
    when :float
      Float(value)
    when :decimal
      Float("%.#{scale}f" % Float(value))
    when :date
      Date.strptime(value, in_format)
    when :datetime
      Time.strptime(value, in_format)
    else
      raise ArgumentError, "Unknown type enforcement: #{type}"
    end
  end
end

#typeObject



444
445
446
# File 'lib/remi/transform.rb', line 444

def type
  @type ||= .fetch(:type, :string)
end