Class: Remi::Transform::EnforceType
- Inherits:
-
Remi::Transform
- Object
- Remi::Transform
- Remi::Transform::EnforceType
- 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.source_metadata = { type: :date, in_format: '%m/%d/%Y' } tform.to_proc.call('02/22/2013') # => Date.new(2013,2,22)
tform = EnforceType.new tform.source_metadata = { type: :integer } tform.to_proc.call('12') # => 12
tform = EnforceType.new tform.source_metadata = { type: :integer } tform.to_proc.call('12A') # => ArgumentError: invalid value for Integer(): "12A"
Instance Attribute Summary
Attributes inherited from Remi::Transform
#multi_args, #source_metadata, #target_metadata
Instance Method Summary collapse
- #blank_handler(value) ⇒ Object
- #default_if_blank ⇒ Object
- #if_blank ⇒ Object
- #in_format ⇒ Object
-
#initialize(*args, **kargs, &block) ⇒ EnforceType
constructor
A new instance of EnforceType.
- #scale ⇒ Object
- #transform(value) ⇒ Object
- #type ⇒ Object
Methods inherited from Remi::Transform
Constructor Details
#initialize(*args, **kargs, &block) ⇒ EnforceType
Returns a new instance of EnforceType.
481 482 483 |
# File 'lib/remi/transform.rb', line 481 def initialize(*args, **kargs, &block) super end |
Instance Method Details
#blank_handler(value) ⇒ Object
503 504 505 506 507 508 509 510 511 |
# File 'lib/remi/transform.rb', line 503 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 |
#default_if_blank ⇒ Object
513 514 515 |
# File 'lib/remi/transform.rb', line 513 def default_if_blank type == :string ? '' : nil end |
#if_blank ⇒ Object
497 498 499 500 501 |
# File 'lib/remi/transform.rb', line 497 def if_blank return @if_blank if @if_blank_set @if_blank_set = true @if_blank = @source_metadata.fetch(:if_blank, default_if_blank) end |
#in_format ⇒ Object
489 490 491 |
# File 'lib/remi/transform.rb', line 489 def in_format @in_format ||= @source_metadata.fetch(:in_format, '') end |
#scale ⇒ Object
493 494 495 |
# File 'lib/remi/transform.rb', line 493 def scale @scale ||= @source_metadata.fetch(:scale, 0) end |
#transform(value) ⇒ Object
517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 |
# File 'lib/remi/transform.rb', line 517 def transform(value) if value.blank? && type != :json 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 value.is_a?(Date) ? value : Date.strptime(value, in_format) when :datetime value.is_a?(Time) ? value : Time.strptime(value, in_format) when :json if value.blank? && value != [] && value != {} blank_handler(value) else value.is_a?(Hash) || value.is_a?(Array) ? value : JSON.parse(value) end else raise ArgumentError, "Unknown type enforcement: #{type}" end end end |
#type ⇒ Object
485 486 487 |
# File 'lib/remi/transform.rb', line 485 def type @type ||= @source_metadata.fetch(:type, :string) end |