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 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