opencpu 0.4.0 → 0.5.0
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.
- checksums.yaml +4 -4
- data/README.md +3 -1
- data/lib/opencpu.rb +1 -0
- data/lib/opencpu/client.rb +24 -18
- data/lib/opencpu/delayed_calculation.rb +87 -0
- data/lib/opencpu/version.rb +1 -1
- data/opencpu.gemspec +1 -1
- data/spec/fixtures/vcr_cassettes/animation_flip_coin.yml +1996 -0
- data/spec/fixtures/vcr_cassettes/digest_hmac.yml +10 -10
- data/spec/fixtures/vcr_cassettes/digest_hmac_no_parameters.yml +52 -0
- data/spec/fixtures/vcr_cassettes/prepare.yml +62 -0
- data/spec/lib/opencpu/client_spec.rb +45 -19
- data/spec/lib/opencpu/delayed_calculation_spec.rb +122 -0
- data/spec/lib/{opencpu.rb → opencpu_spec.rb} +1 -4
- metadata +18 -9
@@ -2,7 +2,7 @@
|
|
2
2
|
http_interactions:
|
3
3
|
- request:
|
4
4
|
method: post
|
5
|
-
uri: https://
|
5
|
+
uri: https://public.opencpu.org/ocpu/library/digest/R/hmac/json
|
6
6
|
body:
|
7
7
|
encoding: UTF-8
|
8
8
|
string: '{"key":"baz","object":"qux"}'
|
@@ -15,13 +15,13 @@ http_interactions:
|
|
15
15
|
message: OK
|
16
16
|
headers:
|
17
17
|
Server:
|
18
|
-
- nginx/1.4.
|
18
|
+
- nginx/1.4.6 (Ubuntu)
|
19
19
|
Date:
|
20
|
-
- Thu,
|
20
|
+
- Thu, 01 May 2014 14:34:19 GMT
|
21
21
|
Content-Type:
|
22
22
|
- application/json
|
23
23
|
Location:
|
24
|
-
- https://public.opencpu.org/ocpu/tmp/
|
24
|
+
- https://public.opencpu.org/ocpu/tmp/x0a6d5ac9c2/
|
25
25
|
Transfer-Encoding:
|
26
26
|
- chunked
|
27
27
|
Connection:
|
@@ -29,7 +29,7 @@ http_interactions:
|
|
29
29
|
Cache-Control:
|
30
30
|
- max-age=300, public
|
31
31
|
X-Ocpu-Session:
|
32
|
-
-
|
32
|
+
- x0a6d5ac9c2
|
33
33
|
Access-Control-Allow-Origin:
|
34
34
|
- "*"
|
35
35
|
Access-Control-Allow-Headers:
|
@@ -37,20 +37,20 @@ http_interactions:
|
|
37
37
|
Access-Control-Expose-Headers:
|
38
38
|
- Location, X-ocpu-session, Content-Type, Cache-Control
|
39
39
|
X-Ocpu-R:
|
40
|
-
- R version 3.1.0
|
40
|
+
- R version 3.1.0 (2014-04-10)
|
41
41
|
X-Ocpu-Locale:
|
42
42
|
- en_US.UTF-8
|
43
43
|
X-Ocpu-Time:
|
44
|
-
- 2014-
|
44
|
+
- 2014-05-01 07:34:19 PDT
|
45
45
|
X-Ocpu-Version:
|
46
|
-
- 1.
|
46
|
+
- 1.4.1.99
|
47
47
|
X-Ocpu-Server:
|
48
48
|
- rApache
|
49
49
|
X-Ocpu-Cache:
|
50
|
-
-
|
50
|
+
- EXPIRED
|
51
51
|
body:
|
52
52
|
encoding: UTF-8
|
53
53
|
string: "[\n\t\"22e2a7a268bf076801eefe7cd0119bb9\"\n]\n"
|
54
54
|
http_version:
|
55
|
-
recorded_at: Thu,
|
55
|
+
recorded_at: Thu, 01 May 2014 14:34:22 GMT
|
56
56
|
recorded_with: VCR 2.9.0
|
@@ -0,0 +1,52 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://public.opencpu.org/ocpu/library/digest/R/hmac/json
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: "{}"
|
9
|
+
headers:
|
10
|
+
Content-Type:
|
11
|
+
- application/json
|
12
|
+
response:
|
13
|
+
status:
|
14
|
+
code: 400
|
15
|
+
message: Bad Request
|
16
|
+
headers:
|
17
|
+
Server:
|
18
|
+
- nginx/1.4.6 (Ubuntu)
|
19
|
+
Date:
|
20
|
+
- Thu, 01 May 2014 14:34:20 GMT
|
21
|
+
Content-Type:
|
22
|
+
- text/plain; charset=utf-8
|
23
|
+
Transfer-Encoding:
|
24
|
+
- chunked
|
25
|
+
Connection:
|
26
|
+
- keep-alive
|
27
|
+
Access-Control-Allow-Origin:
|
28
|
+
- "*"
|
29
|
+
Access-Control-Allow-Headers:
|
30
|
+
- Origin, Content-Type, Accept, Cache-Control
|
31
|
+
Access-Control-Expose-Headers:
|
32
|
+
- Location, X-ocpu-session, Content-Type, Cache-Control
|
33
|
+
X-Ocpu-R:
|
34
|
+
- R version 3.1.0 (2014-04-10)
|
35
|
+
X-Ocpu-Locale:
|
36
|
+
- en_US.UTF-8
|
37
|
+
X-Ocpu-Time:
|
38
|
+
- 2014-05-01 07:34:20 PDT
|
39
|
+
X-Ocpu-Version:
|
40
|
+
- 1.4.1.99
|
41
|
+
X-Ocpu-Server:
|
42
|
+
- rApache
|
43
|
+
body:
|
44
|
+
encoding: UTF-8
|
45
|
+
string: |
|
46
|
+
argument "key" is missing, with no default
|
47
|
+
|
48
|
+
In call:
|
49
|
+
makeRaw(k)
|
50
|
+
http_version:
|
51
|
+
recorded_at: Thu, 01 May 2014 14:34:23 GMT
|
52
|
+
recorded_with: VCR 2.9.0
|
@@ -0,0 +1,62 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://public.opencpu.org/ocpu/library/digest/R/hmac/
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: '{"key":"baz","object":"qux"}'
|
9
|
+
headers:
|
10
|
+
Content-Type:
|
11
|
+
- application/json
|
12
|
+
response:
|
13
|
+
status:
|
14
|
+
code: 201
|
15
|
+
message: Created
|
16
|
+
headers:
|
17
|
+
Server:
|
18
|
+
- nginx/1.4.6 (Ubuntu)
|
19
|
+
Date:
|
20
|
+
- Thu, 01 May 2014 14:34:16 GMT
|
21
|
+
Content-Type:
|
22
|
+
- text/plain; charset=utf-8
|
23
|
+
Location:
|
24
|
+
- https://public.opencpu.org/ocpu/tmp/x0a79915480/
|
25
|
+
Transfer-Encoding:
|
26
|
+
- chunked
|
27
|
+
Connection:
|
28
|
+
- keep-alive
|
29
|
+
Cache-Control:
|
30
|
+
- max-age=300, public
|
31
|
+
X-Ocpu-Session:
|
32
|
+
- x0a79915480
|
33
|
+
Access-Control-Allow-Origin:
|
34
|
+
- "*"
|
35
|
+
Access-Control-Allow-Headers:
|
36
|
+
- Origin, Content-Type, Accept, Cache-Control
|
37
|
+
Access-Control-Expose-Headers:
|
38
|
+
- Location, X-ocpu-session, Content-Type, Cache-Control
|
39
|
+
X-Ocpu-R:
|
40
|
+
- R version 3.1.0 (2014-04-10)
|
41
|
+
X-Ocpu-Locale:
|
42
|
+
- en_US.UTF-8
|
43
|
+
X-Ocpu-Time:
|
44
|
+
- 2014-05-01 07:34:16 PDT
|
45
|
+
X-Ocpu-Version:
|
46
|
+
- 1.4.1.99
|
47
|
+
X-Ocpu-Server:
|
48
|
+
- rApache
|
49
|
+
X-Ocpu-Cache:
|
50
|
+
- EXPIRED
|
51
|
+
body:
|
52
|
+
encoding: UTF-8
|
53
|
+
string: |
|
54
|
+
/ocpu/tmp/x0a79915480/R/.val
|
55
|
+
/ocpu/tmp/x0a79915480/stdout
|
56
|
+
/ocpu/tmp/x0a79915480/warnings
|
57
|
+
/ocpu/tmp/x0a79915480/source
|
58
|
+
/ocpu/tmp/x0a79915480/console
|
59
|
+
/ocpu/tmp/x0a79915480/info
|
60
|
+
http_version:
|
61
|
+
recorded_at: Thu, 01 May 2014 14:34:19 GMT
|
62
|
+
recorded_with: VCR 2.9.0
|
@@ -2,49 +2,75 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe OpenCPU::Client do
|
4
4
|
|
5
|
+
before do
|
6
|
+
OpenCPU.configure do |config|
|
7
|
+
config.endpoint_url = 'https://public.opencpu.org/ocpu'
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
5
11
|
it 'initializes with HTTParty' do
|
6
12
|
expect(described_class.ancestors).to include HTTParty
|
7
13
|
end
|
8
14
|
|
9
|
-
it '
|
10
|
-
expect(described_class.new).to respond_to :
|
15
|
+
it 'defines #execute' do
|
16
|
+
expect(described_class.new).to respond_to :execute
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'defines #prepare' do
|
20
|
+
expect(described_class.new).to respond_to :prepare
|
11
21
|
end
|
12
22
|
|
13
|
-
|
23
|
+
describe 'initializes' do
|
14
24
|
before do
|
15
25
|
OpenCPU.configure do |config|
|
16
26
|
config.endpoint_url = 'https://public.opencpu.org/ocpu'
|
17
|
-
config.username = 'foo'
|
18
|
-
config.password = 'bar'
|
19
27
|
end
|
20
28
|
end
|
21
29
|
|
22
|
-
it '
|
30
|
+
it 'with configured attributes' do
|
23
31
|
expect(described_class.new.class.base_uri).to eq 'https://public.opencpu.org/ocpu'
|
24
|
-
expect(described_class.new.default_options).to eq({basic_auth: {username: 'foo', password: 'bar'}})
|
25
32
|
end
|
26
33
|
end
|
27
34
|
|
28
|
-
|
29
|
-
|
35
|
+
describe '#prepare' do
|
36
|
+
let(:client) { described_class.new }
|
37
|
+
let(:delayed_calculation) { client.prepare('digest', 'hmac', key: "baz", object: "qux") }
|
38
|
+
|
39
|
+
it 'returns a DelayedCalculation' do
|
40
|
+
VCR.use_cassette :prepare do
|
41
|
+
expect(delayed_calculation).to be_a OpenCPU::DelayedCalculation
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'returns a DelayedCalculation with correct path' do
|
46
|
+
VCR.use_cassette :prepare do
|
47
|
+
expect(delayed_calculation.location).to eq "https://public.opencpu.org/ocpu/tmp/x0a79915480/"
|
48
|
+
end
|
49
|
+
end
|
30
50
|
end
|
31
51
|
|
32
52
|
describe '#execute' do
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
53
|
+
let(:client) { described_class.new }
|
54
|
+
|
55
|
+
it 'is used to quickly return JSON results' do
|
56
|
+
VCR.use_cassette :animation_flip_coin, record: :new_episodes do
|
57
|
+
response = client.execute(:animation, 'flip.coin')
|
58
|
+
expect(response).to eq "freq" => [0.56, 0.44], "nmax" => [50]
|
38
59
|
end
|
39
60
|
end
|
40
61
|
|
41
|
-
|
62
|
+
it 'accepts R-function parameters as data' do
|
63
|
+
VCR.use_cassette :digest_hmac, record: :new_episodes do
|
64
|
+
response = client.execute(:digest, :hmac, key: 'baz', object: 'qux')
|
65
|
+
expect(response).to eq ["22e2a7a268bf076801eefe7cd0119bb9"]
|
66
|
+
end
|
67
|
+
end
|
42
68
|
|
43
|
-
it '
|
44
|
-
VCR.use_cassette :
|
45
|
-
|
46
|
-
expect(response[0]).to eq '22e2a7a268bf076801eefe7cd0119bb9'
|
69
|
+
it 'raises 400 with body' do
|
70
|
+
VCR.use_cassette :digest_hmac_no_parameters do
|
71
|
+
expect { client.execute(:digest, :hmac) }.to raise_error
|
47
72
|
end
|
48
73
|
end
|
49
74
|
end
|
75
|
+
|
50
76
|
end
|
@@ -0,0 +1,122 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe OpenCPU::DelayedCalculation do
|
4
|
+
|
5
|
+
let(:delayed_calculation) { described_class.new 'foo' }
|
6
|
+
|
7
|
+
describe "initializes" do
|
8
|
+
it "without resources" do
|
9
|
+
delayed_calculation = described_class.new 'foo'
|
10
|
+
expect(delayed_calculation.available_resources).to eq Hash.new
|
11
|
+
end
|
12
|
+
|
13
|
+
let(:resources) do
|
14
|
+
[
|
15
|
+
'/foo/bar',
|
16
|
+
'/foo/baz'
|
17
|
+
]
|
18
|
+
end
|
19
|
+
let(:parsed_resources) do
|
20
|
+
{
|
21
|
+
bar: URI.parse('https://opencpu.org/foo/bar'),
|
22
|
+
baz: URI.parse('https://opencpu.org/foo/baz')
|
23
|
+
}
|
24
|
+
end
|
25
|
+
it "with resources" do
|
26
|
+
delayed_calculation = described_class.new 'https://opencpu.org/foo/', resources
|
27
|
+
expect(delayed_calculation.available_resources).to eq parsed_resources
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
let(:location) { "https://public.opencpu.org/ocpu/tmp/x09dd995a16/" }
|
32
|
+
let(:resources) do
|
33
|
+
[
|
34
|
+
"/ocpu/tmp/x09dd995a16/R/.val",
|
35
|
+
"/ocpu/tmp/x09dd995a16/graphics/1",
|
36
|
+
"/ocpu/tmp/x09dd995a16/graphics/2",
|
37
|
+
"/ocpu/tmp/x09dd995a16/graphics/3",
|
38
|
+
"/ocpu/tmp/x09dd995a16/graphics/4",
|
39
|
+
"/ocpu/tmp/x09dd995a16/source",
|
40
|
+
"/ocpu/tmp/x09dd995a16/console",
|
41
|
+
"/ocpu/tmp/x09dd995a16/info"
|
42
|
+
]
|
43
|
+
end
|
44
|
+
let(:delayed_calculation) { described_class.new location, resources }
|
45
|
+
|
46
|
+
describe "#graphics" do
|
47
|
+
|
48
|
+
it 'defines methods to access graphic functions' do
|
49
|
+
VCR.use_cassette :animation_flip_coin, record: :new_episodes do
|
50
|
+
expect { delayed_calculation.graphics }.not_to raise_error
|
51
|
+
expect { delayed_calculation.stdout }.to raise_error OpenCPU::ResponseNotAvailableError
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
it "returns a SVG by default" do
|
56
|
+
VCR.use_cassette :animation_flip_coin, record: :new_episodes do
|
57
|
+
expect(delayed_calculation.graphics).to include 'svg xmlns'
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
it "can return a PNG" do
|
62
|
+
VCR.use_cassette :animation_flip_coin, record: :new_episodes do
|
63
|
+
expect(delayed_calculation.graphics(0, :png)).to include 'PNG'
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
it "does not support formats except PNG and SVG" do
|
68
|
+
VCR.use_cassette :animation_flip_coin, record: :new_episodes do
|
69
|
+
expect { delayed_calculation.graphics(0, :svg) }.not_to raise_error
|
70
|
+
expect { delayed_calculation.graphics(0, :png) }.not_to raise_error
|
71
|
+
expect { delayed_calculation.graphics(0, :foo) }.to raise_error OpenCPU::UnsupportedFormatError
|
72
|
+
expect { delayed_calculation.graphics(0, :bar) }.to raise_error OpenCPU::UnsupportedFormatError
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
it 'can handle multiple graphic output' do
|
77
|
+
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
describe 'standard getters' do
|
82
|
+
describe '#value' do
|
83
|
+
it "returns raw R calculation result" do
|
84
|
+
VCR.use_cassette :animation_flip_coin, record: :new_episodes do
|
85
|
+
expect(delayed_calculation.value).to eq "$freq\n 1 2 \n0.52 0.48 \n\n$nmax\n[1] 50"
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
describe '#stdout' do
|
91
|
+
it "returns cached stdout" do
|
92
|
+
VCR.use_cassette :animation_flip_coin, record: :new_episodes do
|
93
|
+
expect { delayed_calculation.stdout }.to raise_error OpenCPU::ResponseNotAvailableError
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
describe '#warnings' do
|
99
|
+
it 'returns cached warnings' do
|
100
|
+
VCR.use_cassette :animation_flip_coin, record: :new_episodes do
|
101
|
+
expect { delayed_calculation.warnings }.to raise_error OpenCPU::ResponseNotAvailableError
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
describe '#info' do
|
107
|
+
it 'returns cached info' do
|
108
|
+
VCR.use_cassette :animation_flip_coin, record: :new_episodes do
|
109
|
+
expect(delayed_calculation.info).to include("R version")
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
# describe "#console" do
|
115
|
+
# it 'returns cached console input' do
|
116
|
+
# VCR.use_cassette :animation_flip_coin, record: :new_episodes do
|
117
|
+
# expect(delayed_calculation.console).to include("hmac(key = \"baz\", object = \"qux\"")
|
118
|
+
# end
|
119
|
+
# end
|
120
|
+
# end
|
121
|
+
end
|
122
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: opencpu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ivan Malykh
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-05-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: yajl-ruby
|
@@ -84,16 +84,16 @@ dependencies:
|
|
84
84
|
name: webmock
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - ~>
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
89
|
+
version: 1.17.4
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - ~>
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
96
|
+
version: 1.17.4
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: vcr
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -153,12 +153,17 @@ files:
|
|
153
153
|
- lib/opencpu.rb
|
154
154
|
- lib/opencpu/client.rb
|
155
155
|
- lib/opencpu/configuration.rb
|
156
|
+
- lib/opencpu/delayed_calculation.rb
|
156
157
|
- lib/opencpu/version.rb
|
157
158
|
- opencpu.gemspec
|
159
|
+
- spec/fixtures/vcr_cassettes/animation_flip_coin.yml
|
158
160
|
- spec/fixtures/vcr_cassettes/digest_hmac.yml
|
159
|
-
- spec/
|
161
|
+
- spec/fixtures/vcr_cassettes/digest_hmac_no_parameters.yml
|
162
|
+
- spec/fixtures/vcr_cassettes/prepare.yml
|
160
163
|
- spec/lib/opencpu/client_spec.rb
|
161
164
|
- spec/lib/opencpu/configuration_spec.rb
|
165
|
+
- spec/lib/opencpu/delayed_calculation_spec.rb
|
166
|
+
- spec/lib/opencpu_spec.rb
|
162
167
|
- spec/spec_helper.rb
|
163
168
|
homepage: http://roqua.nl
|
164
169
|
licenses:
|
@@ -180,13 +185,17 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
180
185
|
version: '0'
|
181
186
|
requirements: []
|
182
187
|
rubyforge_project:
|
183
|
-
rubygems_version: 2.0.
|
188
|
+
rubygems_version: 2.0.14
|
184
189
|
signing_key:
|
185
190
|
specification_version: 4
|
186
191
|
summary: Wrapper around OpenCPU REST API
|
187
192
|
test_files:
|
193
|
+
- spec/fixtures/vcr_cassettes/animation_flip_coin.yml
|
188
194
|
- spec/fixtures/vcr_cassettes/digest_hmac.yml
|
189
|
-
- spec/
|
195
|
+
- spec/fixtures/vcr_cassettes/digest_hmac_no_parameters.yml
|
196
|
+
- spec/fixtures/vcr_cassettes/prepare.yml
|
190
197
|
- spec/lib/opencpu/client_spec.rb
|
191
198
|
- spec/lib/opencpu/configuration_spec.rb
|
199
|
+
- spec/lib/opencpu/delayed_calculation_spec.rb
|
200
|
+
- spec/lib/opencpu_spec.rb
|
192
201
|
- spec/spec_helper.rb
|