Sha256: 63f4cb472b033b425db1b4832b15e998cc229ec9edef2a7b938aa66250df2bcf

Contents?: true

Size: 1.45 KB

Versions: 7

Compression:

Stored size: 1.45 KB

Contents

# frozen_string_literal: true

require "cable_ready/installer"

initializer = action_cable_initializer_working_path.read

proceed = false

if initializer.exclude? "PermessageDeflate.configure"
  proceed = if options.key? "compression"
    options["compression"]
  else
    !no?("✨ Configure Action Cable to compress your WebSocket traffic with gzip? (Y/n)")
  end
end

if proceed
  if !gemfile.match?(/gem ['"]permessage_deflate['"]/)
    add_gem "permessage_deflate@>= 0.1"
  end

  # add permessage_deflate config to Action Cable initializer
  if initializer.exclude? "PermessageDeflate.configure"
    create_or_append(action_cable_initializer_working_path, verbose: false) do
      <<~RUBY
        module ActionCable
          module Connection
            class ClientSocket
              alias_method :old_initialize, :initialize
              def initialize(env, event_target, event_loop, protocols)
                old_initialize(env, event_target, event_loop, protocols)
                @driver.add_extension(
                  PermessageDeflate.configure(
                    level: Zlib::BEST_COMPRESSION,
                    max_window_bits: 13
                  )
                )
              end
            end
          end
        end
      RUBY
    end

    say "✅ Action Cable initializer patched to deflate WS traffic"
  else
    say "⏩ Action Cable initializer is already patched to deflate WS traffic. Skipping."
  end
end

complete_step :compression

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
cable_ready-5.0.3 lib/install/compression.rb
cable_ready-5.0.2 lib/install/compression.rb
cable_ready-5.0.1 lib/install/compression.rb
cable_ready-5.0.0 lib/install/compression.rb
cable_ready-5.0.0.rc2 lib/install/compression.rb
cable_ready-5.0.0.rc1 lib/install/compression.rb
cable_ready-5.0.0.pre10 lib/install/compression.rb