Class: Ruboty::Handlers::Ideone
- Inherits:
-
Base
- Object
- Base
- Ruboty::Handlers::Ideone
- Defined in:
- lib/ruboty/handlers/ideone.rb
Constant Summary collapse
- LANGUAGES =
[ {:key=>"7", :value=>"Ada (gnat-5.1)"}, {:key=>"45", :value=>"Assembler (gcc-5.1)"}, {:key=>"13", :value=>"Assembler (nasm-2.11.05)"}, {:key=>"104", :value=>"AWK (gawk) (gawk-4.1.1)"}, {:key=>"105", :value=>"AWK (mawk) (mawk-3.3)"}, {:key=>"28", :value=>"Bash (bash 4.3.33)"}, {:key=>"110", :value=>"bc (bc-1.06.95)"}, {:key=>"12", :value=>"Brainf**k (bff-1.0.5)"}, {:key=>"81", :value=>"C (clang 3.7)"}, {:key=>"11", :value=>"C (gcc-5.1)"}, {:key=>"27", :value=>"C# (mono-4.0.2)"}, {:key=>"82", :value=>"C++ (clang 3.7)"}, {:key=>"41", :value=>"C++ 4.3.2 (gcc-4.3.2)"}, {:key=>"1", :value=>"C++ 5.1 (gcc-5.1)"}, {:key=>"44", :value=>"C++14 (gcc-5.1)"}, {:key=>"34", :value=>"C99 strict (gcc-5.1)"}, {:key=>"14", :value=>"CLIPS (clips 6.24)"}, {:key=>"111", :value=>"Clojure (clojure 1.7)"}, {:key=>"118", :value=>"COBOL (open-cobol-1.1)"}, {:key=>"106", :value=>"COBOL 85 (tinycobol-0.65.9)"}, {:key=>"91", :value=>"CoffeeScript (1.9.3)"}, {:key=>"32", :value=>"Common Lisp (clisp) (clisp 2.49)"}, {:key=>"84", :value=>"D (ldc 0.14)"}, {:key=>"20", :value=>"D (gdc 5.1)"}, {:key=>"102", :value=>"D (dmd) (dmd-2.067.1)"}, {:key=>"96", :value=>"Elixir (1.1.0)"}, {:key=>"36", :value=>"Erlang (erl-18)"}, {:key=>"124", :value=>"F# (fsharp-3.1)"}, {:key=>"123", :value=>"Factor (factor-0.93)"}, {:key=>"125", :value=>"Falcon (falcon-0.9.6.6)"}, {:key=>"92", :value=>"Fantom (1.0.67)"}, {:key=>"107", :value=>"Forth (gforth-0.7.2)"}, {:key=>"5", :value=>"Fortran (gfortran-5.1)"}, {:key=>"114", :value=>"Go (1.4.2)"}, {:key=>"121", :value=>"Groovy (groovy-2.4)"}, {:key=>"21", :value=>"Haskell (ghc-7.8)"}, {:key=>"16", :value=>"Icon (iconc 9.4.3)"}, {:key=>"9", :value=>"Intercal (c-intercal 28.0-r1)"}, {:key=>"10", :value=>"Java (sun-jdk-8u51)"}, {:key=>"55", :value=>"Java7 (sun-jdk-1.7.0_10)"}, {:key=>"35", :value=>"JavaScript (rhino) (rhino-1.7.7)"}, {:key=>"112", :value=>"JavaScript (spidermonkey) (spidermonkey 24.2)"}, {:key=>"26", :value=>"Lua (luac 5.2)"}, {:key=>"30", :value=>"Nemerle (ncc 0.9.3)"}, {:key=>"25", :value=>"Nice (nicec 0.9.6)"}, {:key=>"122", :value=>"Nim (0.11.2)"}, {:key=>"56", :value=>"Node.js (0.12.7)"}, {:key=>"83", :value=>"Objective-C (clang 3.7)"}, {:key=>"43", :value=>"Objective-C (gcc-5.1)"}, {:key=>"8", :value=>"Ocaml (ocamlopt 4.01.0)"}, {:key=>"127", :value=>"Octave (3.6.2)"}, {:key=>"119", :value=>"Oz (mozart-1.4.0)"}, {:key=>"22", :value=>"Pascal (fpc) (fpc 2.6.4)"}, {:key=>"2", :value=>"Pascal (gpc) (gpc 20070904)"}, {:key=>"3", :value=>"Perl (perl 5.20.1)"}, {:key=>"54", :value=>"Perl 6 (rakudo-2014.07)"}, {:key=>"29", :value=>"PHP (php 5.6.4)"}, {:key=>"94", :value=>"PicoLisp (3.1.1)"}, {:key=>"19", :value=>"Pike (pike 7.8)"}, {:key=>"108", :value=>"Prolog (gnu) (gprolog-1.3.1)"}, {:key=>"15", :value=>"Prolog (swi) (swipl 5.6.64)"}, {:key=>"4", :value=>"Python (python 2.7.10)"}, {:key=>"99", :value=>"Python (Pypy) (Pypy)"}, {:key=>"116", :value=>"Python 3 (python-3.4)"}, {:key=>"117", :value=>"R (R-2.11.1)"}, {:key=>"17", :value=>"Ruby (ruby-2.1)"}, {:key=>"93", :value=>"Rust (1.0.0)"}, {:key=>"39", :value=>"Scala (scala-2.11.7)"}, {:key=>"97", :value=>"Scheme (chicken) (4.9)"}, {:key=>"33", :value=>"Scheme (guile) (guile 2.0.11)"}, {:key=>"23", :value=>"Smalltalk (gst 3.2.4)"}, {:key=>"40", :value=>"SQL (sqlite3-3.8.7)"}, {:key=>"38", :value=>"Tcl (tclsh 8.6)"}, {:key=>"62", :value=>"Text (text 6.10)"}, {:key=>"115", :value=>"Unlambda (unlambda-2.0.0)"}, {:key=>"101", :value=>"VB.NET (mono-3.10)"}, {:key=>"6", :value=>"Whitespace (wspace 0.3)"}, ]
Instance Method Summary collapse
-
#initialize(*__reserved__) ⇒ Ideone
constructor
A new instance of Ideone.
- #languages(message) ⇒ Object
- #read_uri(uri) ⇒ Object
- #setinput(message) ⇒ Object
- #submit(message) ⇒ Object
- #view(message) ⇒ Object
Constructor Details
#initialize(*__reserved__) ⇒ Ideone
Returns a new instance of Ideone.
90 91 92 93 94 95 96 97 98 99 |
# File 'lib/ruboty/handlers/ideone.rb', line 90 def initialize(*__reserved__) super @client=Savon.client(log:false,wsdl:'http://ideone.com/api/1/service.wsdl') @user=ENV['IDEONE_USER'] @pass=ENV['IDEONE_PASS'] @input=nil @current_submission=nil @languages=LANGUAGES end |
Instance Method Details
#languages(message) ⇒ Object
111 112 113 114 115 116 117 |
# File 'lib/ruboty/handlers/ideone.rb', line 111 def languages() resp=@client.call(:get_languages,message:{user:@user,pass:@pass}) item=resp.body[:get_languages_response][:return][:item][1][:value] if item&&item[:item] .reply item[:item].map{|e|"#{'%4d:'%e[:key]} #{e[:value]}\n"}.join end end |
#read_uri(uri) ⇒ Object
100 101 102 103 104 105 |
# File 'lib/ruboty/handlers/ideone.rb', line 100 def read_uri(uri) return nil if !uri||uri.empty? Kernel.open(uri){|f| return f.read } end |
#setinput(message) ⇒ Object
118 119 120 121 122 123 124 125 126 127 |
# File 'lib/ruboty/handlers/ideone.rb', line 118 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
128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 |
# File 'lib/ruboty/handlers/ideone.rb', line 128 def submit() #language: ID(数値)または言語名(文字列)。言語名の場合、記号類を除いて最大先頭一致のものを使用する。 #source_uri: ソースファイル #input_uri: 入力ファイル(空文字列ならsetinputの内容を使用) input=[:input_uri]&&![:input_uri].empty? ? read_uri([:input_uri]) : @input #guess lang lang=[:language] if lang.to_i>0 lang=lang.to_i else lang=lang.downcase.gsub(/[\s\(\)\.]/,'') lang=@languages.max_by{|e| _e=e[:value].downcase.gsub(/[\s\(\)\.]/,'') lang.size.downto(1).find{|i|_e.start_with?(lang[0,i])}||-1 }[:key].to_i end resp=@client.call(:create_submission,message:{ user:@user,pass:@pass,source_code:read_uri([:source_uri]),input:input,run:true,private:true,language:lang }) result=Hash[*resp.body[:create_submission_response][:return][:item].flat_map{|e|[e[:key],e[:value]]}] if result['error']=='AUTH_ERROR' .reply '[Ruboty::Ideone] wrong authentication' elsif result['error']!='OK' .reply '[Ruboty::Ideone] something wrong happened in submission' else @current_submission=result['link'] .reply 'http://ideone.com/'+result['link'] end end |
#view(message) ⇒ Object
157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 |
# File 'lib/ruboty/handlers/ideone.rb', line 157 def view() #id: ideone ID(空文字列なら直前のsubmitで返されたIDを使用) submission=[:id]&&![:id].empty? ? [:id] : @current_submission resp=@client.call(:get_submission_details,message:{ user:@user,pass:@pass,link:submission,with_output:true }) result=Hash[*resp.body[:get_submission_details_response][:return][:item].flat_map{|e|[e[:key],e[:value]]}] if result['status'].to_i<0 .reply '[Ruboty::Ideone] waiting for compilation' elsif result['status'].to_i==1 .reply '[Ruboty::Ideone] compiling' elsif result['status'].to_i==3 .reply '[Ruboty::Ideone] running' elsif result['error']!='OK' .reply '[Ruboty::Ideone] something wrong happened in execution' elsif result['result']=='15' .reply result['output'] else .reply('[Ruboty::Ideone] '+[ 0=>'not running', 11=>'compilation error', 12=>'runtime error', 13=>'time limit exceeded', 17=>'memory limit exceeded', 19=>'illegal system call', 20=>'internal error', ][result['result'].to_i]) end end |