standardapi 6.0.0.29 → 6.0.0.30
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/standard_api/controller.rb +3 -2
- data/lib/standard_api/errors.rb +9 -0
- data/lib/standard_api/test_case/create_tests.rb +6 -3
- data/lib/standard_api/test_case/index_tests.rb +4 -4
- data/lib/standard_api/test_case.rb +11 -11
- data/lib/standard_api/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bf7ed75a06eda9f024ebd87caccab44573802435d0494944137d92da6403fca2
|
4
|
+
data.tar.gz: f44ad9cdd0d8bb87bc971f0b11b8f50b5f5f1289911d7bf4764f6f867b59b407
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2f0f4ba53a851f87467a584b0a37708a1d2c6a52fc3360c31fbd50462af17918b7c43b435001410984291db24a451940e97487fc549f993d35ecc63d832d3b20
|
7
|
+
data.tar.gz: 26d70be42fd115039c04a4a0ba614225c05a549af0847d3473659c9d593002cd11addcfd330000163eb9d1597843c274593ba99ddd6f9a57ee39b83e8a05fcbb
|
@@ -7,6 +7,7 @@ module StandardAPI
|
|
7
7
|
klass.helper_method :includes, :orders, :model, :models, :resource_limit,
|
8
8
|
:default_limit
|
9
9
|
klass.before_action :set_standardapi_headers
|
10
|
+
klass.rescue_from StandardAPI::ParameterMissing, with: :bad_request
|
10
11
|
klass.rescue_from StandardAPI::UnpermittedParameters, with: :bad_request
|
11
12
|
klass.append_view_path(File.join(File.dirname(__FILE__), 'views'))
|
12
13
|
klass.extend(ClassMethods)
|
@@ -284,9 +285,9 @@ module StandardAPI
|
|
284
285
|
limit = params.permit(:limit)[:limit]&.to_i || default_limit
|
285
286
|
|
286
287
|
if !limit
|
287
|
-
raise
|
288
|
+
raise StandardAPI::ParameterMissing.new(:limit)
|
288
289
|
elsif limit > resource_limit
|
289
|
-
raise
|
290
|
+
raise StandardAPI::UnpermittedParameters.new([:limit, limit])
|
290
291
|
end
|
291
292
|
|
292
293
|
limit
|
data/lib/standard_api/errors.rb
CHANGED
@@ -2,6 +2,15 @@ module StandardAPI
|
|
2
2
|
class StandardAPIError < StandardError
|
3
3
|
end
|
4
4
|
|
5
|
+
class ParameterMissing < StandardAPIError
|
6
|
+
attr_reader :param
|
7
|
+
|
8
|
+
def initialize(param)
|
9
|
+
@param = param
|
10
|
+
super("param is missing or the value is empty: #{param}")
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
5
14
|
class UnpermittedParameters < StandardAPIError
|
6
15
|
attr_reader :params
|
7
16
|
|
@@ -85,9 +85,12 @@ module StandardAPI
|
|
85
85
|
end
|
86
86
|
|
87
87
|
test '#create.html' do
|
88
|
-
return unless supports_format(:html)
|
88
|
+
return unless supports_format(:html, :create)
|
89
|
+
|
90
|
+
attrs = attributes_for(singular_name, :nested).select do |k,v|
|
91
|
+
!model.readonly_attributes.include?(k.to_s)
|
92
|
+
end
|
89
93
|
|
90
|
-
attrs = attributes_for(singular_name, :nested).select{ |k,v| !model.readonly_attributes.include?(k.to_s) }
|
91
94
|
mask.each { |k, v| attrs[k] = v }
|
92
95
|
create_webmocks(attrs)
|
93
96
|
|
@@ -98,7 +101,7 @@ module StandardAPI
|
|
98
101
|
end
|
99
102
|
|
100
103
|
test '#create.html with invalid attributes renders edit action' do
|
101
|
-
return unless supports_format(:html)
|
104
|
+
return unless supports_format(:html, :create)
|
102
105
|
|
103
106
|
trait = FactoryBot.factories[singular_name].definition.defined_traits.any? { |x| x.name.to_s == 'invalid' }
|
104
107
|
|
@@ -37,10 +37,10 @@ module StandardAPI
|
|
37
37
|
|
38
38
|
test '#index.json params[:limit] does not exceed maximum limit' do
|
39
39
|
return if !resource_limit || resource_limit == Float::INFINITY
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
40
|
+
|
41
|
+
get resource_path(:index, format: :json), params: { limit: resource_limit + 1 }
|
42
|
+
assert_response :bad_request
|
43
|
+
assert_equal 'found unpermitted parameters: :limit, 1001', response.body
|
44
44
|
end
|
45
45
|
|
46
46
|
test '#index.json params[:where]' do
|
@@ -18,7 +18,7 @@ module StandardAPI::TestCase
|
|
18
18
|
assert_equal(expected, *args)
|
19
19
|
end
|
20
20
|
end
|
21
|
-
|
21
|
+
|
22
22
|
def self.included(klass)
|
23
23
|
[:filters, :orders, :includes].each do |attribute|
|
24
24
|
klass.send(:class_attribute, attribute)
|
@@ -53,14 +53,14 @@ module StandardAPI::TestCase
|
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
56
|
-
def supports_format(format)
|
56
|
+
def supports_format(format, action=nil)
|
57
57
|
count = controller_class.view_paths.count do |path|
|
58
|
-
!Dir.glob("#{path.instance_variable_get(:@path)}/{#{model.name.underscore},application}
|
58
|
+
!Dir.glob("#{path.instance_variable_get(:@path)}/{#{model.name.underscore},application}/**/#{action || '*'}.#{format}*").empty?
|
59
59
|
end
|
60
|
-
|
60
|
+
|
61
61
|
count > 0
|
62
62
|
end
|
63
|
-
|
63
|
+
|
64
64
|
def default_orders
|
65
65
|
controller_class.new.send(:default_orders)
|
66
66
|
end
|
@@ -76,7 +76,7 @@ module StandardAPI::TestCase
|
|
76
76
|
def model
|
77
77
|
self.class.model
|
78
78
|
end
|
79
|
-
|
79
|
+
|
80
80
|
def mask
|
81
81
|
{}
|
82
82
|
end
|
@@ -98,11 +98,11 @@ module StandardAPI::TestCase
|
|
98
98
|
def singular_name
|
99
99
|
model.model_name.singular
|
100
100
|
end
|
101
|
-
|
101
|
+
|
102
102
|
def plural_name
|
103
103
|
model.model_name.plural
|
104
104
|
end
|
105
|
-
|
105
|
+
|
106
106
|
def create_webmocks(attributes)
|
107
107
|
attributes.each do |attribute, value|
|
108
108
|
self.class.model.validators_on(attribute)
|
@@ -122,7 +122,7 @@ module StandardAPI::TestCase
|
|
122
122
|
value
|
123
123
|
end
|
124
124
|
end
|
125
|
-
|
125
|
+
|
126
126
|
def normalize_to_json(record, attribute, value)
|
127
127
|
value = normalize_attribute(record, attribute, value)
|
128
128
|
return nil if value.nil?
|
@@ -149,7 +149,7 @@ module StandardAPI::TestCase
|
|
149
149
|
|
150
150
|
def controller_class
|
151
151
|
controller_class_name = self.name.gsub(/Test$/, '')
|
152
|
-
controller_class_name.constantize
|
152
|
+
controller_class_name.constantize
|
153
153
|
rescue NameError => e
|
154
154
|
raise e if e.message != "uninitialized constant #{controller_class_name}"
|
155
155
|
end
|
@@ -166,7 +166,7 @@ module StandardAPI::TestCase
|
|
166
166
|
return @model if defined?(@model) && @model
|
167
167
|
|
168
168
|
klass_name = controller_class.name.gsub(/Controller$/, '').singularize
|
169
|
-
|
169
|
+
|
170
170
|
begin
|
171
171
|
@model = klass_name.constantize
|
172
172
|
rescue NameError
|
data/lib/standard_api/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: standardapi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 6.0.0.
|
4
|
+
version: 6.0.0.30
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Bracy
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-02-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|