evalso 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/evalso.gemspec +1 -0
- data/lib/evalso/version.rb +1 -1
- data/lib/evalso.rb +64 -10
- metadata +17 -6
data/evalso.gemspec
CHANGED
@@ -18,6 +18,7 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
+
spec.add_runtime_dependency "httparty"
|
21
22
|
spec.add_development_dependency "bundler", "~> 1.3"
|
22
23
|
spec.add_development_dependency "rake"
|
23
24
|
end
|
data/lib/evalso/version.rb
CHANGED
data/lib/evalso.rb
CHANGED
@@ -1,29 +1,55 @@
|
|
1
1
|
require "evalso/version"
|
2
2
|
require "httparty"
|
3
3
|
require "json"
|
4
|
+
require "base64"
|
4
5
|
|
5
6
|
# TODO: Handle auth, once eval.so supports it.
|
6
7
|
|
8
|
+
# Current API docs: http://eval.so/api/1
|
9
|
+
|
7
10
|
module Evalso
|
8
11
|
API_VERSION = 1
|
9
12
|
|
10
|
-
def self.
|
11
|
-
|
13
|
+
def self.base_uri(uri = nil)
|
14
|
+
return @@base_uri unless uri
|
15
|
+
|
16
|
+
@@base_uri = uri
|
17
|
+
end
|
18
|
+
|
19
|
+
base_uri 'http://eval.so/api/'
|
20
|
+
|
21
|
+
def self.run(hash)
|
22
|
+
Request.new(hash).response
|
12
23
|
end
|
13
24
|
|
14
25
|
class Request
|
15
26
|
include HTTParty
|
16
|
-
base_uri
|
27
|
+
base_uri Evalso.base_uri
|
17
28
|
|
18
29
|
attr_accessor :response
|
19
30
|
|
20
|
-
|
31
|
+
# Usage:
|
32
|
+
# Evalso::Request.new(lang, code, inputFiles: ["filename.txt"])
|
33
|
+
# or
|
34
|
+
# Evalso::Request.new(language: lang, code: code, inputFiles: {"filename.txt" => "file contents"})
|
35
|
+
#
|
36
|
+
# Defaults:
|
37
|
+
# Evalso::Request.new(language: nil, code: nil, inputFiles: {}, compilationOnly: false)
|
38
|
+
#
|
39
|
+
# If `language` or `code` are not specified, an ArugmentError is raised.
|
40
|
+
def initialize(hash)
|
21
41
|
hash = {
|
22
42
|
:api_version => Evalso::API_VERSION,
|
23
|
-
:
|
24
|
-
:
|
25
|
-
:
|
26
|
-
|
43
|
+
:language => nil,
|
44
|
+
:code => nil,
|
45
|
+
:inputFiles => {},
|
46
|
+
:compilationOnly => false,
|
47
|
+
}.merge(hash)
|
48
|
+
|
49
|
+
raise ArgumentError, "no language specified." unless hash[:language]
|
50
|
+
raise ArgumentError, "no code specified." unless hash[:code]
|
51
|
+
|
52
|
+
hash[:inputFiles] = handle_input_files(hash[:inputFiles])
|
27
53
|
|
28
54
|
opts = {
|
29
55
|
:body => hash.to_json,
|
@@ -33,12 +59,32 @@ module Evalso
|
|
33
59
|
}
|
34
60
|
|
35
61
|
ret = JSON.parse(self.class.post('/evaluate', opts).body)
|
36
|
-
@response = Response.new(code, ret)
|
62
|
+
@response = Response.new(hash[:code], ret)
|
63
|
+
end
|
64
|
+
|
65
|
+
def handle_input_files(files)
|
66
|
+
# If files is an array of filenames,
|
67
|
+
# make it a hash of filenames => file content.
|
68
|
+
if files.is_a?(Array)
|
69
|
+
ret = {}
|
70
|
+
files.each do |file|
|
71
|
+
ret[file] = open(file).read
|
72
|
+
end
|
73
|
+
|
74
|
+
files = ret
|
75
|
+
end
|
76
|
+
|
77
|
+
files.keys.each do |file|
|
78
|
+
files[file] = Base64.encode64(files[file])
|
79
|
+
end
|
80
|
+
|
81
|
+
files
|
37
82
|
end
|
38
83
|
end
|
39
84
|
|
40
85
|
class Response
|
41
|
-
attr_accessor :stdout, :stderr, :wall_time, :remaining_evaluations,
|
86
|
+
attr_accessor :code, :stdout, :stderr, :wall_time, :remaining_evaluations,
|
87
|
+
:output_files, :compilation_result
|
42
88
|
|
43
89
|
def initialize(code, hash)
|
44
90
|
@code = code
|
@@ -46,6 +92,14 @@ module Evalso
|
|
46
92
|
@stderr = hash["stderr"]
|
47
93
|
@wall_time = hash["wallTime"]
|
48
94
|
@exit_code = hash["exitCode"]
|
95
|
+
@output_files = handle_output_files(hash["outputFiles"] || {})
|
96
|
+
@compilation_result = hash["compilationResult"]
|
97
|
+
end
|
98
|
+
|
99
|
+
def handle_output_files(files)
|
100
|
+
files.keys.each do |file|
|
101
|
+
files[file] = Base64.decode64(files[file])
|
102
|
+
end
|
49
103
|
end
|
50
104
|
|
51
105
|
def inspect
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: evalso
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,22 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-04-
|
12
|
+
date: 2013-04-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: httparty
|
16
|
+
requirement: &12570180 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *12570180
|
14
25
|
- !ruby/object:Gem::Dependency
|
15
26
|
name: bundler
|
16
|
-
requirement: &
|
27
|
+
requirement: &12569420 !ruby/object:Gem::Requirement
|
17
28
|
none: false
|
18
29
|
requirements:
|
19
30
|
- - ~>
|
@@ -21,10 +32,10 @@ dependencies:
|
|
21
32
|
version: '1.3'
|
22
33
|
type: :development
|
23
34
|
prerelease: false
|
24
|
-
version_requirements: *
|
35
|
+
version_requirements: *12569420
|
25
36
|
- !ruby/object:Gem::Dependency
|
26
37
|
name: rake
|
27
|
-
requirement: &
|
38
|
+
requirement: &12568460 !ruby/object:Gem::Requirement
|
28
39
|
none: false
|
29
40
|
requirements:
|
30
41
|
- - ! '>='
|
@@ -32,7 +43,7 @@ dependencies:
|
|
32
43
|
version: '0'
|
33
44
|
type: :development
|
34
45
|
prerelease: false
|
35
|
-
version_requirements: *
|
46
|
+
version_requirements: *12568460
|
36
47
|
description: Evaluates code safely, via http://eval.so
|
37
48
|
email:
|
38
49
|
- nick@duckinator.net
|