Module: TrackRelay::Catalog

Defined in:
lib/track_relay/catalog.rb

Overview

Process-wide registry of event definitions and user properties.

The DSL::EventBuilder pushes definitions in via Catalog.register; the rest of the gem (and host applications) read them out via Catalog.lookup, Catalog.defined?, and Catalog.all.

State is module-level by design — the gem assumes one catalog per Ruby process, populated during boot. Tests that need isolation call Catalog.clear! in ‘setup` / `teardown` to reset between cases.

Examples:

Registering and looking up an event

TrackRelay.catalog do
  event :article_viewed do
    integer :article_id, required: true
  end
end

TrackRelay::Catalog.lookup(:article_viewed)
# => #<TrackRelay::EventDefinition name=:article_viewed ...>

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.user_propertiesHash{Symbol => Symbol} (readonly)

Returns catalog-wide user properties.

Returns:

  • (Hash{Symbol => Symbol})

    catalog-wide user properties



31
32
33
# File 'lib/track_relay/catalog.rb', line 31

def user_properties
  @user_properties
end

Class Method Details

.allArray<EventDefinition>

Returns frozen array of all registered definitions.

Returns:



72
73
74
# File 'lib/track_relay/catalog.rb', line 72

def all
  @definitions.values.freeze
end

.clear!void

This method returns an undefined value.

Reset the registry. Intended for test isolation; do not call in production code.



80
81
82
83
# File 'lib/track_relay/catalog.rb', line 80

def clear!
  @definitions = {}
  @user_properties = {}
end

.defined?(name) ⇒ Boolean

Returns whether an event with the given name is registered.

Parameters:

  • name (Symbol)

Returns:

  • (Boolean)

    whether an event with the given name is registered



66
67
68
# File 'lib/track_relay/catalog.rb', line 66

def defined?(name)
  @definitions.key?(name)
end

.lookup(name) ⇒ EventDefinition?

Parameters:

  • name (Symbol)

Returns:



59
60
61
# File 'lib/track_relay/catalog.rb', line 59

def lookup(name)
  @definitions[name]
end

.register(definition) ⇒ EventDefinition

Register a new EventDefinition in the catalog.

Parameters:

Returns:

Raises:

  • (TrackRelay::CatalogError)

    when an event with the same name is already registered (defensive guard against catalog bugs that could silently shadow events)



40
41
42
43
44
45
46
# File 'lib/track_relay/catalog.rb', line 40

def register(definition)
  if @definitions.key?(definition.name)
    raise CatalogError,
      "Event #{definition.name.inspect} is already registered. Call TrackRelay::Catalog.clear! before re-registering (e.g. in tests)."
  end
  @definitions[definition.name] = definition
end

.register_user_property(name, type) ⇒ Symbol

Register a catalog-wide user property.

Parameters:

  • name (Symbol)
  • type (Symbol)

Returns:

  • (Symbol)

    the type, for chaining



53
54
55
# File 'lib/track_relay/catalog.rb', line 53

def register_user_property(name, type)
  @user_properties[name] = type
end