Sha256: f5aa3e402db2b29225f2fca0b8192c897fdad1326d61f6a42e95fac4a9341f5a

Contents?: true

Size: 1.09 KB

Versions: 45

Compression:

Stored size: 1.09 KB

Contents

module Terraspace::Compiler
  class Backend
    extend Memoist

    def initialize(mod)
      @mod = mod
    end

    @@created = {}
    def create
      return if @@created[cache_key]
      # set immediately, since local storage wont reach bottom.
      # if fail for other backends, there will be an exception anyway
      @@created[cache_key] = true

      klass = backend_interface(backend_name)
      return unless klass # in case auto-creation is not supported for specific backend

      interface = klass.new(backend_info)
      interface.call
    end

    def cache_key
      @mod.build_dir
    end

    def backend_name
      backend.keys.first # IE: s3, gcs, etc
    end

    def backend_info
      backend.values.first # structure within the s3 or gcs key
    end

    def backend
      Parser.new(@mod).result
    end
    memoize :backend

    def backend_interface(name)
      return unless name
      # IE: TerraspacePluginAws::Interfaces::Backend
      klass_name = Terraspace::Plugin.klass("Backend", backend: name)
      klass_name.constantize if klass_name
    rescue NameError
    end
  end
end

Version data entries

45 entries across 45 versions & 1 rubygems

Version Path
terraspace-0.6.23 lib/terraspace/compiler/backend.rb
terraspace-0.6.22 lib/terraspace/compiler/backend.rb
terraspace-0.6.21 lib/terraspace/compiler/backend.rb
terraspace-0.6.20 lib/terraspace/compiler/backend.rb
terraspace-0.6.19 lib/terraspace/compiler/backend.rb
terraspace-0.6.18 lib/terraspace/compiler/backend.rb
terraspace-0.6.17 lib/terraspace/compiler/backend.rb
terraspace-0.6.16 lib/terraspace/compiler/backend.rb
terraspace-0.6.15 lib/terraspace/compiler/backend.rb
terraspace-0.6.13 lib/terraspace/compiler/backend.rb
terraspace-0.6.12 lib/terraspace/compiler/backend.rb
terraspace-0.6.11 lib/terraspace/compiler/backend.rb
terraspace-0.6.10 lib/terraspace/compiler/backend.rb
terraspace-0.6.9 lib/terraspace/compiler/backend.rb
terraspace-0.6.8 lib/terraspace/compiler/backend.rb
terraspace-0.6.7 lib/terraspace/compiler/backend.rb
terraspace-0.6.6 lib/terraspace/compiler/backend.rb
terraspace-0.6.5 lib/terraspace/compiler/backend.rb
terraspace-0.6.4 lib/terraspace/compiler/backend.rb
terraspace-0.6.3 lib/terraspace/compiler/backend.rb