<commit_before>require 'action_dispatch/http/response'
require 'delegate'

module ActionController # :nodoc:
  # Mix this module in to your controller, and all actions in that controller
  # will be able to stream data to the client as it's written.  For example:
  #
  #   class MyController < ActionController::Base
  #     include ActionController::Live
  #
  #     def stream
  #       response.headers['Content-Type'] = 'text/event-stream'
  #       100.times {
  #         response.stream.write "hello world\n"
  #         sleep 1
  #       }
  #       response.stream.close
  #     end
  #   end
  #
  # There are a few caveats with this use.  You *cannot* write headers after the
  # response has been committed (Response#committed? will return truthy).
  # Calling +write+ or +close+ on the response stream will cause the response
  # object to be committed.  Make sure all headers are set before calling write
  # or close on your stream.
  #
  # The other caveat is that you actions are executed in a separate thread than
  # the main thread.  Make sure your actions are thread safe, and this shouldn't
  # be a problem (don't share state across threads, etc).
  module Live
    class Response < ActionDispatch::Response
      class Buffer < ActionDispatch::Response::Buffer # :nodoc:
        def initialize(response)
          super(response, Queue.new)
        end

        def write(string)
          unless @response.committed?
            @response.headers["Cache-Control"] = "no-cache"
            @response.headers.delete("Content-Length")
          end

          super
        end

        def each
          while str = @buf.pop
            yield str
          end
        end

        def close
          super
          @buf.push nil
        end
      end

      class Header < DelegateClass(Hash)
        def initialize(response, header)
          @response = response
          super(header)
        end

        def []=(k,v)
          if @response.committed?
            raise ActionDispatch::IllegalStateError, 'header already sent'
          end

          super
        end
      end

      def initialize(status = 200, header = {}, body = [])
        header = Header.new self, header
        super(status, header, body)
      end

      private

      def build_buffer(response, body)
        buf = Buffer.new response<commit_msg>pushing Buffer up to Live<commit_after>require 'action_dispatch/http/response'
require 'delegate'

module ActionController # :nodoc:
  # Mix this module in to your controller, and all actions in that controller
  # will be able to stream data to the client as it's written.  For example:
  #
  #   class MyController < ActionController::Base
  #     include ActionController::Live
  #
  #     def stream
  #       response.headers['Content-Type'] = 'text/event-stream'
  #       100.times {
  #         response.stream.write "hello world\n"
  #         sleep 1
  #       }
  #       response.stream.close
  #     end
  #   end
  #
  # There are a few caveats with this use.  You *cannot* write headers after the
  # response has been committed (Response#committed? will return truthy).
  # Calling +write+ or +close+ on the response stream will cause the response
  # object to be committed.  Make sure all headers are set before calling write
  # or close on your stream.
  #
  # The other caveat is that you actions are executed in a separate thread than
  # the main thread.  Make sure your actions are thread safe, and this shouldn't
  # be a problem (don't share state across threads, etc).
  module Live
    class Buffer < ActionDispatch::Response::Buffer # :nodoc:
      def initialize(response)
        super(response, Queue.new)
      end

      def write(string)
        unless @response.committed?
          @response.headers["Cache-Control"] = "no-cache"
          @response.headers.delete("Content-Length")
        end

        super
      end

      def each
        while str = @buf.pop
          yield str
        end
      end

      def close
        super
        @buf.push nil
      end
    end

    class Response < ActionDispatch::Response # :nodoc:
      class Header < DelegateClass(Hash) # :nodoc:
        def initialize(response, header)
          @response = response
          super(header)
        end

        def []=(k,v)
          if @response.committed?
            raise ActionDispatch::IllegalStateError, 'header already sent'
          end

          super
        end
      end

      def initialize(status = 200, header = {}, body = [])
        header = Header.new self, header
        super(status, header, body)
      end

      private

      def build_buffer(response, body)
        buf = Live::Buffer.new response
{'fraction_non_alphanumeric': 0.07888040712468193, 'fraction_numerical': 0.0029686174724342664, 'mean_word_length': 2.1259111994698476, 'pattern_counts': {'":': 0, '<': 11, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1361227', 'n_tokens_mistral': 1288, 'n_tokens_neox': 1247, 'n_words': 453}