opencpu 0.9.1 → 0.9.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b22793ec74be38b993028d6173a3c248c94ebded
4
- data.tar.gz: 36dcb14376dd06f049e2777c7bddc72dfcf00d29
3
+ metadata.gz: b4dd7cd2e25675a883669dcc7b2dff60c3bed910
4
+ data.tar.gz: fb2c04876cdf97dc4c0656a5c24fd79718a22ffd
5
5
  SHA512:
6
- metadata.gz: 6f8b357ba69afe78df0de40ef150183cdaf47c32dc0afad57211651f5c1175d7eac039f1a0354506ff920acadbea0344d433ceeda42787c6504bb78b6dbd0bb4
7
- data.tar.gz: 03c3e679339495a20c1959daf76b630598fae225092a854888b966cdf7c44d441d313ac34bad0844c289ed81f0fd7d1446cff14575250e91a26738423f175996
6
+ metadata.gz: f3dcee9fba66c0e432feda4bb27e9b7b39f9453507dc5d26412d74fcfe576891bf09d82b8a0012b0df4d13646a529509248e72735108bcb0168c6ffdc1de9707
7
+ data.tar.gz: 490fac6cde42a5a53020c0b87d5029f24a2ee0b648608aed69b67090624a1da0c0c64b530cd41d1ff15cc56b0271b5544be7e92bff86b6b167e07afdf5a32896
@@ -1,3 +1,7 @@
1
+ # 0.9.2
2
+
3
+ * Added `OpenCPU::Client#description` to retrieve a packages' description file
4
+
1
5
  # 0.9.1
2
6
 
3
7
  * Added `convert_na_to_nil=true/false` option to Client#execute
data/Gemfile CHANGED
@@ -1,5 +1,11 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
+ group :development do
4
+ gem 'listen', '~> 3.0.8'
5
+ gem 'guard-rspec', '~> 4.2'
6
+ gem 'guard-bundler', '~> 2.0'
7
+ end
8
+
3
9
  group :test do
4
10
  gem "codeclimate-test-reporter", require: nil
5
11
  end
data/README.md CHANGED
@@ -161,6 +161,16 @@ If you want to send one or more files along, you can pass in a File object as da
161
161
  client.execute :foo, :bar, user: :johndoe, data: {file: File.new('/tmp/test.foo')}, format: :urlencoded
162
162
  ```
163
163
 
164
+ **Package desciption**
165
+
166
+ To access the entire content of a package's DESCRIPTION file
167
+ ```Ruby
168
+ client.description :mypackage
169
+ # => "Package: mypackage
170
+ # Version: 1.00
171
+ # ..."
172
+ ```
173
+
164
174
  ## Testing
165
175
 
166
176
  **NOTE:** Test mode is only supported in combination with `#execute` and the
@@ -14,13 +14,21 @@ module OpenCPU
14
14
  github_remote = options.fetch :github_remote, false
15
15
  should_convert_na_to_nil = options.fetch :convert_na_to_nil, false
16
16
 
17
- process_query package_url(package, function, user, github_remote, :json), data, format do |response|
17
+ process_query function_url(package, function, user, github_remote, :json), data, format do |response|
18
18
  output = JSON.parse(response.body)
19
19
  output = convert_na_to_nil(output) if should_convert_na_to_nil
20
20
  output
21
21
  end
22
22
  end
23
23
 
24
+ def description(package, options = {})
25
+ user = options.fetch :user, :system
26
+ github_remote = options.fetch :github_remote, false
27
+
28
+ url = "#{package_url(package, user, github_remote)}/info"
29
+ self.class.get(url, request_options(nil, :json))
30
+ end
31
+
24
32
  def convert_na_to_nil(data)
25
33
  case data
26
34
  when 'NA'
@@ -39,7 +47,7 @@ module OpenCPU
39
47
  data = options.fetch :data, {}
40
48
  format = options.fetch :format, :json
41
49
  github_remote = options.fetch :github_remote, false
