middleman-livereload 3.4.2 → 3.4.7

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 217907b3c501015710ffe9d761d85be9c911ea25
4
- data.tar.gz: 0dfa34929cb855664d4c850615c481471900abab
2
+ SHA256:
3
+ metadata.gz: ac51978c5650bf89df058f304a8dd7a5f42aeb360ca9eb8642ce8619d8f3ad9c
4
+ data.tar.gz: 6999099989b1fa0fa85096f623b2b10453819e62efa6c5b26584d4008999d68b
5
5
  SHA512:
6
- metadata.gz: 482e8d1846e95ca2bbc92d0478550b91eec7b322c4dda2452252052373a829dd5f28fe73224ac442e36f21f49cb17ed1ed1a2e2fa9b7491ef8eb748474d059b9
7
- data.tar.gz: 65da27476b7bddae0b62673047c89f078c86ed6e180759224005512e30cc2ef0c5704276fef6e3c00378a19b40e42ee8d2ecfe5ac8874e836d507d4de5b97578
6
+ metadata.gz: 74eed67bfc417007cb3998c767a464d998e8b30d521153471abd575b8a247c67c89d159470360f2c622255d8b58f229172e75a38353ade602fe35c2e8e89d67a
7
+ data.tar.gz: c54f7cf4d6f46337473512d02b664f1b3c25699173b1c559c134017ac94c2342003e908bf2cf191f7d6c819b634dff2922dfe9efb3716472f3ac37f0aea6e9b1
@@ -0,0 +1,20 @@
1
+ # See here for image contents: https://github.com/microsoft/vscode-dev-containers/tree/v0.166.1/containers/ruby/.devcontainer/base.Dockerfile
2
+
3
+ # [Choice] Ruby version: 3, 3.0, 2, 2.7, 2.6, 2.5
4
+ ARG VARIANT="3"
5
+ FROM mcr.microsoft.com/vscode/devcontainers/ruby:0-${VARIANT}
6
+
7
+ # [Option] Install Node.js
8
+ ARG INSTALL_NODE="true"
9
+ ARG NODE_VERSION="lts/*"
10
+ RUN if [ "${INSTALL_NODE}" = "true" ]; then su vscode -c "umask 0002 && . /usr/local/share/nvm/nvm.sh && nvm install ${NODE_VERSION} 2>&1"; fi
11
+
12
+ # [Optional] Uncomment this section to install additional OS packages.
13
+ # RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
14
+ # && apt-get -y install --no-install-recommends <your-package-list-here>
15
+
16
+ # [Optional] Uncomment this line to install additional gems.
17
+ # RUN gem install <your-gem-names-here>
18
+
19
+ # [Optional] Uncomment this line to install global node packages.
20
+ # RUN su vscode -c "source /usr/local/share/nvm/nvm.sh && npm install -g <your-package-here>" 2>&1
@@ -0,0 +1,35 @@
1
+ // For format details, see https://aka.ms/devcontainer.json. For config options, see the README at:
2
+ // https://github.com/microsoft/vscode-dev-containers/tree/v0.166.1/containers/ruby
3
+ {
4
+ "name": "Ruby",
5
+ "build": {
6
+ "dockerfile": "Dockerfile",
7
+ "args": {
8
+ // Update 'VARIANT' to pick a Ruby version: 3, 3.0, 2, 2.7, 2.6, 2.5
9
+ "VARIANT": "2.7",
10
+ // Options
11
+ "INSTALL_NODE": "true",
12
+ "NODE_VERSION": "lts/*"
13
+ }
14
+ },
15
+
16
+ // Set *default* container specific settings.json values on container create.
17
+ "settings": {
18
+ "terminal.integrated.shell.linux": "/bin/bash"
19
+ },
20
+
21
+ // Add the IDs of extensions you want installed when the container is created.
22
+ "extensions": [
23
+ "rebornix.Ruby"
24
+ ],
25
+
26
+ // Use 'forwardPorts' to make a list of ports inside the container available locally.
27
+ // "forwardPorts": [],
28
+
29
+ // Use 'postCreateCommand' to run commands after the container is created.
30
+ // "postCreateCommand": "ruby --version",
31
+
32
+ // Comment out connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root.
33
+ "remoteUser": "vscode"
34
+
35
+ }
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format progress
data/.travis.yml CHANGED
@@ -1,9 +1,12 @@
1
1
  rvm:
2
- - 1.9.3
3
- - 2.0.0
4
- - 2.1.1
5
- - jruby-19mode
6
-
2
+ - ruby-head
3
+ - 2.2.2
4
+ - 2.1
5
+ - 2.0
6
+ matrix:
7
+ fast_finish: true
8
+ allow_failures:
9
+ - rvm: ruby-head
7
10
  gemfile:
8
11
  - Gemfile
9
12
 
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ (unreleased)
2
+ ===
3
+
4
+ * Support secure sockets (WSS) with options for TLS certificate & private key.
5
+
1
6
  3.3.0
2
7
  ===
3
8
 
data/Gemfile CHANGED
@@ -1,9 +1,6 @@
1
1
  source "https://rubygems.org"
2
2
 
3
- git "git://github.com/middleman/middleman.git", :branch => "v3-stable" do
4
- # gem "middleman"
5
- gem "middleman-core"
6
- end
3
+ gem "middleman", github: "middleman/middleman", branch: "master"
7
4
 
8
5
  # Specify your gem's dependencies in middleman-blog.gemspec
9
6
  gemspec
data/README.md CHANGED
@@ -11,7 +11,7 @@ gem install middleman
11
11
  middleman init MY_PROJECT
12
12
  ```
13
13
 
14
- If you already have a Middleman project: Add `gem "middleman-livereload", "~> 3.3.0"` to your `Gemfile` and run `bundle install`
14
+ If you already have a Middleman project: Add `gem "middleman-livereload", "~> 3.4.3"` to your `Gemfile` and run `bundle install`
15
15
 
16
16
  ## Configuration
17
17
 
@@ -22,13 +22,17 @@ activate :livereload
22
22
  The extension supports a number of options that can be given to the `activate` statement. Eg:
23
23
 
24
24
  ```
25
- activate :livereload, :apply_js_live => false
25
+ activate :livereload, apply_js_live: false
26
26
  ```
27
27
 
28
28
  #### `:host` and `:port`
29
29
 
30
30
  Livereload's listener host/port, these options get passed to ::Rack::LiveReload middleware. Defaults:`'0.0.0.0'` and `'35729'`.
31
31
 
32
+ #### `:js_host` and `:js_port`
33
+
34
+ Similar to the `:host` and `:port` options, but allow you to specify a different host and port at the frontend Javascript level than at the backend EventMachine level. Useful when running behind a proxy or on a Docker VM. Defaults to `:host` and `:port`.
35
+
32
36
  #### `:apply_js_live` and `:apply_css_live`
33
37
 
34
38
  Whether live reload should attempt to reload javascript / css 'in-place', without complete reload of the page. Both default to `true`.
@@ -39,6 +43,26 @@ Whether live reload should attempt to reload javascript / css 'in-place', withou
39
43
 
40
44
  Disable Flash polyfil for browsers that support native WebSockets.
41
45
 
46
+ #### `:ignore`
47
+
48
+ Array of patterns for paths that must be ignored. These files will not be injected with the LiveReload script.
49
+
50
+ `String#match` is used for ignoring, so you can use any valid Ruby regular expression in this array.
51
+
52
+ #### `:livereload_css_target`
53
+
54
+ CSS file to reload when detecting @imported partial was modified. Default `stylesheets/all.css`).
55
+ To opt out set `livereload_css_target: nil`.
56
+
57
+ #### `:livereload_css_pattern`
58
+
59
+ Regexp matching filenames that should trigger reload of :livereload_css_target when changed. Default: `Regexp.new('_.*\.css')`.
60
+
61
+ #### `:wss_certificate` and `:wss_private_key`
62
+
63
+ Support secure sockets (WSS) by passing TLS certificate & private key, for
64
+ example if you're using `middleman server --https` in development.
65
+
42
66
  ## Build & Dependency Status
43
67
 
