guard-puma 0.4.1 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.editorconfig +9 -0
- data/.travis.yml +8 -3
- data/CHANGES.md +27 -0
- data/README.md +5 -2
- data/guard-puma.gemspec +5 -5
- data/lib/guard/puma.rb +33 -15
- data/lib/guard/puma/runner.rb +70 -31
- data/lib/guard/puma/version.rb +1 -1
- data/spec/lib/guard/puma/runner_spec.rb +154 -30
- data/spec/lib/guard/puma_spec.rb +87 -34
- data/spec/spec_helper.rb +1 -0
- metadata +22 -29
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 | 
            -
             | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 2 | 
            +
            SHA256:
         | 
| 3 | 
            +
              metadata.gz: c4882d80d8bb73e013141fc821e88c95a5cf8cf2c2cb1597de1d266951dda350
         | 
| 4 | 
            +
              data.tar.gz: db041e9db3a6612ad08c77d10c40245675e41b4022366e36ac2a23b6390cc4a5
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 742d39e52c73797a1bfae1d5744a3744a0ee13672ca5c950aa610739614f6647db02153935e72b264c53719aac2a0d1b3992dc5bad5545c48b802c4c0868d94f
         | 
| 7 | 
            +
              data.tar.gz: f4e46ba7c2cfdbfb9726bcbf23099456efe4a22cc30b7424f27edaf21dc86a08bd7647e9a463ed99b9dfb302f341914054be89c0800f5c804cb487c42e522d73
         | 
    
        data/.editorconfig
    ADDED
    
    
    
        data/.travis.yml
    CHANGED
    
    | @@ -1,10 +1,15 @@ | |
| 1 1 | 
             
            sudo: false
         | 
| 2 2 | 
             
            language: ruby
         | 
| 3 3 | 
             
            rvm:
         | 
| 4 | 
            -
              - 2. | 
| 5 | 
            -
              - 2.3 | 
| 4 | 
            +
              - 2.5.5
         | 
| 5 | 
            +
              - 2.6.3
         | 
| 6 | 
            +
              - 2.7.0-preview1
         | 
| 6 7 | 
             
              - rbx
         | 
| 7 | 
            -
              - jruby-9. | 
| 8 | 
            +
              - jruby-9.2.2.0
         | 
| 9 | 
            +
            env:
         | 
| 10 | 
            +
            - PUMA_VERSION="~> 5.0"
         | 
| 11 | 
            +
            - PUMA_VERSION="~> 4.0"
         | 
| 8 12 | 
             
            matrix:
         | 
| 9 13 | 
             
              allow_failures:
         | 
| 10 14 | 
             
                - rvm: rbx
         | 
| 15 | 
            +
                - rvm: 2.7.0-preview1
         | 
    
        data/CHANGES.md
    CHANGED
    
    | @@ -1,5 +1,32 @@ | |
| 1 1 | 
             
            # Changes
         | 
| 2 2 |  | 
| 3 | 
            +
            ## 0.7.0
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            * Add MIT license identifier in gemspec. Via #45
         | 
| 6 | 
            +
            * Remove support for MRI 2.2|3 and bump other versions
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            ## 0.6.0
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            * Bump puma to 4.0
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            ## 0.5.2
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            * Default config to `-` instead of `nil`. Fixes #38
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            ## 0.5.1
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            * Detect and use `config/puma.rb` if present
         | 
| 19 | 
            +
             | 
| 20 | 
            +
            ## 0.5.0
         | 
| 21 | 
            +
             | 
| 22 | 
            +
            * Add `:pumactl` option
         | 
| 23 | 
            +
            * Add `:restart_timeout` option
         | 
| 24 | 
            +
            * Don't stop Puma if it was not started by Guard
         | 
| 25 | 
            +
            * Don't notify about start when no start
         | 
