filewatcher-cli 1.0.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 2a7885738bc63e99bd2be26af12b8ec536f29ec6e117e191dc507b973b152f3b
4
+ data.tar.gz: e46bb7b473ec6cc0943cb71aa3d0d63047d8ac989e866fcd5c2d47b2ab3b0ad5
5
+ SHA512:
6
+ metadata.gz: 00c729fb158d7cc1f49bf09c53117e8b6f284b3c922ef741e1202725d494111a8ccaa9d3d36687c66f35d85e8a8fa422504e30346357d5c8bb697868e25dffbc
7
+ data.tar.gz: d02829a6821d3f7b7aeb537299199062fba11025a5e71b6755cc83db6eb41e9dd27e2c19a397ccb0d9843e73623c42e80e0956fdadb04a217d4e99160fc44afe
@@ -0,0 +1,7 @@
1
+ # Changelog
2
+
3
+ ## master (unreleased)
4
+
5
+ ## 1.0.0.beta1 (2020-09-19)
6
+
7
+ * Initial release.
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2020 Alexander Popov
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -0,0 +1,173 @@
1
+ # Filewatcher CLI
2
+
3
+ [![Cirrus CI - Base Branch Build Status](https://img.shields.io/cirrus/github/filewatcher/filewatcher-cli?style=flat-square)](https://cirrus-ci.com/github/filewatcher/filewatcher-cli)
4
+ [![Codecov branch](https://img.shields.io/codecov/c/github/filewatcher/filewatcher-cli/master.svg?style=flat-square)](https://codecov.io/gh/filewatcher/filewatcher-cli)
5
+ [![Code Climate](https://img.shields.io/codeclimate/maintainability/filewatcher/filewatcher-cli.svg?style=flat-square)](https://codeclimate.com/github/filewatcher/filewatcher-cli)
6
+ [![Depfu](https://img.shields.io/depfu/filewatcher/filewatcher-cli?style=flat-square)](https://depfu.com/repos/github/filewatcher/filewatcher-cli)
7
+ [![Inline docs](https://inch-ci.org/github/filewatcher/filewatcher-cli.svg?branch=master)](https://inch-ci.org/github/filewatcher/filewatcher-cli)
8
+ [![License](https://img.shields.io/github/license/filewatcher/filewatcher-cli.svg?style=flat-square)](LICENSE.txt)
9
+ [![Gem](https://img.shields.io/gem/v/filewatcher-cli.svg?style=flat-square)](https://rubygems.org/gems/filewatcher-cli)
10
+
11
+ CLI for [Filewatcher](https://github.com/filewatcher/filewatcher).
12
+
13
+ ## Installation
14
+
15
+ Add this line to your application's Gemfile:
16
+
17
+ ```ruby
18
+ gem 'filewatcher-cli'
19
+ ```
20
+
21
+ And then execute:
22
+
23
+ ```shell
24
+ bundle install
25
+ ```
26
+
27
+ Or install it yourself as:
28
+
29
+ ```shell
30
+ gem install filewatcher-cli
31
+ ```
32
+
33
+ ## Usage
34
+
35
+ Run the `echo` command when the file `myfile` is changed:
36
+
37
+ ```sh
38
+ $ filewatcher "myfile" "echo 'myfile has changed'"
39
+ ```
40
+
41
+ Run any JavaScript in the current directory when it is updated in Windows
42
+ PowerShell:
43
+
44
+ ```sh
45
+ > filewatcher *.js "node %FILENAME%"
46
+ ```
47
+
48
+ In Linux/macOS:
49
+
50
+ ```sh
51
+ $ filewatcher *.js 'node $FILENAME'
52
+ ```
53
+
54
+ Place filenames in quotes to use Ruby filename globbing instead
55
+ of shell filename globbing. This will make Filewatcher look for files in
56
+ subdirectories too. To watch all JavaScript files in subdirectories in Windows:
57
+
58
+ ```sh
59
+ > filewatcher "**/*.js" "node %FILENAME%"
60
+ ```
61
+
62
+ In Linux/macOS:
63
+
64
+ ```sh
65
+ $ filewatcher '**/*.js' 'node $FILENAME'
66
+ ```
67
+
68
+ By default, Filewatcher executes the command only for the first changed file
69
+ that found from file system check, but you can using the `--every/-E` option
70
+ for running the command on each changed file.
71
+
72
+ ```sh
73
+ $ filewatcher -E * 'echo file: $FILENAME'
74
+ ```
75
+
76
+ Try to run the updated file as a script when it is updated by using the
77
+ `--exec/-e` option. Works with files with file extensions that looks like a
78
+ Python, Ruby, Perl, PHP, JavaScript or AWK script.
79
+
80
+ ```sh
81
+ $ filewatcher -e *.rb
82
+ ```
83
+
84
+ Print a list of all files matching \*.css first and then output the filename
85
+ when a file is being updated by using the `--list/-l` option:
86
+
87
+ ```sh
88
+ $ filewatcher -l '**/*.css' 'echo file: $FILENAME'
89
+ ```
90
+
91
+ Watch the "src" and "test" folders recursively, and run test when the file system gets updated:
92
+
93
+ ```sh
94
+ $ filewatcher "src test" "ruby test/test_suite.rb"
95
+ ```
96
+
97
+ ### Restart long running commands
98
+
99
+ The `--restart/-r` option kills the command if it's still running when
100
+ a file system change happens. Can be used to restart locally running web servers
101
+ on updates, or kill long running tests and restart on updates. This option
102
+ often makes Filewatcher faster in general. To not wait for tests to finish:
103
+
104
+ ```sh
105
+ $ filewatcher --restart "**/*.rb" "rake test"
106
+ ```
107
+
108
+ By default, it sends `TERM` signal, but you can change it to what you want
109
+ via `--restart-signal` option:
110
+
111
+ ```sh
112
+ $ filewatcher --restart --restart-signal=KILL "**/*.rb" "rake test"
113
+ ```
114
+
115
+ The `--immediate/-I` option starts the command on startup without waiting for file system updates. To start a web server and have it automatically restart when HTML files are updated:
116
+
117
+ ```sh
118
+ $ filewatcher --restart --immediate "**/*.html" "python -m SimpleHTTPServer"
119
+ ```
120
+
121
+ ### Daemonizing Filewatcher process
122
+
123
+ The `--daemon/-D` option starts Filewatcher in the background as system daemon, so Filewatcher will not be terminated by `Ctrl+C`, for example.
124
+
125
+ ### Available environment variables
126
+
127
+ The environment variable `$FILENAME` is available in the shell command argument.
128
+ On UNIX like systems the command has to be enclosed in single quotes. To run
129
+ node whenever a JavaScript file is updated:
130
+
131
+ ```sh
132
+ $ filewatcher *.js 'node $FILENAME'
133
+ ```
134
+
135
+ Environment variables available from the command string:
136
+
137
+ ```
138
+ BASENAME File basename.
139
+ FILENAME Relative filename.
140
+ ABSOLUTE_FILENAME Absolute filename.
141
+ RELATIVE_FILENAME Same as FILENAME but starts with "./"
142
+ EVENT Event type. Is either 'updated', 'deleted' or 'created'.
143
+ DIRNAME Absolute directory name.
144
+ ```
145
+
146
+ ### Enable plugins
147
+
148
+ When you use Filewatcher via CLI, you can enable plugins for it via `--plugins/-p` option:
149
+
150
+ ```sh
151
+ # Require `spinner` plugin and then enable a spinner via new option from this plugin
152
+ $ filewatcher -p spinner --spinner '**/*'
153
+ ```
154
+
155
+ ## Development
156
+
157
+ After checking out the repo, run `bundle install` to install dependencies.
158
+
159
+ Then, run `toys rspec` to run the tests.
160
+
161
+ To install this gem onto your local machine, run `toys gem install`.
162
+
163
+ To release a new version, run `toys gem release %version%`.
164
+ See how it works [here](https://github.com/AlexWayfer/gem_toys#release).
165
+
166
+ ## Contributing
167
+
168
+ Bug reports and pull requests are welcome on [GitHub](https://github.com/filewatcher/filewatcher-cli).
169
+
170
+ ## License
171
+
172
+ The gem is available as open source under the terms of the
173
+ [MIT License](https://opensource.org/licenses/MIT).
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require_relative '../lib/filewatcher/cli/command'
5
+
6
+ Filewatcher::CLI::Command.run
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'filewatcher'
4
+
5
+ require_relative 'cli/constants'
@@ -0,0 +1,116 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'filewatcher'
4
+
5
+ require_relative 'env'
6
+ require_relative 'runner'
7
+ require_relative 'constants'
8
+
9
+ require 'clamp'
10
+
11
+ class Filewatcher
12
+ module CLI
13
+ ## Class for CLI command
14
+ class Command < Clamp::Command
15
+ banner <<~TEXT
16
+ Filewatcher scans the file system and executes shell commands when files changes.
17
+ TEXT
18
+
19
+ require_relative 'command/options'
20
+
21
+ parameter 'FILES', 'file names to scan'
22
+
23
+ parameter '[COMMAND]', 'shell command to execute when file changes'
24
+
25
+ def execute
26
+ @child_pid = nil
27
+
28
+ initialize_filewatcher
29
+
30
+ print_if_list
31
+
32
+ Process.daemon(true, true) if daemon?
33
+
34
+ watch
35
+ rescue SystemExit, Interrupt
36
+ @filewatcher.finalize
37
+ end
38
+
39
+ private
40
+
41
+ def initialize_filewatcher
42
+ @filewatcher = Filewatcher.new(
43
+ files,
44
+ ## https://github.com/mdub/clamp/issues/105
45
+ self.class.declared_options.map do |option|
46
+ [option.attribute_name.to_sym, public_send(option.read_method)]
47
+ end.to_h
48
+ )
49
+ end
50
+
51
+ def split_files_void_escaped_whitespace(files)
52
+ files
53
+ .map { |name| name.gsub(/\\\s/, '_ESCAPED_WHITESPACE_').split(/\s/) }
54
+ .flatten
55
+ .uniq
56
+ .map { |name| name.gsub('_ESCAPED_WHITESPACE_', '\ ') }
57
+ end
58
+
59
+ def watch
60
+ @filewatcher.watch do |changes|
61
+ changes = every? ? changes : changes.first(1)
62
+
63
+ changes.each do |filename, event|
64
+ command = command_for_file filename
65
+
66
+ next puts "file #{event}: #{filename}" unless command
67
+
68
+ @child_pid = execute_command filename, event, command
69
+ end
70
+ end
71
+ end
72
+
73
+ def print_if_list
74
+ return unless list?
75
+
76
+ puts 'Watching:'
77
+ @filewatcher.found_filenames.each { |filename| puts " #{filename}" }
78
+ end
79
+
80
+ def execute_command(filename, event, command)
81
+ env = Filewatcher::CLI::Env.new(filename, event).to_h
82
+ if restart?
83
+ restart(@child_pid, restart_signal, env, command)
84
+ else
85
+ spawn env, command
86
+ nil
87
+ end
88
+ end
89
+
90
+ def command_for_file(filename)
91
+ if exec? && File.exist?(filename) then Filewatcher::CLI::Runner.new(filename).command
92
+ elsif command then command
93
+ end
94
+ end
95
+
96
+ def restart(pid, restart_signal, env, command)
97
+ begin
98
+ raise Errno::ESRCH unless pid
99
+
100
+ Process.kill(restart_signal, pid)
101
+ Process.wait(pid)
102
+ rescue Errno::ESRCH
103
+ nil # already killed
104
+ end
105
+ Process.spawn(env, command)
106
+ end
107
+
108
+ def spawn(env, command)
109
+ Process.spawn(env, command)
110
+ Process.wait
111
+ rescue SystemExit, Interrupt
112
+ exit(0)
113
+ end
114
+ end
115
+ end
116
+ end
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Filewatcher
4
+ module CLI
5
+ ## Options for CLI command
6
+ class Command < Clamp::Command
7
+ option %w[-I --immediate], :flag, 'immediately execute a command',
8
+ default: false
9
+
10
+ option %w[-E --every --each], :flag,
11
+ 'run command for every updated file in one file system check',
12
+ default: false
13
+
14
+ option %w[-D --daemon --background], :flag, 'run in the background as system daemon',
15
+ default: false
16
+
17
+ option %w[-r --restart --fork], :flag, 'restart process when file system is updated',
18
+ default: false
19
+
20
+ option '--restart-signal', 'VALUE', 'termination signal for `restart` option',
21
+ default: 'TERM'
22
+
23
+ option %w[-l --list], :flag, 'print name of files being watched',
24
+ default: false
25
+
26
+ option %w[-e --exec --execute], :flag, 'execute file as a script when file is updated',
27
+ default: false
28
+
29
+ option '--include', 'GLOB', 'include files',
30
+ default: File.join('**', '*')
31
+
32
+ option '--exclude', 'GLOB', 'exclude file(s) matching', default: nil do |string|
33
+ split_files_void_escaped_whitespace string.split(' ') unless string.to_s.empty?
34
+ end
35
+
36
+ option %w[-i --interval], 'SECONDS', 'interval to scan file system', default: 0.5 do |string|
37
+ Float(string)
38
+ end
39
+
40
+ option %w[-p --plugins], 'LIST', 'list of comma-separated required plugins',
41
+ default: [] do |string|
42
+ string.split(',').each { |plugin| require "filewatcher/#{plugin}" }
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Filewatcher
4
+ module CLI
5
+ BINDIR = 'exe'
6
+
7
+ VERSION = '1.0.0.beta1'
8
+ end
9
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'pathname'
4
+
5
+ class Filewatcher
6
+ module CLI
7
+ # Class for building ENV variables for executable
8
+ class Env
9
+ def initialize(filename, event)
10
+ @filename = filename
11
+ @event = event
12
+ @path = Pathname.new(@filename)
13
+ @realpath = @path.exist? ? @path.realpath : @path
14
+ @current_dir = Pathname.new(Dir.pwd)
15
+ # For safely `immediate` option with empty-strings arguments
16
+ @relative_path =
17
+ (@realpath.to_s.empty? ? @current_dir : @realpath)
18
+ .relative_path_from(@current_dir)
19
+ end
20
+
21
+ def to_h
22
+ {
23
+ 'FILEPATH' => (@realpath.to_s if @event != :deleted),
24
+ 'FILENAME' => @filename,
25
+ 'BASENAME' => @path.basename.to_s,
26
+ 'EVENT' => @event.to_s,
27
+ 'DIRNAME' => @path.parent.realpath.to_s,
28
+ 'ABSOLUTE_FILENAME' => @realpath.to_s,
29
+ 'RELATIVE_FILENAME' => @relative_path.to_s
30
+ }
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Filewatcher
4
+ module CLI
5
+ ## Get runner command by filename
6
+ class Runner
7
+ ## Define runners for `--exec` option
8
+ RUNNERS = {
9
+ python: %w[py],
10
+ node: %w[js],
11
+ ruby: %w[rb],
12
+ perl: %w[pl],
13
+ awk: %w[awk],
14
+ php: %w[php phtml php4 php3 php5 phps]
15
+ }.freeze
16
+
17
+ def initialize(filename)
18
+ @filename = filename
19
+ @ext = File.extname(filename).delete('.')
20
+ end
21
+
22
+ def command
23
+ "env #{runner} #{@filename}" if runner
24
+ end
25
+
26
+ private
27
+
28
+ def runner
29
+ return @runner if defined? @runner
30
+
31
+ @runner, _exts = RUNNERS.find { |_cmd, exts| exts.include? @ext }
32
+ @runner
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'filewatcher/spec_helper'
4
+
5
+ class Filewatcher
6
+ module CLI
7
+ ## Helper for CLI specs
8
+ module SpecHelper
9
+ include Filewatcher::SpecHelper
10
+
11
+ def environment_specs_coefficients
12
+ super.merge(
13
+ ## https://cirrus-ci.com/build/6442339705028608
14
+ lambda do
15
+ RUBY_PLATFORM == 'java' && ENV['CI'] && is_a?(Filewatcher::Spec::ShellWatchRun)
16
+ end => 2
17
+ )
18
+ end
19
+
20
+ ## https://github.com/rubocop-hq/ruby-style-guide/issues/556#issuecomment-691274359
21
+ # rubocop:disable Style/ModuleFunction
22
+ extend self
23
+ # rubocop:enable Style/ModuleFunction
24
+ end
25
+ end
26
+ end
metadata ADDED
@@ -0,0 +1,230 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: filewatcher-cli
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0.beta1
5
+ platform: ruby
6
+ authors:
7
+ - Thomas Flemming
8
+ - Alexander Popov
9
+ autorequire:
10
+ bindir: exe
11
+ cert_chain: []
12
+ date: 2020-09-18 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: clamp
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '1.3'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: '1.3'
28
+ - !ruby/object:Gem::Dependency
29
+ name: filewatcher
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: 2.0.0.beta1
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: 2.0.0.beta1
42
+ - !ruby/object:Gem::Dependency
43
+ name: pry-byebug
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: '3.9'
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: '3.9'
56
+ - !ruby/object:Gem::Dependency
57
+ name: bundler
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: '2.0'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '2.0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: gem_toys
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - "~>"
75
+ - !ruby/object:Gem::Version
76
+ version: 0.3.0
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - "~>"
82
+ - !ruby/object:Gem::Version
83
+ version: 0.3.0
84
+ - !ruby/object:Gem::Dependency
85
+ name: toys
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - "~>"
89
+ - !ruby/object:Gem::Version
90
+ version: 0.11.0
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - "~>"
96
+ - !ruby/object:Gem::Version
97
+ version: 0.11.0
98
+ - !ruby/object:Gem::Dependency
99
+ name: codecov
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - "~>"
103
+ - !ruby/object:Gem::Version
104
+ version: 0.2.1
105
+ type: :development
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - "~>"
110
+ - !ruby/object:Gem::Version
111
+ version: 0.2.1
112
+ - !ruby/object:Gem::Dependency
113
+ name: rspec
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - "~>"
117
+ - !ruby/object:Gem::Version
118
+ version: '3.9'
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - "~>"
124
+ - !ruby/object:Gem::Version
125
+ version: '3.9'
126
+ - !ruby/object:Gem::Dependency
127
+ name: simplecov
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - "~>"
131
+ - !ruby/object:Gem::Version
132
+ version: 0.18.0
133
+ type: :development
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - "~>"
138
+ - !ruby/object:Gem::Version
139
+ version: 0.18.0
140
+ - !ruby/object:Gem::Dependency
141
+ name: rubocop
142
+ requirement: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - "~>"
145
+ - !ruby/object:Gem::Version
146
+ version: 0.89.0
147
+ type: :development
148
+ prerelease: false
149
+ version_requirements: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - "~>"
152
+ - !ruby/object:Gem::Version
153
+ version: 0.89.0
154
+ - !ruby/object:Gem::Dependency
155
+ name: rubocop-performance
156
+ requirement: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - "~>"
159
+ - !ruby/object:Gem::Version
160
+ version: '1.0'
161
+ type: :development
162
+ prerelease: false
163
+ version_requirements: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - "~>"
166
+ - !ruby/object:Gem::Version
167
+ version: '1.0'
168
+ - !ruby/object:Gem::Dependency
169
+ name: rubocop-rspec
170
+ requirement: !ruby/object:Gem::Requirement
171
+ requirements:
172
+ - - "~>"
173
+ - !ruby/object:Gem::Version
174
+ version: '1.43'
175
+ type: :development
176
+ prerelease: false
177
+ version_requirements: !ruby/object:Gem::Requirement
178
+ requirements:
179
+ - - "~>"
180
+ - !ruby/object:Gem::Version
181
+ version: '1.43'
182
+ description: 'CLI for Filewatcher.
183
+
184
+ '
185
+ email:
186
+ - thomas.flemming@gmail.com
187
+ - alex.wayfer@gmail.com
188
+ executables:
189
+ - filewatcher
190
+ extensions: []
191
+ extra_rdoc_files: []
192
+ files:
193
+ - CHANGELOG.md
194
+ - LICENSE.txt
195
+ - README.md
196
+ - exe/filewatcher
197
+ - lib/filewatcher/cli.rb
198
+ - lib/filewatcher/cli/command.rb
199
+ - lib/filewatcher/cli/command/options.rb
200
+ - lib/filewatcher/cli/constants.rb
201
+ - lib/filewatcher/cli/env.rb
202
+ - lib/filewatcher/cli/runner.rb
203
+ - lib/filewatcher/cli/spec_helper.rb
204
+ homepage: https://github.com/filewatcher/filewatcher-cli
205
+ licenses:
206
+ - MIT
207
+ metadata:
208
+ source_code_uri: https://github.com/filewatcher/filewatcher-cli
209
+ homepage_uri: https://github.com/filewatcher/filewatcher-cli
210
+ changelog_uri: https://github.com/filewatcher/filewatcher-cli/blob/master/CHANGELOG.md
211
+ post_install_message:
212
+ rdoc_options: []
213
+ require_paths:
214
+ - lib
215
+ required_ruby_version: !ruby/object:Gem::Requirement
216
+ requirements:
217
+ - - ">="
218
+ - !ruby/object:Gem::Version
219
+ version: '2.4'
220
+ required_rubygems_version: !ruby/object:Gem::Requirement
221
+ requirements:
222
+ - - ">"
223
+ - !ruby/object:Gem::Version
224
+ version: 1.3.1
225
+ requirements: []
226
+ rubygems_version: 3.1.2
227
+ signing_key:
228
+ specification_version: 4
229
+ summary: CLI for Filewatcher
230
+ test_files: []