Class: Gitrob::BlobObserver
- Inherits:
-
Object
- Object
- Gitrob::BlobObserver
show all
- Defined in:
- lib/gitrob/blob_observer.rb
Defined Under Namespace
Classes: CorruptSignaturesError, Signature
Constant Summary
collapse
- SIGNATURES_FILE_PATH =
File.expand_path(
"../../../signatures.json", __FILE__)
- REQUIRED_SIGNATURE_KEYS =
%w(part type pattern caption description)
- ALLOWED_TYPES =
%w(regex match)
- ALLOWED_PARTS =
%w(path filename extension)
Class Method Summary
collapse
Class Method Details
.load_signatures! ⇒ Object
31
32
33
34
35
36
37
38
39
40
41
|
# File 'lib/gitrob/blob_observer.rb', line 31
def self.load_signatures!
@signatures = []
JSON.load(File.read(SIGNATURES_FILE_PATH)).each do |signature|
@signatures << Signature.new(signature)
end
validate_signatures!
rescue CorruptSignaturesError => e
raise e
rescue
raise CorruptSignaturesError, "Could not parse signature file"
end
|
.observe(blob) ⇒ Object
13
14
15
16
17
18
19
20
21
22
23
24
|
# File 'lib/gitrob/blob_observer.rb', line 13
def self.observe(blob)
signatures.each do |signature|
if signature.type == "match"
observe_with_match_signature(blob, signature)
else
observe_with_regex_signature(blob, signature)
end
end
blob.flags_count = blob.flags.count
blob.save
blob.flags_count
end
|
.observe_with_match_signature(blob, signature) ⇒ Object
82
83
84
85
86
87
88
89
90
|
# File 'lib/gitrob/blob_observer.rb', line 82
def self.observe_with_match_signature(blob, signature)
haystack = blob.send(signature.part.to_sym)
return unless haystack == signature.pattern
blob.add_flag(
:caption => signature.caption,
:description => signature.description,
:assessment => blob.assessment
)
end
|
.observe_with_regex_signature(blob, signature) ⇒ Object
92
93
94
95
96
97
98
99
100
101
|
# File 'lib/gitrob/blob_observer.rb', line 92
def self.observe_with_regex_signature(blob, signature)
haystack = blob.send(signature.part.to_sym)
regex = Regexp.new(signature.pattern, Regexp::IGNORECASE)
return if regex.match(haystack).nil?
blob.add_flag(
:caption => signature.caption,
:description => signature.description,
:assessment => blob.assessment
)
end
|
.signatures ⇒ Object
26
27
28
29
|
# File 'lib/gitrob/blob_observer.rb', line 26
def self.signatures
load_signatures! unless @signatures
@signatures
end
|
.validate_signature!(signature) ⇒ Object
53
54
55
56
57
|
# File 'lib/gitrob/blob_observer.rb', line 53
def self.validate_signature!(signature)
validate_signature_keys!(signature)
validate_signature_type!(signature)
validate_signature_part!(signature)
end
|
.validate_signature_keys!(signature) ⇒ Object
59
60
61
62
63
64
65
66
|
# File 'lib/gitrob/blob_observer.rb', line 59
def self.validate_signature_keys!(signature)
REQUIRED_SIGNATURE_KEYS.each do |key|
unless signature.respond_to?(key)
fail CorruptSignaturesError,
"Missing required signature key: #{key}"
end
end
end
|
.validate_signature_part!(signature) ⇒ Object
75
76
77
78
79
80
|
# File 'lib/gitrob/blob_observer.rb', line 75
def self.validate_signature_part!(signature)
unless ALLOWED_PARTS.include?(signature.part)
fail CorruptSignaturesError,
"Invalid signature part: #{signature.part}"
end
end
|
.validate_signature_type!(signature) ⇒ Object
68
69
70
71
72
73
|
# File 'lib/gitrob/blob_observer.rb', line 68
def self.validate_signature_type!(signature)
unless ALLOWED_TYPES.include?(signature.type)
fail CorruptSignaturesError,
"Invalid signature type: #{signature.type}"
end
end
|
.validate_signatures! ⇒ Object
43
44
45
46
47
48
49
50
51
|
# File 'lib/gitrob/blob_observer.rb', line 43
def self.validate_signatures!
if !signatures.is_a?(Array) || signatures.empty?
fail CorruptSignaturesError,
"Signature file contains no signatures"
end
signatures.each do |signature|
validate_signature!(signature)
end
end
|