Name: simulation/lib/bitsnpieces.rb 
1:
require 'date'
2:
 
3:
class ListOfInstances < Riddl::Implementation
4:
  def response
5:
    result = XML::Smart.string('<instances/>')
6:
    Dir.glob(File.dirname(__FILE__) + "/../instances/*").each do |i|
7:
      next unless File.exists?(i + '/meta')
8:
      result.root.add('instance', File.read(i + '/meta').strip, :id => File.basename(i))
9:
    end
10:
 
11:
    return Riddl::Parameter::Complex.new("list","text/xml",result.to_s)
12:
  end
13:
end
14:
 
15:
class ListOfSimulations < Riddl::Implementation
16:
  def response
17:
    ins = @r.last
18:
    result = XML::Smart.string('<simulations/>')
19:
    Dir.glob(File.dirname(__FILE__) + "/../instances/#{ins}/*").each do |s|
20:
      next unless File.exists?(s + '/meta')
21:
      meta = JSON.parse(File.read(s + '/meta'))
22:
      sim = File.basename(s)
23:
      result.root.add('simulation', "/#{ins}/#{sim}/", :id => sim, :date => DateTime.parse(meta['date']).xmlschema, :offset => meta['offset'], :status => meta['status'])
24:
    end
25:
    return Riddl::Parameter::Complex.new("list","text/xml",result.to_s)
26:
  end
27:
end
28:
 
29:
class GetStatus < Riddl::Implementation
30:
  def response
31:
    ins = @r[0..1].join('/')
32:
    meta = JSON.parse(File.read(File.dirname(__FILE__) + "/../instances/#{ins}/meta"))
33:
    return Riddl::Parameter::Simple.new('status',meta['status'])
34:
  end
35:
end
36:
 
37:
class GetOffset < Riddl::Implementation
38:
  def response
39:
    ins = @r[0..1].join('/')
40:
    meta = JSON.parse(File.read(File.dirname(__FILE__) + "/../instances/#{ins}/meta"))
41:
    return Riddl::Parameter::Simple.new('offset',meta['offset'])
42:
  end
43:
end
44:
 
45:
class SetQuestionValue < Riddl::Implementation
46:
  def response
47:
    ins = @r[0..1].join('/')
48:
    qv = @p[0].value
49:
 
50:
    ### setting status to running
51:
    meta = JSON.parse(File.read(File.dirname(__FILE__) + "/../instances/#{ins}/meta"))
52:
    meta['status'] = "running"
53:
    File.write(File.dirname(__FILE__) + "/../instances/#{ins}/meta",JSON.generate(meta))
54:
 
55:
    ### adding result to question.json
56:
    ques = JSON.parse(File.read(File.dirname(__FILE__) + "/../instances/#{ins}/question.json"))
57:
    ques['result'] = qv
58:
    File.write(File.dirname(__FILE__) + "/../instances/#{ins}/question.json",JSON.pretty_generate(ques))
59:
 
60:
    nil
61:
  end
62:
end