haveapi 0.18.2 → 0.19.1
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/haveapi.gemspec +2 -1
- data/lib/haveapi/action.rb +72 -31
- data/lib/haveapi/authentication/base.rb +1 -1
- data/lib/haveapi/authentication/basic/provider.rb +2 -2
- data/lib/haveapi/authentication/chain.rb +4 -4
- data/lib/haveapi/authentication/oauth2/config.rb +52 -14
- data/lib/haveapi/authentication/oauth2/provider.rb +98 -17
- data/lib/haveapi/authentication/oauth2/revoke_endpoint.rb +36 -0
- data/lib/haveapi/authentication/token/config.rb +1 -0
- data/lib/haveapi/authorization.rb +19 -12
- data/lib/haveapi/client_examples/js_client.rb +11 -1
- data/lib/haveapi/client_examples/php_client.rb +43 -1
- data/lib/haveapi/context.rb +21 -2
- data/lib/haveapi/example.rb +9 -9
- data/lib/haveapi/hooks.rb +23 -23
- data/lib/haveapi/metadata.rb +1 -1
- data/lib/haveapi/model_adapter.rb +14 -14
- data/lib/haveapi/model_adapters/active_record.rb +20 -20
- data/lib/haveapi/output_formatter.rb +4 -4
- data/lib/haveapi/output_formatters/base.rb +1 -1
- data/lib/haveapi/parameters/resource.rb +22 -22
- data/lib/haveapi/parameters/typed.rb +7 -7
- data/lib/haveapi/params.rb +24 -22
- data/lib/haveapi/resource.rb +9 -3
- data/lib/haveapi/resources/action_state.rb +16 -16
- data/lib/haveapi/route.rb +3 -2
- data/lib/haveapi/server.rb +113 -98
- data/lib/haveapi/spec/mock_action.rb +7 -7
- data/lib/haveapi/spec/spec_methods.rb +8 -8
- data/lib/haveapi/tasks/yard.rb +2 -2
- data/lib/haveapi/validator.rb +13 -13
- data/lib/haveapi/validator_chain.rb +6 -6
- data/lib/haveapi/validators/acceptance.rb +2 -2
- data/lib/haveapi/validators/confirmation.rb +4 -4
- data/lib/haveapi/validators/exclusion.rb +4 -4
- data/lib/haveapi/validators/format.rb +4 -4
- data/lib/haveapi/validators/inclusion.rb +3 -3
- data/lib/haveapi/validators/length.rb +1 -1
- data/lib/haveapi/validators/numericality.rb +3 -3
- data/lib/haveapi/validators/presence.rb +2 -2
- data/lib/haveapi/version.rb +1 -1
- data/lib/haveapi/views/version_page/auth_body.erb +6 -4
- data/lib/haveapi/views/version_page/resource_body.erb +2 -0
- data/lib/haveapi.rb +1 -0
- data/spec/authorization_spec.rb +28 -28
- data/spec/envelope_spec.rb +4 -4
- data/spec/parameters/typed_spec.rb +3 -3
- data/spec/params_spec.rb +2 -2
- data/spec/validators/acceptance_spec.rb +2 -2
- data/spec/validators/confirmation_spec.rb +4 -4
- data/spec/validators/exclusion_spec.rb +2 -2
- data/spec/validators/format_spec.rb +5 -5
- data/spec/validators/inclusion_spec.rb +8 -8
- data/spec/validators/presence_spec.rb +1 -1
- metadata +19 -4
@@ -12,8 +12,8 @@ module HaveAPI
|
|
12
12
|
# message: 'the error message'
|
13
13
|
# }
|
14
14
|
#
|
15
|
-
# In this case, the value could be anything but
|
16
|
-
#
|
15
|
+
# In this case, the value could be anything but `one`, `two` or
|
16
|
+
# `three`.
|
17
17
|
class Validators::Exclusion < Validator
|
18
18
|
name :exclude
|
19
19
|
takes :exclude
|
@@ -28,8 +28,8 @@ module HaveAPI
|
|
28
28
|
|
29
29
|
def describe
|
30
30
|
{
|
31
|
-
|
32
|
-
|
31
|
+
values: @values,
|
32
|
+
message: @message,
|
33
33
|
}
|
34
34
|
end
|
35
35
|
|
@@ -12,7 +12,7 @@ module HaveAPI
|
|
12
12
|
# message: 'the error message'
|
13
13
|
# }
|
14
14
|
#
|
15
|
-
# Option
|
15
|
+
# Option `choices` is an alias to `include`.
|
16
16
|
class Validators::Inclusion < Validator
|
17
17
|
name :include
|
18
18
|
takes :choices, :include
|
@@ -36,8 +36,8 @@ module HaveAPI
|
|
36
36
|
|
37
37
|
def describe
|
38
38
|
{
|
39
|
-
|
40
|
-
|
39
|
+
values: @values,
|
40
|
+
message: @message,
|
41
41
|
}
|
42
42
|
end
|
43
43
|
|
@@ -11,7 +11,7 @@ module HaveAPI
|
|
11
11
|
# message: 'the error message'
|
12
12
|
# }
|
13
13
|
#
|
14
|
-
# Will allow values
|
14
|
+
# Will allow values `3`, `5`, `7` and `9`.
|
15
15
|
#
|
16
16
|
# string :param, number: {
|
17
17
|
# min: 3,
|
@@ -19,7 +19,7 @@ module HaveAPI
|
|
19
19
|
# mod: 2,
|
20
20
|
# }
|
21
21
|
#
|
22
|
-
# Will allow values
|
22
|
+
# Will allow values `4`, `6`, `8` and `10`.
|
23
23
|
class Validators::Numericality < Validator
|
24
24
|
name :number
|
25
25
|
takes :number
|
@@ -74,7 +74,7 @@ module HaveAPI
|
|
74
74
|
|
75
75
|
def describe
|
76
76
|
ret = {
|
77
|
-
|
77
|
+
message: @message,
|
78
78
|
}
|
79
79
|
|
80
80
|
ret[:min] = @min if @min
|
data/lib/haveapi/version.rb
CHANGED
@@ -12,10 +12,12 @@
|
|
12
12
|
</dl>
|
13
13
|
<% elsif name == :oauth2 %>
|
14
14
|
<dl>
|
15
|
-
<dt>Authorize
|
16
|
-
<dd><%= info[:
|
17
|
-
<dt>Token
|
18
|
-
<dd><%= info[:
|
15
|
+
<dt>Authorize URL:</dt>
|
16
|
+
<dd><%= info[:authorize_url] %></dd>
|
17
|
+
<dt>Token URL:</dt>
|
18
|
+
<dd><%= info[:token_url] %></dd>
|
19
|
+
<dt>Revoke URL:</dt>
|
20
|
+
<dd><%= info[:revoke_url] %></dd>
|
19
21
|
</dl>
|
20
22
|
<% end %>
|
21
23
|
|
data/lib/haveapi.rb
CHANGED
data/spec/authorization_spec.rb
CHANGED
@@ -40,17 +40,17 @@ describe HaveAPI::Authorization do
|
|
40
40
|
input whitelist: %i(param1)
|
41
41
|
allow
|
42
42
|
end
|
43
|
-
|
43
|
+
|
44
44
|
expect(auth.authorized?(nil)).to be true
|
45
|
-
|
45
|
+
|
46
46
|
action = Resource::Index
|
47
47
|
|
48
48
|
expect(auth.filter_input(
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
49
|
+
action.input.params,
|
50
|
+
action.model_adapter(action.input.layout).input({
|
51
|
+
param1: '123',
|
52
|
+
param2: '456',
|
53
|
+
})
|
54
54
|
).keys).to contain_exactly(:param1)
|
55
55
|
end
|
56
56
|
|
@@ -59,17 +59,17 @@ describe HaveAPI::Authorization do
|
|
59
59
|
input blacklist: %i(param1)
|
60
60
|
allow
|
61
61
|
end
|
62
|
-
|
62
|
+
|
63
63
|
expect(auth.authorized?(nil)).to be true
|
64
|
-
|
64
|
+
|
65
65
|
action = Resource::Index
|
66
66
|
|
67
67
|
expect(auth.filter_input(
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
68
|
+
action.input.params,
|
69
|
+
action.model_adapter(action.input.layout).input({
|
70
|
+
param1: '123',
|
71
|
+
param2: '456',
|
72
|
+
})
|
73
73
|
).keys).to contain_exactly(:param2)
|
74
74
|
end
|
75
75
|
|
@@ -78,17 +78,17 @@ describe HaveAPI::Authorization do
|
|
78
78
|
output whitelist: %i(param1)
|
79
79
|
allow
|
80
80
|
end
|
81
|
-
|
81
|
+
|
82
82
|
expect(auth.authorized?(nil)).to be true
|
83
|
-
|
83
|
+
|
84
84
|
action = Resource::Index
|
85
85
|
|
86
86
|
expect(auth.filter_output(
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
87
|
+
action.output.params,
|
88
|
+
action.model_adapter(action.output.layout).output(nil, {
|
89
|
+
param1: '123',
|
90
|
+
param2: '456',
|
91
|
+
})
|
92
92
|
).keys).to contain_exactly(:param1)
|
93
93
|
end
|
94
94
|
|
@@ -97,17 +97,17 @@ describe HaveAPI::Authorization do
|
|
97
97
|
output blacklist: %i(param1)
|
98
98
|
allow
|
99
99
|
end
|
100
|
-
|
100
|
+
|
101
101
|
expect(auth.authorized?(nil)).to be true
|
102
|
-
|
102
|
+
|
103
103
|
action = Resource::Index
|
104
104
|
|
105
105
|
expect(auth.filter_output(
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
106
|
+
action.output.params,
|
107
|
+
action.model_adapter(action.output.layout).output(nil, {
|
108
|
+
param1: '123',
|
109
|
+
param2: '456',
|
110
|
+
})
|
111
111
|
).keys).to contain_exactly(:param2)
|
112
112
|
end
|
113
113
|
end
|
data/spec/envelope_spec.rb
CHANGED
@@ -5,10 +5,10 @@ describe 'Envelope' do
|
|
5
5
|
it 'returns correct envelope' do
|
6
6
|
call_api(:options, '/')
|
7
7
|
expect(api_response.envelope.keys).to contain_exactly(
|
8
|
-
|
8
|
+
*%i(version status response message errors)
|
9
9
|
)
|
10
10
|
end
|
11
|
-
|
11
|
+
|
12
12
|
it 'succeeds' do
|
13
13
|
call_api(:options, '/')
|
14
14
|
expect(api_response).to be_ok
|
@@ -17,11 +17,11 @@ describe 'Envelope' do
|
|
17
17
|
|
18
18
|
context 'data' do
|
19
19
|
empty_api
|
20
|
-
|
20
|
+
|
21
21
|
it 'returns correct envelope' do
|
22
22
|
call_api(:get, '/unknown_resource')
|
23
23
|
expect(api_response.envelope.keys).to contain_exactly(
|
24
|
-
|
24
|
+
*%i(status response message errors)
|
25
25
|
)
|
26
26
|
end
|
27
27
|
|
@@ -11,9 +11,9 @@ describe 'Parameters::Typed' do
|
|
11
11
|
|
12
12
|
it 'does not change provided arguments' do
|
13
13
|
kwargs = {
|
14
|
-
|
15
|
-
|
16
|
-
|
14
|
+
label: 'Param 1',
|
15
|
+
desc: 'Desc',
|
16
|
+
required: true,
|
17
17
|
}
|
18
18
|
p_arg(kwargs)
|
19
19
|
expect(kwargs.keys).to contain_exactly(*%i(label desc required))
|
data/spec/params_spec.rb
CHANGED
@@ -156,7 +156,7 @@ describe HaveAPI::Params do
|
|
156
156
|
|
157
157
|
expect do
|
158
158
|
p.check_layout({
|
159
|
-
|
159
|
+
my_resource: {}
|
160
160
|
})
|
161
161
|
end.not_to raise_error
|
162
162
|
end
|
@@ -171,7 +171,7 @@ describe HaveAPI::Params do
|
|
171
171
|
|
172
172
|
expect do
|
173
173
|
p.check_layout({
|
174
|
-
|
174
|
+
something_bad: {}
|
175
175
|
})
|
176
176
|
end.to raise_error(HaveAPI::ValidationError)
|
177
177
|
end
|
@@ -7,7 +7,7 @@ describe HaveAPI::Validators::Acceptance do
|
|
7
7
|
it "rejects incorrect value" do
|
8
8
|
expect(@v.valid?('bar')).to be false
|
9
9
|
end
|
10
|
-
end
|
10
|
+
end
|
11
11
|
|
12
12
|
context 'short form' do
|
13
13
|
before(:each) do
|
@@ -20,7 +20,7 @@ describe HaveAPI::Validators::Acceptance do
|
|
20
20
|
context 'full form' do
|
21
21
|
before(:each) do
|
22
22
|
@v = HaveAPI::Validators::Acceptance.new(:accept, {
|
23
|
-
|
23
|
+
value: 'foo'
|
24
24
|
})
|
25
25
|
end
|
26
26
|
|
@@ -7,7 +7,7 @@ describe HaveAPI::Validators::Confirmation do
|
|
7
7
|
it "rejects a different value" do
|
8
8
|
expect(@v.validate('bar', {other_param: 'foo'})).to be false
|
9
9
|
end
|
10
|
-
end
|
10
|
+
end
|
11
11
|
|
12
12
|
context 'short form' do
|
13
13
|
before(:each) do
|
@@ -20,7 +20,7 @@ describe HaveAPI::Validators::Confirmation do
|
|
20
20
|
context 'full form' do
|
21
21
|
before(:each) do
|
22
22
|
@v = HaveAPI::Validators::Confirmation.new(:confirm, {
|
23
|
-
|
23
|
+
param: :other_param
|
24
24
|
})
|
25
25
|
end
|
26
26
|
|
@@ -30,8 +30,8 @@ describe HaveAPI::Validators::Confirmation do
|
|
30
30
|
context 'with equal = false' do
|
31
31
|
before(:each) do
|
32
32
|
@v = HaveAPI::Validators::Confirmation.new(:confirm, {
|
33
|
-
|
34
|
-
|
33
|
+
param: :other_param,
|
34
|
+
equal: false
|
35
35
|
})
|
36
36
|
end
|
37
37
|
|
@@ -10,7 +10,7 @@ describe HaveAPI::Validators::Exclusion do
|
|
10
10
|
expect(@v.valid?('zero')).to be true
|
11
11
|
expect(@v.valid?('four')).to be true
|
12
12
|
end
|
13
|
-
end
|
13
|
+
end
|
14
14
|
|
15
15
|
context 'short form' do
|
16
16
|
before(:each) do
|
@@ -23,7 +23,7 @@ describe HaveAPI::Validators::Exclusion do
|
|
23
23
|
context 'full form' do
|
24
24
|
before(:each) do
|
25
25
|
@v = HaveAPI::Validators::Exclusion.new(:exclude, {
|
26
|
-
|
26
|
+
values: %w(one two three)
|
27
27
|
})
|
28
28
|
end
|
29
29
|
|
@@ -10,7 +10,7 @@ describe HaveAPI::Validators::Format do
|
|
10
10
|
expect(@v.valid?('bacacb')).to be false
|
11
11
|
expect(@v.valid?('b')).to be false
|
12
12
|
end
|
13
|
-
end
|
13
|
+
end
|
14
14
|
|
15
15
|
context 'with match = true' do
|
16
16
|
context 'short form' do
|
@@ -24,7 +24,7 @@ describe HaveAPI::Validators::Format do
|
|
24
24
|
context 'full form' do
|
25
25
|
before(:each) do
|
26
26
|
@v = HaveAPI::Validators::Format.new(:format, {
|
27
|
-
|
27
|
+
rx: /^a[^b]+b$/
|
28
28
|
})
|
29
29
|
end
|
30
30
|
|
@@ -35,11 +35,11 @@ describe HaveAPI::Validators::Format do
|
|
35
35
|
context 'with match = false' do
|
36
36
|
before(:each) do
|
37
37
|
@v = HaveAPI::Validators::Format.new(:format, {
|
38
|
-
|
39
|
-
|
38
|
+
rx: /^a[^b]+b$/,
|
39
|
+
match: false
|
40
40
|
})
|
41
41
|
end
|
42
|
-
|
42
|
+
|
43
43
|
it 'rejects a value that matches the regexp' do
|
44
44
|
expect(@v.valid?('aab')).to be false
|
45
45
|
expect(@v.valid?('aacacb')).to be false
|
@@ -10,15 +10,15 @@ describe HaveAPI::Validators::Inclusion do
|
|
10
10
|
expect(@v.valid?('zero')).to be false
|
11
11
|
expect(@v.valid?('four')).to be false
|
12
12
|
end
|
13
|
-
end
|
13
|
+
end
|
14
14
|
|
15
15
|
[
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
16
|
+
%w(one two three),
|
17
|
+
{
|
18
|
+
one: 'Fancy one',
|
19
|
+
two: 'Fancy two',
|
20
|
+
three: 'Fancy three'
|
21
|
+
}
|
22
22
|
].each do |include|
|
23
23
|
context "with include as a '#{include.class}'" do
|
24
24
|
context 'short form' do
|
@@ -32,7 +32,7 @@ describe HaveAPI::Validators::Inclusion do
|
|
32
32
|
context 'full form' do
|
33
33
|
before(:each) do
|
34
34
|
@v = HaveAPI::Validators::Inclusion.new(:include, {
|
35
|
-
|
35
|
+
values: %w(one two three)
|
36
36
|
})
|
37
37
|
end
|
38
38
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: haveapi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.19.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jakub Skokan
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: 3.1.0
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: sinatra-contrib
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 3.1.0
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 3.1.0
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: tilt
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -142,14 +156,14 @@ dependencies:
|
|
142
156
|
requirements:
|
143
157
|
- - "~>"
|
144
158
|
- !ruby/object:Gem::Version
|
145
|
-
version: 0.
|
159
|
+
version: 0.19.1
|
146
160
|
type: :runtime
|
147
161
|
prerelease: false
|
148
162
|
version_requirements: !ruby/object:Gem::Requirement
|
149
163
|
requirements:
|
150
164
|
- - "~>"
|
151
165
|
- !ruby/object:Gem::Version
|
152
|
-
version: 0.
|
166
|
+
version: 0.19.1
|
153
167
|
- !ruby/object:Gem::Dependency
|
154
168
|
name: mail
|
155
169
|
requirement: !ruby/object:Gem::Requirement
|
@@ -210,6 +224,7 @@ files:
|
|
210
224
|
- lib/haveapi/authentication/oauth2.rb
|
211
225
|
- lib/haveapi/authentication/oauth2/config.rb
|
212
226
|
- lib/haveapi/authentication/oauth2/provider.rb
|
227
|
+
- lib/haveapi/authentication/oauth2/revoke_endpoint.rb
|
213
228
|
- lib/haveapi/authentication/token.rb
|
214
229
|
- lib/haveapi/authentication/token/action_config.rb
|
215
230
|
- lib/haveapi/authentication/token/action_request.rb
|
@@ -332,7 +347,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
332
347
|
- !ruby/object:Gem::Version
|
333
348
|
version: '0'
|
334
349
|
requirements: []
|
335
|
-
rubygems_version: 3.4.
|
350
|
+
rubygems_version: 3.4.22
|
336
351
|
signing_key:
|
337
352
|
specification_version: 4
|
338
353
|
summary: Framework for creating self-describing APIs
|