| 26 | 
            +
            * Improve `guard-compat` using (https://github.com/guard/guard-compat#migrating-your-api-calls)
         | 
| 27 | 
            +
            * Remove unused `pry` dependency
         | 
| 28 | 
            +
            * Update versions of dependencies
         | 
| 29 | 
            +
             | 
| 3 30 | 
             
            ## 0.4.1
         | 
| 4 31 |  | 
| 5 32 | 
             
            * Improve notifications. Via #30
         | 
    
        data/README.md
    CHANGED
    
    | @@ -1,6 +1,5 @@ | |
| 1 1 | 
             
            # Guard::Puma
         | 
| 2 2 | 
             
            [](http://travis-ci.org/jc00ke/guard-puma)
         | 
| 3 | 
            -
            [](https://gemnasium.com/jc00ke/guard-puma)
         | 
| 4 3 |  | 
| 5 4 | 
             
            Restart Puma when some files change
         | 
| 6 5 |  | 
| @@ -33,17 +32,21 @@ end | |
| 33 32 |  | 
| 34 33 | 
             
            * `:port` is the port number to run on (default `4000`)
         | 
| 35 34 | 
             
            * `:environment` is the environment to use (default `development`)
         | 
| 36 | 
            -
            * `:start_on_start` will start the server when starting Guard (default `true`)
         | 
| 35 | 
            +
            * `:start_on_start` will start the server when starting Guard and stop the server when reloading/stopping Guard (default `true`)
         | 
| 37 36 | 
             
            * `:force_run` kills any process that's holding open the listen port before attempting to (re)start Puma (default `false`).
         | 
| 38 37 | 
             
            * `:daemon` runs the server as a daemon, without any output to the terminal that ran `guard` (default `false`).
         | 
| 39 38 | 
             
            * `:quiet` runs the server in quiet mode, suppressing output (default `true`).
         | 
| 40 39 | 
             
            * `:debugger` runs the server with the debugger enabled (default `false`). Required ruby-debug gem.
         | 
| 41 40 | 
             
            * `:timeout` waits this number of seconds when restarting the Puma server before reporting there's a problem (default `20`).
         | 
| 41 | 
            +
            * `:restart_timeout` waits this number of seconds before the next restarting the Puma server (default `1`).
         | 
| 42 42 | 
             
            * `:config` is the path to the Puma config file (optional)
         | 
| 43 43 | 
             
            * `:bind` is URI to bind to (tcp:// and unix:// only) (optional)
         | 
| 44 44 | 
             
            * `:control_token` is the token to use as authentication for the control server(optional)
         | 
| 45 45 | 
             
            * `:control_port` is the port to use for the control server(optional)
         | 
| 46 46 | 
             
            * `:threads` is the min:max number of threads to use. Defaults to 0:16 (optional)
         | 
| 47 | 
            +
            * `:pumactl` manages the server via `pumactl` executable instead of `puma` (default `false`)
         | 
| 48 | 
            +
                * Incompatible with options such as `port`, `environment`, `daemon`, `bind`, `threads`
         | 
| 49 | 
            +
                * Use with `config` option is preferred.
         | 
| 47 50 | 
             
            * `:notifications` is the list of notification types that will be sent. Defaults to `[:restarting, :restarted, :not_restarted, :stopped]` (optional)
         | 
| 48 51 |  | 
| 49 52 | 
             
            ## Contributing
         | 
    
        data/guard-puma.gemspec
    CHANGED
    
    | @@ -6,6 +6,7 @@ Gem::Specification.new do |gem| | |
| 6 6 | 
             
              gem.email         = ["jesse@jc00ke.com"]
         | 
| 7 7 | 
             
              gem.summary       = %q{Restart puma when files change }
         | 
| 8 8 | 
             
              gem.homepage      = "https://github.com/jc00ke/guard-puma"
         | 
| 9 | 
            +
              gem.license       = "MIT"
         | 
| 9 10 |  | 
| 10 11 | 
             
              gem.files         = `git ls-files`.split($\)
         | 
| 11 12 | 
             
              gem.executables   = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
         | 
| @@ -15,9 +16,8 @@ Gem::Specification.new do |gem| | |
| 15 16 | 
             
              gem.version       = Guard::PumaVersion::VERSION
         | 
| 16 17 | 
             
              gem.add_dependency              "guard", "~> 2.14"
         | 
| 17 18 | 
             
              gem.add_dependency              "guard-compat", "~> 1.2"
         | 
| 18 | 
            -
              gem.add_dependency              "puma", " | 
| 19 | 
            -
              gem.add_development_dependency  "rake", "~>  | 
| 20 | 
            -
              gem.add_development_dependency  "rspec", "~> 3. | 
| 21 | 
            -
              gem.add_development_dependency  "guard-rspec", "~> 4.7 | 
| 22 | 
            -
              gem.add_development_dependency  "pry"
         | 
| 19 | 
            +
              gem.add_dependency              "puma", ENV["PUMA_VERSION"] || [">= 4.0", "< 6"]
         | 
| 20 | 
            +
              gem.add_development_dependency  "rake", "~> 12"
         | 
| 21 | 
            +
              gem.add_development_dependency  "rspec", "~> 3.7"
         | 
| 22 | 
            +
              gem.add_development_dependency  "guard-rspec", "~> 4.7"
         | 
| 23 23 | 
             
            end
         | 
    
        data/lib/guard/puma.rb
    CHANGED
    
    | @@ -1,9 +1,6 @@ | |
| 1 | 
            -
            require  | 
| 2 | 
            -
             | 
| 3 | 
            -
             | 
| 4 | 
            -
            require "rbconfig"
         | 
| 5 | 
            -
            require "guard/puma/version"
         | 
| 6 | 
            -
            require "guard/compat/plugin"
         | 
| 1 | 
            +
            require 'guard/compat/plugin'
         | 
| 2 | 
            +
            require_relative 'puma/runner'
         | 
| 3 | 
            +
            require_relative 'puma/version'
         | 
| 7 4 |  | 
| 8 5 | 
             
            module Guard
         | 
| 9 6 | 
             
              class Puma < Plugin
         | 
| @@ -14,11 +11,13 @@ module Guard | |
| 14 11 | 
             
                end
         | 
| 15 12 |  | 
| 16 13 | 
             
                DEFAULT_OPTIONS = {
         | 
| 14 | 
            +
                  :pumactl => false,
         | 
| 17 15 | 
             
                  :port => 4000,
         | 
| 18 16 | 
             
                  :environment => default_env,
         | 
| 19 17 | 
             
                  :start_on_start => true,
         | 
| 20 18 | 
             
                  :force_run => false,
         | 
| 21 19 | 
             
                  :timeout => 20,
         | 
| 20 | 
            +
                  :restart_timeout => 1,
         | 
| 22 21 | 
             
                  :debugger => false,
         | 
| 23 22 | 
             
                  :notifications => %i[restarting restarted not_restarted stopped]
         | 
| 24 23 | 
             
                }
         | 
| @@ -28,35 +27,54 @@ module Guard | |
| 28 27 | 
             
                  @options = DEFAULT_OPTIONS.merge(options)
         | 
| 29 28 | 
             
                  @options[:port] = nil if @options.key?(:config)
         | 
| 30 29 | 
             
                  @runner = ::Guard::PumaRunner.new(@options)
         | 
| 30 | 
            +
                  @last_restarted = Time.now
         | 
| 31 31 | 
             
                end
         | 
| 32 32 |  | 
| 33 33 | 
             
                def start
         | 
| 34 | 
            +
                  return unless options[:start_on_start]
         | 
| 34 35 | 
             
                  server = options[:server] ? "#{options[:server]} and " : ""
         | 
| 35 | 
            -
                  UI.info | 
| 36 | 
            -
             | 
| 36 | 
            +
                  Compat::UI.info(
         | 
| 37 | 
            +
                    "Puma starting#{port_text} in #{server}#{options[:environment]} environment."
         | 
| 38 | 
            +
                  )
         | 
| 39 | 
            +
                  runner.start
         | 
| 37 40 | 
             
                end
         | 
| 38 41 |  | 
| 39 42 | 
             
                def reload
         | 
| 40 | 
            -
                   | 
| 43 | 
            +
                  return if (Time.now - @last_restarted) < options[:restart_timeout]
         | 
| 44 | 
            +
                  @last_restarted = Time.now
         | 
| 45 | 
            +
                  Compat::UI.info "Restarting Puma..."
         | 
| 41 46 | 
             
                  if options[:notifications].include?(:restarting)
         | 
| 42 | 
            -
                     | 
| 47 | 
            +
                    Compat::UI.notify(
         | 
| 48 | 
            +
                      "Puma restarting#{port_text} in #{options[:environment]} environment...",
         | 
| 49 | 
            +
                      title: "Restarting Puma...", image: :pending
         | 
| 50 | 
            +
                    )
         | 
| 43 51 | 
             
                  end
         | 
| 44 52 | 
             
                  if runner.restart
         | 
| 45 | 
            -
                    UI.info "Puma restarted"
         | 
| 53 | 
            +
                    Compat::UI.info "Puma restarted"
         | 
| 46 54 | 
             
                    if options[:notifications].include?(:restarted)
         | 
| 47 | 
            -
                       | 
| 55 | 
            +
                      Compat::UI.notify(
         | 
| 56 | 
            +
                        "Puma restarted#{port_text}.",
         | 
| 57 | 
            +
                        title: "Puma restarted!", image: :success
         | 
| 58 | 
            +
                      )
         | 
| 48 59 | 
             
                    end
         | 
| 49 60 | 
             
                  else
         | 
| 50 | 
            -
                    UI.info "Puma NOT restarted, check your log files."
         | 
| 61 | 
            +
                    Compat::UI.info "Puma NOT restarted, check your log files."
         | 
| 51 62 | 
             
                    if options[:notifications].include?(:not_restarted)
         | 
| 52 | 
            -
                       | 
| 63 | 
            +
                      Compat::UI.notify(
         | 
| 64 | 
            +
                        "Puma NOT restarted, check your log files.",
         | 
| 65 | 
            +
                        title: "Puma NOT restarted!", image: :failed
         | 
| 66 | 
            +
                      )
         | 
| 53 67 | 
             
                    end
         | 
| 54 68 | 
             
                  end
         | 
| 55 69 | 
             
                end
         | 
| 56 70 |  | 
| 57 71 | 
             
                def stop
         | 
| 72 | 
            +
                  return unless options[:start_on_start]
         | 
| 58 73 | 
             
                  if options[:notifications].include?(:stopped)
         | 
| 59 | 
            -
                     | 
| 74 | 
            +
                    Compat::UI.notify(
         | 
| 75 | 
            +
                      "Until next time...",
         | 
| 76 | 
            +
                      title: "Puma shutting down.", image: :pending
         | 
| 77 | 
            +
                    )
         | 
| 60 78 | 
             
                  end
         | 
| 61 79 | 
             
                  runner.halt
         | 
| 62 80 | 
             
                end
         | 
    
        data/lib/guard/puma/runner.rb
    CHANGED
    
    | @@ -6,49 +6,50 @@ module Guard | |
| 6 6 |  | 
| 7 7 | 
             
                MAX_WAIT_COUNT = 20
         | 
| 8 8 |  | 
| 9 | 
            -
                attr_reader :options, :control_url, :control_token, :cmd_opts
         | 
| 9 | 
            +
                attr_reader :options, :control_url, :control_token, :cmd_opts, :pumactl
         | 
| 10 10 |  | 
| 11 11 | 
             
                def initialize(options)
         | 
| 12 12 | 
             
                  @control_token = options.delete(:control_token) { |_| ::Puma::Configuration.random_token }
         | 
| 13 | 
            -
                  @control = "localhost"
         | 
| 14 13 | 
             
                  @control_port = (options.delete(:control_port) || '9293')
         | 
| 15 | 
            -
                  @control_url = " | 
| 14 | 
            +
                  @control_url = "localhost:#{@control_port}"
         | 
| 16 15 | 
             
                  @quiet = options.delete(:quiet) { true }
         | 
| 16 | 
            +
                  @pumactl = options.delete(:pumactl) { false }
         | 
| 17 17 | 
             
                  @options = options
         | 
| 18 18 |  | 
| 19 | 
            -
                  puma_options =  | 
| 20 | 
            -
                     | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 25 | 
            -
                     | 
| 19 | 
            +
                  puma_options = {
         | 
| 20 | 
            +
                    puma_options_key(:config) => options.fetch(:config, "-"),
         | 
| 21 | 
            +
                    puma_options_key(:control_token) => @control_token,
         | 
| 22 | 
            +
                    puma_options_key(:control_url) => "tcp://#{@control_url}"
         | 
| 23 | 
            +
                  }
         | 
| 24 | 
            +
                  if options[:config]
         | 
| 25 | 
            +
                    puma_options['--config'] = options[:config]
         | 
| 26 | 
            +
                  elsif default_config_file_exists?
         | 
| 27 | 
            +
                    puma_options['--config'] = DEFAULT_CONFIG_FILE_PATH
         | 
| 26 28 | 
             
                  else
         | 
| 27 | 
            -
                     | 
| 28 | 
            -
                      '--port' => options[:port],
         | 
| 29 | 
            -
                      '--control-token' => @control_token,
         | 
| 30 | 
            -
                      '--control' => "tcp://#{@control_url}",
         | 
| 31 | 
            -
                      '--environment' => options[:environment]
         | 
| 32 | 
            -
                    }
         | 
| 33 | 
            -
                  end
         | 
| 34 | 
            -
                  [:bind, :threads].each do |opt|
         | 
| 35 | 
            -
                    puma_options["--#{opt}"] = options[opt] if options[opt]
         | 
| 29 | 
            +
                    puma_options['--port'] = options[:port]
         | 
| 36 30 | 
             
                  end
         | 
| 31 | 
            +
                  %i[bind threads environment]
         | 
| 32 | 
            +
                    .select { |opt| options[opt] }
         | 
| 33 | 
            +
                    .each do |opt|
         | 
| 34 | 
            +
                      if pumactl
         | 
| 35 | 
            +
                        Compat::UI.warning(
         | 
| 36 | 
            +
                          "`#{opt}` option is not compatible with `pumactl` option"
         | 
| 37 | 
            +
                        )
         | 
| 38 | 
            +
                      else
         | 
| 39 | 
            +
                        puma_options["--#{opt}"] = options[opt]
         | 
| 40 | 
            +
                      end
         | 
| 41 | 
            +
                    end
         | 
| 37 42 | 
             
                  puma_options = puma_options.to_a.flatten
         | 
| 38 | 
            -
                  puma_options << ' | 
| 43 | 
            +
                  puma_options << '--quiet' if @quiet
         | 
| 39 44 | 
             
                  @cmd_opts = puma_options.join ' '
         | 
| 40 45 | 
             
                end
         | 
| 41 46 |  | 
| 42 47 | 
             
                def start
         | 
| 43 | 
            -
                   | 
| 44 | 
            -
                    Kernel.system windows_start_cmd
         | 
| 45 | 
            -
                  else
         | 
| 46 | 
            -
                    Kernel.system nix_start_cmd
         | 
| 47 | 
            -
                  end
         | 
| 48 | 
            +
                  Kernel.system build_command('start')
         | 
| 48 49 | 
             
                end
         | 
| 49 50 |  | 
| 50 51 | 
             
                def halt
         | 
| 51 | 
            -
                   | 
| 52 | 
            +
                  run_puma_command!('halt')
         | 
| 52 53 | 
             
                  # server may not have been stopped correctly, but we are halting so who cares.
         | 
| 53 54 | 
             
                  return true
         | 
| 54 55 | 
             
                end
         | 
| @@ -68,8 +69,36 @@ module Guard | |
| 68 69 |  | 
| 69 70 | 
             
                private
         | 
| 70 71 |  | 
| 72 | 
            +
                DEFAULT_CONFIG_FILE_PATH = "config/puma.rb".freeze
         | 
| 73 | 
            +
             | 
| 74 | 
            +
                PUMA_OPTIONS_KEYS_BY_PUMACTL = {
         | 
| 75 | 
            +
                  true => {
         | 
| 76 | 
            +
                    config:      '--config-file',
         | 
| 77 | 
            +
                    control_url: '--control-url'
         | 
| 78 | 
            +
                  }.freeze,
         | 
| 79 | 
            +
                  false => {
         | 
| 80 | 
            +
                    config:      '--config',
         | 
| 81 | 
            +
                    control_url: '--control-url',
         | 
| 82 | 
            +
                  }.freeze
         | 
| 83 | 
            +
                }.freeze
         | 
| 84 | 
            +
             | 
| 85 | 
            +
                private_constant :PUMA_OPTIONS_KEYS_BY_PUMACTL
         | 
| 86 | 
            +
             | 
| 87 | 
            +
                def default_config_file_exists?
         | 
| 88 | 
            +
                  File.exist?(DEFAULT_CONFIG_FILE_PATH)
         | 
| 89 | 
            +
                end
         | 
| 90 | 
            +
             | 
| 91 | 
            +
                def puma_options_key(key)
         | 
| 92 | 
            +
                  keys = PUMA_OPTIONS_KEYS_BY_PUMACTL[@pumactl]
         | 
| 93 | 
            +
                  keys.fetch(key) { |k| "--#{k.to_s.tr('_', '-')}" }
         | 
| 94 | 
            +
                end
         | 
| 95 | 
            +
             | 
| 71 96 | 
             
                def run_puma_command!(cmd)
         | 
| 72 | 
            -
                   | 
| 97 | 
            +
                  if pumactl
         | 
| 98 | 
            +
                    Kernel.system build_command(cmd)
         | 
| 99 | 
            +
                  else
         | 
| 100 | 
            +
                    Net::HTTP.get build_uri(cmd)
         | 
| 101 | 
            +
                  end
         | 
| 73 102 | 
             
                  return true
         | 
| 74 103 | 
             
                rescue Errno::ECONNREFUSED => e
         | 
| 75 104 | 
             
                  # server may not have been started correctly.
         | 
| @@ -80,12 +109,22 @@ module Guard | |
| 80 109 | 
             
                  URI "http://#{control_url}/#{cmd}?token=#{control_token}"
         | 
| 81 110 | 
             
                end
         | 
| 82 111 |  | 
| 83 | 
            -
                def  | 
| 84 | 
            -
                   | 
| 112 | 
            +
                def build_command(cmd)
         | 
| 113 | 
            +
                  puma_cmd = "#{pumactl ? 'pumactl' : 'puma'} #{cmd_opts} #{cmd if pumactl}"
         | 
| 114 | 
            +
                  background = cmd == 'start'
         | 
| 115 | 
            +
                  if in_windows_cmd?
         | 
| 116 | 
            +
                    windows_cmd(puma_cmd, background)
         | 
| 117 | 
            +
                  else
         | 
| 118 | 
            +
                    nix_cmd(puma_cmd, background)
         | 
| 119 | 
            +
                  end
         | 
| 120 | 
            +
                end
         | 
| 121 | 
            +
             | 
| 122 | 
            +
                def nix_cmd(puma_cmd, background = false)
         | 
| 123 | 
            +
                  %(sh -c 'cd #{Dir.pwd} && #{puma_cmd} #{'&' if background}')
         | 
| 85 124 | 
             
                end
         | 
| 86 125 |  | 
| 87 | 
            -
                def  | 
| 88 | 
            -
                  % | 
| 126 | 
            +
                def windows_cmd(puma_cmd, background = false)
         | 
| 127 | 
            +
                  %(cd "#{Dir.pwd}" && #{'start "" /B' if background} cmd /C "#{puma_cmd}")
         | 
| 89 128 | 
             
                end
         | 
| 90 129 |  | 
| 91 130 | 
             
                def in_windows_cmd?
         | 
    
        data/lib/guard/puma/version.rb
    CHANGED
    
    
| @@ -1,54 +1,85 @@ | |
| 1 1 | 
             
            require 'spec_helper'
         | 
| 2 2 | 
             
            require 'guard/puma/runner'
         | 
| 3 | 
            -
            require 'pry'
         | 
| 4 3 |  | 
| 5 4 | 
             
            describe Guard::PumaRunner do
         | 
| 6 5 | 
             
              let(:runner) { Guard::PumaRunner.new(options) }
         | 
| 7 6 | 
             
              let(:environment) { 'development' }
         | 
| 8 7 | 
             
              let(:port) { 4000 }
         | 
| 9 8 |  | 
| 10 | 
            -
              let(:default_options) { { : | 
| 9 | 
            +
              let(:default_options) { { environment: environment, port: port } }
         | 
| 11 10 | 
             
              let(:options) { default_options }
         | 
| 12 11 |  | 
| 13 12 | 
             
              describe "#initialize" do
         | 
| 14 13 | 
             
                it "sets options" do
         | 
| 15 14 | 
             
                  expect(runner.options).to eq(options)
         | 
| 16 15 | 
             
                end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                it "sets the command options" do
         | 
| 18 | 
            +
                  runner = described_class.new(options.merge(control_token: "abc"))
         | 
| 19 | 
            +
                  expect(runner.cmd_opts).to include("--config - ")
         | 
| 20 | 
            +
                  expect(runner.cmd_opts).to include("--control-token abc")
         | 
| 21 | 
            +
                  expect(runner.cmd_opts).to include("--control-url tcp://localhost:9293")
         | 
| 22 | 
            +
                  expect(runner.cmd_opts).to include("--port 4000")
         | 
| 23 | 
            +
                  expect(runner.cmd_opts).to include("--environment development")
         | 
| 24 | 
            +
                  expect(runner.cmd_opts).to include("--quiet")
         | 
| 25 | 
            +
                end
         | 
| 17 26 | 
             
              end
         | 
| 18 27 |  | 
| 19 | 
            -
              %w | 
| 28 | 
            +
              %w[halt restart].each do |cmd|
         | 
| 20 29 | 
             
                describe cmd do
         | 
| 21 | 
            -
                   | 
| 22 | 
            -
                     | 
| 30 | 
            +
                  context "without pumactl" do
         | 
| 31 | 
            +
                    let(:options) { { pumactl: false } }
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                    let(:uri) {
         | 
| 34 | 
            +
                      URI(
         | 
| 35 | 
            +
                        "http://#{runner.control_url}/#{cmd}?token=#{runner.control_token}"
         | 
| 36 | 
            +
                      )
         | 
| 37 | 
            +
                    }
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                    it "#{cmd}s" do
         | 
| 40 | 
            +
                      expect(Net::HTTP).to receive(:get).with(uri).once
         | 
| 41 | 
            +
                      runner.public_send(cmd)
         | 
| 42 | 
            +
                    end
         | 
| 23 43 | 
             
                  end
         | 
| 24 | 
            -
             | 
| 25 | 
            -
                   | 
| 26 | 
            -
                     | 
| 27 | 
            -
             | 
| 44 | 
            +
             | 
| 45 | 
            +
                  context "with pumactl" do
         | 
| 46 | 
            +
                    let(:options) { { pumactl: true } }
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                    before do
         | 
| 49 | 
            +
                      allow(runner).to receive(:in_windows_cmd?).and_return(false)
         | 
| 50 | 
            +
                    end
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                    let(:command) {
         | 
| 53 | 
            +
                      %(sh -c 'cd #{Dir.pwd} && pumactl #{runner.cmd_opts} #{cmd} ')
         | 
| 54 | 
            +
                    }
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                    it "#{cmd}s" do
         | 
| 57 | 
            +
                      expect(Kernel).to receive(:system).with(command).once
         | 
| 58 | 
            +
                      runner.public_send(cmd)
         | 
| 59 | 
            +
                    end
         | 
| 28 60 | 
             
                  end
         | 
| 29 61 | 
             
                end
         | 
| 30 62 | 
             
              end
         | 
| 31 63 |  | 
| 32 | 
            -
              describe  | 
| 64 | 
            +
              describe "#start" do
         | 
| 33 65 | 
             
                context "when on Windows" do
         | 
| 34 66 | 
             
                  before do
         | 
| 35 67 | 
             
                    allow(runner).to receive(:in_windows_cmd?).and_return(true)
         | 
| 36 | 
            -
                    allow(runner).to receive(:windows_start_cmd).and_return("echo 'windows'")
         | 
| 37 68 | 
             
                  end
         | 
| 38 69 |  | 
| 39 70 | 
             
                  it "runs the Windows command" do
         | 
| 40 | 
            -
                    expect(Kernel).to receive(:system).with( | 
| 71 | 
            +
                    expect(Kernel).to receive(:system).with(%r{cmd /C ".+"})
         | 
| 41 72 | 
             
                    runner.start
         | 
| 42 73 | 
             
                  end
         | 
| 43 74 | 
             
                end
         | 
| 44 75 |  | 
| 45 76 | 
             
                context "when on *nix" do
         | 
| 46 77 | 
             
                  before do
         | 
| 47 | 
            -
                    allow(runner).to receive(: | 
| 78 | 
            +
                    allow(runner).to receive(:in_windows_cmd?).and_return(false)
         | 
| 48 79 | 
             
                  end
         | 
| 49 80 |  | 
| 50 81 | 
             
                  it "runs the *nix command" do
         | 
| 51 | 
            -
                    expect(Kernel).to receive(:system).with( | 
| 82 | 
            +
                    expect(Kernel).to receive(:system).with(/sh -c '.+'/)
         | 
| 52 83 | 
             
                    runner.start
         | 
| 53 84 | 
             
                  end
         | 
| 54 85 | 
             
                end
         | 
| @@ -69,45 +100,138 @@ describe Guard::PumaRunner do | |
| 69 100 | 
             
                let(:command) { runner.start }
         | 
| 70 101 |  | 
| 71 102 | 
             
                context "with config" do
         | 
| 72 | 
            -
                  let(:options) {{ :config => path }}
         | 
| 73 103 | 
             
                  let(:path) { "/tmp/elephants" }
         | 
| 74 104 | 
             
                  let(:environment) { "special_dev" }
         | 
| 75 | 
            -
                  it "adds path to command" do
         | 
| 76 | 
            -
                    expect(runner.cmd_opts).to match("--config #{path}")
         | 
| 77 | 
            -
                  end
         | 
| 78 105 |  | 
| 79 | 
            -
                  context " | 
| 80 | 
            -
                    let(:options) {{ : | 
| 106 | 
            +
                  context "without pumactl but with a default config file" do
         | 
| 107 | 
            +
                    let(:options) { { pumactl: false } }
         | 
| 108 | 
            +
             | 
| 81 109 | 
             
                    it "assumes options are set in config" do
         | 
| 110 | 
            +
                      allow_any_instance_of(Guard::PumaRunner).
         | 
| 111 | 
            +
                        to receive(:default_config_file_exists?).
         | 
| 112 | 
            +
                        and_return(true)
         | 
| 113 | 
            +
                      expect(runner.cmd_opts).to match("--config config/puma.rb")
         | 
| 114 | 
            +
                    end
         | 
| 115 | 
            +
                  end
         | 
| 116 | 
            +
             | 
| 117 | 
            +
                  context "without pumactl" do
         | 
| 118 | 
            +
                    let(:options) { { config: path, pumactl: false } }
         | 
| 119 | 
            +
             | 
| 120 | 
            +
                    it "adds path to command" do
         | 
| 82 121 | 
             
                      expect(runner.cmd_opts).to match("--config #{path}")
         | 
| 83 | 
            -
             | 
| 84 | 
            -
             | 
| 85 | 
            -
             | 
| 122 | 
            +
                    end
         | 
| 123 | 
            +
             | 
| 124 | 
            +
                    context "and additional options" do
         | 
| 125 | 
            +
                      let(:options) {
         | 
| 126 | 
            +
                        {
         | 
| 127 | 
            +
                          config: path, port: "4000",
         | 
| 128 | 
            +
                          quiet: false, environment: environment
         | 
| 129 | 
            +
                        }
         | 
| 130 | 
            +
                      }
         | 
| 131 | 
            +
             | 
| 132 | 
            +
                      it "assumes options are set in config" do
         | 
| 133 | 
            +
                        expect(runner.cmd_opts).to match("--config #{path}")
         | 
| 134 | 
            +
                        expect(runner.cmd_opts).to match(/--control-token [0-9a-f]{10,}/)
         | 
| 135 | 
            +
                        expect(runner.cmd_opts).to match("--control-url tcp")
         | 
| 136 | 
            +
                        expect(runner.cmd_opts).to match("--environment #{environment}")
         | 
| 137 | 
            +
                      end
         | 
| 138 | 
            +
                    end
         | 
| 139 | 
            +
                  end
         | 
| 140 | 
            +
             | 
| 141 | 
            +
                  context "with pumactl" do
         | 
| 142 | 
            +
                    let(:options) { { config: path, pumactl: true } }
         | 
| 143 | 
            +
             | 
| 144 | 
            +
                    it "adds path to command" do
         | 
| 145 | 
            +
                      expect(runner.cmd_opts).to match("--config-file #{path}")
         | 
| 146 | 
            +
                    end
         | 
| 147 | 
            +
             | 
| 148 | 
            +
                    context "and additional options" do
         | 
| 149 | 
            +
                      let(:options) {
         | 
| 150 | 
            +
                        {
         | 
| 151 | 
            +
                          pumactl: true,
         | 
| 152 | 
            +
                          config: path, port: "4000",
         | 
| 153 | 
            +
                          quiet: false
         | 
| 154 | 
            +
                        }
         | 
| 155 | 
            +
                      }
         | 
| 156 | 
            +
             | 
| 157 | 
            +
                      it "assumes options are set in config" do
         | 
| 158 | 
            +
                        expect(runner.cmd_opts).to match("--config-file #{path}")
         | 
| 159 | 
            +
                        expect(runner.cmd_opts).to match(/--control-token [0-9a-f]{10,}/)
         | 
| 160 | 
            +
                        expect(runner.cmd_opts).to match("--control-url tcp")
         | 
| 161 | 
            +
                      end
         | 
| 86 162 | 
             
                    end
         | 
| 87 163 | 
             
                  end
         | 
| 88 164 | 
             
                end
         | 
| 89 165 |  | 
| 90 166 | 
             
                context "with bind" do
         | 
| 91 | 
            -
                  let(:options) {{ :bind => uri }}
         | 
| 92 167 | 
             
                  let(:uri) { "tcp://foo" }
         | 
| 93 | 
            -
             | 
| 94 | 
            -
             | 
| 168 | 
            +
             | 
| 169 | 
            +
                  context "without pumactl" do
         | 
| 170 | 
            +
                    let(:options) { { pumactl: false, bind: uri } }
         | 
| 171 | 
            +
             | 
| 172 | 
            +
                    it "adds uri option to command" do
         | 
| 173 | 
            +
                      expect(runner.cmd_opts).to match("--bind #{uri}")
         | 
| 174 | 
            +
                    end
         | 
| 175 | 
            +
                  end
         | 
| 176 | 
            +
             | 
| 177 | 
            +
                  context "with pumactl" do
         | 
| 178 | 
            +
                    let(:options) { { pumactl: true, bind: uri } }
         | 
| 179 | 
            +
             | 
| 180 | 
            +
                    it "raises ArgumentError about incompatible options" do
         | 
| 181 | 
            +
                      expect(Guard::Compat::UI).to receive(:warning).with(/bind.+pumactl/)
         | 
| 182 | 
            +
                      runner.cmd_opts
         | 
| 183 | 
            +
                    end
         | 
| 95 184 | 
             
                  end
         | 
| 96 185 | 
             
                end
         | 
| 97 186 |  | 
| 98 187 | 
             
                context "with control_token" do
         | 
| 99 | 
            -
                  let(:options) {{ :control_token => token }}
         | 
| 100 188 | 
             
                  let(:token) { "imma-token" }
         | 
| 189 | 
            +
                  let(:options) { { control_token: token } }
         | 
| 190 | 
            +
             | 
| 101 191 | 
             
                  it "adds token to command" do
         | 
| 102 192 | 
             
                    expect(runner.cmd_opts).to match(/--control-token #{token}/)
         | 
| 103 193 | 
             
                  end
         | 
| 104 194 | 
             
                end
         | 
| 105 195 |  | 
| 106 196 | 
             
                context "with threads" do
         | 
| 107 | 
            -
                  let(:options) {{ :threads => threads }}
         | 
| 108 197 | 
             
                  let(:threads) { "13:42" }
         | 
| 109 | 
            -
             | 
| 110 | 
            -
             | 
| 198 | 
            +
             | 
| 199 | 
            +
                  context "without pumactl" do
         | 
| 200 | 
            +
                    let(:options) { { pumactl: false, threads: threads } }
         | 
| 201 | 
            +
             | 
| 202 | 
            +
                    it "adds threads option to command" do
         | 
| 203 | 
            +
                      expect(runner.cmd_opts).to match("--threads #{threads}")
         | 
| 204 | 
            +
                    end
         | 
| 205 | 
            +
                  end
         | 
| 206 | 
            +
             | 
| 207 | 
            +
                  context "with pumactl" do
         | 
| 208 | 
            +
                    let(:options) { { pumactl: true, threads: threads } }
         | 
| 209 | 
            +
             | 
| 210 | 
            +
                    it "raises ArgumentError about incompatible options" do
         | 
| 211 | 
            +
                      expect(Guard::Compat::UI).to receive(:warning).with(/threads.+pumactl/)
         | 
| 212 | 
            +
                      runner.cmd_opts
         | 
| 213 | 
            +
                    end
         | 
| 214 | 
            +
                  end
         | 
| 215 | 
            +
                end
         | 
| 216 | 
            +
             | 
| 217 | 
            +
                context "with environment" do
         | 
| 218 | 
            +
                  let(:environment) { "development" }
         | 
| 219 | 
            +
             | 
| 220 | 
            +
                  context "without pumactl" do
         | 
| 221 | 
            +
                    let(:options) { { pumactl: false, environment: environment } }
         | 
| 222 | 
            +
             | 
| 223 | 
            +
                    it "adds environment option to command" do
         | 
| 224 | 
            +
                      expect(runner.cmd_opts).to match("--environment #{environment}")
         | 
| 225 | 
            +
                    end
         | 
| 226 | 
            +
                  end
         | 
| 227 | 
            +
             | 
| 228 | 
            +
                  context "with pumactl" do
         | 
| 229 | 
            +
                    let(:options) { { pumactl: true, environment: environment } }
         | 
| 230 | 
            +
             | 
| 231 | 
            +
                    it "warns about incompatible options" do
         | 
| 232 | 
            +
                      expect(Guard::Compat::UI).to receive(:warning).with(/environment.+pumactl/)
         | 
| 233 | 
            +
                      runner.cmd_opts
         | 
| 234 | 
            +
                    end
         | 
| 111 235 | 
             
                  end
         | 
| 112 236 | 
             
                end
         | 
| 113 237 | 
             
              end
         | 
    
        data/spec/lib/guard/puma_spec.rb
    CHANGED
    
    | @@ -57,19 +57,20 @@ describe Guard::Puma do | |
| 57 57 | 
             
              end
         | 
| 58 58 |  | 
| 59 59 | 
             
              describe '#start' do
         | 
| 60 | 
            -
             | 
| 61 | 
            -
                context 'start on start' do
         | 
| 60 | 
            +
                context "start on start" do
         | 
| 62 61 | 
             
                  it "runs startup" do
         | 
| 63 | 
            -
                    expect(guard).to receive(:start).once
         | 
| 62 | 
            +
                    expect(guard.runner).to receive(:start).once
         | 
| 63 | 
            +
                    expect(Guard::Compat::UI).to receive(:info).with(/Puma starting/)
         | 
| 64 64 | 
             
                    guard.start
         | 
| 65 65 | 
             
                  end
         | 
| 66 66 | 
             
                end
         | 
| 67 67 |  | 
| 68 | 
            -
                context  | 
| 69 | 
            -
                  let(:options) { { : | 
| 68 | 
            +
                context "no start on start" do
         | 
| 69 | 
            +
                  let(:options) { { start_on_start: false } }
         | 
| 70 70 |  | 
| 71 | 
            -
                  it " | 
| 72 | 
            -
                    expect(guard.runner). | 
| 71 | 
            +
                  it "doesn't show the message and not run startup" do
         | 
| 72 | 
            +
                    expect(guard.runner).not_to receive(:start)
         | 
| 73 | 
            +
                    expect(Guard::Compat::UI).not_to receive(:info).with(/Puma starting/)
         | 
| 73 74 | 
             
                    guard.start
         | 
| 74 75 | 
             
                  end
         | 
| 75 76 | 
             
                end
         | 
| @@ -81,42 +82,45 @@ describe Guard::Puma do | |
| 81 82 |  | 
| 82 83 | 
             
                  context "when no config option set" do
         | 
| 83 84 | 
             
                    it "contains port" do
         | 
| 84 | 
            -
                      expect(Guard::UI).to receive(:info) | 
| 85 | 
            +
                      expect(Guard::Compat::UI).to receive(:info)
         | 
| 86 | 
            +
                        .with(/starting on port 4000/)
         | 
| 85 87 | 
             
                      guard.start
         | 
| 86 88 | 
             
                    end
         | 
| 87 89 | 
             
                  end
         | 
| 88 90 |  | 
| 89 91 | 
             
                  context "when config option set" do
         | 
| 90 | 
            -
                    let(:options) { { : | 
| 92 | 
            +
                    let(:options) { { config: 'config.rb' } }
         | 
| 91 93 |  | 
| 92 94 | 
             
                    it "doesn't contain port" do
         | 
| 93 | 
            -
                      expect(Guard::UI).to receive(:info).with(/starting/)
         | 
| 95 | 
            +
                      expect(Guard::Compat::UI).to receive(:info).with(/starting/)
         | 
| 94 96 | 
             
                      guard.start
         | 
| 95 97 | 
             
                    end
         | 
| 96 98 | 
             
                  end
         | 
| 97 99 | 
             
                end
         | 
| 98 100 | 
             
              end
         | 
| 99 101 |  | 
| 100 | 
            -
              describe  | 
| 102 | 
            +
              describe "#reload" do
         | 
| 103 | 
            +
                let(:zero_restart_timeout) { { restart_timeout: 0 } }
         | 
| 104 | 
            +
                let(:options) { zero_restart_timeout }
         | 
| 101 105 |  | 
| 102 106 | 
             
                before do
         | 
| 103 | 
            -
                  expect(Guard::UI).to receive(:info).with('Restarting Puma...')
         | 
| 104 | 
            -
                  expect(Guard::UI).to receive(:info).with('Puma restarted')
         | 
| 105 107 | 
             
                  allow(guard.runner).to receive(:restart).and_return(true)
         | 
| 108 | 
            +
                  allow_any_instance_of(Guard::PumaRunner).to receive(:halt)
         | 
| 106 109 | 
             
                end
         | 
| 107 110 |  | 
| 108 | 
            -
                let(:runner_stub) { allow_any_instance_of(Guard::PumaRunner).to receive(:halt) }
         | 
| 109 | 
            -
             | 
| 110 111 | 
             
                context "with default options" do
         | 
| 111 112 | 
             
                  it "restarts and show the message" do
         | 
| 112 | 
            -
                    expect(Guard:: | 
| 113 | 
            +
                    expect(Guard::Compat::UI).to receive(:info).with('Restarting Puma...')
         | 
| 114 | 
            +
                    expect(Guard::Compat::UI).to receive(:info).with('Puma restarted')
         | 
| 115 | 
            +
             | 
| 116 | 
            +
                    expect(Guard::Compat::UI).to receive(:notify).with(
         | 
| 113 117 | 
             
                      /restarting on port 4000/,
         | 
| 114 | 
            -
                      hash_including(: | 
| 118 | 
            +
                      hash_including(title: "Restarting Puma...", image: :pending)
         | 
| 115 119 | 
             
                    )
         | 
| 116 120 |  | 
| 117 | 
            -
                    expect(Guard:: | 
| 121 | 
            +
                    expect(Guard::Compat::UI).to receive(:notify).with(
         | 
| 118 122 | 
             
                      "Puma restarted on port 4000.",
         | 
| 119 | 
            -
                      hash_including(: | 
| 123 | 
            +
                      hash_including(title: "Puma restarted!", image: :success)
         | 
| 120 124 | 
             
                    )
         | 
| 121 125 |  | 
| 122 126 | 
             
                    guard.reload
         | 
| @@ -124,17 +128,20 @@ describe Guard::Puma do | |
| 124 128 | 
             
                end
         | 
| 125 129 |  | 
| 126 130 | 
             
                context "with config option set" do
         | 
| 127 | 
            -
                  let(:options) { { : | 
| 131 | 
            +
                  let(:options) { { config: "config.rb" }.merge!(zero_restart_timeout) }
         | 
| 128 132 |  | 
| 129 133 | 
             
                  it "restarts and show the message" do
         | 
| 130 | 
            -
                    expect(Guard:: | 
| 134 | 
            +
                    expect(Guard::Compat::UI).to receive(:info).with('Restarting Puma...')
         | 
| 135 | 
            +
                    expect(Guard::Compat::UI).to receive(:info).with('Puma restarted')
         | 
| 136 | 
            +
             | 
| 137 | 
            +
                    expect(Guard::Compat::UI).to receive(:notify).with(
         | 
| 131 138 | 
             
                      /restarting/,
         | 
| 132 | 
            -
                      hash_including(: | 
| 139 | 
            +
                      hash_including(title: "Restarting Puma...", image: :pending)
         | 
| 133 140 | 
             
                    )
         | 
| 134 141 |  | 
| 135 | 
            -
                    expect(Guard:: | 
| 142 | 
            +
                    expect(Guard::Compat::UI).to receive(:notify).with(
         | 
| 136 143 | 
             
                      "Puma restarted.",
         | 
| 137 | 
            -
                      hash_including(: | 
| 144 | 
            +
                      hash_including(title: "Puma restarted!", image: :success)
         | 
| 138 145 | 
             
                    )
         | 
| 139 146 |  | 
| 140 147 | 
             
                    guard.reload
         | 
| @@ -142,49 +149,95 @@ describe Guard::Puma do | |
| 142 149 | 
             
                end
         | 
| 143 150 |  | 
| 144 151 | 
             
                context "with custom :notifications option" do
         | 
| 145 | 
            -
                  let(:options) { | 
| 152 | 
            +
                  let(:options) {
         | 
| 153 | 
            +
                    { notifications: [:restarted] }.merge!(zero_restart_timeout)
         | 
| 154 | 
            +
                  }
         | 
| 146 155 |  | 
| 147 156 | 
             
                  it "restarts and show the message only about restarted" do
         | 
| 148 | 
            -
                     | 
| 149 | 
            -
             | 
| 157 | 
            +
                    allow(Guard::Compat::UI).to receive(:info)
         | 
| 158 | 
            +
             | 
| 159 | 
            +
                    expect(Guard::Compat::UI).not_to receive(:notify).with(/restarting/)
         | 
| 160 | 
            +
                    expect(Guard::Compat::UI).to receive(:notify)
         | 
| 161 | 
            +
                      .with(/restarted/, kind_of(Hash))
         | 
| 150 162 |  | 
| 151 163 | 
             
                    guard.reload
         | 
| 152 164 | 
             
                  end
         | 
| 153 165 | 
             
                end
         | 
| 154 166 |  | 
| 155 167 | 
             
                context "with empty :notifications option" do
         | 
| 156 | 
            -
                  let(:options) { { : | 
| 168 | 
            +
                  let(:options) { { notifications: [] }.merge!(zero_restart_timeout) }
         | 
| 157 169 |  | 
| 158 170 | 
             
                  it "restarts and doesn't show the message" do
         | 
| 159 | 
            -
                     | 
| 171 | 
            +
                    allow(Guard::Compat::UI).to receive(:info)
         | 
| 172 | 
            +
             | 
| 173 | 
            +
                    expect(Guard::Compat::UI).not_to receive(:notify)
         | 
| 160 174 |  | 
| 161 175 | 
             
                    guard.reload
         | 
| 162 176 | 
             
                  end
         | 
| 163 177 | 
             
                end
         | 
| 164 178 |  | 
| 179 | 
            +
                context "with :restart_timeout option" do
         | 
| 180 | 
            +
                  let(:restart_timeout) { 1.0 }
         | 
| 181 | 
            +
                  let(:options) { { restart_timeout: restart_timeout } }
         | 
| 182 | 
            +
             | 
| 183 | 
            +
                  before { sleep restart_timeout }
         | 
| 184 | 
            +
             | 
| 185 | 
            +
                  it "doesn't restarts during restart timeout" do
         | 
| 186 | 
            +
                    allow(Guard::Compat::UI).to receive(:info)
         | 
| 187 | 
            +
                    allow(Guard::Compat::UI).to receive(:notify)
         | 
| 188 | 
            +
             | 
| 189 | 
            +
                    expect(guard.runner).to receive(:restart).twice
         | 
| 190 | 
            +
             | 
| 191 | 
            +
                    guard.reload
         | 
| 192 | 
            +
                    sleep restart_timeout / 2
         | 
| 193 | 
            +
                    guard.reload
         | 
| 194 | 
            +
                    sleep restart_timeout
         | 
| 195 | 
            +
                    guard.reload
         | 
| 196 | 
            +
                  end
         | 
| 197 | 
            +
                end
         | 
| 165 198 | 
             
              end
         | 
| 166 199 |  | 
| 167 | 
            -
              describe  | 
| 200 | 
            +
              describe "#stop" do
         | 
| 168 201 | 
             
                context "with default options" do
         | 
| 169 202 | 
             
                  it "stops correctly with notification" do
         | 
| 170 | 
            -
                    expect(Guard:: | 
| 203 | 
            +
                    expect(Guard::Compat::UI).to receive(:notify)
         | 
| 204 | 
            +
                      .with('Until next time...', anything)
         | 
| 171 205 | 
             
                    expect(guard.runner).to receive(:halt).once
         | 
| 172 206 | 
             
                    guard.stop
         | 
| 173 207 | 
             
                  end
         | 
| 174 208 | 
             
                end
         | 
| 175 209 |  | 
| 176 210 | 
             
                context "with custom :notifications option" do
         | 
| 177 | 
            -
                  let(:options) { { : | 
| 211 | 
            +
                  let(:options) { { notifications: [] } }
         | 
| 178 212 |  | 
| 179 213 | 
             
                  it "stops correctly without notification" do
         | 
| 180 | 
            -
                    expect(Guard:: | 
| 214 | 
            +
                    expect(Guard::Compat::UI).not_to receive(:notify)
         | 
| 181 215 | 
             
                    expect(guard.runner).to receive(:halt).once
         | 
| 182 216 | 
             
                    guard.stop
         | 
| 183 217 | 
             
                  end
         | 
| 184 218 | 
             
                end
         | 
| 219 | 
            +
             | 
| 220 | 
            +
                context "start on start" do
         | 
| 221 | 
            +
                  it "stops correctly with notification" do
         | 
| 222 | 
            +
                    expect(guard.runner).to receive(:halt).once
         | 
| 223 | 
            +
                    expect(Guard::Compat::UI).to receive(:notify)
         | 
| 224 | 
            +
                      .with('Until next time...', anything)
         | 
| 225 | 
            +
                    guard.stop
         | 
| 226 | 
            +
                  end
         | 
| 227 | 
            +
                end
         | 
| 228 | 
            +
             | 
| 229 | 
            +
                context "no start on start" do
         | 
| 230 | 
            +
                  let(:options) { { start_on_start: false } }
         | 
| 231 | 
            +
             | 
| 232 | 
            +
                  it "doesn't show the message and doesn't halt" do
         | 
| 233 | 
            +
                    expect(guard.runner).not_to receive(:halt)
         | 
| 234 | 
            +
                    expect(Guard::Compat::UI).not_to receive(:notify)
         | 
| 235 | 
            +
                    guard.stop
         | 
| 236 | 
            +
                  end
         | 
| 237 | 
            +
                end
         | 
| 185 238 | 
             
              end
         | 
| 186 239 |  | 
| 187 | 
            -
              describe  | 
| 240 | 
            +
              describe "#run_on_changes" do
         | 
| 188 241 | 
             
                it "reloads on change" do
         | 
| 189 242 | 
             
                  expect(guard).to receive(:reload).once
         | 
| 190 243 | 
             
                  guard.run_on_changes([])
         | 
    
        data/spec/spec_helper.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: guard-puma
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.7.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Jesse Cooke
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2021-02-26 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: guard
         | 
| @@ -42,72 +42,64 @@ dependencies: | |
| 42 42 | 
             
              name: puma
         | 
| 43 43 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 44 44 | 
             
                requirements:
         | 
| 45 | 
            -
                - - " | 
| 45 | 
            +
                - - ">="
         | 
| 46 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 47 | 
            +
                    version: '4.0'
         | 
| 48 | 
            +
                - - "<"
         | 
| 46 49 | 
             
                  - !ruby/object:Gem::Version
         | 
| 47 | 
            -
                    version: ' | 
| 50 | 
            +
                    version: '6'
         | 
| 48 51 | 
             
              type: :runtime
         | 
| 49 52 | 
             
              prerelease: false
         | 
| 50 53 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 51 54 | 
             
                requirements:
         | 
| 52 | 
            -
                - - " | 
| 55 | 
            +
                - - ">="
         | 
| 53 56 | 
             
                  - !ruby/object:Gem::Version
         | 
| 54 | 
            -
                    version: ' | 
| 57 | 
            +
                    version: '4.0'
         | 
| 58 | 
            +
                - - "<"
         | 
| 59 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 60 | 
            +
                    version: '6'
         | 
| 55 61 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 56 62 | 
             
              name: rake
         | 
| 57 63 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 58 64 | 
             
                requirements:
         | 
| 59 65 | 
             
                - - "~>"
         | 
| 60 66 | 
             
                  - !ruby/object:Gem::Version
         | 
| 61 | 
            -
                    version: ' | 
| 67 | 
            +
                    version: '12'
         | 
| 62 68 | 
             
              type: :development
         | 
| 63 69 | 
             
              prerelease: false
         | 
| 64 70 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 65 71 | 
             
                requirements:
         | 
| 66 72 | 
             
                - - "~>"
         | 
| 67 73 | 
             
                  - !ruby/object:Gem::Version
         | 
| 68 | 
            -
                    version: ' | 
| 74 | 
            +
                    version: '12'
         | 
| 69 75 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 70 76 | 
             
              name: rspec
         | 
| 71 77 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 72 78 | 
             
                requirements:
         | 
| 73 79 | 
             
                - - "~>"
         | 
| 74 80 | 
             
                  - !ruby/object:Gem::Version
         | 
| 75 | 
            -
                    version: 3. | 
| 81 | 
            +
                    version: '3.7'
         | 
| 76 82 | 
             
              type: :development
         | 
| 77 83 | 
             
              prerelease: false
         | 
| 78 84 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 79 85 | 
             
                requirements:
         | 
| 80 86 | 
             
                - - "~>"
         | 
| 81 87 | 
             
                  - !ruby/object:Gem::Version
         | 
| 82 | 
            -
                    version: 3. | 
| 88 | 
            +
                    version: '3.7'
         | 
| 83 89 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 84 90 | 
             
              name: guard-rspec
         | 
| 85 91 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 86 92 | 
             
                requirements:
         | 
| 87 93 | 
             
                - - "~>"
         | 
| 88 94 | 
             
                  - !ruby/object:Gem::Version
         | 
| 89 | 
            -
                    version: 4.7 | 
| 95 | 
            +
                    version: '4.7'
         | 
| 90 96 | 
             
              type: :development
         | 
| 91 97 | 
             
              prerelease: false
         | 
| 92 98 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 93 99 | 
             
                requirements:
         | 
| 94 100 | 
             
                - - "~>"
         | 
| 95 101 | 
             
                  - !ruby/object:Gem::Version
         | 
| 96 | 
            -
                    version: 4.7 | 
| 97 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 98 | 
            -
              name: pry
         | 
| 99 | 
            -
              requirement: !ruby/object:Gem::Requirement
         | 
| 100 | 
            -
                requirements:
         | 
| 101 | 
            -
                - - ">="
         | 
| 102 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 103 | 
            -
                    version: '0'
         | 
| 104 | 
            -
              type: :development
         | 
| 105 | 
            -
              prerelease: false
         | 
| 106 | 
            -
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 107 | 
            -
                requirements:
         | 
| 108 | 
            -
                - - ">="
         | 
| 109 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 110 | 
            -
                    version: '0'
         | 
| 102 | 
            +
                    version: '4.7'
         | 
| 111 103 | 
             
            description: 
         | 
| 112 104 | 
             
            email:
         | 
| 113 105 | 
             
            - jesse@jc00ke.com
         | 
| @@ -115,6 +107,7 @@ executables: [] | |
| 115 107 | 
             
            extensions: []
         | 
| 116 108 | 
             
            extra_rdoc_files: []
         | 
| 117 109 | 
             
            files:
         | 
| 110 | 
            +
            - ".editorconfig"
         | 
| 118 111 | 
             
            - ".gitignore"
         | 
| 119 112 | 
             
            - ".travis.yml"
         | 
| 120 113 | 
             
            - CHANGES.md
         | 
| @@ -132,7 +125,8 @@ files: | |
| 132 125 | 
             
            - spec/lib/guard/puma_spec.rb
         | 
| 133 126 | 
             
            - spec/spec_helper.rb
         | 
| 134 127 | 
             
            homepage: https://github.com/jc00ke/guard-puma
         | 
| 135 | 
            -
            licenses: | 
| 128 | 
            +
            licenses:
         | 
| 129 | 
            +
            - MIT
         | 
| 136 130 | 
             
            metadata: {}
         | 
| 137 131 | 
             
            post_install_message: 
         | 
| 138 132 | 
             
            rdoc_options: []
         | 
| @@ -149,8 +143,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 149 143 | 
             
                - !ruby/object:Gem::Version
         | 
| 150 144 | 
             
                  version: '0'
         | 
| 151 145 | 
             
            requirements: []
         | 
| 152 | 
            -
             | 
| 153 | 
            -
            rubygems_version: 2.6.11
         | 
| 146 | 
            +
            rubygems_version: 3.1.2
         | 
| 154 147 | 
             
            signing_key: 
         | 
| 155 148 | 
             
            specification_version: 4
         | 
| 156 149 | 
             
            summary: Restart puma when files change
         |