42
- process_query package_url(package, function, user, github_remote), data, format do |response|
50
+ process_query function_url(package, function, user, github_remote), data, format do |response|
43
51
  location = response.headers['location']
44
52
  resources = response.body.split(/\n/)
45
53
  OpenCPU::DelayedCalculation.new(location, resources)
@@ -70,10 +78,10 @@ module OpenCPU
70
78
 
71
79
  case format
72
80
  when :json
73
- options[:body] = data.to_json
81
+ options[:body] = data.to_json if data
74
82
  options[:headers] = {"Content-Type" => 'application/json'}
75
83
  when :urlencoded
76
- options[:query] = data
84
+ options[:query] = data if data
77
85
  end
78
86
 
79
87
  if OpenCPU.configuration.username && OpenCPU.configuration.password
@@ -84,10 +92,14 @@ module OpenCPU
84
92
  options
85
93
  end
86
94
 
87
- def package_url(package, function, user = :system, github_remote = false, format = nil)
88
- return ['', 'library', package, 'R', function, format.to_s].join('/') if user == :system
89
- return ['', 'github', user, package, 'R', function, format.to_s].join('/') if github_remote
90
- return ['', 'user', user, 'library', package, 'R', function, format.to_s].join('/')
95
+ def function_url(package, function, user = :system, github_remote = false, format = nil)
96
+ "#{package_url(package, user, github_remote)}/R/#{function}/#{format.to_s}"
97
+ end
98
+
99
+ def package_url(package, user = :system, github_remote = false)
100
+ return "/library/#{package}" if user == :system
101
+ return "/github/#{user}/#{package}" if github_remote
102
+ return "/user/#{user}/library/#{package}"
91
103
  end
92
104
 
93
105
  def fake_response_for(url)
@@ -1,6 +1,6 @@
1
1
  module OpenCPU
2
2
  MAJOR = 0
3
3
  MINOR = 9
4
- TINY = 1
4
+ TINY = 2
5
5
  VERSION = [MAJOR, MINOR, TINY].join('.')
6
6
  end
@@ -28,6 +28,4 @@ Gem::Specification.new do |spec|
28
28
  spec.add_development_dependency 'rspec', '~> 2.14', '>= 2.14.1'
29
29
  spec.add_development_dependency 'webmock', '~> 1.17', '>= 1.17.4'
30
30
  spec.add_development_dependency 'vcr', '~> 2.9', '>= 2.9.0'
31
- spec.add_development_dependency 'guard-rspec', '~> 4.2', '>= 4.2.8'
32
- spec.add_development_dependency 'guard-bundler', '~> 2.0', '>= 2.0.0'
33
31
  end
@@ -0,0 +1,56 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://public.opencpu.org/ocpu/library/ade4/info
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers: {}
10
+ response:
11
+ status:
12
+ code: 200
13
+ message: OK
14
+ headers:
15
+ Server:
16
+ - nginx/1.4.6 (Ubuntu)
17
+ Date:
18
+ - Fri, 10 Jun 2016 16:20:39 GMT
19
+ Content-Type:
20
+ - text/plain; charset=utf-8
21
+ Transfer-Encoding:
22
+ - chunked
23
+ Connection:
24
+ - keep-alive
25
+ Cache-Control:
26
+ - max-age=86400, public
27
+ Access-Control-Allow-Origin:
28
+ - "*"
29
+ Access-Control-Expose-Headers:
30
+ - Location, X-ocpu-session, Content-Type, Cache-Control
31
+ Access-Control-Allow-Headers:
32
+ - Origin, Content-Type, Accept, Accept-Encoding, Cache-Control, Authorization
33
+ Access-Control-Allow-Credentials:
34
+ - 'true'
35
+ X-Ocpu-R:
36
+ - R version 3.3.0 (2016-05-03)
37
+ X-Ocpu-Locale:
38
+ - en_US.UTF-8
39
+ X-Ocpu-Time:
40
+ - 2016-06-10 09:18:55 PDT
41
+ X-Ocpu-Version:
42
+ - 1.6.2
43
+ X-Ocpu-Server:
44
+ - rApache
45
+ Vary:
46
+ - Accept-Encoding
47
+ X-Ocpu-Cache:
48
+ - HIT
49
+ body:
50
+ encoding: ASCII-8BIT
51
+ string: |
52
+ Package: My package
53
+ Type: Package
54
+ http_version:
55
+ recorded_at: Fri, 10 Jun 2016 16:20:39 GMT
56
+ recorded_with: VCR 2.9.3
@@ -1,6 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe OpenCPU::Client do
4
+ let(:client) { described_class.new }
4
5
 
