Class: Ruboty::Handlers::Wandbox
- Inherits:
-
Base
- Object
- Base
- Ruboty::Handlers::Wandbox
- Defined in:
- lib/ruboty/handlers/wandbox.rb
Instance Method Summary collapse
- #get_compiler_list ⇒ Object
-
#initialize(*__reserved__) ⇒ Wandbox
constructor
A new instance of Wandbox.
- #languages(message) ⇒ Object
- #process(result) ⇒ Object
- #read_uri(uri) ⇒ Object
- #setinput(message) ⇒ Object
- #submit(message) ⇒ Object
- #view(message) ⇒ Object
Constructor Details
#initialize(*__reserved__) ⇒ Wandbox
Returns a new instance of Wandbox.
11 12 13 14 15 16 17 18 19 |
# File 'lib/ruboty/handlers/wandbox.rb', line 11 def initialize(*__reserved__) super @base_uri=ENV['WANDBOX_BASE']&&!ENV['WANDBOX_BASE'].empty? ? ENV['WANDBOX_BASE'] : 'http://melpon.org/wandbox/' @base_uri+='/' if !@base_uri.end_with?('/') @input=nil @current_submission=nil @compiler_list=nil end |
Instance Method Details
#get_compiler_list ⇒ Object
20 21 22 23 24 25 26 27 28 29 |
# File 'lib/ruboty/handlers/wandbox.rb', line 20 def get_compiler_list @compiler_list ||= lambda{ lst=JSON.parse Net::HTTP.get URI.parse @base_uri+'api/list.json' Hash[*lst.flat_map{|e| [e['name'],e['switches'].flat_map{|f| f['options'] ? f['options'].map{|g|g['name']} : [f['name']] }] }] }.call end |
#languages(message) ⇒ Object
45 46 47 |
# File 'lib/ruboty/handlers/wandbox.rb', line 45 def languages() .reply get_compiler_list.map{|k,v|k+': '+v*','+"\n"}.join end |
#process(result) ⇒ Object
36 37 38 39 |
# File 'lib/ruboty/handlers/wandbox.rb', line 36 def process(result) #fixme: status!=0を許容するなら、compile errorをどうやって捕捉するか? result['program_output'] end |
#read_uri(uri) ⇒ Object
30 31 32 33 34 35 |
# File 'lib/ruboty/handlers/wandbox.rb', line 30 def read_uri(uri) return nil if !uri||uri.empty? Kernel.open(uri){|f| return f.read } end |
#setinput(message) ⇒ Object
48 49 50 51 52 53 54 55 56 57 |
# File 'lib/ruboty/handlers/wandbox.rb', line 48 def setinput() #input_uri: 入力ファイル(空文字列ならクリア) if ![:input_uri]||[:input_uri].empty? @input=nil .reply 'Input cleared.' else @input=read_uri([:input_uri]) .reply 'Input set.' end end |
#submit(message) ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/ruboty/handlers/wandbox.rb', line 58 def submit() #language: コンパイラID,オプションID(カンマ区切り)。それぞれ完全一致でなければならない。 #source_uri: ソースファイル #input_uri: 入力ファイル(空文字列ならsetinputの内容を使用) input=[:input_uri]&&![:input_uri].empty? ? read_uri([:input_uri]) : @input =[:language].split(',') lang=.shift begin =get_compiler_list[lang] if ! || !(-).empty? .reply '[Ruboty::Wandbox] invalid compiler name' return end end json={ compiler: lang, code: read_uri([:source_uri]), options: *',', stdin: input, save: false, #fixme } uri=URI.parse(@base_uri+'api/compile.json') Net::HTTP.start(uri.host,uri.port){|http| resp=http.post(uri.path,JSON.generate(json),{ 'Content-Type'=>'application/json', }) json=JSON.parse(resp.body) #p json #@current_submission=json['permlink'] .reply process(json) } end |
#view(message) ⇒ Object
91 92 93 94 95 96 |
# File 'lib/ruboty/handlers/wandbox.rb', line 91 def view() #id: wandbox ID(空文字列なら直前のsubmitで返されたIDを使用 ※現在permlinkを保存しない設定なので特に意味は無い) submission=[:id]&&![:id].empty? ? [:id] : @current_submission resp=JSON.parse Net::HTTP.get URI.parse @base_uri+'api/permlink/'+submission .reply process(resp['result']) end |