class Glaemscribe::API::Rule
Attributes
dst_sheaf_chain[RW]
errors[R]
line[RW]
mode[R]
src_sheaf_chain[RW]
sub_rules[R]
Public Class Methods
new(line, rule_group)
click to toggle source
# File lib/api/rule.rb, line 33 def initialize(line, rule_group) @line = line @rule_group = rule_group @mode = @rule_group.mode @sub_rules = [] @errors = [] end
Public Instance Methods
finalize(cross_schema)
click to toggle source
# File lib/api/rule.rb, line 41 def finalize(cross_schema) if(@errors.any?) @errors.each { |e| @mode.errors << Glaeml::Error.new(@line, e) } return end srccounter = SheafChainIterator.new(@src_sheaf_chain) dstcounter = SheafChainIterator.new(@dst_sheaf_chain, cross_schema) if(srccounter.errors.any?) srccounter.errors.each{ |e| @mode.errors << Glaeml::Error.new(@line, e) } return end if(dstcounter.errors.any?) dstcounter.errors.each{ |e| @mode.errors << Glaeml::Error.new(@line, e) } return end srcp = srccounter.prototype dstp = dstcounter.prototype if srcp != dstp @mode.errors << Glaeml::Error.new(@line, "Source and destination are not compatible (#{srcp} vs #{dstp})") return end begin # All equivalent combinations ... src_combinations = srccounter.combinations # ... should be sent to one destination dst_combination = dstcounter.combinations.first src_combinations.each{ |src_combination| @sub_rules << SubRule.new(self, src_combination, dst_combination) } dstcounter.iterate() end while srccounter.iterate() end
p()
click to toggle source
# File lib/api/rule.rb, line 88 def p ret = ("=" * 30) + "\n" @sub_rules.each{ |sr| ret += sr.p } ret end