Class: ActiveFacts::CQL::Compiler::ClauseMatchSideEffects

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(fact_type, clause, residual_adjectives, role_side_effects, negated = false) ⇒ ClauseMatchSideEffects

Returns a new instance of ClauseMatchSideEffects.



788
789
790
791
792
793
794
# File 'lib/activefacts/cql/compiler/clause.rb', line 788

def initialize fact_type, clause, residual_adjectives, role_side_effects, negated = false
  @fact_type = fact_type
  @clause = clause
  @residual_adjectives = residual_adjectives
  @role_side_effects = role_side_effects
  @negated = negated
end

Instance Attribute Details

#fact_typeObject (readonly)

Returns the value of attribute fact_type.



783
784
785
# File 'lib/activefacts/cql/compiler/clause.rb', line 783

def fact_type
  @fact_type
end

#negatedObject (readonly)

Returns the value of attribute negated.



785
786
787
# File 'lib/activefacts/cql/compiler/clause.rb', line 785

def negated
  @negated
end

#optionalObject (readonly)

Returns the value of attribute optional.



786
787
788
# File 'lib/activefacts/cql/compiler/clause.rb', line 786

def optional
  @optional
end

#residual_adjectivesObject (readonly)

Returns the value of attribute residual_adjectives.



782
783
784
# File 'lib/activefacts/cql/compiler/clause.rb', line 782

def residual_adjectives
  @residual_adjectives
end

#role_side_effectsObject (readonly)

One array of values per Reference matched, in order



784
785
786
# File 'lib/activefacts/cql/compiler/clause.rb', line 784

def role_side_effects
  @role_side_effects
end

Instance Method Details

#apply_all(&b) ⇒ Object



804
805
806
# File 'lib/activefacts/cql/compiler/clause.rb', line 804

def apply_all &b
  @role_side_effects.reverse.each{ |role_side_effect| b.call(*role_side_effect) }
end

#costObject



808
809
810
811
812
813
814
815
816
# File 'lib/activefacts/cql/compiler/clause.rb', line 808

def cost
  c = 0
  @role_side_effects.each do |side_effect|
    c += side_effect.cost
  end
  c += 1 if @residual_adjectives
  c += 2 if @negated
  c
end

#describeObject



818
819
820
821
822
823
824
825
826
827
828
# File 'lib/activefacts/cql/compiler/clause.rb', line 818

def describe
  actual_effects =
    @role_side_effects.map do |side_effect|
      ( [side_effect.common_supertype ? "supertype step over #{side_effect.common_supertype.name}" : nil] +
        [side_effect.absorbed_precursors > 0 ? "absorbs #{side_effect.absorbed_precursors} preceding words" : nil] +
        [side_effect.absorbed_followers > 0 ? "absorbs #{side_effect.absorbed_followers} following words" : nil] +
        [@negated ? 'implicitly negated' : nil]
      )
    end.flatten.compact*','
  actual_effects.empty? ? "no side effects" : actual_effects
end

#inspectObject



796
797
798
799
800
801
802
# File 'lib/activefacts/cql/compiler/clause.rb', line 796

def inspect
  'side-effects are [' +
    @role_side_effects.map{|r| r.to_s}*', ' +
    ']' +
    "#{@negated ? ' negated' : ''}" +
    "#{@residual_adjectives ? ' with residual adjectives' : ''}"
end