44
68
  [![Gem Version](https://badge.fury.io/rb/middleman-livereload.png)][gem]
@@ -48,7 +72,7 @@ Disable Flash polyfil for browsers that support native WebSockets.
48
72
 
49
73
  ## Community
50
74
 
51
- The official community forum is available at: http://forum.middlemanapp.com
75
+ The official community forum is available at: https://forum.middlemanapp.com
52
76
 
53
77
  ## Bug Reports
54
78
 
@@ -71,9 +95,9 @@ The best way to get quick responses to your issues and swift fixes to your bugs
71
95
 
72
96
  Copyright (c) 2010-2013 Thomas Reynolds. MIT Licensed, see [LICENSE] for details.
73
97
 
74
- [middleman]: http://middlemanapp.com
98
+ [middleman]: https://middlemanapp.com
75
99
  [gem]: https://rubygems.org/gems/middleman-livereload
76
- [travis]: http://travis-ci.org/middleman/middleman-livereload
100
+ [travis]: https://travis-ci.org/middleman/middleman-livereload
77
101
  [gemnasium]: https://gemnasium.com/middleman/middleman-livereload
78
102
  [codeclimate]: https://codeclimate.com/github/middleman/middleman-livereload
79
103
  [LICENSE]: https://github.com/middleman/middleman-livereload/blob/master/LICENSE.md
data/Rakefile CHANGED
@@ -1,6 +1,12 @@
1
1
  require 'bundler'
2
2
  Bundler::GemHelper.install_tasks
3
3
 
4
+ begin
5
+ require 'rspec/core/rake_task'
6
+ RSpec::Core::RakeTask.new(:spec)
7
+ rescue LoadError
8
+ end
9
+
4
10
  require 'cucumber/rake/task'
5
11
 
6
12
  Cucumber::Rake::Task.new(:cucumber, 'Run features that should pass') do |t|
@@ -14,7 +20,7 @@ end
14
20
 
15
21
  require 'rake/clean'
16
22
 
17
- task :test => ["cucumber"]
23
+ task :test => ["spec", "cucumber"]
18
24
 
19
25
  desc "Build HTML documentation"
20
26
  task :doc do
@@ -3,11 +3,18 @@ require 'middleman-livereload/reactor'
3
3
 
4
4
  module Middleman
5
5
  class LiveReloadExtension < Extension
6
- option :port, '35729', 'Port to bind the LiveReload API server to'
6
+ option :port, '35729', 'Port to bind the LiveReload API server to listen to'
7
7
  option :apply_js_live, true, 'Apply JS changes live, without reloading'
8
8
  option :apply_css_live, true, 'Apply CSS changes live, without reloading'
9
9
  option :no_swf, false, 'Disable Flash WebSocket polyfill for browsers that support native WebSockets'
10
10
  option :host, Socket.ip_address_list.find(->{ Addrinfo.ip 'localhost' }, &:ipv4_private?).ip_address, 'Host to bind LiveReload API server to'
11
+ option :ignore, [], 'Array of patterns for paths that must be ignored'
12
+ option :js_port, nil, 'Port to connect the LiveReload Javascript to (if different than :port)'
13
+ option :js_host, nil, 'Host to connect LiveReload Javascript to (if different than :host)'
14
+ option :livereload_css_target, 'stylesheets/all.css', 'CSS file to load when a @imported CSS partials are modified'
15
+ option :livereload_css_pattern, Regexp.new('_.*\.css'), 'Regexp matching filenames that trigger live reloading target'
16
+ option :wss_certificate, nil, 'Path to an X.509 certificate to use for the websocket server'
17
+ option :wss_private_key, nil, 'Path to an RSA private key for the websocket certificate'
11
18
 
12
19
  def initialize(app, options_hash={}, &block)
13
20
  super
@@ -18,49 +25,62 @@ module Middleman
18
25
  return unless app.environment == :development
19
26
  end
20
27
 
21
- @reactor = nil
22
-
23
28
  port = options.port.to_i
24
29
  host = options.host
30
+ js_port = options.js_port || port
31
+ js_host = options.js_host || host
25
32
  no_swf = options.no_swf
33
+ ignore = options.ignore
26
34
  options_hash = options.to_h
35
+ livereload_css_target = options.livereload_css_target
36
+ livereload_css_pattern = options.livereload_css_pattern
37
+
38
+ extension = self
27
39
 
28
40
  app.ready do
29
- if @reactor
30
- @reactor.app = self
31
- else
32
- @reactor = ::Middleman::LiveReload::Reactor.new(options_hash, self)
41
+ reactor = ::Middleman::LiveReload::Reactor.create(options_hash, self)
42
+
43
+ ignored = lambda do |file|
44
+ return true if app.files.respond_to?(:ignored?) && app.files.send(:ignored?, file)
45
+ ignore.any? { |i| file.to_s.match(i) }
33
46
  end
34
47
 
35
- files.changed do |file|
36
- next if files.respond_to?(:ignored?) && files.send(:ignored?, file)
48
+ app.files.changed do |file|
49
+ next if ignored.call(file)
37
50
 
38
51
  logger.debug "LiveReload: File changed - #{file}"
39
52
 
40
53
  reload_path = "#{Dir.pwd}/#{file}"
41
54
 
42
- file_url = sitemap.file_to_path(file)
55
+ file_url = app.sitemap.file_to_path(file)
43
56
  if file_url
44
- file_resource = sitemap.find_resource_by_path(file_url)
57
+ file_resource = app.sitemap.find_resource_by_path(file_url)
45
58
  if file_resource
46
59
  reload_path = file_resource.url
47
60
  end
48
61
  end
49
62
 
50
- @reactor.reload_browser(reload_path)
63
+ # handle imported partials
64
+ # load target file instead of triggering full page refresh
65
+ if livereload_css_pattern.match(file.to_s) and not livereload_css_target.nil?
66
+ logger.info("LiveReload: CSS import changed, reloading target")
67
+ reload_path = livereload_css_target
68
+ end
69
+
70
+ reactor.reload_browser(reload_path)
51
71
  end
52
72
 
53
- files.deleted do |file|
54
- next if files.respond_to?(:ignored?) && files.send(:ignored?, file)
73
+ app.files.deleted do |file|
74
+ next if ignored.call(file)
55
75
 
56
76
  logger.debug "LiveReload: File deleted - #{file}"
57
77
 
58
- @reactor.reload_browser("#{Dir.pwd}/#{file}")
78
+ reactor.reload_browser("#{Dir.pwd}/#{file}")
59
79
  end
60
80
 
61
81
  # Use the vendored livereload.js source rather than trying to get it from Middleman
62
82
  # https://github.com/johnbintz/rack-livereload#which-livereload-script-does-it-use
63
- use ::Rack::LiveReload, :port => port, :host => host, :no_swf => no_swf, :source => :vendored
83
+ app.use ::Rack::LiveReload, port: js_port, host: js_host, no_swf: no_swf, source: :vendored, ignore: ignore
64
84
  end
65
85
  end
66
86
  end
@@ -1,24 +1,36 @@
1
1
  require 'em-websocket'
2
2
  require 'json'
3
+ require 'middleman-livereload/wss'
3
4
 
4
5
  module Middleman
5
6
  module LiveReload
6
7
  class Reactor
7
8
  attr_reader :thread, :web_sockets, :app
8
9
 
10
+ def self.create(options, app)
11
+ if @reactor
12
+ @reactor.app = app
13
+ else
14
+ @reactor = new(options, app)
15
+ end
16
+
17
+ @reactor
18
+ end
19
+
9
20
  def initialize(options, app)
10
21
  @app = app
11
22
  @web_sockets = []
12
23
  @options = options
13
24
  @thread = start_threaded_reactor(options)
25
+ @mutex = Thread::Mutex.new
14
26
  end
15
27
 
16
28
  def app= app
17
- Thread.exclusive { @app = app }
29
+ @mutex.synchronize { @app = app }
18
30
  end
19
31
 
20
32
  def logger
21
- Thread.exclusive { @app.logger }
33
+ @mutex.synchronize { @app.logger }
22
34
  end
23
35
 
24
36
  def stop
@@ -40,10 +52,11 @@ module Middleman
40
52
  end
41
53
 
42
54
  def start_threaded_reactor(options)
55
+ wss = Wss.new(@options[:wss_certificate], @options[:wss_private_key])
43
56
  Thread.new do
44
57
  EventMachine.run do
45
- logger.info "== LiveReload accepting connections from http://#{options[:host]}:#{options[:port]}"
46
- EventMachine.start_server(options[:host], options[:port], EventMachine::WebSocket::Connection, {}) do |ws|
58
+ logger.info "== LiveReload accepting connections from #{wss.scheme}://#{options[:host]}:#{options[:port]}"
59
+ EventMachine.start_server(options[:host], options[:port], EventMachine::WebSocket::Connection, wss.to_options) do |ws|
47
60
  ws.onopen do
48
61
  begin
49
62
  ws.send "!!ver:1.6"
@@ -1,5 +1,5 @@
1
1
  module Middleman
2
2
  module LiveReload
3
- VERSION = "3.4.2"
3
+ VERSION = "3.4.7"
4
4
  end
5
5
  end
@@ -0,0 +1,42 @@
1
+ module Middleman
2
+ module LiveReload
3
+ class Wss
4
+ def initialize(certificate, private_key)
5
+ @certificate = certificate
6
+ @private_key = private_key
7
+ validate!
8
+ end
9
+
10
+ def valid?
11
+ @certificate && @private_key
12
+ end
13
+
14
+ def to_options
15
+ return {} unless valid?
16
+ {
17
+ secure: true,
18
+ tls_options: {
19
+ private_key_file: @private_key,
20
+ cert_chain_file: @certificate
21
+ }
22
+ }
23
+ end
24
+
25
+ def scheme
26
+ valid? ? "wss" : "ws"
27
+ end
28
+
29
+ private
30
+
31
+ def present?
32
+ @certificate || @private_key
33
+ end
34
+
35
+ def validate!
36
+ if present? && !valid?
37
+ raise ArgumentError.new, "You must provide both :wss_certificate and :wss_private_key"
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,77 @@
1
+ require "spec_helper"
2
+ require "middleman-livereload/wss"
3
+
4
+ module Middleman
5
+ module LiveReload
6
+ RSpec.describe Wss do
7
+ let(:wss) { Wss.new certificate, private_key }
8
+
9
+ it "prevents missing certificate or private_key" do
10
+ expect { Wss.new nil, "y" }.to raise_error(ArgumentError, /both :wss_certificate and :wss_private_key/)
11
+ end
12
+
13
+ describe "#scheme" do
14
+ subject { wss.scheme }
15
+
16
+ context "no certificate and no private key" do
17
+ let(:certificate) { nil }
18
+ let(:private_key) { nil }
19
+
20
+ it { is_expected.to eq "ws" }
21
+ end
22
+
23
+ context "certificate and private key" do
24
+ let(:certificate) { "x" }
25
+ let(:private_key) { "y" }
26
+
27
+ it { is_expected.to eq "wss" }
28
+ end
29
+ end
30
+
31
+ describe "#to_options" do
32
+ subject { wss.to_options }
33
+
34
+ context "no certificate and no private key" do
35
+ let(:certificate) { nil }
36
+ let(:private_key) { nil }
37
+
38
+ it { is_expected.to eq Hash.new }
39
+ end
40
+
41
+ context "certificate and private key" do
42
+ let(:certificate) { "x" }
43
+ let(:private_key) { "y" }
44
+ let(:options) do
45
+ {
46
+ secure: true,
47
+ tls_options: {
48
+ private_key_file: private_key,
49
+ cert_chain_file: certificate
50
+ }
51
+ }
52
+ end
53
+
54
+ it { is_expected.to eq options }
55
+ end
56
+ end
57
+
58
+ describe "#valid?" do
59
+ subject { wss.valid? }
60
+
61
+ context "no certificate and no private key" do
62
+ let(:certificate) { nil }
63
+ let(:private_key) { nil }
64
+
65
+ it { is_expected.to be_falsey }
66
+ end
67
+
68
+ context "certificate and private key" do
69
+ let(:certificate) { "x" }
70
+ let(:private_key) { "y" }
71
+
72
+ it { is_expected.to be_truthy }
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,17 @@
1
+ # This file was generated by the `rspec --init` command. Conventionally, all
2
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
+ # Require this file using `require "spec_helper"` to ensure that it is only
4
+ # loaded once.
5
+ #
6
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
7
+ RSpec.configure do |config|
8
+ config.treat_symbols_as_metadata_keys_with_true_values = true
9
+ config.run_all_when_everything_filtered = true
10
+ config.filter_run :focus
11
+
12
+ # Run specs in random order to surface order dependencies. If you find an
13
+ # order dependency and want to debug it, you can fix the order by providing
14
+ # the seed, which is printed after each run.
15
+ # --seed 1234
16
+ config.order = 'random'
17
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: middleman-livereload
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.4.2
4
+ version: 3.4.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas Reynolds
@@ -10,48 +10,48 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2014-12-26 00:00:00.000000000 Z
13
+ date: 2021-04-08 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: middleman-core
17
17
  requirement: !ruby/object:Gem::Requirement
18
18
  requirements:
19
- - - '>='
19
+ - - ">="
20
20
  - !ruby/object:Gem::Version
21
21
  version: '3.3'
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
- - - '>='
26
+ - - ">="
27
27
  - !ruby/object:Gem::Version
28
28
  version: '3.3'
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: rack-livereload
31
31
  requirement: !ruby/object:Gem::Requirement
32
32
  requirements:
33
- - - ~>
33
+ - - "~>"
34
34
  - !ruby/object:Gem::Version
35
35
  version: 0.3.15
36
36
  type: :runtime
37
37
  prerelease: false
38
38
  version_requirements: !ruby/object:Gem::Requirement
39
39
  requirements:
40
- - - ~>
40
+ - - "~>"
41
41
  - !ruby/object:Gem::Version
42
42
  version: 0.3.15
43
43
  - !ruby/object:Gem::Dependency
44
44
  name: em-websocket
45
45
  requirement: !ruby/object:Gem::Requirement
46
46
  requirements:
47
- - - ~>
47
+ - - "~>"
48
48
  - !ruby/object:Gem::Version
49
49
  version: 0.5.1
50
50
  type: :runtime
51
51
  prerelease: false
52
52
  version_requirements: !ruby/object:Gem::Requirement
53
53
  requirements:
54
- - - ~>
54
+ - - "~>"
55
55
  - !ruby/object:Gem::Version
56
56
  version: 0.5.1
57
57
  description: LiveReload support for Middleman
@@ -63,8 +63,11 @@ executables: []
63
63
  extensions: []
64
64
  extra_rdoc_files: []
65
65
  files:
66
- - .gitignore
67
- - .travis.yml
66
+ - ".devcontainer/Dockerfile"
67
+ - ".devcontainer/devcontainer.json"
68
+ - ".gitignore"
69
+ - ".rspec"
70
+ - ".travis.yml"
68
71
  - CHANGELOG.md
69
72
  - CONTRIBUTING.md
70
73
  - Gemfile
@@ -77,8 +80,11 @@ files:
77
80
  - lib/middleman-livereload/extension_3_1.rb
78
81
  - lib/middleman-livereload/reactor.rb
79
82
  - lib/middleman-livereload/version.rb
83
+ - lib/middleman-livereload/wss.rb
80
84
  - lib/middleman_extension.rb
81
85
  - middleman-livereload.gemspec
86
+ - spec/middleman-livereload/wss_spec.rb
87
+ - spec/spec_helper.rb
82
88
  homepage: https://github.com/middleman/middleman-livereload
83
89
  licenses:
84
90
  - MIT
@@ -89,21 +95,17 @@ require_paths:
89
95
  - lib
90
96
  required_ruby_version: !ruby/object:Gem::Requirement
91
97
  requirements:
92
- - - '>='
98
+ - - ">="
93
99
  - !ruby/object:Gem::Version
94
100
  version: 1.9.3
95
101
  required_rubygems_version: !ruby/object:Gem::Requirement
96
102
  requirements:
97
- - - '>='
103
+ - - ">="
98
104
  - !ruby/object:Gem::Version
99
105
  version: '0'
100
106
  requirements: []
101
- rubyforge_project:
102
- rubygems_version: 2.2.2
107
+ rubygems_version: 3.1.6
103
108
  signing_key:
104
109
  specification_version: 4
105
110
  summary: LiveReload support for Middleman
106
- test_files:
107
- - features/.gitkeep
108
- - fixtures/.gitkeep
109
- has_rdoc:
111
+ test_files: []