Sha256: 1d17d0a75ab62ad904e276b5844f184b830216c65cd4bb009cbcc0d4150ef92e

Contents?: true

Size: 1.94 KB

Versions: 54

Compression:

Stored size: 1.94 KB

Contents

module Terraspace
  module Plugin
    extend Memoist

    # The plugin metadata
    #
    # Example meta:
    #
    #    {
    #      "aws  => {root: "/path", backend: "s3"}
    #      "google" => {root: "/path", backend: "gcs"},
    #    }
    #
    @@meta = {}
    def meta
      @@meta
    end

    def config_classes
      @@meta.map { |plugin, data| data[:config_class] }.compact
    end

    def helper_classes
      @@meta.map { |plugin, data| data[:helper_class] }.compact
    end

    def layer_classes
      @@meta.map { |plugin, data| data[:layer_class] }.compact
    end

    # The resource map can be used to customized the mapping from the resource "first word" to the plugin.
    #
    # resource map is in meta structure.
    #
    #    {
    #      "long_cloud_plugin_name" => {resource_map: {"long_cloud_plugin_name" => "short_name"}
    #    }
    #
    # This is use by Plugin::Finder#find_with_resource
    # Allows mapping of different values in case the terraspace plugin name doesnt match with the
    # resource first word.
    #
    # Generally we try to avoid this and the terraspace plugin name should match the resource "first word"
    # when possible.
    #
    def resource_map
      @@meta.inject({}) do |result, (plugin, data)|
        map = data[:resource_map] || {}
        result.merge(map.deep_stringify_keys)
      end
    end

    def register(plugin, data)
      @@meta[plugin] = data
    end

    # Example return:
    #
    #      TerraspacePluginAws::Interfaces::Backend
    #      TerraspacePluginAws::Interfaces::Expander
    #      TerraspacePluginGcp::Interfaces::Backend
    #      TerraspacePluginGcp::Interfaces::Expander
    #
    def klass(interface_class, options={})
      meta = find_with(options)
      return unless meta
      "TerraspacePlugin#{meta.plugin}::Interfaces::#{interface_class}"
    end

    def find_with(options={})
      Finder.new.find_with(options)
    end
    memoize :find_with

    extend self
  end
end

Version data entries

54 entries across 54 versions & 1 rubygems

Version Path
terraspace-1.1.7 lib/terraspace/plugin.rb
terraspace-1.1.6 lib/terraspace/plugin.rb
terraspace-1.1.5 lib/terraspace/plugin.rb
terraspace-1.1.4 lib/terraspace/plugin.rb
terraspace-1.1.3 lib/terraspace/plugin.rb
terraspace-1.1.2 lib/terraspace/plugin.rb
terraspace-1.1.1 lib/terraspace/plugin.rb
terraspace-1.1.0 lib/terraspace/plugin.rb
terraspace-1.0.6 lib/terraspace/plugin.rb
terraspace-1.0.5 lib/terraspace/plugin.rb
terraspace-1.0.4 lib/terraspace/plugin.rb
terraspace-1.0.3 lib/terraspace/plugin.rb
terraspace-1.0.2 lib/terraspace/plugin.rb
terraspace-1.0.1 lib/terraspace/plugin.rb
terraspace-1.0.0 lib/terraspace/plugin.rb
terraspace-0.7.2 lib/terraspace/plugin.rb
terraspace-0.7.1 lib/terraspace/plugin.rb
terraspace-0.7.0 lib/terraspace/plugin.rb
terraspace-0.6.23 lib/terraspace/plugin.rb
terraspace-0.6.22 lib/terraspace/plugin.rb