jsonapi-validations 0.1.1.beta1 → 0.1.1.beta3

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: 51f6ad7a9024b404c821d08302c1211fc8ab6d84
4
- data.tar.gz: 814b58de2920226fbd45d6368a872e603b1c88d1
3
+ metadata.gz: 50c60a21dbdeffb1d691453e6d7ff0fbb26687e7
4
+ data.tar.gz: 7c83f67e2f20618b772d8c32d3d5c98910db64e0
5
5
  SHA512:
6
- metadata.gz: c7155434543ebdc5165d090d236940fb6a07cecb384744fef8ececdecf48dd92c3a2a09bd8b09c3ba2376589aff88dc888c1a9dba6405b11f41b7a9191bba75a
7
- data.tar.gz: 03fa3a140f3ea5ef289957542d15df92e2aabc74e861db885170bf42e95284a609ff6a4ec00b5709a36b2b11ca711acc3640bb7e7260766f117fa3ddcfb14d91
6
+ metadata.gz: 15047d47eaf62e4080591e517f84db8a35bf42617b62cf85d1ad59ace892499cfdf1786e21acfbd2719157926731ff397091735072d28f5eeaccf05651dd35c1
7
+ data.tar.gz: 24d80073f4377572b7d409d67268388285c3357824c209fdf86b5ee852d2d0ee324adc4d14ae93f20ec126d317a9e46a6851b1453d2bb21fcabf1b54685895e8
@@ -1,3 +1,6 @@
1
+ require 'jsonapi/validations/relationship'
2
+ require 'jsonapi/validations/resource'
3
+
1
4
  module JSONAPI
2
5
  module_function
3
6
 
@@ -11,7 +11,7 @@ module JSONAPI
11
11
  # @param [Hash] params Validation parameters.
12
12
  # @option [Symbol] kind Whether it is a :has_many or :has_one.
13
13
  # @option [Array<Symbol>] types Permitted types for the relationship.
14
- # @raise [JSONAPI::Validator::InvalidDocument] if document is invalid.
14
+ # @raise [JSONAPI::Parser::InvalidDocument] if document is invalid.
15
15
  def validate_relationship!(document, params = {})
16
16
  JSONAPI.parse_relationship!(document)
17
17
  validate_types!(document['data'], params[:types])
@@ -21,23 +21,29 @@ module JSONAPI
21
21
  def validate_types!(rel, rel_types, key = nil)
22
22
  rel_name = key ? " #{key}" : ''
23
23
  if rel_types[:kind] == :has_many
24
- Document.ensure!(rel['data'].is_a?(Array),
25
- "Expected relationship#{rel_name} to be has_many.")
24
+ unless rel['data'].is_a?(Array)
25
+ raise JSONAPI::Parser::InvalidDocument,
26
+ "Expected relationship#{rel_name} to be has_many."
27
+ end
26
28
  return unless rel_types[:types]
27
29
  rel['data'].each do |ri|
28
- Document.ensure!(rel_types[:types].include?(ri['type'].to_sym),
29
- "Type mismatch for relationship#{rel_name}: " \
30
- "#{ri['type']} should be one of #{rel_types}")
30
+ next if rel_types[:types].include?(ri['type'].to_sym)
31
+ raise JSONAPI::Parser::InvalidDocument,
32
+ "Type mismatch for relationship#{rel_name}: " \
33
+ "#{ri['type']} should be one of #{rel_types}"
31
34
  end
32
35
  else
33
36
  return if rel['data'].nil?
34
- Document.ensure!(rel['data'].is_a?(Hash),
35
- "Expected relationship#{rel_name} to be has_one.")
37
+ unless rel['data'].is_a?(Hash)
38
+ raise JSONAPI::Parser::InvalidDocument,
39
+ "Expected relationship#{rel_name} to be has_one."
40
+ end
36
41
  return unless rel_types[:types]
37
42
  ri = rel['data']
38
- Document.ensure!(rel_types[:types].include?(ri['type'].to_sym),
39
- "Type mismatch for relationship#{rel_name}: " \
40
- "#{ri['type']} should be one of #{rel_types}")
43
+ return if rel_types[:types].include?(ri['type'].to_sym)
44
+ raise JSONAPI::Parser::InvalidDocument,
45
+ "Type mismatch for relationship#{rel_name}: " \
46
+ "#{ri['type']} should be one of #{rel_types}"
41
47
  end
42
48
  end
43
49
  end
@@ -19,7 +19,7 @@ module JSONAPI
19
19
  # @option [Hash] types Permitted primary/relationships types. Optional.
20
20
  # The relationships must be explicitly permitted. Not all
21
21
  # relationships' types have to be specified.