5
6
  before do
6
7
  OpenCPU.configure do |config|
@@ -47,7 +48,6 @@ describe OpenCPU::Client do
47
48
  end
48
49
 
49
50
  describe '#prepare' do
50
- let(:client) { described_class.new }
51
51
  let(:delayed_calculation) { client.prepare('digest', 'hmac', data: { key: "baz", object: "qux" }) }
52
52
 
53
53
  it 'returns a DelayedCalculation' do
@@ -67,7 +67,6 @@ describe OpenCPU::Client do
67
67
  after do
68
68
  OpenCPU.disable_test_mode!
69
69
  end
70
- let(:client) { described_class.new }
71
70
 
72
71
  it 'is used to quickly return JSON results' do
73
72
  VCR.use_cassette :animation_flip_coin, record: :new_episodes do
@@ -92,7 +91,7 @@ describe OpenCPU::Client do
92
91
  context 'url encoded request' do
93
92
  it 'sends the parameters url_encoded' do
94
93
  VCR.use_cassette :url_encoded_request do |cassette|
95
- response = client.execute(:base, :identity, format: nil, data: { x: 'data.frame(x=1,y=1)' })
94
+ client.execute(:base, :identity, format: nil, data: { x: 'data.frame(x=1,y=1)' })
96
95
  params = cassette.serializable_hash['http_interactions'][0]['request']['body']['string']
97
96
  expect(params).to eq "x=data.frame(x%3D1%2Cy%3D1)"
98
97
  end
@@ -138,7 +137,6 @@ describe OpenCPU::Client do
138
137
  end
139
138
  end
140
139
  after { OpenCPU.reset_configuration! }
141
- let(:client) { described_class.new }
142
140
 
143
141
  it "can access user packages" do
144
142
  VCR.use_cassette :user_digest_hmac do
@@ -155,7 +153,6 @@ describe OpenCPU::Client do
155
153
  end
156
154
  end
157
155
  after { OpenCPU.reset_configuration! }
158
- let(:client) { described_class.new }
159
156
 
160
157
  it "can access github packages" do
161
158
  VCR.use_cassette :github_animation_flip_coin do
@@ -199,9 +196,17 @@ describe OpenCPU::Client do
199
196
  end
200
197
  end
201
198
 
202
- describe "#convert_na_to_nil" do
203
- let(:client) { described_class.new }
199
+ describe '#description' do
200
+ it 'returns the content of the package DESCRIPTION file' do
201
+ VCR.use_cassette :description do |cassette|
202
+ response = client.description('ade4')
203
+ expect(response.body).to eq "Package: My package\n" \
204
+ "Type: Package\n"
205
+ end
206
+ end
207
+ end
204
208
 
209
+ describe "#convert_na_to_nil" do
205
210
  it "converts 'NA' values in hashes in arrays" do
206
211
  res = client.convert_na_to_nil([4, {foo: 'NA'}])
207
212
  expect(res[1][:foo]).to be_nil
@@ -218,6 +223,38 @@ describe OpenCPU::Client do
218
223
  end
219
224
  end
220
225
 
