Class: EventEngine::Definition::EventSchema
- Inherits:
-
Object
- Object
- EventEngine::Definition::EventSchema
show all
- Defined in:
- lib/event_engine/definition/event_schema.rb
Defined Under Namespace
Classes: DuplicateEventNameError
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
Returns a new instance of EventSchema.
12
13
14
15
|
# File 'lib/event_engine/definition/event_schema.rb', line 12
def initialize
@schemas_by_event = {}
@finalized = false
end
|
Class Method Details
.define(&block) ⇒ Object
6
7
8
9
10
|
# File 'lib/event_engine/definition/event_schema.rb', line 6
def self.define(&block)
schema = new
block.call(schema)
schema
end
|
Instance Method Details
#events(domain: nil) ⇒ Object
36
37
38
39
40
41
|
# File 'lib/event_engine/definition/event_schema.rb', line 36
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
58
59
60
61
62
63
|
# File 'lib/event_engine/definition/event_schema.rb', line 58
def finalize!
@finalized = true
@schemas_by_event.each_value(&:freeze)
@schemas_by_event.freeze
freeze
end
|
#guard_duplicate_event_name!(existing, incoming) ⇒ Object
27
28
29
30
31
32
33
34
|
# File 'lib/event_engine/definition/event_schema.rb', line 27
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
52
53
54
55
56
|
# File 'lib/event_engine/definition/event_schema.rb', line 52
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
17
18
19
20
21
22
23
24
25
|
# File 'lib/event_engine/definition/event_schema.rb', line 17
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
47
48
49
50
|
# File 'lib/event_engine/definition/event_schema.rb', line 47
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
65
66
67
|
# File 'lib/event_engine/definition/event_schema.rb', line 65
def schemas_by_event
@schemas_by_event
end
|
#versions_for(event_name, domain: nil) ⇒ Object
43
44
45
|
# File 'lib/event_engine/definition/event_schema.rb', line 43
def versions_for(event_name, domain: nil)
version_sets_for(event_name, domain).flat_map(&:keys).uniq.sort
end
|