diff options
Diffstat (limited to 'lib/gitlab/event_store/event.rb')
-rw-r--r-- | lib/gitlab/event_store/event.rb | 23 |
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 |