filewatcher-cli 1.0.0.beta1
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 +7 -0
- data/CHANGELOG.md +7 -0
- data/LICENSE.txt +21 -0
- data/README.md +173 -0
- data/exe/filewatcher +6 -0
- data/lib/filewatcher/cli.rb +5 -0
- data/lib/filewatcher/cli/command.rb +116 -0
- data/lib/filewatcher/cli/command/options.rb +46 -0
- data/lib/filewatcher/cli/constants.rb +9 -0
- data/lib/filewatcher/cli/env.rb +34 -0
- data/lib/filewatcher/cli/runner.rb +36 -0
- data/lib/filewatcher/cli/spec_helper.rb +26 -0
- metadata +230 -0
checksums.yaml
ADDED
@@ -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
|
data/CHANGELOG.md
ADDED
data/LICENSE.txt
ADDED
@@ -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.
|
data/README.md
ADDED
@@ -0,0 +1,173 @@
|
|
1
|
+
# Filewatcher CLI
|
2
|
+
|
3
|
+
[](https://cirrus-ci.com/github/filewatcher/filewatcher-cli)
|
4
|
+
[](https://codecov.io/gh/filewatcher/filewatcher-cli)
|
5
|
+
[](https://codeclimate.com/github/filewatcher/filewatcher-cli)
|
6
|
+
[](https://depfu.com/repos/github/filewatcher/filewatcher-cli)
|
7
|
+
[](https://inch-ci.org/github/filewatcher/filewatcher-cli)
|
8
|
+
[](LICENSE.txt)
|
9
|
+
[](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).
|
data/exe/filewatcher
ADDED
@@ -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,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: []
|