@@ -22,54 +22,72 @@ def v2_fingerprints_body
2222
2323 private
2424
25+ PERMISSIONS_REGEX = /^[0-7]{3,4}$/
26+
2527 def each_resource
2628 if resources . is_a? ( Array )
2729 resources . each do |r |
2830 checksum_validator ( r [ :checksum ] )
2931 size_validator ( r [ :size_in_bytes ] )
32+ mode_validator ( r [ :mode ] )
3033 end
3134 end
3235 end
3336
34- RESOURCE_ERROR_PREAMBLE = 'array contains at least one resource with a ' . freeze
37+ RESOURCE_ERROR_PREAMBLE = 'array contains at least one resource with' . freeze
3538
3639 def checksum_validator ( checksum )
3740 unless checksum . is_a? ( Hash )
38- errors . add ( :resources , "#{ RESOURCE_ERROR_PREAMBLE } non-object checksum" ) unless errors . added? (
39- :resources , "#{ RESOURCE_ERROR_PREAMBLE } non-object checksum"
41+ errors . add ( :resources , "#{ RESOURCE_ERROR_PREAMBLE } a non-object checksum" ) unless errors . added? (
42+ :resources , "#{ RESOURCE_ERROR_PREAMBLE } a non-object checksum"
4043 )
4144 return
4245 end
4346
4447 unless checksum [ :value ] . is_a? ( String )
45- errors . add ( :resources , "#{ RESOURCE_ERROR_PREAMBLE } non-string checksum value" ) unless errors . added? (
46- :resources , "#{ RESOURCE_ERROR_PREAMBLE } non-string checksum value"
48+ errors . add ( :resources , "#{ RESOURCE_ERROR_PREAMBLE } a non-string checksum value" ) unless errors . added? (
49+ :resources , "#{ RESOURCE_ERROR_PREAMBLE } a non-string checksum value"
4750 )
4851 return
4952 end
5053
5154 unless valid_sha1? ( checksum [ :value ] )
52- errors . add ( :resources , "#{ RESOURCE_ERROR_PREAMBLE } non-SHA1 checksum value" ) unless errors . added? (
53- :resources , "#{ RESOURCE_ERROR_PREAMBLE } non-SHA1 checksum value"
55+ errors . add ( :resources , "#{ RESOURCE_ERROR_PREAMBLE } a non-SHA1 checksum value" ) unless errors . added? (
56+ :resources , "#{ RESOURCE_ERROR_PREAMBLE } a non-SHA1 checksum value"
5457 )
55- return
5658 end
5759 end
5860
5961 def size_validator ( size )
6062 unless size . is_a? ( Integer )
61- errors . add ( :resources , "#{ RESOURCE_ERROR_PREAMBLE } non-integer size_in_bytes" ) unless errors . added? (
62- :resources , "#{ RESOURCE_ERROR_PREAMBLE } non-integer size_in_bytes"
63+ errors . add ( :resources , "#{ RESOURCE_ERROR_PREAMBLE } a non-integer size_in_bytes" ) unless errors . added? (
64+ :resources , "#{ RESOURCE_ERROR_PREAMBLE } a non-integer size_in_bytes"
6365 )
6466 return
6567 end
6668
6769 unless size >= 0
68- errors . add ( :resources , "#{ RESOURCE_ERROR_PREAMBLE } negative size_in_bytes" ) unless errors . added? (
69- :resources , "#{ RESOURCE_ERROR_PREAMBLE } negative size_in_bytes"
70+ errors . add ( :resources , "#{ RESOURCE_ERROR_PREAMBLE } a negative size_in_bytes" ) unless errors . added? (
71+ :resources , "#{ RESOURCE_ERROR_PREAMBLE } a negative size_in_bytes"
72+ )
73+ end
74+ end
75+
76+ def mode_validator ( mode )
77+ return if mode . nil?
78+
79+ unless mode . is_a? ( String )
80+ errors . add ( :resources , "#{ RESOURCE_ERROR_PREAMBLE } a non-string mode" ) unless errors . added? (
81+ :resources , "#{ RESOURCE_ERROR_PREAMBLE } a non-string mode"
7082 )
7183 return
7284 end
85+
86+ unless PERMISSIONS_REGEX . match? ( mode )
87+ errors . add ( :resources , "#{ RESOURCE_ERROR_PREAMBLE } an incorrect mode" ) unless errors . added? (
88+ :resources , "#{ RESOURCE_ERROR_PREAMBLE } an incorrect mode"
89+ )
90+ end
7391 end
7492
7593 def valid_sha1? ( value )
0 commit comments