Sha256: e6b6cc52058edfeffeaa435451b9fdb74b9dccb8e7c956cd8aae0390b1023c81

Contents?: true

Size: 1.86 KB

Versions: 1

Compression:

Stored size: 1.86 KB

Contents

# frozen_string_literal: true

module RShade
  class Config
    class StackStore
      attr_reader :filter, :formatter, :variable_serializer

      DEFAULT_FORMATTER = {
        json: ::RShade::Formatter::Stack::Json,
        stdout: ::RShade::Formatter::Stack::Stdout
      }.freeze

      # @param [RShade::Formatter::Stack::Stdout] formatter
      # @param [RShade::Filter::FilterComposition] filter
      # @param [Hash] serializers
      def initialize(formatter: RShade::Formatter::Stack::Stdout.new, filter: default_filter_composition,
                     serializers: {})
        @filter = filter
        @formatter = formatter
        @variable_serializer = ::RShade::Serializer::Traversal.new(serializers)
      end

      def serializer!(hash)
        variable_serializer.merge!(hash)
        self
      end

      def filter!(filter_type, &block)
        filter.filter(filter_type, &block)
        self
      end

      def formatter!(formatter, opts = {})
        @formatter = formatter.is_a?(Symbol) ? set_symbol_formatter(formatter, opts) : formatter
        self
      end

      def exclude_gems!
        filter!(::RShade::Filter::ExcludePathFilter) do |paths|
          paths.concat(RShade::Utils.default_excluded_path)
        end
        self
      end

      private

      def set_symbol_formatter(type, opts)
        formatter_class = DEFAULT_FORMATTER[type]
        return formatter_class unless formatter_class

        @formatter = formatter_class.new(**opts)
      end

      def default_filter_composition
        variable_filter = RShade::Filter::VariableFilter.new
        include_filter = RShade::Filter::IncludePathFilter.new
        exclude_filter = RShade::Filter::ExcludePathFilter.new

        RShade::Filter::FilterBuilder.build([:or,
                                             [:or, variable_filter, include_filter], exclude_filter])
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rshade-0.2.2 lib/rshade/config/stack_store.rb