Class: EventEngine::EventSchema
- Inherits:
-
Object
- Object
- EventEngine::EventSchema
show all
- Defined in:
- lib/event_engine/event_schema.rb
Defined Under Namespace
Classes: DuplicateEventNameError
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
Returns a new instance of EventSchema.
11
12
13
14
|
# File 'lib/event_engine/event_schema.rb', line 11
def initialize
@schemas_by_event = {}
@finalized = false
end
|
Class Method Details
.define(&block) ⇒ Object
5
6
7
8
9
|
# File 'lib/event_engine/event_schema.rb', line 5
def self.define(&block)
schema = new
block.call(schema)
schema
end
|
Instance Method Details
#events(domain: nil) ⇒ Object
35
36
37
38
39
40
|
# File 'lib/event_engine/event_schema.rb', line 35
def events(domain: nil)
@schemas_by_event.keys
.select { |(schema_domain, _name)| domain.nil? || schema_domain == domain }
.map { |(_domain, event_name)| event_name }
.uniq
end
|
#finalize! ⇒ Object
57
58
59
60
61
62
|
# File 'lib/event_engine/event_schema.rb', line 57
def finalize!
@finalized = true
@schemas_by_event.each_value(&:freeze)
@schemas_by_event.freeze
freeze
end
|
#guard_duplicate_event_name!(existing, incoming) ⇒ Object
26
27
28
29
30
31
32
33
|
# File 'lib/event_engine/event_schema.rb', line 26
def guard_duplicate_event_name!(existing, incoming)
return unless existing
raise DuplicateEventNameError,
"duplicate (domain, event_name) " \
"(#{incoming.domain.inspect}, #{incoming.event_name.inspect}): " \
"already registered at version #{existing.event_version.inspect}"
end
|
#latest_for(event_name, domain: nil) ⇒ Object
51
52
53
54
55
|
# File 'lib/event_engine/event_schema.rb', line 51
def latest_for(event_name, domain: nil)
merged = version_sets_for(event_name, domain).reduce({}, :merge)
return nil if merged.empty?
merged[merged.keys.max]
end
|
#register(schema) ⇒ Object
16
17
18
19
20
21
22
23
24
|
# File 'lib/event_engine/event_schema.rb', line 16
def register(schema)
raise FrozenError, "EventSchema is finalized" if @finalized
key = key_for(schema.domain, schema.event_name)
version = schema.event_version
@schemas_by_event[key] ||= {}
guard_duplicate_event_name!(@schemas_by_event[key][version], schema)
@schemas_by_event[key][version] = schema
end
|
#schema_for(event_name, version, domain: nil) ⇒ Object
46
47
48
49
|
# File 'lib/event_engine/event_schema.rb', line 46
def schema_for(event_name, version, domain: nil)
set = version_sets_for(event_name, domain).find { |versions| versions.key?(version) }
set && set[version]
end
|
#schemas_by_event ⇒ Object
64
65
66
|
# File 'lib/event_engine/event_schema.rb', line 64
def schemas_by_event
@schemas_by_event
end
|
#versions_for(event_name, domain: nil) ⇒ Object
42
43
44
|
# File 'lib/event_engine/event_schema.rb', line 42
def versions_for(event_name, domain: nil)
version_sets_for(event_name, domain).flat_map(&:keys).uniq.sort
end
|