simpler 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. data/VERSION +1 -1
  2. data/lib/simpler.rb +22 -1
  3. data/spec/simpler_spec.rb +11 -0
  4. metadata +3 -3
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.3
1
+ 0.0.4
data/lib/simpler.rb CHANGED
@@ -55,17 +55,35 @@ class Simpler
55
55
  reply
56
56
  end
57
57
 
58
+ def error_message(error_string, r_code)
59
+ error_message = ""
60
+ error_message << "\n"
61
+ error_message << "*************************** Error inside R *****************************\n"
62
+ error_message << error_string
63
+ error_message << "------------------------- [R code submitted] ---------------------------\n"
64
+ error_message << r_code
65
+ error_message << "------------------------------------------------------------------------\n"
66
+ error_message
67
+ end
68
+
69
+
58
70
  # pushes string onto command array (if given), executes all commands, and
59
71
  # clears the command array.
60
72
  def run!(string=nil)
61
73
  @commands.push(string) if string
62
74
  reply = nil
75
+ error = nil
76
+ cmds_to_run = @commands.map {|v| v + "\n"}.join
63
77
  Open3.popen3("Rscript -") do |stdin, stdout, stderr|
64
- stdin.puts @commands.map {|v| v + "\n"}.join
78
+ stdin.puts cmds_to_run
65
79
  stdin.close_write
80
+ error = stderr.read
66
81
  reply = stdout.read
67
82
  end
68
83
  @commands.clear
84
+ if error.size > 0
85
+ raise Simpler::RError, error_message(error, cmds_to_run)
86
+ end
69
87
  Simpler::Reply.new(reply)
70
88
  end
71
89
 
@@ -88,4 +106,7 @@ class Simpler
88
106
 
89
107
  alias_method :go!, :run_with!
90
108
 
109
+ class RError < StandardError
110
+ end
111
+
91
112
  end
data/spec/simpler_spec.rb CHANGED
@@ -20,6 +20,17 @@ describe "Simpler" do
20
20
  reply.chomp.is "[1] 1.25"
21
21
  end
22
22
 
23
+ it 'raises a useful Simpler::RError on an R error and shows the submitted R code' do
24
+ code_matches = { "mean(unnamed_variable)" => %r{Error in mean.*: object .* not found},
25
+ "plsdf()" => %r{could not find function},
26
+ "plot(c(1,2), c(2))" => %r{'x' and 'y' lengths differ},
27
+ }
28
+ code_matches.each do |code, matches|
29
+ message = lambda { @r.run!(code) }.should.raise(Simpler::RError).message
30
+ message.should.match(matches)
31
+ message.should.include code
32
+ end
33
+ end
23
34
  end
24
35
 
25
36
  describe 'making data frames' do
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 3
9
- version: 0.0.3
8
+ - 4
9
+ version: 0.0.4
10
10
  platform: ruby
11
11
  authors:
12
12
  - John Prince
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-07-09 00:00:00 -06:00
17
+ date: 2010-07-13 00:00:00 -06:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency