Sha256: 1fb646cce790532bf755f998a79f5fcb8c96b890fe36f29eb0b1061a65ed3438

Contents?: true

Size: 1.53 KB

Versions: 10

Compression:

Stored size: 1.53 KB

Contents

require "crimp"
require "alephant/storage"
require "alephant/lookup"
require "alephant/broker/errors/invalid_cache_key"
require "alephant/sequencer"
require "alephant/broker/cache"

module Alephant
  module Broker
    class Component
      attr_reader :id, :batch_id, :options, :content, :opts_hash

      HEADER_PREFIX = "head_".freeze

      def initialize(meta, data)
        @id        = meta.id
        @batch_id  = meta.batch_id
        @options   = symbolize(meta.options || {})
        @content   = data[:content].force_encoding "UTF-8"
        @opts_hash = meta.opts_hash
        @data      = data
        @meta      = meta
      end

      def content_type
        headers["Content-Type"]
      end

      def headers
        {
          "Content-Type" => data[:content_type].to_s
        }
          .merge(data[:headers] || {})
          .merge(meta_data_headers)
      end

      def status
        meta = data.fetch(:meta, {})

        meta[:status] || meta['status'] || 200
      end

      private

      attr_reader :meta, :data

      def meta_data_headers
        @meta_data_headers ||= data[:meta].to_h.reduce({}) do |accum, (k, v)|
          accum.tap do |a|
            a[header_key(k.to_s)] = v.to_s if k.to_s.start_with?(HEADER_PREFIX)
          end
        end
      end

      def header_key(key)
        key = key.gsub(HEADER_PREFIX, "")
        return key if key == "ETag"

        key.split("-").map(&:capitalize).join("-")
      end

      def symbolize(hash)
        Hash[hash.map { |k, v| [k.to_sym, v] }]
      end
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
alephant-broker-3.19.1 lib/alephant/broker/component.rb
alephant-broker-3.19.0 lib/alephant/broker/component.rb
alephant-broker-3.18.0 lib/alephant/broker/component.rb
alephant-broker-3.17.0 lib/alephant/broker/component.rb
alephant-broker-3.16.2 lib/alephant/broker/component.rb
alephant-broker-3.16.1 lib/alephant/broker/component.rb
alephant-broker-3.16.0 lib/alephant/broker/component.rb
alephant-broker-3.15.2 lib/alephant/broker/component.rb
alephant-broker-3.15.1 lib/alephant/broker/component.rb
alephant-broker-3.15.0 lib/alephant/broker/component.rb