class IfAction

Conditions/Loops

Public Class Methods

new(obj=nil) click to toggle source
Calls superclass method Action::new
# File lib/ruby-macrodroid/actions.rb, line 594
def initialize(obj=nil)
  
  $debug = false
  
  options = {
    a: true,
    constraint_list: []
  }  
  puts 'obj: ' + obj.inspect if $debug
  
  if obj.is_a? Hash then
    
    h = obj
    macro = h[:macro]
    h2 = options.merge(filter(options,h).merge(macro: macro))
    super(h2)      
    
  elsif obj.is_a? Array
    
    e, macro = obj
    super()
    puts 'e.xml: ' + e.xml if $debug
    puts 'e.text: ' + e.text.to_s.strip if $debug
    raw_txt = e.text.to_s.strip[/^#{@label}[^$]+/i] || e.text('item/description')
    puts 'raw_txt: ' + raw_txt.inspect if $debug
    
    clause = raw_txt[/^#{@label}(.*)/i,1]
    puts 'clause: ' + clause.inspect if $debug
    conditions = clause.split(/\s+\b(?:AND|OR)\b\s+/i)
    puts 'conditions: ' + conditions.inspect if $debug
    
    cp = ConstraintsNlp.new      
    
    @constraints = conditions.map do |c|
      puts 'c: ' + c.inspect  if $debug
      r = cp.find_constraint c
      puts 'found constraint ' + r.inspect if $debug
      
      r[0].new(r[1]) if r
      
    end         
    puts '@constraints: ' + @constraints.inspect if $debug
    
    # find any nested actions
    item = e.element('item')
    #puts  ('item: ' + item.xml.inspect).debug if $debug
    
    if item then
      
      ap = ActionsNlp.new
      obj2 = action_to_object(ap, item, item, macro)      
      puts 'obj2: ' + obj2.inspect if $debug
      #macro.add obj2
      
    end
    
    h = {
      constraint_list: @constraints.map(&:to_h)
    }
    super(h)        {}
    
  else
    # get the constraints

  end
  
end

Public Instance Methods

to_s(colour: false, indent: 0) click to toggle source
# File lib/ruby-macrodroid/actions.rb, line 662
def to_s(colour: false, indent: 0)
  
  h = @h.clone    
  #h.delete :macro
  @s = @label
  operator = @h[:is_or_condition] ? 'OR' : 'AND'
  constraints = @constraints.map \
      {|x| '  ' * indent + x.to_summary(colour: colour)}.join(" %s " % operator)    
  
  out = []
  out << "; %s" % @h[:comment] if @h[:comment]
  s = @s.lines.map {|x| ('  ' * indent) + x}.join
  out << s + constraints
  out.join("\n")
  
end