Class: Flow

Inherits:
Object
  • Object
show all
Defined in:
lib/args.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(root) ⇒ Flow

Returns a new instance of Flow.



91
92
93
# File 'lib/args.rb', line 91

def initialize(root)
  @root = root
end

Instance Attribute Details

#root ⇒ Object (readonly)

Returns the value of attribute root.



89
90
91
# File 'lib/args.rb', line 89

def root
  @root
end

Instance Method Details

#add(arg) ⇒ Object



195
196
197
198
199
200
201
# File 'lib/args.rb', line 195

def add(arg)
  if @root.nil?
    @root = arg
  else
    iadd(arg, @root)
  end  
end

#find(elt) ⇒ Object



139
140
141
# File 'lib/args.rb', line 139

def find(elt)
  return ifind(elt, @root, {})
end

#iadd(arg, node) ⇒ Object



187
188
189
190
191
192
193
# File 'lib/args.rb', line 187

def iadd(arg, node)
  if node.next_node.nil?
    node.next_node = arg
  else
    iadd(arg, node.next_node)
  end      
end

#iargs(node, args) ⇒ Object



95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# File 'lib/args.rb', line 95

def iargs(node, args)
  if node.nil?
    return args
  end
  if (node.class == Arg)
    if node.value
      new_args = args.clone
      new_args[node.name] = node.value
      args = new_args
    end
    iargs(node.next_node, args)
  elsif (node.class == Decision)
    node.chosen.each { |child|
      return iargs(child, args)
    }
  end
end

#ifind(elt, node, args) ⇒ Object



113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
# File 'lib/args.rb', line 113

def ifind(elt, node, args)
  if node.nil?
    return nil
  end
  if (node == elt)
    return args
  elsif (node.class == Arg)
    if node.value
      new_args = args.clone
      new_args[node.name] = node.value
      args = new_args
    end
    ifind(elt, node.next_node, args)
  elsif (node.class == Decision)
    found = false
    node.children.each { |child|
      result = ifind(elt, child, args)
      if (result)
        return result
      end
    }
    return nil
  end
end

#iset(name, value, node) ⇒ Object

return true for success false for unable to find arg name String for invalid arg



147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
# File 'lib/args.rb', line 147

def iset(name, value, node)
  if node.nil?
    return false
  end
  if (node.class == Arg )
    if (node.name == name)
      response = node.validate?(value)
      if (response.class == String)
        return response
      else
        node.value = value
        return true
      end
    else
      iset(name, value, node.next_node)
    end
  elsif (node.class == Decision)
    result = false
    node.children.each { |flow|
      response = iset(name, value, flow.root)
      if (response == true)
        result = true
      elsif (response.class == String)
        return response
      end
    }
    result
  end    
end

#parse(args) ⇒ Object



231
232
233
234
235
236
# File 'lib/args.rb', line 231

def parse(args)
  args.each { |arg|
    name, value = parse_line(arg)
    set(name, value)
  }
end

#parse_line(line) ⇒ Object



222
223
224
225
226
227
228
229
# File 'lib/args.rb', line 222

def parse_line(line)
  idx = line.index('=')
  if (idx)
    return line[0...idx], line[idx+1..-1]
  else
    line
  end
end


210
211
212
213
214
215
216
217
218
219
220
# File 'lib/args.rb', line 210

def print_flow(node)
  if node.nil?
    return
  end
  result = node.name + " - " + node.desc
  if (node.value)
    result += ":" + node.value
  end
  puts result
  print_flow(node.next_node)
end

#set(name, value) ⇒ Object



177
178
179
180
181
182
183
184
185
# File 'lib/args.rb', line 177

def set(name, value)
  response = iset(name, value, @root)
  if (response == false)
    puts "ERROR: could not find argument with name " + name
  elsif (response.class == String)
    puts "ERROR: " + response
  end
  response
end

#to_s ⇒ Object



203
204
205
206
207
208
# File 'lib/args.rb', line 203

def to_s
  args = iargs(@root, {})
  args.each { |name, value|
    puts name + ":" + value
  }
end