Class: EventEngine::EventSchemaWriter

Inherits:
Object
  • Object
show all
Defined in:
lib/event_engine/event_schema_writer.rb

Constant Summary collapse

HEADER =
<<~RUBY.freeze
  # This file is authoritative in production.
  # It is generated from EventDefinitions via:
  #
  #   bin/rails event_engine:schema:dump
  #
  # Do not edit manually.

RUBY

Class Method Summary collapse

Class Method Details

.indent(io, spaces) ⇒ Object



38
39
40
41
42
43
44
45
# File 'lib/event_engine/event_schema_writer.rb', line 38

def self.indent(io, spaces)
  padding = " " * spaces
  yield.each_line do |line|
    io.write(padding)
    io.write(line)
    io.write("\n")
  end
end

.write(path, event_schema) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/event_engine/event_schema_writer.rb', line 13

def self.write(path, event_schema)
  schemas =
    event_schema
      .schemas_by_event
      .flat_map { |_event, versions| versions.values }
      .sort_by { |s| [s.event_name.to_s, s.event_version] }

  File.open(path, "w") do |io|
    io.write(HEADER)
    io.write("EventEngine::EventSchema.define do |schema|\n")

    schemas.each do |definition|
      write_definition(io, definition)
    end

    io.write("end\n")
  end
end

.write_definition(io, definition) ⇒ Object



32
33
34
35
36
# File 'lib/event_engine/event_schema_writer.rb', line 32

def self.write_definition(io, definition)
  io.write("  schema.register(\n")
  indent(io, 4) { definition.to_ruby }
  io.write("  )\n")
end