Class: ActiveFacts::CQL::Compiler::LogicalOr

Inherits:
Operation
  • Object
show all
Defined in:
lib/activefacts/cql/compiler/expression.rb

Instance Attribute Summary collapse

Attributes inherited from Operation

#binding, #certainty, #clause, #fact_type, #player, #role, #role_ref

Instance Method Summary collapse

Methods inherited from Operation

#bind, #conjunction, #identify_other_players, #identify_players_with_role_name, #is_equality_comparison, #is_naked_object_type, #leading_adjective, #literal, #match_existing_fact_type, #nested_clauses, #objectification_of, #objectified_as, #operands, #result_value_type, #role_name, #side_effects, #trailing_adjective, #value_constraint

Constructor Details

#initialize(*factors) ⇒ LogicalOr

Returns a new instance of LogicalOr.



494
495
496
# File 'lib/activefacts/cql/compiler/expression.rb', line 494

def initialize *factors
  @factors = factors
end

Instance Attribute Details

#factorsObject

Returns the value of attribute factors.



493
494
495
# File 'lib/activefacts/cql/compiler/expression.rb', line 493

def factors
  @factors
end

Instance Method Details

#compile(context) ⇒ Object



523
524
525
# File 'lib/activefacts/cql/compiler/expression.rb', line 523

def compile(context)
  compile_factors(context, @factors)
end

#compile_factors(context, factors) ⇒ Object



527
528
529
530
531
532
533
534
535
536
537
538
539
# File 'lib/activefacts/cql/compiler/expression.rb', line 527

def compile_factors(context, factors)
  if factors.size == 1
    factors[0].compile(context)
  else
    lhs = factors.shift
    lhs_expr = lhs.compile(context)
    rhs_expr = compile_factors(context, factors)
    context.vocabulary.constellation.Expression(
        :new, :expression_type => 'Binary', :operator => operator,
        :first_operand_expression => lhs_expr, :second_operand_expression => rhs_expr
    )
  end
end

#identify_player(context) ⇒ Object



506
507
508
509
510
511
# File 'lib/activefacts/cql/compiler/expression.rb', line 506

def identify_player context
  @player || begin
    v = context.vocabulary
    @player = @factors[0].player
  end
end

#inspectObject



517
# File 'lib/activefacts/cql/compiler/expression.rb', line 517

def inspect; to_s; end

#operatorObject



502
503
504
# File 'lib/activefacts/cql/compiler/expression.rb', line 502

def operator
  'or'
end

#refsObject



498
499
500
# File 'lib/activefacts/cql/compiler/expression.rb', line 498

def refs
  @factors
end

#result_type_name(context) ⇒ Object



513
514
515
# File 'lib/activefacts/cql/compiler/expression.rb', line 513

def result_type_name(context)
  "DISJUNCTION_OF<#{ @factors.map{|f| f.player.name}*' ' }>"
end

#to_sObject



519
520
521
# File 'lib/activefacts/cql/compiler/expression.rb', line 519

def to_s
  'DISJUNCTION(' + @factors.map{|factor| "#{factor.to_s}" } * ' OR ' + ')'
end