rserve-client 0.3.1 → 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +6 -0
- data/.rspec +1 -2
- data/.travis.yml +16 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +31 -0
- data/History.txt +5 -0
- data/Manifest.txt +2 -0
- data/{README.txt → README.md} +10 -9
- data/Rakefile +4 -14
- data/lib/rserve.rb +1 -1
- data/lib/rserve/rexp/double.rb +7 -3
- data/lib/rserve/rexp/integer.rb +3 -3
- data/lib/rserve/rexp/string.rb +7 -4
- data/rserve-client.gemspec +22 -0
- data/spec/rserve_bug_1_spec.rb +27 -0
- data/spec/rserve_bug_26_spec.rb +17 -0
- data/spec/rserve_connection_spec.rb +4 -4
- data/spec/rserve_double_spec.rb +7 -7
- data/spec/rserve_integer_spec.rb +2 -3
- data/spec/rserve_logical_spec.rb +2 -2
- data/spec/rserve_rexp_spec.rb +3 -3
- data/spec/rserve_rexp_to_ruby_spec.rb +8 -2
- data/spec/rserve_rexpfactory_spec.rb +7 -6
- data/spec/rserve_rfactor_spec.rb +4 -4
- data/spec/rserve_rlist_spec.rb +3 -3
- data/spec/rserve_spec.rb +8 -8
- data/spec/rserve_talk_spec.rb +1 -1
- data/spec/rserve_withnames_spec.rb +2 -2
- data/spec/spec_helper.rb +16 -0
- metadata +36 -100
- data/.gemtest +0 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 4c3a03347161784ff8220b9e7a8ef33620643fa5
|
4
|
+
data.tar.gz: 46b6892b3f439202a362f3c1db6f9f75c26eb828
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 884b4e27bd68a01679bf774f21ee5f4b022ca591fef8f27cd1058ed27259da612cd6632e3206a570274399af195f137ec837c0ab5040535e895416ab688417f1
|
7
|
+
data.tar.gz: 0909cebb7571cadda549e0c5965a01e58b4e1a46d3b48e750653a347b158afa8c483440ccc40c557fb8d5d96c3a3451ec440722a4e3699d02affc20be0713cd6
|
data/.gitignore
ADDED
data/.rspec
CHANGED
data/.travis.yml
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
language:
|
2
|
+
ruby
|
3
|
+
|
4
|
+
rvm:
|
5
|
+
- '1.8.7'
|
6
|
+
- '1.9.3'
|
7
|
+
- '2.0.0'
|
8
|
+
- '2.1.1'
|
9
|
+
|
10
|
+
script:
|
11
|
+
bundle exec rake spec
|
12
|
+
|
13
|
+
before_install:
|
14
|
+
- sudo apt-get update -qq
|
15
|
+
- sudo apt-get install -y r-base r-base-dev
|
16
|
+
- sudo Rscript -e "install.packages(c('Rserve','icc'),,'http://cran.us.r-project.org')"
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
GEM
|
2
|
+
remote: https://rubygems.org/
|
3
|
+
specs:
|
4
|
+
diff-lcs (1.3)
|
5
|
+
hoe (3.16.0)
|
6
|
+
rake (>= 0.8, < 13.0)
|
7
|
+
rake (12.0.0)
|
8
|
+
rspec (3.6.0)
|
9
|
+
rspec-core (~> 3.6.0)
|
10
|
+
rspec-expectations (~> 3.6.0)
|
11
|
+
rspec-mocks (~> 3.6.0)
|
12
|
+
rspec-core (3.6.0)
|
13
|
+
rspec-support (~> 3.6.0)
|
14
|
+
rspec-expectations (3.6.0)
|
15
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
16
|
+
rspec-support (~> 3.6.0)
|
17
|
+
rspec-mocks (3.6.0)
|
18
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
19
|
+
rspec-support (~> 3.6.0)
|
20
|
+
rspec-support (3.6.0)
|
21
|
+
|
22
|
+
PLATFORMS
|
23
|
+
ruby
|
24
|
+
|
25
|
+
DEPENDENCIES
|
26
|
+
hoe
|
27
|
+
rake
|
28
|
+
rspec
|
29
|
+
|
30
|
+
BUNDLED WITH
|
31
|
+
1.14.6
|
data/History.txt
CHANGED
data/Manifest.txt
CHANGED
@@ -48,6 +48,8 @@ lib/rserve/with2dnames.rb
|
|
48
48
|
lib/rserve/with2dsizes.rb
|
49
49
|
lib/rserve/withattributes.rb
|
50
50
|
lib/rserve/withnames.rb
|
51
|
+
spec/rserve_bug_1_spec.rb
|
52
|
+
spec/rserve_bug_26_spec.rb
|
51
53
|
spec/rserve_connection_on_unix_spec.rb
|
52
54
|
spec/rserve_connection_spec.rb
|
53
55
|
spec/rserve_double_spec.rb
|
data/{README.txt → README.md}
RENAMED
@@ -1,15 +1,16 @@
|
|
1
|
-
|
1
|
+
# rserve-client
|
2
2
|
|
3
3
|
* http://github.com/clbustos/Rserve-Ruby-client
|
4
4
|
|
5
|
+
[![Build Status](https://travis-ci.org/clbustos/Rserve-Ruby-client.svg?branch=master)](https://travis-ci.org/clbustos/Rserve-Ruby-client)
|
5
6
|
|
6
|
-
|
7
|
+
## DESCRIPTION:
|
7
8
|
|
8
9
|
Ruby client for Rserve, a Binary R server (http://www.rforge.net/Rserve/).
|
9
10
|
|
10
11
|
Follows closely the new Java client API, but maintains all Ruby conventions when possible.
|
11
12
|
|
12
|
-
|
13
|
+
## FEATURES / LIMITATIONS
|
13
14
|
|
14
15
|
* 100% ruby
|
15
16
|
* Uses TCP/IP sockets to interchange data and commands
|
@@ -28,7 +29,7 @@ Cons:
|
|
28
29
|
* Requires Rserve
|
29
30
|
* Limited features on Windows, caused by limitations on Rserve on this platform: single concurrent connection allowed, server crash on parse errors and can't spawn sessions.
|
30
31
|
|
31
|
-
|
32
|
+
## RELATED LIBRARIES (Ruby / R)
|
32
33
|
|
33
34
|
* Rinruby [http://rinruby.ddahl.org/]
|
34
35
|
* 100% ruby
|
@@ -54,7 +55,7 @@ Cons:
|
|
54
55
|
* Not available for alternative implementations of Ruby (JRuby, IronRuby and Rubinius)
|
55
56
|
|
56
57
|
|
57
|
-
|
58
|
+
## TODO
|
58
59
|
|
59
60
|
Implements
|
60
61
|
|
@@ -67,7 +68,7 @@ Spec
|
|
67
68
|
* First tutorial on R
|
68
69
|
|
69
70
|
|
70
|
-
|
71
|
+
## SYNOPSIS:
|
71
72
|
|
72
73
|
require 'rserve'
|
73
74
|
con=Rserve::Connection.new
|
@@ -105,16 +106,16 @@ Spec
|
|
105
106
|
|
106
107
|
=> #<Rserve::REXP::GenericVector:0x000000010c81d0 @attr=nil, @payload=#<Rserve::Rlist:0x000000010c8278 @names=nil, @data=[#<Rserve::REXP::String:0x000000010c86d8 @payload=["a"], @attr=nil>, #<Rserve::REXP::String:0x000000010c85c0 @payload=["b"], @attr=nil>, #<Rserve::REXP::String:0x000000010c82e8 @payload=["c", "d"], @attr=nil>]>>
|
107
108
|
|
108
|
-
|
109
|
+
## REQUIREMENTS:
|
109
110
|
|
110
111
|
* R
|
111
112
|
* Rserve
|
112
113
|
|
113
|
-
|
114
|
+
## INSTALL:
|
114
115
|
|
115
116
|
sudo gem install rserve-client
|
116
117
|
|
117
|
-
|
118
|
+
## LICENSE:
|
118
119
|
|
119
120
|
REngine - Java interface to R
|
120
121
|
Copyright (C) 2004,5,6,7 Simon Urbanek
|
data/Rakefile
CHANGED
@@ -1,24 +1,14 @@
|
|
1
1
|
# -*- ruby -*-
|
2
2
|
$:.unshift(File.dirname(__FILE__)+"/lib")
|
3
3
|
require 'rubygems'
|
4
|
-
require 'hoe'
|
5
4
|
require 'rserve'
|
6
|
-
require 'rubyforge'
|
7
|
-
Hoe.plugin :git
|
8
|
-
Hoe.plugin :rubyforge
|
9
|
-
|
10
5
|
require 'rspec'
|
11
6
|
require 'rspec/core/rake_task'
|
12
7
|
|
8
|
+
require 'bundler'
|
9
|
+
Bundler::GemHelper.install_tasks
|
13
10
|
|
14
|
-
Hoe.spec 'rserve-client' do
|
15
|
-
self.testlib=:rspec
|
16
|
-
self.test_globs="spec/*_spec.rb"
|
17
|
-
self.version=Rserve::VERSION
|
18
|
-
self.rubyforge_name = 'ruby-statsample' # if different than 'rserve'
|
19
|
-
self.remote_rdoc_dir = "rserve-client"
|
20
|
-
self.developer('Claudio Bustos', 'clbustos_AT_gmail.com')
|
21
|
-
self.extra_dev_deps << ["rspec","~>2.0"]
|
22
|
-
end
|
23
11
|
|
24
12
|
# vim: syntax=ruby
|
13
|
+
|
14
|
+
|
data/lib/rserve.rb
CHANGED
data/lib/rserve/rexp/double.rb
CHANGED
@@ -4,7 +4,9 @@ module Rserve
|
|
4
4
|
class Double < REXP::Vector
|
5
5
|
attr_reader :payload
|
6
6
|
# NA is arch dependent
|
7
|
+
|
7
8
|
case RbConfig::CONFIG['arch']
|
9
|
+
|
8
10
|
when /i686-linux|mswin|mingw/
|
9
11
|
NA = 269653970229425383598692395468593241088322026492507901905402939417320933254485890939796955099302180188971623023005661539310855695935759376615857567599472873400528811349204333736152257830107446553333670133666606746438802800063353690283455789426038632208916715592554825644961573453826957827246636338344317943808
|
10
12
|
else
|
@@ -47,18 +49,19 @@ module Rserve
|
|
47
49
|
@payload.map {|v| v.to_f.to_s}
|
48
50
|
end
|
49
51
|
|
50
|
-
def na?(value
|
52
|
+
def na?(value=:nil)
|
51
53
|
#if value.nil?
|
52
54
|
# @payload.map {|v| v.respond_to? :nan and v.nan?}
|
53
55
|
#else
|
54
56
|
# value.respond_to? :nan? and value.nan?
|
55
57
|
#end
|
56
|
-
|
58
|
+
#p @payload
|
59
|
+
return _na?(value) unless value==:nil
|
57
60
|
@payload.map {|v| _na?(v) }
|
58
61
|
end
|
59
62
|
|
60
63
|
def self.infinite?(value)
|
61
|
-
value.respond_to?(:infinite?) and value.infinite?
|
64
|
+
value.respond_to?(:infinite?) and !value.infinite?.nil?
|
62
65
|
end
|
63
66
|
|
64
67
|
|
@@ -81,6 +84,7 @@ module Rserve
|
|
81
84
|
protected
|
82
85
|
|
83
86
|
def _na?(value)
|
87
|
+
return true if value.nil?
|
84
88
|
if value.is_a? Float
|
85
89
|
return true if value.nan?
|
86
90
|
return false if value.infinite?
|
data/lib/rserve/rexp/integer.rb
CHANGED
@@ -3,7 +3,7 @@ module Rserve
|
|
3
3
|
class Integer < REXP::Vector
|
4
4
|
public_class_method :new
|
5
5
|
attr_reader :payload
|
6
|
-
NA = -2147483648
|
6
|
+
NA = -2147483648
|
7
7
|
def initialize(data, attrs=nil)
|
8
8
|
@payload=case data
|
9
9
|
when Integer
|
@@ -11,7 +11,7 @@ module Rserve
|
|
11
11
|
when Numeric
|
12
12
|
[data.to_i]
|
13
13
|
when Array
|
14
|
-
data
|
14
|
+
data.map {|v| v.to_i}
|
15
15
|
else
|
16
16
|
raise ArgumentError, "Should be Numeric or Array"
|
17
17
|
end
|
@@ -30,7 +30,7 @@ module Rserve
|
|
30
30
|
@payload
|
31
31
|
end
|
32
32
|
def as_doubles
|
33
|
-
@payload.map(
|
33
|
+
@payload.map {|v| na?(v) ? nil : v.to_f}
|
34
34
|
end
|
35
35
|
def as_strings
|
36
36
|
@payload.map(&:to_s)
|
data/lib/rserve/rexp/string.rb
CHANGED
@@ -22,11 +22,14 @@ module Rserve
|
|
22
22
|
@payload
|
23
23
|
end
|
24
24
|
|
25
|
-
def na?(value
|
26
|
-
|
27
|
-
|
25
|
+
def na?(value=:nil)
|
26
|
+
|
27
|
+
if value==:nil
|
28
|
+
@payload.map {|v|
|
29
|
+
v.unpack("C")==[255] or v=="NA" # Ugly hack
|
30
|
+
}
|
28
31
|
else
|
29
|
-
|
32
|
+
value.unpack("C")==[255] or value=="NA"
|
30
33
|
end
|
31
34
|
end
|
32
35
|
def to_debug_string
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.unshift(File.expand_path(File.dirname(__FILE__)+"/lib"))
|
3
|
+
|
4
|
+
require File.expand_path("../lib/rserve", __FILE__)
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = "rserve-client"
|
8
|
+
s.version = Rserve::VERSION
|
9
|
+
s.platform = Gem::Platform::RUBY
|
10
|
+
s.authors = ['Claudio Bustos']
|
11
|
+
s.email = []
|
12
|
+
s.homepage = "http://rubygems.org/gems/rserve-client"
|
13
|
+
s.summary = "Rserve client for ruby"
|
14
|
+
s.description = "Rserve client for ruby"
|
15
|
+
|
16
|
+
s.required_rubygems_version = ">= 1.3.6"
|
17
|
+
s.add_development_dependency "bundler", ">= 1.0.0"
|
18
|
+
s.add_development_dependency "rspec"
|
19
|
+
s.files = `git ls-files`.split("\n")
|
20
|
+
s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
|
21
|
+
s.require_path = 'lib'
|
22
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__)+"/spec_helper.rb")
|
2
|
+
describe "Bug #1 on statsample" do
|
3
|
+
before do
|
4
|
+
@r=Rserve::Connection.new()
|
5
|
+
end
|
6
|
+
after do
|
7
|
+
@r.close if @r.connected?
|
8
|
+
end
|
9
|
+
it "should return a correct irr object" do
|
10
|
+
|
11
|
+
@r.void_eval("
|
12
|
+
install.packages('irr');
|
13
|
+
library(irr);
|
14
|
+
ds<-data.frame(a=rnorm(100),b=rnorm(100),c=rnorm(100),d=rnorm(100));
|
15
|
+
iccs=list(
|
16
|
+
icc_1=icc(ds,'o','c','s'),
|
17
|
+
icc_k=icc(ds,'o','c','a'),
|
18
|
+
icc_c_1=icc(ds,'t','c','s'),
|
19
|
+
icc_c_k=icc(ds,'t','c','a'),
|
20
|
+
icc_a_1=icc(ds,'t','a','s'),
|
21
|
+
icc_a_k=icc(ds,'t','a','a'))
|
22
|
+
")
|
23
|
+
|
24
|
+
@iccs=@r.eval('iccs').to_ruby
|
25
|
+
@iccs.should be_instance_of(Array)
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__)+"/spec_helper.rb")
|
2
|
+
describe "Bug Error handling NA values on integer matrix #26" do
|
3
|
+
before do
|
4
|
+
@r=Rserve::Connection.new()
|
5
|
+
end
|
6
|
+
after do
|
7
|
+
@r.close if @r.connected?
|
8
|
+
end
|
9
|
+
it "should return a correct Matrix" do
|
10
|
+
|
11
|
+
@r.eval("m<-matrix(as.integer(c(1, NA, NA, 4)), ncol=2)")
|
12
|
+
|
13
|
+
@m=@r.eval('m').to_ruby
|
14
|
+
@m.should be_instance_of(Matrix)
|
15
|
+
expect(@m).to eq(Matrix[[1,nil],[nil,4]])
|
16
|
+
end
|
17
|
+
end
|
@@ -15,9 +15,9 @@ describe Rserve::Connection do
|
|
15
15
|
end
|
16
16
|
it "should quit correctly" do
|
17
17
|
@r.should be_connected
|
18
|
-
@r.close.should
|
18
|
+
@r.close.should be true
|
19
19
|
@r.should_not be_connected
|
20
|
-
@r.close.should
|
20
|
+
@r.close.should be true
|
21
21
|
end
|
22
22
|
it "raise an error if eval is clased after closed" do
|
23
23
|
@r.close
|
@@ -33,7 +33,7 @@ describe Rserve::Connection do
|
|
33
33
|
@r=Rserve::Connection.new
|
34
34
|
end
|
35
35
|
it "method eval_void should return true with correct expression" do
|
36
|
-
@r.void_eval("x<-1").should
|
36
|
+
@r.void_eval("x<-1").should be true
|
37
37
|
end
|
38
38
|
|
39
39
|
it "method eval should return a simple object" do
|
@@ -44,7 +44,7 @@ describe Rserve::Connection do
|
|
44
44
|
|
45
45
|
|
46
46
|
it "should eval_void and eval correctly" do
|
47
|
-
@r.void_eval("x<-c(TRUE,FALSE)").should
|
47
|
+
@r.void_eval("x<-c(TRUE,FALSE)").should be true
|
48
48
|
la=@r.eval("x")
|
49
49
|
la.should be_instance_of(Rserve::REXP::Logical)
|
50
50
|
la.true?.should==[true,false]
|
data/spec/rserve_double_spec.rb
CHANGED
@@ -20,9 +20,9 @@ describe Rserve::REXP::Double do
|
|
20
20
|
end
|
21
21
|
|
22
22
|
it "method na? should return coherent answer" do
|
23
|
-
@a.na?(@a.as_integers[0]).
|
24
|
-
@a.na?(@a.as_integers[2]).
|
25
|
-
@a.na
|
23
|
+
expect(@a.na?(@a.as_integers[0])).to be false
|
24
|
+
expect(@a.na?(@a.as_integers[2])).to be true
|
25
|
+
expect(@a.na?).to eq([false,false,true,false,false, false])
|
26
26
|
end
|
27
27
|
it "to_a should return correct values with NA" do
|
28
28
|
@a.to_a.should==[3,5, nil, 10, 20, Float::INFINITY]
|
@@ -36,16 +36,16 @@ describe Rserve::REXP::Double do
|
|
36
36
|
describe "infinite?" do
|
37
37
|
|
38
38
|
it "should return false for non Float objects" do
|
39
|
-
Rserve::REXP::Double.infinite?(1).
|
39
|
+
expect(Rserve::REXP::Double.infinite?(1)).to be false
|
40
40
|
end
|
41
41
|
|
42
42
|
it "should return false for non infinite floats" do
|
43
|
-
Rserve::REXP::Double.infinite?(Math::PI).should
|
43
|
+
Rserve::REXP::Double.infinite?(Math::PI).should be false
|
44
44
|
end
|
45
45
|
|
46
46
|
it "should return true for infinite floats" do
|
47
|
-
Rserve::REXP::Double.infinite?(-Float::INFINITY).should
|
48
|
-
Rserve::REXP::Double.infinite?(Float::INFINITY).should
|
47
|
+
Rserve::REXP::Double.infinite?(-Float::INFINITY).should be true
|
48
|
+
Rserve::REXP::Double.infinite?(Float::INFINITY).should be true
|
49
49
|
end
|
50
50
|
|
51
51
|
end
|
data/spec/rserve_integer_spec.rb
CHANGED
@@ -20,11 +20,10 @@ describe Rserve::REXP::Integer do
|
|
20
20
|
before do
|
21
21
|
@payload=[3,5,Rserve::REXP::Integer::NA, 10,20]
|
22
22
|
@a=Rserve::REXP::Integer.new(@payload)
|
23
|
-
|
24
23
|
end
|
25
24
|
it "method is_NA should return coherent answer" do
|
26
|
-
@a.na?(@a.as_integers[0]).should
|
27
|
-
@a.na?(@a.as_integers[2]).should
|
25
|
+
@a.na?(@a.as_integers[0]).should be false
|
26
|
+
@a.na?(@a.as_integers[2]).should be true
|
28
27
|
@a.na?.should==[false,false,true,false,false]
|
29
28
|
end
|
30
29
|
it "to_a should return correct values with NA" do
|
data/spec/rserve_logical_spec.rb
CHANGED
@@ -21,8 +21,8 @@ describe Rserve::REXP::Integer do
|
|
21
21
|
end
|
22
22
|
it "method is_NA should return coherent answer" do
|
23
23
|
@a.na?.should==[false,true,false]
|
24
|
-
@a.na?(@a.as_bytes[0]).should
|
25
|
-
@a.na?(@a.as_bytes[1]).should
|
24
|
+
@a.na?(@a.as_bytes[0]).should be false
|
25
|
+
@a.na?(@a.as_bytes[1]).should be true
|
26
26
|
end
|
27
27
|
it "method to_a should return correct answer" do
|
28
28
|
@a.to_a.should==[true,nil,false]
|
data/spec/rserve_rexp_spec.rb
CHANGED
@@ -43,13 +43,13 @@ describe Rserve::REXP do
|
|
43
43
|
@v.as_string.should=="1.5"
|
44
44
|
end
|
45
45
|
it "method has_attribute? should return false for non-lists" do
|
46
|
-
@v.has_attribute?('randomattribute').should
|
46
|
+
@v.has_attribute?('randomattribute').should be false
|
47
47
|
end
|
48
48
|
it "method has_attribute? should return true for existing value" do
|
49
|
-
@l.has_attribute?('names').should
|
49
|
+
@l.has_attribute?('names').should be true
|
50
50
|
end
|
51
51
|
it "method has_attribute? should return false for non existing value" do
|
52
|
-
@l.has_attribute?('at2').should
|
52
|
+
@l.has_attribute?('at2').should be false
|
53
53
|
end
|
54
54
|
it "method get_attribute should return correct value for attribute" do
|
55
55
|
@l.get_attribute('names').as_strings.should==['at']
|
@@ -44,6 +44,10 @@ describe "Rserve::REXP#to_ruby" do
|
|
44
44
|
it "should return a Ruby Matrix with R matrix with NA values" do
|
45
45
|
@r.eval("matrix(c(NA,2,3,4),2,2,byrow=TRUE)").to_ruby.should==Matrix[[nil,2],[3,4]]
|
46
46
|
end
|
47
|
+
it "should return a Ruby Matrix with R matrix with floats with NA values" do
|
48
|
+
@r.eval("matrix(c(NA,2.5,3.5,NA),2,2,byrow=TRUE)").to_ruby.should==Matrix[[nil,2.5],[3.5,nil]]
|
49
|
+
end
|
50
|
+
|
47
51
|
it "should return a nested array of Ruby Matrixes with vector with more than tree dimensions" do
|
48
52
|
@r.void_eval("a<-1:16; attr(a,'dim')<-c(2,2,2,2)")
|
49
53
|
@r.eval("a").to_ruby.should==[[[[1.0, 3.0], [2.0, 4.0]], [[5.0, 7.0], [6.0, 8.0]]],
|
@@ -55,7 +59,7 @@ describe "Rserve::REXP#to_ruby" do
|
|
55
59
|
|
56
60
|
end
|
57
61
|
it "should return a boolean with a logical with one element" do
|
58
|
-
@r.eval("TRUE").to_ruby.should
|
62
|
+
@r.eval("TRUE").to_ruby.should be true
|
59
63
|
end
|
60
64
|
it "should return an array extended with Rserve::WithNames if vector is named" do
|
61
65
|
@r.void_eval("a<-c(1,2,3);names(a)<-c('a','b','c')")
|
@@ -73,7 +77,9 @@ describe "Rserve::REXP#to_ruby" do
|
|
73
77
|
@r.eval("'a'").to_ruby.should=='a'
|
74
78
|
end
|
75
79
|
it "should return an array of strings with a vector with two or more strings" do
|
76
|
-
|
80
|
+
obj=@r.eval("c('a','b',NA)").to_ruby
|
81
|
+
p @r.eval("c('a','b',NA)")
|
82
|
+
obj.should==['a','b',nil]
|
77
83
|
end
|
78
84
|
it "should handle named floats" do
|
79
85
|
@r.void_eval('y <- sample(1:100, 10)')
|
@@ -77,6 +77,7 @@ describe Rserve::Protocol::REXPFactory do
|
|
77
77
|
la.should be_instance_of(Rserve::REXP::String)
|
78
78
|
la.as_strings.should==['abc','def','ghi']
|
79
79
|
end
|
80
|
+
|
80
81
|
it "should process string vector with NA" do
|
81
82
|
la=@r.eval("c('abc','def',NA)")
|
82
83
|
la.should be_instance_of(Rserve::REXP::String)
|
@@ -95,8 +96,8 @@ describe Rserve::Protocol::REXPFactory do
|
|
95
96
|
la.should be_factor
|
96
97
|
la.as_factor.levels.sort.should==%w{act nsw nt qld sa tas vic wa}.sort
|
97
98
|
|
98
|
-
la.as_factor.contains?("tas").should
|
99
|
-
la.as_factor.contains?("nn").should
|
99
|
+
la.as_factor.contains?("tas").should be true
|
100
|
+
la.as_factor.contains?("nn").should be false
|
100
101
|
@r.void_eval("rm(state, statef)")
|
101
102
|
end
|
102
103
|
it "should process factors with NA" do
|
@@ -121,14 +122,14 @@ describe Rserve::Protocol::REXPFactory do
|
|
121
122
|
|
122
123
|
it "should process list with booleans and NA" do
|
123
124
|
la=@r.eval("list(TRUE)")
|
124
|
-
la.should
|
125
|
+
la.should be_truthy
|
125
126
|
la=@r.eval("list(2,NA)")
|
126
|
-
la.should
|
127
|
+
la.should be_truthy
|
127
128
|
end
|
128
129
|
|
129
130
|
it "should process data.frame" do
|
130
131
|
la=@r.eval("data.frame(a=1:10,b=1:10)")
|
131
|
-
la.should
|
132
|
+
la.should be_truthy
|
132
133
|
la.attr.as_list['names'].to_ruby.should==%w{a b}
|
133
134
|
la.attr.as_list['class'].to_ruby.should=="data.frame"
|
134
135
|
la.attr.as_list['row.names'].to_ruby.should==[nil,-10]
|
@@ -137,7 +138,7 @@ describe Rserve::Protocol::REXPFactory do
|
|
137
138
|
@r.void_eval("df<-data.frame(a=1:10,b=1:10);
|
138
139
|
attr(df,'row.names')<-c('a','b','c',4,5,6,7,8,9,10);")
|
139
140
|
la=@r.eval("df")
|
140
|
-
la.should
|
141
|
+
la.should be_truthy
|
141
142
|
la.attr.as_list['names'].to_ruby.should==%w{a b}
|
142
143
|
la.attr.as_list['class'].to_ruby.should=="data.frame"
|
143
144
|
la.attr.as_list['row.names'].to_ruby.should==%w{a b c 4 5 6 7 8 9 10}
|
data/spec/rserve_rfactor_spec.rb
CHANGED
@@ -20,10 +20,10 @@ describe Rserve::RFactor do
|
|
20
20
|
}
|
21
21
|
end
|
22
22
|
it "methods contains? should work with integers and strings" do
|
23
|
-
@factor.contains?(1).should
|
24
|
-
@factor.contains?(5).should
|
25
|
-
@factor.contains?('a').should
|
26
|
-
@factor.contains?('z').should
|
23
|
+
@factor.contains?(1).should be true
|
24
|
+
@factor.contains?(5).should be false
|
25
|
+
@factor.contains?('a').should be true
|
26
|
+
@factor.contains?('z').should be false
|
27
27
|
end
|
28
28
|
it "methods count should work with integers and strings" do
|
29
29
|
@factor.count(2).should==2
|
data/spec/rserve_rlist_spec.rb
CHANGED
@@ -14,13 +14,13 @@ describe Rserve::Rlist do
|
|
14
14
|
it "method == should return true for rlist with equal data and names" do
|
15
15
|
a=Rserve::Rlist.new([1,2,3],%w{a b c})
|
16
16
|
b=Rserve::Rlist.new([1,2,3],%w{a b c})
|
17
|
-
(a==b).should
|
17
|
+
(a==b).should be true
|
18
18
|
a=Rserve::Rlist.new([1,2,3],%w{a b c})
|
19
19
|
b=Rserve::Rlist.new([1,2,3])
|
20
|
-
(a==b).should
|
20
|
+
(a==b).should be false
|
21
21
|
a=Rserve::Rlist.new([1,2,3],%w{a b c})
|
22
22
|
b=Rserve::Rlist.new([4,5,6],%w{c d e})
|
23
|
-
(a==b).should
|
23
|
+
(a==b).should be false
|
24
24
|
|
25
25
|
end
|
26
26
|
it "method [] return correct values for strings" do
|
data/spec/rserve_spec.rb
CHANGED
@@ -16,11 +16,11 @@ logit<-glm(y~a+b, family=binomial(link="logit"), na.action=na.pass)
|
|
16
16
|
EOF
|
17
17
|
@r.void_eval(script)
|
18
18
|
@r.eval('logit').should be_instance_of(Rserve::REXP::GenericVector)
|
19
|
-
@r.eval('logit$family$variance').should
|
20
|
-
@r.eval('logit').should
|
21
|
-
@r.eval('logit').to_ruby.should
|
22
|
-
@r.eval('summary(logit)').should
|
23
|
-
@r.eval('summary(logit)').to_ruby.should
|
19
|
+
@r.eval('logit$family$variance').should be_truthy
|
20
|
+
@r.eval('logit').should be_truthy
|
21
|
+
@r.eval('logit').to_ruby.should be_truthy
|
22
|
+
@r.eval('summary(logit)').should be_truthy
|
23
|
+
@r.eval('summary(logit)').to_ruby.should be_truthy
|
24
24
|
end
|
25
25
|
|
26
26
|
it "should calcule lr without problem" do
|
@@ -41,9 +41,9 @@ severity.lm <- lm(diseasesev~temperature,data=severity)
|
|
41
41
|
@r.void_eval(script)
|
42
42
|
temp = @r.eval('severity.lm')
|
43
43
|
@r.eval('severity.lm').should be_instance_of(Rserve::REXP::GenericVector)
|
44
|
-
@r.eval('severity.lm').to_ruby.should
|
45
|
-
@r.eval('summary(severity.lm)').should
|
46
|
-
@r.eval('summary(severity.lm)').to_ruby.should
|
44
|
+
@r.eval('severity.lm').to_ruby.should be_truthy
|
45
|
+
@r.eval('summary(severity.lm)').should be_truthy
|
46
|
+
@r.eval('summary(severity.lm)').to_ruby.should be_truthy
|
47
47
|
end
|
48
48
|
|
49
49
|
end
|
data/spec/rserve_talk_spec.rb
CHANGED
@@ -10,10 +10,10 @@ describe Rserve::WithNames do
|
|
10
10
|
end
|
11
11
|
describe "with incorrect naming" do
|
12
12
|
it "should raise an error with names array of another size" do
|
13
|
-
lambda {@a.names=["1","2"]}.should raise_exception
|
13
|
+
lambda {@a.names=["1","2"]}.should raise_exception(ArgumentError)
|
14
14
|
end
|
15
15
|
it "should raise an error with names array !(String or nil) " do
|
16
|
-
lambda {@a.names=[1,"a","b","c"]}.should raise_exception
|
16
|
+
lambda {@a.names=[1,"a","b","c"]}.should raise_exception(ArgumentError)
|
17
17
|
lambda {@a.names=[nil,"a","b","c"]}.should_not raise_exception
|
18
18
|
end
|
19
19
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -3,3 +3,19 @@ require 'rspec'
|
|
3
3
|
require 'rserve'
|
4
4
|
require 'matrix'
|
5
5
|
require 'pp'
|
6
|
+
|
7
|
+
|
8
|
+
RSpec.configure do |config|
|
9
|
+
config.expect_with :rspec do |c|
|
10
|
+
c.syntax = [:should, :expect]
|
11
|
+
end
|
12
|
+
|
13
|
+
# Use color in STDOUT
|
14
|
+
config.color = true
|
15
|
+
|
16
|
+
# Use color not only in STDOUT but also in pagers and files
|
17
|
+
config.tty = true
|
18
|
+
|
19
|
+
# Use the specified formatter
|
20
|
+
config.formatter = :documentation # :progress, :html, :textmate
|
21
|
+
end
|
metadata
CHANGED
@@ -1,101 +1,59 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rserve-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
5
|
-
prerelease:
|
4
|
+
version: 0.3.2
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Claudio Bustos
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2017-05-17 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
14
|
+
name: bundler
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - ">="
|
20
18
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
19
|
+
version: 1.0.0
|
22
20
|
type: :development
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - ">="
|
28
25
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
30
|
-
- !ruby/object:Gem::Dependency
|
31
|
-
name: rdoc
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
|
-
requirements:
|
35
|
-
- - ~>
|
36
|
-
- !ruby/object:Gem::Version
|
37
|
-
version: '4.0'
|
38
|
-
type: :development
|
39
|
-
prerelease: false
|
40
|
-
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
|
-
requirements:
|
43
|
-
- - ~>
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version: '4.0'
|
26
|
+
version: 1.0.0
|
46
27
|
- !ruby/object:Gem::Dependency
|
47
28
|
name: rspec
|
48
29
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
30
|
requirements:
|
51
|
-
- -
|
31
|
+
- - ">="
|
52
32
|
- !ruby/object:Gem::Version
|
53
|
-
version: '
|
33
|
+
version: '0'
|
54
34
|
type: :development
|
55
35
|
prerelease: false
|
56
36
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
37
|
requirements:
|
59
|
-
- -
|
38
|
+
- - ">="
|
60
39
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
62
|
-
|
63
|
-
|
64
|
-
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
|
-
requirements:
|
67
|
-
- - ~>
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
version: '3.7'
|
70
|
-
type: :development
|
71
|
-
prerelease: false
|
72
|
-
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
|
-
requirements:
|
75
|
-
- - ~>
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
version: '3.7'
|
78
|
-
description: ! 'Ruby client for Rserve, a Binary R server (http://www.rforge.net/Rserve/).
|
79
|
-
|
80
|
-
|
81
|
-
Follows closely the new Java client API, but maintains all Ruby conventions when
|
82
|
-
possible.'
|
83
|
-
email:
|
84
|
-
- clbustos_AT_gmail.com
|
40
|
+
version: '0'
|
41
|
+
description: Rserve client for ruby
|
42
|
+
email: []
|
85
43
|
executables: []
|
86
44
|
extensions: []
|
87
|
-
extra_rdoc_files:
|
88
|
-
- History.txt
|
89
|
-
- Introduction.txt
|
90
|
-
- Manifest.txt
|
91
|
-
- README.txt
|
45
|
+
extra_rdoc_files: []
|
92
46
|
files:
|
93
|
-
- .autotest
|
94
|
-
- .
|
47
|
+
- ".autotest"
|
48
|
+
- ".gitignore"
|
49
|
+
- ".rspec"
|
50
|
+
- ".travis.yml"
|
51
|
+
- Gemfile
|
52
|
+
- Gemfile.lock
|
95
53
|
- History.txt
|
96
54
|
- Introduction.txt
|
97
55
|
- Manifest.txt
|
98
|
-
- README.
|
56
|
+
- README.md
|
99
57
|
- Rakefile
|
100
58
|
- benchmark/benchmark.rb
|
101
59
|
- benchmark/comparison_2010_06_07.xls
|
@@ -140,6 +98,9 @@ files:
|
|
140
98
|
- lib/rserve/with2dsizes.rb
|
141
99
|
- lib/rserve/withattributes.rb
|
142
100
|
- lib/rserve/withnames.rb
|
101
|
+
- rserve-client.gemspec
|
102
|
+
- spec/rserve_bug_1_spec.rb
|
103
|
+
- spec/rserve_bug_26_spec.rb
|
143
104
|
- spec/rserve_connection_on_unix_spec.rb
|
144
105
|
- spec/rserve_connection_spec.rb
|
145
106
|
- spec/rserve_double_spec.rb
|
@@ -161,52 +122,27 @@ files:
|
|
161
122
|
- spec/rserve_with2dsizes_spec.rb
|
162
123
|
- spec/rserve_withnames_spec.rb
|
163
124
|
- spec/spec_helper.rb
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
- MIT
|
125
|
+
homepage: http://rubygems.org/gems/rserve-client
|
126
|
+
licenses: []
|
127
|
+
metadata: {}
|
168
128
|
post_install_message:
|
169
|
-
rdoc_options:
|
170
|
-
- --main
|
171
|
-
- README.txt
|
129
|
+
rdoc_options: []
|
172
130
|
require_paths:
|
173
131
|
- lib
|
174
132
|
required_ruby_version: !ruby/object:Gem::Requirement
|
175
|
-
none: false
|
176
133
|
requirements:
|
177
|
-
- -
|
134
|
+
- - ">="
|
178
135
|
- !ruby/object:Gem::Version
|
179
136
|
version: '0'
|
180
137
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
181
|
-
none: false
|
182
138
|
requirements:
|
183
|
-
- -
|
139
|
+
- - ">="
|
184
140
|
- !ruby/object:Gem::Version
|
185
|
-
version:
|
141
|
+
version: 1.3.6
|
186
142
|
requirements: []
|
187
|
-
rubyforge_project:
|
188
|
-
rubygems_version:
|
143
|
+
rubyforge_project:
|
144
|
+
rubygems_version: 2.6.10
|
189
145
|
signing_key:
|
190
|
-
specification_version:
|
191
|
-
summary:
|
192
|
-
test_files:
|
193
|
-
- spec/rserve_with2dnames_spec.rb
|
194
|
-
- spec/rserve_connection_spec.rb
|
195
|
-
- spec/rserve_rfactor_spec.rb
|
196
|
-
- spec/rserve_double_spec.rb
|
197
|
-
- spec/rserve_rexp_to_ruby_spec.rb
|
198
|
-
- spec/rserve_logical_spec.rb
|
199
|
-
- spec/rserve_session_spec.rb
|
200
|
-
- spec/rserve_talk_spec.rb
|
201
|
-
- spec/rserve_rlist_spec.rb
|
202
|
-
- spec/rserve_genericvector_spec.rb
|
203
|
-
- spec/rserve_with2dsizes_spec.rb
|
204
|
-
- spec/rserve_packet_spec.rb
|
205
|
-
- spec/rserve_integer_spec.rb
|
206
|
-
- spec/rserve_rexpfactory_spec.rb
|
207
|
-
- spec/rserve_withnames_spec.rb
|
208
|
-
- spec/rserve_protocol_spec.rb
|
209
|
-
- spec/rserve_rexp_spec.rb
|
210
|
-
- spec/rserve_spec.rb
|
211
|
-
- spec/rserve_rexp_wrapper_spec.rb
|
212
|
-
- spec/rserve_connection_on_unix_spec.rb
|
146
|
+
specification_version: 4
|
147
|
+
summary: Rserve client for ruby
|
148
|
+
test_files: []
|
data/.gemtest
DELETED
File without changes
|