226
+ describe '#function_url' do
227
+ before { allow(client).to receive(:package_url).and_return '<package url>' }
228
+
229
+ subject { client.send(:function_url, 'some_package', 'some_function', :kees, false, :json) }
230
+
231
+ it { is_expected.to eq '<package url>/R/some_function/json' }
232
+ end
233
+
234
+ describe '#package_url' do
235
+ let(:from_github) { false }
236
+
237
+ subject { client.send(:package_url, 'some_package', user, from_github) }
238
+
239
+ context ':system user' do
240
+ let(:user) { :system }
241
+ it { is_expected.to eq '/library/some_package' }
242
+ end
243
+
244
+ context 'other user' do
245
+ let(:user) { :kees }
246
+
247
+ context 'package is from GitHub' do
248
+ let(:from_github) { true }
249
+ it { is_expected.to eq '/github/kees/some_package' }
250
+ end
251
+
252
+ context 'other source' do
253
+ it { is_expected.to eq '/user/kees/library/some_package' }
254
+ end
255
+ end
256
+ end
257
+
221
258
  describe '#request_options' do
222
259
  it 'uses verify_ssl setting' do
223
260
  expect(described_class.new.send(:request_options, {}, nil)[:verify]).to be_truthy
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.9.1
4
+ version: 0.9.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ivan Malykh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-19 00:00:00.000000000 Z
11
+ date: 2016-06-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: yajl-ruby
@@ -144,46 +144,6 @@ dependencies:
144
144
  - - ">="
145
145
  - !ruby/object:Gem::Version
146
146
  version: 2.9.0
147
- - !ruby/object:Gem::Dependency
148
- name: guard-rspec
149
- requirement: !ruby/object:Gem::Requirement
150
- requirements:
151
- - - "~>"
152
- - !ruby/object:Gem::Version
153
- version: '4.2'
154
- - - ">="
155
- - !ruby/object:Gem::Version
156
- version: 4.2.8
157
- type: :development
158
- prerelease: false
159
- version_requirements: !ruby/object:Gem::Requirement
160
- requirements:
161
- - - "~>"
162
- - !ruby/object:Gem::Version
163
- version: '4.2'
164
- - - ">="
165
- - !ruby/object:Gem::Version
166
- version: 4.2.8
167
- - !ruby/object:Gem::Dependency
168
- name: guard-bundler
169
- requirement: !ruby/object:Gem::Requirement
170
- requirements:
171
- - - "~>"
172
- - !ruby/object:Gem::Version
173
- version: '2.0'
174
- - - ">="
175
- - !ruby/object:Gem::Version
176
- version: 2.0.0
177
- type: :development
178
- prerelease: false
179
- version_requirements: !ruby/object:Gem::Requirement
180
- requirements:
181
- - - "~>"
182
- - !ruby/object:Gem::Version
183
- version: '2.0'
184
- - - ">="
185
- - !ruby/object:Gem::Version
186
- version: 2.0.0
187
147
  description: This gem wraps the OpenCPU REST API.
188
148
  email:
189
149
  - ivan@roqua.nl
@@ -208,6 +168,7 @@ files:
208
168
  - opencpu.gemspec
209
169
  - spec/fixtures/test.csv
210
170
  - spec/fixtures/vcr_cassettes/animation_flip_coin.yml
171
+ - spec/fixtures/vcr_cassettes/description.yml
211
172
  - spec/fixtures/vcr_cassettes/digest_hmac.yml
212
173
  - spec/fixtures/vcr_cassettes/digest_hmac_no_parameters.yml
213
174
  - spec/fixtures/vcr_cassettes/github_animation_flip_coin.yml
@@ -241,13 +202,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
241
202
  version: '0'
242
203
  requirements: []
243
204
  rubyforge_project:
244
- rubygems_version: 2.2.2
205
+ rubygems_version: 2.4.6
245
206
  signing_key:
246
207
  specification_version: 4
247
208
  summary: Wrapper around OpenCPU REST API
248
209
  test_files:
249
210
  - spec/fixtures/test.csv
250
211
  - spec/fixtures/vcr_cassettes/animation_flip_coin.yml
212
+ - spec/fixtures/vcr_cassettes/description.yml
251
213
  - spec/fixtures/vcr_cassettes/digest_hmac.yml
252
214
  - spec/fixtures/vcr_cassettes/digest_hmac_no_parameters.yml
253
215
  - spec/fixtures/vcr_cassettes/github_animation_flip_coin.yml