Sha256: cc7a71530e6f892152fcdff5fc7bc6c36a2d5158055dc2107099fa9147ffd6c9

Contents?: true

Size: 1.41 KB

Versions: 22

Compression:

Stored size: 1.41 KB

Contents

module Lookbook
  class InputStore
    CONFIG_FILE = "config/inputs.yml"

    DEFAULTS = {}

    attr_reader :store
    delegate :to_h, to: :store

    def initialize(config = nil)
      @store = {}

      config.to_h.each do |name, opts|
        opts[:system] = true
        add_input(name, opts[:partial], opts.except(:partial))
      end
    end

    def add_input(input, *args)
      store[normalize_name(input)] = build_config(input, *args)
    end

    def get_input(input)
      store[normalize_name(input)]
    end

    def self.init_from_config
      new(default_config)
    end

    def self.default_config
      ConfigLoader.call(CONFIG_FILE)
    end

    protected

    def normalize_name(name)
      name.to_s.tr("-", "_").to_sym
    end

    def build_config(name, *args)
      partial = nil
      opts = nil
      if args.many? && args.last.is_a?(Hash)
        partial = args.first
        opts = args.last
      elsif args.first.is_a?(String)
        partial = args.first
      end
      if partial.present?
        input = Store.new({
          name: name.to_sym,
          partial: partial,
          options: DEFAULTS.merge(opts.to_h)
        })
        if input.options.key?(:system)
          input.system = input.options[:system]
          input.options.delete(:system)
        end
        input
      else
        raise ConfigError.new("inputs must define a partial path", scope: "inputs.config")
      end
    end
  end
end

Version data entries

22 entries across 22 versions & 1 rubygems

Version Path
lookbook-2.3.4 lib/lookbook/stores/input_store.rb
lookbook-2.3.3 lib/lookbook/stores/input_store.rb
lookbook-2.3.2 lib/lookbook/stores/input_store.rb
lookbook-2.3.0 lib/lookbook/stores/input_store.rb
lookbook-2.2.2 lib/lookbook/stores/input_store.rb
lookbook-2.2.1 lib/lookbook/stores/input_store.rb
lookbook-2.2.0 lib/lookbook/stores/input_store.rb
lookbook-2.1.1 lib/lookbook/stores/input_store.rb
lookbook-2.0.5 lib/lookbook/stores/input_store.rb
lookbook-2.0.4 lib/lookbook/stores/input_store.rb
lookbook-2.0.3 lib/lookbook/stores/input_store.rb
lookbook-2.0.2 lib/lookbook/stores/input_store.rb
lookbook-2.0.1 lib/lookbook/stores/input_store.rb
lookbook-2.0.0 lib/lookbook/stores/input_store.rb
lookbook-2.0.0.rc.3 lib/lookbook/stores/input_store.rb
lookbook-2.0.0.rc.2 lib/lookbook/stores/input_store.rb
lookbook-2.0.0.rc.1 lib/lookbook/stores/input_store.rb
lookbook-2.0.0.beta.9 lib/lookbook/stores/input_store.rb
lookbook-2.0.0.beta.8 lib/lookbook/stores/input_store.rb
lookbook-2.0.0.beta.7 lib/lookbook/stores/input_store.rb