Class: Hako::JsonnetLoader

Inherits:
Object
  • Object
show all
Defined in:
lib/hako/jsonnet_loader.rb

Instance Method Summary collapse

Constructor Details

#initialize(application, expand_variables:, ask_keys:) ⇒ JsonnetLoader

Returns a new instance of JsonnetLoader.

Parameters:

  • application (Application)
  • expand_variables (Boolean)
  • ask_keys (Boolean)


15
16
17
18
19
20
# File 'lib/hako/jsonnet_loader.rb', line 15

def initialize(application, expand_variables:, ask_keys:)
  @vm = Jsonnet::VM.new
  @root_path = application.root_path
  define_provider_functions(expand_variables, ask_keys)
  @vm.ext_var('appId', application.id)
end

Instance Method Details

#define_provider_functions(expand_variables, ask_keys) ⇒ Object (private)



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/hako/jsonnet_loader.rb', line 29

def define_provider_functions(expand_variables, ask_keys)
  Gem.loaded_specs.each do |gem_name, spec|
    spec.require_paths.each do |path|
      Dir.glob(File.join(spec.full_gem_path, path, 'hako/env_providers/*.rb')).each do |provider_path|
        provider_name = File.basename(provider_path, '.rb')
        provider_class = Loader.new(Hako::EnvProviders, 'hako/env_providers').load(provider_name)
        Hako.logger.debug("Loaded #{provider_class} from '#{gem_name}' gem")
        @vm.define_function("provide.#{provider_name}") do |options, name|
          if expand_variables
            provider_class.new(@root_path, JSON.parse(options)).ask([name]).fetch(name)
          else
            if ask_keys
              provider = provider_class.new(@root_path, JSON.parse(options))
              if provider.can_ask_keys?
                if provider.ask_keys([name]).empty?
                  raise Error.new("Could not lookup #{name} from #{provider_name} provider with options=#{options}")
                end
              end
            end
            "${#{name}}"
          end
        end
      end
    end
  end
end

#load(path) ⇒ Object

Parameters:

  • path (Pathname)


23
24
25
# File 'lib/hako/jsonnet_loader.rb', line 23

def load(path)
  JSON.parse(@vm.evaluate_file(path.to_s))
end