Class: Karafka::Web::Management::Migrations::Base

Inherits:
Object
  • Object
show all
Includes:
Core::Helpers::Time
Defined in:
lib/karafka/web/management/migrations/base.rb

Overview

Base for all our migrations

Each migration MUST have a ‘#migrate` method defined Migrations are expected to modify the provided state **IN PLACE**

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.typeObject

What resource does it relate it One migration should modify only one resource type



20
21
22
# File 'lib/karafka/web/management/migrations/base.rb', line 20

def type
  @type
end

.versions_untilObject

First version that should NOT be affected by this migration



17
18
19
# File 'lib/karafka/web/management/migrations/base.rb', line 17

def versions_until
  @versions_until
end

Class Method Details

.applicable?(version) ⇒ Boolean

Returns is the given migration applicable.

Parameters:

  • version (String)

    sem-ver version

Returns:

  • (Boolean)

    is the given migration applicable



24
25
26
# File 'lib/karafka/web/management/migrations/base.rb', line 24

def applicable?(version)
  version < versions_until
end

.indexInteger

Returns index for sorting. Older migrations are always applied first.

Returns:

  • (Integer)

    index for sorting. Older migrations are always applied first



34
35
36
37
38
39
40
41
42
43
# File 'lib/karafka/web/management/migrations/base.rb', line 34

def index
  instance_method(:migrate)
    .source_location
    .first
    .split("/")
    .last
    .split("_")
    .first
    .to_i
end

.migrate(state) ⇒ Object

Parameters:

  • state (Hash)

    deserialized state to be modified

Raises:

  • (NotImplementedError)


29
30
31
# File 'lib/karafka/web/management/migrations/base.rb', line 29

def migrate(state)
  raise NotImplementedError, "Implement in a subclass"
end

.sorted_descendantsArray<Class>

Returns array with migrations sorted from oldest to latest. This is the order in which they need to be applied.

Returns:

  • (Array<Class>)

    array with migrations sorted from oldest to latest. This is the order in which they need to be applied



47
48
49
50
51
52
# File 'lib/karafka/web/management/migrations/base.rb', line 47

def sorted_descendants
  ObjectSpace
    .each_object(Class)
    .select { |klass| klass != self && klass.ancestors.include?(self) }
    .sort_by(&:index)
end