Class: FEEL::InstanceOf

Inherits:
Node
  • Object
show all
Defined in:
lib/feel/nodes.rb

Overview

  1. instance of = expression , “instance” , “of” , type ;

Instance Method Summary collapse

Methods inherited from Node

#qualified_names_in_context, #raise_evaluation_error

Instance Method Details

#eval(_context = {}) ⇒ Object



583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
# File 'lib/feel/nodes.rb', line 583

def eval(_context = {})
  case type.text_value
  when "string"
    ->(input) { input.is_a?(String) }
  when "number"
    ->(input) { input.is_a?(Numeric) }
  when "boolean"
    ->(input) { input.is_a?(TrueClass) || input.is_a?(FalseClass) }
  when "date"
    ->(input) { input.is_a?(Date) }
  when "time"
    ->(input) { input.is_a?(Time) }
  when "date and time"
    ->(input) { input.is_a?(DateTime) }
  when "duration"
    ->(input) { input.is_a?(ActiveSupport::Duration) }
  when "years and months duration"
    ->(input) { input.is_a?(ActiveSupport::Duration) && input.parts.keys.sort == [:months, :years] }
  when "days and time duration"
    ->(input) { input.is_a?(ActiveSupport::Duration) && input.parts.keys.sort == [:days, :hours, :minutes, :seconds] }
  when "years duration"
    ->(input) { input.is_a?(ActiveSupport::Duration) && input.parts.keys.sort == [:years] }
  when "months duration"
    ->(input) { input.is_a?(ActiveSupport::Duration) && input.parts.keys.sort == [:months] }
  when "days duration"
    ->(input) { input.is_a?(ActiveSupport::Duration) && input.parts.keys.sort == [:days] }
  when "hours duration"
    ->(input) { input.is_a?(ActiveSupport::Duration) && input.parts.keys.sort == [:hours] }
  when "minutes duration"
    ->(input) { input.is_a?(ActiveSupport::Duration) && input.parts.keys.sort == [:minutes] }
  when "seconds duration"
    ->(input) { input.is_a?(ActiveSupport::Duration) && input.parts.keys.sort == [:seconds] }
  when "time duration"
    ->(input) { input.is_a?(ActiveSupport::Duration) && input.parts.keys.sort == [:hours, :minutes, :seconds] }
  when "list"
    ->(input) { input.is_a?(Array) }
  when "interval"
    ->(input) { input.is_a?(Range) }
  when "context"
    ->(input) { input.is_a?(Hash) }
  when "any"
    ->(_input) { true }
  end
end