Class: EventEngine::EventSchemaMerger

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

Class Method Summary collapse

Class Method Details

.changed?(compiled_registry, file_registry) ⇒ Boolean

Returns:

  • (Boolean)


38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/event_engine/event_schema_merger.rb', line 38

def self.changed?(compiled_registry, file_registry)
  compiled_registry.events.any? do |event|
    compiled_schema = compiled_registry.latest_for(event)

    existing_versions = file_registry.versions_for(event)
    latest_version = existing_versions.max
    latest_schema = latest_version && file_registry.schema(event, version: latest_version)

    # New event entirely
    return true unless latest_schema

    # Fingerprint mismatch means a new version would be created
    latest_schema.fingerprint != compiled_schema.fingerprint
  end
end

.merge(compiled_registry, file_registry) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/event_engine/event_schema_merger.rb', line 3

def self.merge(compiled_registry, file_registry)
  merged = EventSchema.new

  file_loaded_schema = file_registry.event_schema

  file_loaded_schema.events.each do |event|
    file_loaded_schema.versions_for(event).each do |version|
      merged.register(file_loaded_schema.schema_for(event, version))
    end
  end

  # Merge compiled schemas
  compiled_registry.events.each do |event|
    compiled_schema = compiled_registry.latest_for(event)

    existing_versions = merged.versions_for(event)
    latest_version = existing_versions.max
    latest_schema = latest_version && merged.schema_for(event, latest_version)

    if no_schema_change?(latest_schema, compiled_schema)
      next
    end

    new_version = version(latest_version)
    new_schema = compiled_schema.dup
    new_schema.event_version = new_version

    merged.register(new_schema)
  end

  merged.finalize!

  merged
end

.no_schema_change?(latest_schema, compiled_schema) ⇒ Boolean

Returns:

  • (Boolean)


54
55
56
# File 'lib/event_engine/event_schema_merger.rb', line 54

def self.no_schema_change?(latest_schema, compiled_schema)
  latest_schema && latest_schema.fingerprint == compiled_schema.fingerprint
end

.version(latest_version) ⇒ Object



58
59
60
# File 'lib/event_engine/event_schema_merger.rb', line 58

def self.version(latest_version)
  (latest_version || 0) + 1
end