Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab/event_store/event.rb')
-rw-r--r--lib/gitlab/event_store/event.rb23
1 files changed, 21 insertions, 2 deletions
diff --git a/lib/gitlab/event_store/event.rb b/lib/gitlab/event_store/event.rb
index ee0c329b8e8..ba82ae6dd6a 100644
--- a/lib/gitlab/event_store/event.rb
+++ b/lib/gitlab/event_store/event.rb
@@ -29,8 +29,13 @@ module Gitlab
class Event
attr_reader :data
+ class << self
+ attr_accessor :json_schema_valid
+ end
+
def initialize(data:)
- validate_schema!(data)
+ validate_schema!
+ validate_data!(data)
@data = data
end
@@ -40,7 +45,17 @@ module Gitlab
private
- def validate_schema!(data)
+ def validate_schema!
+ if self.class.json_schema_valid.nil?
+ self.class.json_schema_valid = JSONSchemer.schema(self.class.json_schema).valid?(schema)
+ end
+
+ return if self.class.json_schema_valid == true
+
+ raise Gitlab::EventStore::InvalidEvent, "Schema for event #{self.class} is invalid"
+ end
+
+ def validate_data!(data)
unless data.is_a?(Hash)
raise Gitlab::EventStore::InvalidEvent, "Event data must be a Hash"
end
@@ -49,6 +64,10 @@ module Gitlab
raise Gitlab::EventStore::InvalidEvent, "Data for event #{self.class} does not match the defined schema: #{schema}"
end
end
+
+ def self.json_schema
+ @json_schema ||= Gitlab::Json.parse(File.read(File.join(__dir__, 'json_schema_draft07.json')))
+ end
end
end
end