Class: Remi::Transform::Truthy

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

Overview

Public: Converts strings into booleans. Uses a regex to convert strings representing booleans to actual booleans. The truthy regex is /^(t|true|y|yes|1)$/i and the falsey regex is /^(f|false|n|no|0)$/i

allow_nils - Specifies whether to allow the result to include nils. If this is set to false, then the value is only checked against the truthy regex and the returned value is false if it doesn't match. If allow_nils is set to true, the both the truthy and the falsey regex are checked. If neither match, then the result is nil. (Default: false).

Examples:

Truthy.new.to_proc.call('True') # => true Truthy.new.to_proc.call('Yes') # => true Truthy.new.to_proc.call('y') # => true Truthy.new.to_proc.call('Yessire') # => false Truthy.new.to_proc.call('0') # => false Truthy.new.to_proc.call('Pineapple') # => false Truthy.new(allow_nils: false).to_proc.call('Pineapple') # => nil

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(*args, allow_nils: false, **kargs, &block) ⇒ Truthy

Returns a new instance of Truthy.



580
581
582
583
584
585
586
# File 'lib/remi/transform.rb', line 580

def initialize(*args, allow_nils: false, **kargs, &block)
  super
  @allow_nils = allow_nils

  @true_regex = /^(t|true|y|yes|1)$/i
  @false_regex = /^(f|false|n|no|0)$/i
end

Instance Method Details

#match_false(value) ⇒ Object



592
593
594
# File 'lib/remi/transform.rb', line 592

def match_false(value)
  !!value.match(@false_regex)
end

#match_true(value) ⇒ Object



588
589
590
# File 'lib/remi/transform.rb', line 588

def match_true(value)
  !!value.match(@true_regex)
end

#transform(value) ⇒ Object



596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
# File 'lib/remi/transform.rb', line 596

def transform(value)
  value = value.to_s

  if @allow_nils
    if match_true(value)
      true
    elsif match_false(value)
      false
    else
      nil
    end
  else
    match_true(value)
  end
end