Class: ElasticGraph::Support::FromYamlFile::ForRakeTasks

Inherits:
Module
  • Object
show all
Defined in:
lib/elastic_graph/support/from_yaml_file.rb

Overview

An extension module that provides a ‘from_yaml_file` factory method on a `RakeTasks` class.

This is designed for a ‘RakeTasks` class that needs an ElasticGraph component (e.g. an `ElasticGraph::GraphQL`, `ElasticGraph::Admin`, or `ElasticGraph::Indexer` instance). When the schema artifacts are out of date, loading those components can fail. This gracefully handles that for you, giving you clear instructions of what to do when this happens.

This requires the ‘RakeTasks` class to accept the ElasticGraph component instance via a block so that it happens lazily.

Instance Method Summary collapse

Constructor Details

#initialize(component_class) ⇒ ForRakeTasks

Returns a new instance of ForRakeTasks.



36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/elastic_graph/support/from_yaml_file.rb', line 36

def initialize(component_class)
  define_method :from_yaml_file do |yaml_file, *args, **options|
    __skip__ = new(*args, **options) do
      component_class.from_yaml_file(yaml_file)
    rescue => e
      raise <<~EOS
        Failed to load `#{component_class}` with `#{yaml_file}`. This can happen if the schema artifacts are out of date.
        Run `rake schema_artifacts:dump` and try again.

        #{e.class}: #{e.message}
      EOS
    end
  end
end