Class: EventEngine::DslCompiler
- Inherits:
-
Object
- Object
- EventEngine::DslCompiler
show all
- Defined in:
- lib/event_engine/dsl_compiler.rb
Defined Under Namespace
Classes: InvalidEventNameError
Constant Summary
collapse
- SNAKE_CASE =
/\A[a-z][a-z0-9_]*\z/
Class Method Summary
collapse
Class Method Details
.compile(definitions) ⇒ Object
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
# File 'lib/event_engine/dsl_compiler.rb', line 7
def self.compile(definitions)
registry = SchemaRegistry.new
subject_violations = []
name_violations = []
Array(definitions).each do |definition|
schema = definition.schema
record_subject_violation(schema, subject_violations)
record_name_violation(schema, name_violations)
registry.register(schema)
end
raise_invalid_event_names(name_violations)
raise_unknown_subjects(subject_violations)
registry
end
|
.raise_invalid_event_names(violations) ⇒ Object
31
32
33
34
35
|
# File 'lib/event_engine/dsl_compiler.rb', line 31
def self.raise_invalid_event_names(violations)
return if violations.empty?
raise InvalidEventNameError, "event names must be snake_case: #{violations.join(", ")}"
end
|
.raise_unknown_subjects(violations) ⇒ Object
44
45
46
47
48
|
# File 'lib/event_engine/dsl_compiler.rb', line 44
def self.raise_unknown_subjects(violations)
return if violations.empty?
raise SubjectRegistry::UnknownSubjectError, violations.join(", ")
end
|
.record_name_violation(schema, violations) ⇒ Object
25
26
27
28
29
|
# File 'lib/event_engine/dsl_compiler.rb', line 25
def self.record_name_violation(schema, violations)
return if schema.event_name.to_s.match?(SNAKE_CASE)
violations << schema.event_name.inspect
end
|
.record_subject_violation(schema, violations) ⇒ Object
37
38
39
40
41
42
|
# File 'lib/event_engine/dsl_compiler.rb', line 37
def self.record_subject_violation(schema, violations)
return if schema.subject.nil?
return if EventEngine.subject_registry.registered?(schema.subject)
violations << "#{schema.event_name}: unknown subject #{schema.subject.inspect}"
end
|