evalso 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -1,3 +1,3 @@
1
1
  module Evalso
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
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.run(language, code)
11
- Request.new(language, code).response
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 'http://eval.so/api/'
27
+ base_uri Evalso.base_uri
17
28
 
18
29
  attr_accessor :response
19
30
 
20
- def initialize(language, code)
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
- :api_key => "", # Doesn't actually use API keys yet.
24
- :language => language.to_s,
25
- :code => code,
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, :code
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.1
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-20 00:00:00.000000000 Z
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: &11206160 !ruby/object:Gem::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: *11206160
35
+ version_requirements: *12569420
25
36
  - !ruby/object:Gem::Dependency
26
37
  name: rake
27
- requirement: &11205360 !ruby/object:Gem::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: *11205360
46
+ version_requirements: *12568460
36
47
  description: Evaluates code safely, via http://eval.so
37
48
  email:
38
49
  - nick@duckinator.net