22
- # @raise [JSONAPI::Validator::InvalidDocument] if document is invalid.
22
+ # @raise [JSONAPI::Parser::InvalidDocument] if document is invalid.
23
23
  #
24
24
  # @example
25
25
  # params = {
@@ -58,54 +58,65 @@ module JSONAPI
58
58
  # @api private
59
59
  def validate_permitted!(data, permitted)
60
60
  return if permitted.nil?
61
- Document.ensure!(permitted[:id] || !data.key?('id'),
62
- 'Unpermitted id.')
61
+ unless permitted[:id] || !data.key?('id')
62
+ raise JSONAPI::Parser::InvalidDocument,
63
+ 'Unpermitted id.'
64
+ end
63
65
  # TODO(beauby): Handle meta (and possibly links) once the spec has
64
66
  # been clarified.
65
67
  permitted_attrs = permitted[:attributes] || []
66
68
  if data.key?('attributes')
67
69
  data['attributes'].keys.each do |attr|
68
- Document.ensure!(permitted_attrs.include?(attr.to_sym),
69
- "Unpermitted attribute #{attr}")
70
+ unless permitted_attrs.include?(attr.to_sym)
71
+ raise JSONAPI::Parser::InvalidDocument,
72
+ "Unpermitted attribute #{attr}"
73
+ end
70
74
  end
71
75
  end
72
76
  permitted_rels = permitted[:relationships] || []
73
- if data.key?('relationships')
74
- data['relationships'].keys.each do |rel|
75
- Document.ensure!(permitted_rels.include?(rel.to_sym))
76
- end
77
+ return unless data.key?('relationships')
78
+ data['relationships'].keys.each do |rel|
79
+ next if permitted_rels.include?(rel.to_sym)
80
+ raise JSONAPI::Parser::InvalidDocument
77
81
  end
78
82
  end
79
83
 
80
84
  # @api private
81
85
  def validate_required!(data, required)
82
86
  return if required.nil?
83
- Document.ensure!(data.key?('id') || !required[:id],
84
- 'Missing required id.')
87
+ unless data.key?('id') || !required[:id]
88
+ raise JSONAPI::Parser::InvalidDocument, 'Missing required id.'
89
+ end
85
90
  # TODO(beauby): Same as for permitted.
86
91
 
87
- Document.ensure!(data.key?('attributes') || !required[:attributes],
88
- 'Missing required attributes.')
92
+ unless data.key?('attributes') || !required[:attributes]
93
+ raise JSONAPI::Parser::InvalidDocument, 'Missing required attributes.'
94
+ end
89
95
  required[:attributes].each do |attr|
90
- Document.ensure!(data['attributes'][attr.to_s],
91
- "Missing required attribute #{attr}.")
96
+ next if data['attributes'][attr.to_s]
97
+ raise JSONAPI::Parser::InvalidDocument,
98
+ "Missing required attribute #{attr}."
99
+ end
100
+ unless data.key?('relationships') || !required[:relationships]
101
+ raise JSONAPI::Parser::InvalidDocument,
102
+ 'Missing required relationships.'
92
103
  end
93
- Document.ensure!(data.key?('relationships') ||
94
- !required[:relationships],
95
- 'Missing required relationships.')
96
104
  required[:relationships].each do |rel|
97
- Document.ensure!(data['relationships'][rel.to_s],
98
- "Missing required relationship #{rel}.")
105
+ unless data['relationships'][rel.to_s]
106
+ raise JSONAPI::Parser::InvalidDocument,
107
+ "Missing required relationship #{rel}."
108
+ end
99
109
  end
100
110
  end
101
111
 
102
112
  # @api private
103
113
  def validate_types!(data, types)
104
114
  return if types.nil?
105
- Document.ensure!(!types[:primary] ||
106
- types[:primary].include?(data['type'].to_sym),
107
- "Type mismatch for resource: #{data['type']} " \
108
- "should be one of #{types[:primary]}")
115
+ unless !types[:primary] || types[:primary].include?(data['type'].to_sym)
116
+ raise JSONAPI::Parser::InvalidDocument,
117
+ "Type mismatch for resource: #{data['type']} " \
118
+ "should be one of #{types[:primary]}"
119
+ end
109
120
  return unless data.key?('relationships') && types.key?(:relationships)
110
121
  types[:relationships].each do |key, rel_types|
111
122
  rel = data['relationships'][key.to_s]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jsonapi-validations
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1.beta1
4
+ version: 0.1.1.beta3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lucas Hosseini
@@ -24,6 +24,34 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0.1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0.9'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0.9'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.4'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.4'
27
55
  description: Validate presence/absence of resource creation/update and relationship
28
56
  update payloads, as well as types related resources
29
57
  email: lucas.hosseini@gmail.com