omniauth-exvo 0.0.3 → 0.0.4
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 +7 -0
- data/.gitignore +1 -0
- data/{MIT-LICENSE → LICENSE} +1 -1
- data/README.md +49 -7
- data/lib/omniauth-exvo/version.rb +1 -1
- data/lib/omniauth/strategies/exvo.rb +1 -1
- data/omniauth-exvo.gemspec +8 -1
- data/spec/omniauth/strategies/exvo_spec.rb +19 -11
- data/spec/spec_helper.rb +7 -0
- metadata +141 -53
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: c1d8776a35e652bdd896e366dcc40a04f7f02e13
|
4
|
+
data.tar.gz: 7061febb015d2f346842dbf9c7ee90fb57e29c35
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 42c2ab76a60392842d26d80e78ddedbf17c712cac049c96ec2a398b5d090c3e0efb9781c17357d7cb90872a66da172905bf858b7d09f37a806112d79b6b62774
|
7
|
+
data.tar.gz: 154e194f9b3eaf790ceee84cf4a907eb4d542a8cc180b3934f3581978f0d0a23dd14720b6ca608014b3ed50af6c96f3413636212f5309bd45aff021ae733a315
|
data/.gitignore
CHANGED
data/{MIT-LICENSE → LICENSE}
RENAMED
data/README.md
CHANGED
@@ -16,25 +16,67 @@ gem 'omniauth-exvo'
|
|
16
16
|
Then `bundle install`.
|
17
17
|
|
18
18
|
|
19
|
-
##
|
19
|
+
## Usage
|
20
20
|
|
21
|
-
|
21
|
+
`OmniAuth::Strategies::Exvo` is simply a Rack middleware. Read the OmniAuth 1.0 docs for detailed instructions: https://github.com/intridea/omniauth.
|
22
|
+
|
23
|
+
Here's a quick example, adding the middleware to a Rails app in `config/initializers/omniauth_exvo.rb`:
|
22
24
|
|
23
25
|
```ruby
|
24
|
-
use OmniAuth::Builder do
|
26
|
+
Rails.application.config.middleware.use OmniAuth::Builder do
|
25
27
|
provider :exvo, ENV['AUTH_CLIENT_ID'], ENV['AUTH_CLIENT_SECRET']
|
26
28
|
end
|
27
29
|
```
|
28
30
|
|
29
|
-
|
31
|
+
You need to set both `ENV['AUTH_CLIENT_ID']` and `ENV['AUTH_CLIENT_SECRET']` somewhere (vhost configuration, heroku config, `config/environments/*` or even `config/application.rb`).
|
32
|
+
|
33
|
+
|
34
|
+
If you'd like to use Exvo-Auth app in staging or development environments, you need to pass the `:client_options` hash to override the default:
|
30
35
|
|
31
36
|
```ruby
|
32
|
-
use OmniAuth::Builder do
|
33
|
-
provider :exvo, ENV['AUTH_CLIENT_ID'], ENV['AUTH_CLIENT_SECRET'], :client_options => { :site =>
|
37
|
+
Rails.application.config.middleware.use OmniAuth::Builder do
|
38
|
+
provider :exvo, ENV['AUTH_CLIENT_ID'], ENV['AUTH_CLIENT_SECRET'], :client_options => { :site => Exvo::Helpers.auth_uri }
|
34
39
|
end
|
35
40
|
```
|
36
41
|
|
42
|
+
Also read about the [exvo_helpers](https://github.com/Exvo/exvo_helpers) gem.
|
43
|
+
|
37
44
|
|
45
|
+
## Auth Hash
|
46
|
+
|
47
|
+
Here's an example *Auth Hash* available in `request.env['omniauth.auth']` (data as of 2013-04):
|
48
|
+
|
49
|
+
```ruby
|
50
|
+
request.env["omniauth.auth"].to_hash.inspect
|
51
|
+
|
52
|
+
{
|
53
|
+
"provider" => "exvo",
|
54
|
+
"uid" => 1,
|
55
|
+
|
56
|
+
"credentials" => {
|
57
|
+
"token" => "a2d09701559b9f26a8284d6f94670477d882ad6d9f3d92ce9917262a6b54085fa3fb99e111340459",
|
58
|
+
"expires" => false
|
59
|
+
},
|
60
|
+
|
61
|
+
"info" => {
|
62
|
+
"nickname" => "Pawel",
|
63
|
+
"email" => "pawel@exvo.com",
|
64
|
+
"name" => "Pawel"
|
65
|
+
},
|
66
|
+
|
67
|
+
"extra" => {
|
68
|
+
"raw_info" => {
|
69
|
+
"id" => 1,
|
70
|
+
"nickname" => "Pawel",
|
71
|
+
"country_code" => "PL",
|
72
|
+
"plan" => "basic",
|
73
|
+
"language" => "en",
|
74
|
+
"email" => "pawel@exvo.com",
|
75
|
+
"referring_user_id" => nil
|
76
|
+
}
|
77
|
+
}
|
78
|
+
}
|
79
|
+
```
|
38
80
|
|
39
81
|
|
40
|
-
Copyright © 2011-
|
82
|
+
Copyright © 2011-2013 Exvo.com Development BV, released under the MIT license
|
data/omniauth-exvo.gemspec
CHANGED
@@ -9,7 +9,8 @@ Gem::Specification.new do |gem|
|
|
9
9
|
gem.email = ["pawel.goscicki@gmail.com"]
|
10
10
|
gem.homepage = "https://github.com/Exvo/omniauth-exvo/"
|
11
11
|
gem.summary = "OmniAuth strategy for Exvo"
|
12
|
-
gem.description = "OmniAuth strategy for Exvo"
|
12
|
+
gem.description = "OmniAuth strategy for the Exvo platform."
|
13
|
+
gem.license = "MIT"
|
13
14
|
|
14
15
|
gem.files = `git ls-files`.split("\n")
|
15
16
|
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
@@ -23,11 +24,17 @@ Gem::Specification.new do |gem|
|
|
23
24
|
gem.add_development_dependency 'rack-test'
|
24
25
|
gem.add_development_dependency 'webmock'
|
25
26
|
|
27
|
+
gem.add_development_dependency "rake"
|
28
|
+
|
26
29
|
gem.add_development_dependency 'guard', ['~> 1.0']
|
27
30
|
gem.add_development_dependency 'guard-rspec', ['>= 0.6.0']
|
28
31
|
gem.add_development_dependency "rb-fsevent"
|
29
32
|
gem.add_development_dependency "rb-inotify"
|
30
33
|
|
34
|
+
gem.add_development_dependency 'pry'
|
35
|
+
gem.add_development_dependency 'pry-doc'
|
36
|
+
gem.add_development_dependency 'hirb'
|
37
|
+
|
31
38
|
gem.add_development_dependency "simplecov"
|
32
39
|
gem.add_development_dependency "simplecov-rcov"
|
33
40
|
end
|
@@ -6,9 +6,9 @@ describe OmniAuth::Strategies::Exvo do
|
|
6
6
|
|
7
7
|
def set_app!
|
8
8
|
self.app = Rack::Builder.app do
|
9
|
-
use Rack::Session::Cookie
|
9
|
+
use Rack::Session::Cookie, secret: 'some secret key'
|
10
10
|
use OmniAuth::Strategies::Exvo
|
11
|
-
run lambda { |env| [200, {'env' => env}, ['Hello!']] }
|
11
|
+
run lambda { |env| [200, { 'Content-Type' => 'text/plain', 'env' => env }, ['Hello!']] }
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
@@ -42,7 +42,11 @@ describe OmniAuth::Strategies::Exvo do
|
|
42
42
|
|
43
43
|
describe '#callback_url' do
|
44
44
|
before do
|
45
|
+
OmniAuth.config.test_mode = false
|
46
|
+
set_app!
|
47
|
+
|
45
48
|
subject.request.should_receive(:url).and_return('https://auth.exvo.com')
|
49
|
+
subject.request.should_receive(:env).at_least(:once).and_return(double(:[] => '')) # stubs request.env['HTTP_X_FORWARDED_PROTO']
|
46
50
|
subject.should_receive(:script_name).and_return('')
|
47
51
|
end
|
48
52
|
|
@@ -106,29 +110,33 @@ describe OmniAuth::Strategies::Exvo do
|
|
106
110
|
end
|
107
111
|
|
108
112
|
specify { subject.credentials.should be_a(Hash) }
|
109
|
-
|
110
113
|
specify { subject.credentials['token'].should eq('123') }
|
111
|
-
|
112
114
|
specify { subject.credentials['expires'].should eq(false) }
|
113
115
|
end
|
114
116
|
|
115
117
|
describe '#request_phase' do
|
118
|
+
let(:uri) { URI.parse(last_response.location) }
|
119
|
+
let(:query_params) { Rack::Utils.parse_nested_query(uri.query) }
|
120
|
+
|
116
121
|
before do
|
122
|
+
OmniAuth.config.test_mode = false
|
117
123
|
set_app!
|
118
124
|
end
|
119
125
|
|
120
|
-
it 'redirects to auth app
|
126
|
+
it 'redirects to the auth app' do
|
121
127
|
get '/auth/exvo'
|
122
128
|
last_response.should be_redirect
|
123
|
-
|
124
|
-
last_request.url.should match(/^https:\/\/auth\.exvo\.com\/.+callback$/)
|
129
|
+
last_response.location.should match(/^https:\/\/auth\.exvo\.com\/oauth\/authorize/)
|
125
130
|
end
|
126
131
|
|
127
|
-
it '
|
132
|
+
it 'includes a callback redirect param' do
|
133
|
+
get '/auth/exvo'
|
134
|
+
query_params['redirect_uri'].should match(/\/auth\/exvo\/callback$/)
|
135
|
+
end
|
136
|
+
|
137
|
+
it 'includes a custom x_sign_up authorize param' do
|
128
138
|
get '/auth/exvo?x_sign_up=true'
|
129
|
-
|
130
|
-
follow_redirect!
|
131
|
-
last_request.url.should match(/^https:\/\/auth\.exvo\.com\/.+x_sign_up=true$/)
|
139
|
+
query_params['x_sign_up'].should eql("true")
|
132
140
|
end
|
133
141
|
end
|
134
142
|
|
data/spec/spec_helper.rb
CHANGED
@@ -8,11 +8,18 @@ $:.unshift(File.dirname(__FILE__))
|
|
8
8
|
|
9
9
|
require 'rack/test'
|
10
10
|
require 'omniauth-exvo'
|
11
|
+
require 'pry'
|
11
12
|
|
12
13
|
Dir[File.expand_path('../support/**/*', __FILE__)].each { |f| require f }
|
13
14
|
|
14
15
|
RSpec.configure do |config|
|
16
|
+
|
15
17
|
config.mock_with :rspec
|
16
18
|
config.include Rack::Test::Methods
|
17
19
|
config.extend OmniAuth::Test::StrategyMacros, :type => :strategy
|
20
|
+
|
21
|
+
config.before(:each) do
|
22
|
+
OmniAuth.config.test_mode = true
|
23
|
+
end
|
24
|
+
|
18
25
|
end
|
metadata
CHANGED
@@ -1,138 +1,226 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: omniauth-exvo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.4
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Paweł Gościcki
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2013-04-12 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: omniauth
|
16
|
-
requirement:
|
17
|
-
none: false
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
18
16
|
requirements:
|
19
17
|
- - ~>
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '1.0'
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
|
-
version_requirements:
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.0'
|
25
27
|
- !ruby/object:Gem::Dependency
|
26
28
|
name: omniauth-oauth2
|
27
|
-
requirement:
|
28
|
-
none: false
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
29
30
|
requirements:
|
30
31
|
- - ~>
|
31
32
|
- !ruby/object:Gem::Version
|
32
33
|
version: '1.0'
|
33
34
|
type: :runtime
|
34
35
|
prerelease: false
|
35
|
-
version_requirements:
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.0'
|
36
41
|
- !ruby/object:Gem::Dependency
|
37
42
|
name: rspec
|
38
|
-
requirement:
|
39
|
-
none: false
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
40
44
|
requirements:
|
41
|
-
- -
|
45
|
+
- - '>='
|
42
46
|
- !ruby/object:Gem::Version
|
43
47
|
version: '2.8'
|
44
48
|
type: :development
|
45
49
|
prerelease: false
|
46
|
-
version_requirements:
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '2.8'
|
47
55
|
- !ruby/object:Gem::Dependency
|
48
56
|
name: rack-test
|
49
|
-
requirement:
|
50
|
-
none: false
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
51
58
|
requirements:
|
52
|
-
- -
|
59
|
+
- - '>='
|
53
60
|
- !ruby/object:Gem::Version
|
54
61
|
version: '0'
|
55
62
|
type: :development
|
56
63
|
prerelease: false
|
57
|
-
version_requirements:
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
58
69
|
- !ruby/object:Gem::Dependency
|
59
70
|
name: webmock
|
60
|
-
requirement:
|
61
|
-
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rake
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
62
86
|
requirements:
|
63
|
-
- -
|
87
|
+
- - '>='
|
64
88
|
- !ruby/object:Gem::Version
|
65
89
|
version: '0'
|
66
90
|
type: :development
|
67
91
|
prerelease: false
|
68
|
-
version_requirements:
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - '>='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
69
97
|
- !ruby/object:Gem::Dependency
|
70
98
|
name: guard
|
71
|
-
requirement:
|
72
|
-
none: false
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
73
100
|
requirements:
|
74
101
|
- - ~>
|
75
102
|
- !ruby/object:Gem::Version
|
76
103
|
version: '1.0'
|
77
104
|
type: :development
|
78
105
|
prerelease: false
|
79
|
-
version_requirements:
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ~>
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '1.0'
|
80
111
|
- !ruby/object:Gem::Dependency
|
81
112
|
name: guard-rspec
|
82
|
-
requirement:
|
83
|
-
none: false
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
84
114
|
requirements:
|
85
|
-
- -
|
115
|
+
- - '>='
|
86
116
|
- !ruby/object:Gem::Version
|
87
117
|
version: 0.6.0
|
88
118
|
type: :development
|
89
119
|
prerelease: false
|
90
|
-
version_requirements:
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - '>='
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: 0.6.0
|
91
125
|
- !ruby/object:Gem::Dependency
|
92
126
|
name: rb-fsevent
|
93
|
-
requirement:
|
94
|
-
none: false
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
95
128
|
requirements:
|
96
|
-
- -
|
129
|
+
- - '>='
|
97
130
|
- !ruby/object:Gem::Version
|
98
131
|
version: '0'
|
99
132
|
type: :development
|
100
133
|
prerelease: false
|
101
|
-
version_requirements:
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - '>='
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
102
139
|
- !ruby/object:Gem::Dependency
|
103
140
|
name: rb-inotify
|
104
|
-
requirement:
|
105
|
-
none: false
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
106
142
|
requirements:
|
107
|
-
- -
|
143
|
+
- - '>='
|
108
144
|
- !ruby/object:Gem::Version
|
109
145
|
version: '0'
|
110
146
|
type: :development
|
111
147
|
prerelease: false
|
112
|
-
version_requirements:
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - '>='
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: pry
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - '>='
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - '>='
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: pry-doc
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - '>='
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - '>='
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0'
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: hirb
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - '>='
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '0'
|
188
|
+
type: :development
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - '>='
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '0'
|
113
195
|
- !ruby/object:Gem::Dependency
|
114
196
|
name: simplecov
|
115
|
-
requirement:
|
116
|
-
none: false
|
197
|
+
requirement: !ruby/object:Gem::Requirement
|
117
198
|
requirements:
|
118
|
-
- -
|
199
|
+
- - '>='
|
119
200
|
- !ruby/object:Gem::Version
|
120
201
|
version: '0'
|
121
202
|
type: :development
|
122
203
|
prerelease: false
|
123
|
-
version_requirements:
|
204
|
+
version_requirements: !ruby/object:Gem::Requirement
|
205
|
+
requirements:
|
206
|
+
- - '>='
|
207
|
+
- !ruby/object:Gem::Version
|
208
|
+
version: '0'
|
124
209
|
- !ruby/object:Gem::Dependency
|
125
210
|
name: simplecov-rcov
|
126
|
-
requirement:
|
127
|
-
none: false
|
211
|
+
requirement: !ruby/object:Gem::Requirement
|
128
212
|
requirements:
|
129
|
-
- -
|
213
|
+
- - '>='
|
130
214
|
- !ruby/object:Gem::Version
|
131
215
|
version: '0'
|
132
216
|
type: :development
|
133
217
|
prerelease: false
|
134
|
-
version_requirements:
|
135
|
-
|
218
|
+
version_requirements: !ruby/object:Gem::Requirement
|
219
|
+
requirements:
|
220
|
+
- - '>='
|
221
|
+
- !ruby/object:Gem::Version
|
222
|
+
version: '0'
|
223
|
+
description: OmniAuth strategy for the Exvo platform.
|
136
224
|
email:
|
137
225
|
- pawel.goscicki@gmail.com
|
138
226
|
executables: []
|
@@ -141,7 +229,7 @@ extra_rdoc_files: []
|
|
141
229
|
files:
|
142
230
|
- .gitignore
|
143
231
|
- Gemfile
|
144
|
-
-
|
232
|
+
- LICENSE
|
145
233
|
- README.md
|
146
234
|
- Rakefile
|
147
235
|
- lib/omniauth-exvo.rb
|
@@ -152,28 +240,28 @@ files:
|
|
152
240
|
- spec/spec_helper.rb
|
153
241
|
- spec/support/shared_examples.rb
|
154
242
|
homepage: https://github.com/Exvo/omniauth-exvo/
|
155
|
-
licenses:
|
243
|
+
licenses:
|
244
|
+
- MIT
|
245
|
+
metadata: {}
|
156
246
|
post_install_message:
|
157
247
|
rdoc_options: []
|
158
248
|
require_paths:
|
159
249
|
- lib
|
160
250
|
required_ruby_version: !ruby/object:Gem::Requirement
|
161
|
-
none: false
|
162
251
|
requirements:
|
163
|
-
- -
|
252
|
+
- - '>='
|
164
253
|
- !ruby/object:Gem::Version
|
165
254
|
version: '0'
|
166
255
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
167
|
-
none: false
|
168
256
|
requirements:
|
169
|
-
- -
|
257
|
+
- - '>='
|
170
258
|
- !ruby/object:Gem::Version
|
171
259
|
version: '0'
|
172
260
|
requirements: []
|
173
261
|
rubyforge_project:
|
174
|
-
rubygems_version:
|
262
|
+
rubygems_version: 2.0.3
|
175
263
|
signing_key:
|
176
|
-
specification_version:
|
264
|
+
specification_version: 4
|
177
265
|
summary: OmniAuth strategy for Exvo
|
178
266
|
test_files: []
|
179
267
|
has_rdoc:
|