Sha256: bd13c3fa18042cf3d1a1d2f8d4d70a0e4e9f4da8c72cad625a7fc5bfeed06846

Contents?: true

Size: 1.23 KB

Versions: 8

Compression:

Stored size: 1.23 KB

Contents

# frozen_string_literal: true

class Serega
  module SeregaPlugins
    module Preloads
      class CheckOptPreloadPath
        class << self
          def call(opts)
            return unless opts.key?(:preload_path)

            value = opts[:preload_path]
            raise SeregaError, "Invalid option :preload_path => #{value.inspect}. Can be provided only when :preload option provided" unless opts[:preload]
            raise SeregaError, "Invalid option :preload_path => #{value.inspect}. Can be provided only when :serializer option provided" unless opts[:serializer]

            path = Array(value).map!(&:to_sym)
            preloads = FormatUserPreloads.call(opts[:preload])
            allowed_paths = paths(preloads)
            raise SeregaError, "Invalid option :preload_path => #{value.inspect}. Can be one of #{allowed_paths.inspect[1..-2]}" unless allowed_paths.include?(path)
          end

          private

          def paths(preloads, path = [], result = [])
            preloads.each do |key, nested_preloads|
              path << key
              result << path.dup

              paths(nested_preloads, path, result)
              path.pop
            end

            result
          end
        end
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
serega-0.6.1 lib/serega/plugins/preloads/validations/check_opt_preload_path.rb
serega-0.6.0 lib/serega/plugins/preloads/validations/check_opt_preload_path.rb
serega-0.5.2 lib/serega/plugins/preloads/validations/check_opt_preload_path.rb
serega-0.5.1 lib/serega/plugins/preloads/validations/check_opt_preload_path.rb
serega-0.5.0 lib/serega/plugins/preloads/validations/check_opt_preload_path.rb
serega-0.4.0 lib/serega/plugins/preloads/validations/check_opt_preload_path.rb
serega-0.3.0 lib/serega/plugins/preloads/validations/check_opt_preload_path.rb
serega-0.2.0 lib/serega/plugins/preloads/validations/check_opt_preload_path.rb