jsonapi_compliable 0.11.13 → 0.11.14

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e51276044c4062270de44eda40b761e68de042a6
4
- data.tar.gz: eaf59452eafd80b98c3ab1364ad765e9e6d1aae8
3
+ metadata.gz: 85cb483d105b4de74832a99fefe27def18abf39c
4
+ data.tar.gz: df674dec125d95d7a53850cffa4505cc25dc7cc7
5
5
  SHA512:
6
- metadata.gz: 4cb12821a1359842eb6c96c617676c1c6f2ba130b7086b3db022f4378fa661bf354b9e5bc7d11f001954d7e5b1812d851cfad6756089c7c72ad77b2f13badb2d
7
- data.tar.gz: 230c1750efd1c49d8ea71644bf52de3631bd819e1eb76c7473b27f8da147ab6009cfec2298626b7e810b89117e9398c2d52d2c8c8e243936248af7128127a0fd
6
+ metadata.gz: 9d8ccc89afff5695bb27ab30b1fa07a209ec349fb68f0c07042a152dc3b63a7775235bc20386ca75cae0c0a574564faf4a0316815a7226c4c0181beb5e431a82
7
+ data.tar.gz: 935e966df8bd96148ff5cadd32bee84257b723f1f7872236a8e2d7d32effc54e8e07ee93c9b5b8532240502a6422c34547c20149864bf30be67d2ad40450a70a
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.3.0
1
+ 2.4.1
@@ -47,5 +47,19 @@ module JsonapiCompliable
47
47
 
48
48
  class RecordNotFound < StandardError
49
49
  end
50
+
51
+ class RequiredFilter < StandardError
52
+ def initialize(attributes)
53
+ @attributes = Array(attributes)
54
+ end
55
+
56
+ def message
57
+ if @attributes.length > 1
58
+ "The required filters \"#{@attributes.join(', ')}\" were not provided"
59
+ else
60
+ "The required filter \"#{@attributes[0]}\" was not provided"
61
+ end
62
+ end
63
+ end
50
64
  end
51
65
  end
@@ -172,7 +172,8 @@ module JsonapiCompliable
172
172
  config[:filters][name.to_sym] = {
173
173
  aliases: aliases,
174
174
  if: opts[:if],
175
- filter: blk
175
+ filter: blk,
176
+ required: opts[:required].respond_to?(:call) ? opts[:required] : !!opts[:required]
176
177
  }
177
178
  end
178
179
 
@@ -28,6 +28,7 @@ module JsonapiCompliable
28
28
  # aliases. If valid, call either the default or custom filtering logic.
29
29
  # @return the scope we are chaining/modifying
30
30
  def apply
31
+ raise JsonapiCompliable::Errors::RequiredFilter.new(missing_required_filters) unless required_filters_provided?
31
32
  each_filter do |filter, value|
32
33
  @scope = filter_scope(filter, value)
33
34
  end
@@ -23,5 +23,19 @@ module JsonapiCompliable
23
23
  def filter_param
24
24
  query_hash[:filter]
25
25
  end
26
+
27
+ def missing_required_filters
28
+ required_filters.keys - filter_param.keys
29
+ end
30
+
31
+ def required_filters
32
+ resource.filters.select do |_name, opts|
33
+ opts[:required].respond_to?(:call) ? opts[:required].call(resource.context) : opts[:required]
34
+ end
35
+ end
36
+
37
+ def required_filters_provided?
38
+ missing_required_filters.empty?
39
+ end
26
40
  end
27
41
  end
@@ -1,3 +1,3 @@
1
1
  module JsonapiCompliable
2
- VERSION = "0.11.13"
2
+ VERSION = "0.11.14"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jsonapi_compliable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.13
4
+ version: 0.11.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lee Richmond
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2018-05-14 00:00:00.000000000 Z
12
+ date: 2018-05-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: jsonapi-serializable