Sha256: 812df441204f3a3ee5c18696982b90e29445a4923d88a40ca5f593ac4ee85970

Contents?: true

Size: 952 Bytes

Versions: 1

Compression:

Stored size: 952 Bytes

Contents

module Trailblazer
  class Context
    module Aliasing
      def initialize(wrapped_options, mutable_options, context_alias: {}, **)
        super(wrapped_options, mutable_options)

        @aliases = context_alias.invert
      end

      def [](key)
        return super unless aka = @aliases[key] # yepp, nil/false won't work
        super(aka)
      end

      def key?(key)
        return super unless aka = @aliases[key] # yepp, nil/false won't work
        super(aka)
      end

      # @private ?
      def merge(hash)
        original, mutable_options = decompose

        self.class.new(
          original,
          mutable_options.merge(hash),
          context_alias: @aliases.invert # DISCUSS: maybe we can speed up by remembering the original options?
        )
      end

      def to_hash
        super.merge(Hash[@aliases.collect { |aka, k| key?(k) ? [aka, self[k]] : nil }.compact]) # FIXME: performance!
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
trailblazer-context-0.2.0 lib/trailblazer/context/aliasing.rb