class StageT

StageT create questions based con Table data

Public Instance Methods

run(pTable, pRow, pList) click to toggle source

range t1-t9

# File lib/asker/ai/stages/stage_t.rb, line 11
def run(pTable, pRow, pList) # process_tableXfields
  questions = []
  return questions unless type == 'text'

  if pTable.fields.count > 1
    questions = questions + process_table2fields(pTable, pRow, pList, 0, 1)
  elsif pTable.fields.count > 2
    questions = questions + process_table2fields(pTable, pRow, pList, 0, 2)
    # questions = questions + process_table2fields(pTable, pRow, pList, 1, 2)
  elsif pTable.fields.count > 3
    questions = questions + process_table2fields(pTable, pRow, pList, 0, 3)
    # questions = questions + process_table2fields(pTable, pRow, pList, 1, 3)
    # questions = questions + process_table2fields(pTable, pRow, pList, 2, 3)
  end

  questions
end

Private Instance Methods

process_table2fields(lTable, lRow, pList, pCol1, pCol2) click to toggle source
# File lib/asker/ai/stages/stage_t.rb, line 30
def process_table2fields(lTable, lRow, pList, pCol1, pCol2)
  questions = []
  # create questions

  # Using the column #0
  s = Set.new [ lRow[:data][0] , lang.text_for(:none) ]
  pList.each { |i| s.add( i[:data][0] ) }
  a = s.to_a

  if s.count > 3
    q=Question.new
    q.name="#{name}-#{num.to_s}-t1table-#{lTable.name}"
    q.text=lang.text_for(:t1table, name, lTable.fields[0].capitalize, lTable.fields[1].capitalize, lRow[:data][1])
    q.good=lRow[:data][0]
    q.bads << lang.text_for(:none)
    q.bads << a[2]
    q.bads << a[3]
    questions << q
  end

  s = Set.new [ lRow[:data][0], lang.text_for(:none) ]
  pList.each { |i| s.add( i[:data][0] ) }
  a = s.to_a

  if s.count > 4
    q = Question.new
    q.name = "#{name}-#{num.to_s}-t2table-#{lTable.name}"
    q.text = lang.text_for(:t2table, name, lTable.fields[0].capitalize, lTable.fields[1].capitalize, lRow[:data][1])
    q.good = lang.text_for(:none)
    q.bads << a[2]
    q.bads << a[3]
    q.bads << a[4]
    questions << q
  end

  # Using the column #1
  s = Set.new [ lRow[:data][1], lang.text_for(:none) ]
  pList.each { |i| s.add( i[:data][1] ) }
  a = s.to_a

  if s.count > 3
    q = Question.new
    q.name = "#{name}-#{num.to_s}-t3table-#{lTable.name}"
    q.text = lang.text_for(:t3table, name, lTable.fields[0].capitalize, lRow[:data][0], lTable.fields[1].capitalize)
    q.good = a[0]
    q.bads << lang.text_for(:none)
    q.bads << a[2]
    q.bads << a[3]
    questions << q
  end

  s = Set.new [ lRow[:data][1], lang.text_for(:none) ]
  pList.each { |i| s.add( i[:data][1] ) }
  a = s.to_a

  if s.count > 4
    q = Question.new
    q.name = "#{name}-#{num.to_s}-t4table-#{lTable.name}"
    q.text = lang.text_for(:t4table, name, lTable.fields[0].capitalize, lRow[:data][0], lTable.fields[1].capitalize)
    q.good = lang.text_for(:none)
    q.bads << a[2]
    q.bads << a[3]
    q.bads << a[4]
    questions << q
  end

  # Boolean association TRUE
  q = Question.new
  q.set_boolean
  q.name = "#{name}-#{num.to_s}t5table-#{lTable.name}"
  q.text = lang.text_for(:t5table, name, lTable.fields[0].capitalize, lRow[:data][0] ,lTable.fields[1].capitalize, lRow[:data][1] )
  q.good = "TRUE"
  questions << q

  # Boolean association FALSE
  s = Set.new [ lRow[:data][1] ]
  pList.each { |i| s.add( i[:data][1] ) }
  a = s.to_a

  if s.count > 1
    q = Question.new
    q.set_boolean
    q.name = "#{name}-#{num.to_s}-t6table-#{lTable.name}"
    q.text = lang.text_for(:t6table, name, lTable.fields[0].capitalize, lRow[:data][0], lTable.fields[1].capitalize, a[1] )
    q.good = "FALSE"
    questions << q
  end

  s = Set.new [ lRow[:data][0] ]
  pList.each { |i| s.add( i[:data][0] ) }
  a = s.to_a

  if s.count > 1
    q = Question.new
    q.set_boolean
    q.name = "#{name}-#{num.to_s}t7table-#{lTable.name}"
    q.text = lang.text_for(:t7table, name, lTable.fields[0].capitalize, a[1], lTable.fields[1].capitalize, lRow[:data][1] )
    q.good = "FALSE"
    questions << q
  end

  # Short answer with column #0, 1 word
  if lang.count_words(lRow[:data][0]) == 1
    q = Question.new
    q.set_short
    q.name = "#{name}-#{num.to_s}t8table-#{lTable.name}"
    q.text = lang.text_for(:t8table, name, lTable.fields[1].capitalize, lRow[:data][1], lTable.fields[0].capitalize)
    q.shorts << lRow[:data][0]
    q.shorts << lRow[:data][0].gsub('-', ' ').gsub('_', ' ')
    questions << q
  elsif lang.count_words(lRow[:data][0]) == 2
    q = Question.new
    q.set_short
    q.name = "#{name}-#{num.to_s}t9table-#{lTable.name}"
    q.text = lang.text_for(:t9table, name, lTable.fields[1].capitalize, lRow[:data][1], lTable.fields[0].capitalize, "[#{lang.hide_text(lRow[:data][0])}]", lang.count_words(lRow[:data][0]) )
    q.shorts << lRow[:data][0]
    q.shorts << lRow[:data][0].gsub('-', ' ').gsub('_', ' ')
    questions << q
  end

  # Short answer with column #1, 1 word
  if lang.count_words(lRow[:data][1]) == 1
    q = Question.new
    q.set_short
    q.name = "#{name}-#{num.to_s}t8table-#{lTable.name}"
    q.text = lang.text_for(:t8table, name, lTable.fields[0].capitalize, lRow[:data][0], lTable.fields[1].capitalize)
    q.shorts << lRow[:data][1]
    q.shorts << lRow[:data][1].gsub('-', ' ').gsub('_', ' ')
    questions << q
  elsif lang.count_words(lRow[:data][1]) == 2
    q = Question.new
    q.set_short
    q.name = "#{name}-#{num.to_s}t9table-#{lTable.name}"
    q.text = lang.text_for(:t9table, name, lTable.fields[0].capitalize, lRow[:data][0], lTable.fields[1].capitalize, "[#{lang.hide_text(lRow[:data][1])}]", lang.count_words(lRow[:data][1]) )
    q.shorts << lRow[:data][1]
    q.shorts << lRow[:data][1].gsub('-', ' ').gsub('_', ' ')
    questions << q
  end
  questions
end