ferrets_on_fire 0.0.1
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/README.md +73 -0
- data/lib/_.rb +14 -0
- data/lib/ferrets_on_fire/argument.rb +9 -0
- data/lib/ferrets_on_fire/command.rb +25 -0
- data/lib/ferrets_on_fire/dsl/declaration.rb +44 -0
- data/lib/ferrets_on_fire/dsl/git.rb +25 -0
- data/lib/ferrets_on_fire/dsl/logger.rb +117 -0
- data/lib/ferrets_on_fire/dsl/shell.rb +60 -0
- data/lib/ferrets_on_fire/dsl.rb +15 -0
- data/lib/ferrets_on_fire/gli_wrapper.rb +51 -0
- data/lib/ferrets_on_fire/option.rb +11 -0
- data/lib/ferrets_on_fire/switch.rb +10 -0
- data/lib/ferrets_on_fire/version.rb +3 -0
- data/lib/ferrets_on_fire.rb +15 -0
- metadata +115 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: e10279082200ad3c59578490354c5583b2d55053
|
4
|
+
data.tar.gz: e4270068759afb2b7d642330f99e72dfab844d8d
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: af775ab186a031447f7cba5e7ef4c488027c763387f825d0ada33380efbf88487fdcd1303dd4fda9b0a805396a5150cfe582e035d1de40dd6102ce17c8fb1cba
|
7
|
+
data.tar.gz: f827d326ee118b2743fcb4c185828df2481b7ae13712a9cc2f4e69f542317975069cf658320eb6b6c924a174b1b161ee83931a25b4a1bea31c64112b2551a5de
|
data/README.md
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
# Ferrets on Fire
|
2
|
+
|
3
|
+
Supercharge your CLI tools. This opinionated, burning gem helps you to write powerful CLI tools of all sizes without
|
4
|
+
caring about the clutter!
|
5
|
+
|
6
|
+
**WARNING: This project is work in progress, use with care.**
|
7
|
+
|
8
|
+
|
9
|
+
## Features
|
10
|
+
|
11
|
+
- Super simple and lightweight DSL.
|
12
|
+
- Beautiful output (especially on OSX).
|
13
|
+
- Builtin tasks for git, bundler, ...
|
14
|
+
- Framework for system calls: Logging, benchmarking, error handling and more.
|
15
|
+
- Support CLI switches, options, arguments and commands.
|
16
|
+
- Supports Logging, colors, progress bars, questions and much more.
|
17
|
+
- Builtin IoC container.
|
18
|
+
- Ferrets.
|
19
|
+
|
20
|
+
## TODO
|
21
|
+
|
22
|
+
- Command API
|
23
|
+
- Code formatting, refactoring, documentation
|
24
|
+
- Project, usage & API documentation
|
25
|
+
- Progress bars
|
26
|
+
- Highline
|
27
|
+
- DSL for IoC container
|
28
|
+
- RSpecs
|
29
|
+
- CI build
|
30
|
+
|
31
|
+
|
32
|
+
## Installation
|
33
|
+
|
34
|
+
```bash
|
35
|
+
$ gem install ferrets_on_fire
|
36
|
+
```
|
37
|
+
|
38
|
+
or via `Gemfile`:
|
39
|
+
|
40
|
+
```ruby
|
41
|
+
gem 'ferrets_on_fire'
|
42
|
+
```
|
43
|
+
|
44
|
+
(Don't forget to run `bundle install`)
|
45
|
+
|
46
|
+
|
47
|
+
## Usage
|
48
|
+
|
49
|
+
Loading the Ferrets on Fire framework is made for lazy developers (like me) and requires nearly no code:
|
50
|
+
|
51
|
+
```ruby
|
52
|
+
require '_'
|
53
|
+
```
|
54
|
+
|
55
|
+
This is it. No verbose filenames. No `include`s. No setup.
|
56
|
+
|
57
|
+
After that you can already you the fancy ferret DSL:
|
58
|
+
|
59
|
+
```ruby
|
60
|
+
require '_'
|
61
|
+
|
62
|
+
# Some output
|
63
|
+
info 'Running the test suit!'
|
64
|
+
|
65
|
+
# Run `bundle exec rspec spec/`
|
66
|
+
run 'rspec spec/', bundler: true
|
67
|
+
```
|
68
|
+
|
69
|
+
|
70
|
+
|
71
|
+
## Open Source
|
72
|
+
|
73
|
+
MIT Licence. Feel free to contribute.
|
data/lib/_.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
# Enable `require '_'`
|
2
|
+
|
3
|
+
require 'ferrets_on_fire'
|
4
|
+
require 'ferrets_on_fire/option'
|
5
|
+
require 'ferrets_on_fire/switch'
|
6
|
+
require 'ferrets_on_fire/argument'
|
7
|
+
require 'ferrets_on_fire/command'
|
8
|
+
require 'ferrets_on_fire/gli_wrapper'
|
9
|
+
|
10
|
+
module FoF
|
11
|
+
include FerretsOnFire
|
12
|
+
end
|
13
|
+
|
14
|
+
include FoF
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'ferrets_on_fire/dsl'
|
2
|
+
|
3
|
+
class FerretsOnFire::Command
|
4
|
+
attr_reader :name, :desc, :default, :action_block
|
5
|
+
attr_accessor :global_options, :options, :args
|
6
|
+
|
7
|
+
include FerretsOnFire::DSL
|
8
|
+
|
9
|
+
public def initialize(name, desc, default, &block)
|
10
|
+
@name = name.to_sym
|
11
|
+
@desc = desc
|
12
|
+
@default = default
|
13
|
+
|
14
|
+
define_singleton_method(:dispatch, block)
|
15
|
+
dispatch
|
16
|
+
end
|
17
|
+
|
18
|
+
public def action(&block)
|
19
|
+
@action_block = block
|
20
|
+
end
|
21
|
+
|
22
|
+
public def run
|
23
|
+
yield @block
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module FerretsOnFire::DSL::Declaration
|
2
|
+
public def bundle(dir: nil)
|
3
|
+
# Set bundler parallel jobs count
|
4
|
+
if run('sysctl -n hw.ncpu', quiet: true, return_exit_code: true).zero?
|
5
|
+
number_of_cores = run('sysctl -n hw.ncpu', quiet: true).strip.to_i - 1
|
6
|
+
run("bundle config --global jobs #{number_of_cores}", quiet: true)
|
7
|
+
end
|
8
|
+
|
9
|
+
run 'bundle', dir: dir, as: 'bundler'
|
10
|
+
end
|
11
|
+
|
12
|
+
|
13
|
+
public def description(desc)
|
14
|
+
@desc = desc
|
15
|
+
end
|
16
|
+
alias_method :desc, :description
|
17
|
+
|
18
|
+
|
19
|
+
public def option(name, short, param_name: 'PARAM', default: nil, desc: '')
|
20
|
+
@options ||= []
|
21
|
+
@options << Option.new(name, param_name, short, default, desc)
|
22
|
+
end
|
23
|
+
alias_method :opt, :option
|
24
|
+
|
25
|
+
|
26
|
+
public def switch(name, short, default: false, desc: '')
|
27
|
+
@switches ||= []
|
28
|
+
@switches << Switch.new(name, short, default, desc)
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
public def argument(name, desc: '', default: nil)
|
33
|
+
@arguments ||= []
|
34
|
+
@arguments << Argument.new(name, desc, default)
|
35
|
+
end
|
36
|
+
alias_method :arg, :argument
|
37
|
+
|
38
|
+
|
39
|
+
public def command(name, desc: '', default: false, &block)
|
40
|
+
@commands ||= []
|
41
|
+
@commands << Command.new(name, desc, default, &block)
|
42
|
+
end
|
43
|
+
alias_method :cmd, :command
|
44
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module FerretsOnFire::DSL::Git
|
2
|
+
# Updates the git repository in the current directory and runs bin/update
|
3
|
+
# @param [String] path The directory to use, default is the current one
|
4
|
+
public def update_repo(path: nil, desired_branch: nil)
|
5
|
+
run 'git pull -r --autostash', dir: path, as: 'git pull'
|
6
|
+
|
7
|
+
# get current branch name
|
8
|
+
if desired_branch
|
9
|
+
current_branch = run('git branch | grep \*', dir: path, quiet: true).sub('*', '').strip
|
10
|
+
|
11
|
+
unless current_branch == desired_branch
|
12
|
+
warn "WARNING: Current branch is not #{desired_branch} (it's #{current_branch})"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
run('bin/update', dir: path, as: 'bin/update', bundler: true) if File.exists?('bin/update')
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
public def clone_repo(remote, target: '', desired_branch: 'develop')
|
21
|
+
run "git clone #{remote} #{target}", as: 'clone'
|
22
|
+
run "git checkout #{desired_branch}", as: "checkout #{desired_branch}", dir: target
|
23
|
+
run('bin/setup', dir: target, as: 'bin/setup', bundler: true) if File.exists?('bin/setup')
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,117 @@
|
|
1
|
+
require 'colorize'
|
2
|
+
require 'benchmark'
|
3
|
+
|
4
|
+
module FerretsOnFire::DSL::Logger
|
5
|
+
COLORS = {
|
6
|
+
info: :white,
|
7
|
+
warn: :yellow,
|
8
|
+
error: :red,
|
9
|
+
success: :green,
|
10
|
+
question: :magenta,
|
11
|
+
action: :light_blue
|
12
|
+
}.freeze
|
13
|
+
|
14
|
+
FANCY_PREFIXES = {
|
15
|
+
info: 'ℹ️️ ',
|
16
|
+
warn: '⚠️ ',
|
17
|
+
error: '‼️️ ',
|
18
|
+
success: '✨ ',
|
19
|
+
question: '❓ ',
|
20
|
+
action: '⚙️ '
|
21
|
+
}.freeze
|
22
|
+
|
23
|
+
DEFAULT_PREFIXES = {
|
24
|
+
info: '[i]',
|
25
|
+
warn: '[!]',
|
26
|
+
error: '[X]',
|
27
|
+
success: '[✔]',
|
28
|
+
question: '[?]',
|
29
|
+
action: '[$]'
|
30
|
+
}.freeze
|
31
|
+
|
32
|
+
SUFFIXES = {
|
33
|
+
info: '',
|
34
|
+
warn: '',
|
35
|
+
error: '',
|
36
|
+
success: '',
|
37
|
+
question: ' >',
|
38
|
+
action: ''
|
39
|
+
}.freeze
|
40
|
+
|
41
|
+
# Outputs a info message
|
42
|
+
# @param [String] msg The message
|
43
|
+
public def info(msg)
|
44
|
+
puts log(msg, :info)
|
45
|
+
end
|
46
|
+
|
47
|
+
# Outputs a warning message
|
48
|
+
# @param [String] msg The message
|
49
|
+
public def warn(msg)
|
50
|
+
puts log(msg, :warn)
|
51
|
+
end
|
52
|
+
|
53
|
+
|
54
|
+
# Outputs a error message
|
55
|
+
# @param [String] msg The message
|
56
|
+
public def error(msg)
|
57
|
+
puts log(msg, :error)
|
58
|
+
end
|
59
|
+
|
60
|
+
|
61
|
+
|
62
|
+
# Outputs a success message
|
63
|
+
# @param [String] msg The message
|
64
|
+
public def success(msg)
|
65
|
+
puts log(msg, :success)
|
66
|
+
end
|
67
|
+
|
68
|
+
|
69
|
+
# Generates a question with the specified msg. If output is true (default) it will be printed.
|
70
|
+
# @param [String] msg The message
|
71
|
+
# @param [Boolean] output (Optional, default is true). Print the question?
|
72
|
+
# @return [String] The question
|
73
|
+
public def question(msg, output = true)
|
74
|
+
puts log(msg, :question) if output
|
75
|
+
end
|
76
|
+
|
77
|
+
|
78
|
+
public def linebreak
|
79
|
+
puts
|
80
|
+
end
|
81
|
+
|
82
|
+
|
83
|
+
public def crash(msg, output, command: nil, exit_on_failure: true)
|
84
|
+
error msg
|
85
|
+
puts
|
86
|
+
puts ' ============='
|
87
|
+
puts "COMMAND: #{command}" unless command.nil?
|
88
|
+
puts output
|
89
|
+
puts ' ============='
|
90
|
+
puts
|
91
|
+
exit 1 if exit_on_failure
|
92
|
+
end
|
93
|
+
|
94
|
+
# Logs that an action will happen. You have to call action_end after that
|
95
|
+
# @param [String] msg Message to display
|
96
|
+
public def action(msg, &block)
|
97
|
+
print log(msg, :action, ' ... ')
|
98
|
+
cmd_output = ''
|
99
|
+
bm = ::Benchmark.measure { cmd_output = yield }
|
100
|
+
time = '%.2f' % bm.real.round(2)
|
101
|
+
info = "#{time.rjust(6)}s"
|
102
|
+
puts "\r#{log(msg, :success, info)}"
|
103
|
+
|
104
|
+
[cmd_output, $?.to_i]
|
105
|
+
end
|
106
|
+
|
107
|
+
|
108
|
+
private def log(msg, type, info = '')
|
109
|
+
prefix = (RUBY_PLATFORM.include?('darwin') && $stdout.tty? ? FANCY_PREFIXES : DEFAULT_PREFIXES)[type]
|
110
|
+
suffix = SUFFIXES[type]
|
111
|
+
color = COLORS[type]
|
112
|
+
|
113
|
+
info = info.empty? ? '' : "[#{info}] "
|
114
|
+
|
115
|
+
"#{prefix} #{info}#{msg}#{suffix}".send(color)
|
116
|
+
end
|
117
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module FerretsOnFire::DSL::Shell
|
2
|
+
# Runs a shell command. Stderr is redirected to Stdout
|
3
|
+
# @param [String] cmd Command to run
|
4
|
+
# @param [String] dir Directory to run the command in
|
5
|
+
# @param [Boolean] exit_on_failure Optional (default: true). If true, the script will exited if the command fails
|
6
|
+
# @param [Boolean] quiet Optional (default: true). If true, the command is not printed
|
7
|
+
# @param [Boolean] return_exit_code Optional (default: false). If true, the exit code is returned instead of
|
8
|
+
# the output
|
9
|
+
# @param [String] as Optional. Label for the action output (instead of the command)
|
10
|
+
# @param [Boolean] bundler Optional. Run with `bundle exec`?
|
11
|
+
# @param [Symbol] rails_env Optional. Set RAILS_ENV.
|
12
|
+
# @return [String] Stdout or exit code
|
13
|
+
public def run(cmd, dir: nil, exit_on_failure: true, quiet: false, return_exit_code: false, as: nil, bundler: false,
|
14
|
+
rails_env: nil)
|
15
|
+
|
16
|
+
# Build complete command
|
17
|
+
cmd = build_command(cmd, dir, rails_env, bundler)
|
18
|
+
|
19
|
+
# Run the command and print the output if wished
|
20
|
+
output, status = exec(cmd, quiet, as)
|
21
|
+
|
22
|
+
# Error handling
|
23
|
+
if status.nonzero? && return_exit_code == false
|
24
|
+
crash "COMMAND EXITED WITH #{status}!", output, command: cmd, exit_on_failure: exit_on_failure
|
25
|
+
end
|
26
|
+
|
27
|
+
return_exit_code ? status : output
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
# Executes a shell command in the specified dir. Includes benchmarking and debug output.
|
32
|
+
# @param [String] cmd Command to run
|
33
|
+
# @param [String] quiet Optional. Suppress output
|
34
|
+
# @param [String] label Optional. Label
|
35
|
+
# @return [Array] 0 => output, 1 => exit code
|
36
|
+
private def exec(cmd, quiet = false, label = nil)
|
37
|
+
label ||= cmd
|
38
|
+
|
39
|
+
# Run the command
|
40
|
+
if quiet
|
41
|
+
cmd_output = `#{cmd} 2>&1`
|
42
|
+
status = $?.to_i
|
43
|
+
else
|
44
|
+
cmd_output, status = action(label) { `#{cmd} 2>&1` }
|
45
|
+
end
|
46
|
+
|
47
|
+
# Return exit code and output
|
48
|
+
[cmd_output, status]
|
49
|
+
end
|
50
|
+
|
51
|
+
|
52
|
+
def build_command(cmd, dir, rails_env, bundler)
|
53
|
+
result = ''
|
54
|
+
result += "cd #{dir} && " unless dir.nil?
|
55
|
+
result += "RAILS_ENV=#{rails_env} " unless rails_env.nil?
|
56
|
+
result += 'bundle exec ' if bundler
|
57
|
+
|
58
|
+
result + cmd
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module FerretsOnFire::DSL
|
2
|
+
require 'ferrets_on_fire/dsl/declaration'
|
3
|
+
require 'ferrets_on_fire/dsl/shell'
|
4
|
+
require 'ferrets_on_fire/dsl/logger'
|
5
|
+
require 'ferrets_on_fire/dsl/git'
|
6
|
+
|
7
|
+
include FerretsOnFire::DSL::Declaration
|
8
|
+
include FerretsOnFire::DSL::Shell
|
9
|
+
include FerretsOnFire::DSL::Logger
|
10
|
+
include FerretsOnFire::DSL::Git
|
11
|
+
|
12
|
+
public def get(name)
|
13
|
+
@options[name.to_sym] || @global_options[name.to_sym]
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'gli'
|
2
|
+
|
3
|
+
class FerretsOnFire::GliWrapper
|
4
|
+
include GLI::App
|
5
|
+
|
6
|
+
public def initialize(desc, commands, options, switches, arguments)
|
7
|
+
@_desc = desc
|
8
|
+
@_commands = commands || []
|
9
|
+
@_options = options || []
|
10
|
+
@_switches = switches || []
|
11
|
+
@_arguments = arguments || []
|
12
|
+
|
13
|
+
_setup_basics
|
14
|
+
_setup_switches
|
15
|
+
_setup_options
|
16
|
+
_setup_commands
|
17
|
+
end
|
18
|
+
|
19
|
+
private def _setup_basics
|
20
|
+
program_desc @_desc
|
21
|
+
end
|
22
|
+
|
23
|
+
private def _setup_switches
|
24
|
+
@_switches.each do |s|
|
25
|
+
switch [s.short, s.name], default_value: s.default, desc: s.desc
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
private def _setup_options
|
30
|
+
@_options.each do |opt|
|
31
|
+
flag [opt.short, opt.name], arg_name: opt.param_name, default_value: opt.default,
|
32
|
+
desc: opt.desc, required: !opt.default.nil?
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
private def _setup_commands
|
37
|
+
@_commands.each do |cmd|
|
38
|
+
desc cmd.desc
|
39
|
+
command cmd.name do |api|
|
40
|
+
api.action do |global_options, options, args|
|
41
|
+
cmd.global_options = global_options
|
42
|
+
cmd.options = options
|
43
|
+
cmd.args = args
|
44
|
+
cmd.action_block.call
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
default_command(cmd.name) if cmd.default
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class FerretsOnFire::Option
|
2
|
+
attr_reader :name, :short, :param_name, :default, :desc
|
3
|
+
|
4
|
+
public def initialize(name, short, param_name, default, desc)
|
5
|
+
@name = name.to_sym
|
6
|
+
@short = short.to_sym
|
7
|
+
@param_name = param_name
|
8
|
+
@default = default
|
9
|
+
@desc = desc
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module FerretsOnFire
|
2
|
+
require 'ferrets_on_fire/dsl'
|
3
|
+
include FerretsOnFire::DSL
|
4
|
+
|
5
|
+
public def execute
|
6
|
+
@gli = setup_gli
|
7
|
+
@gli.run(ARGV)
|
8
|
+
exit
|
9
|
+
end
|
10
|
+
|
11
|
+
|
12
|
+
public def setup_gli
|
13
|
+
GliWrapper.new(@desc, @commands, @options, @switches, @arguments)
|
14
|
+
end
|
15
|
+
end
|
metadata
ADDED
@@ -0,0 +1,115 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ferrets_on_fire
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- phortx
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-02-24 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: micon
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.1'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0.1'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: highline
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.7'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.7'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: colorize
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0.8'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0.8'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: gli
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '2.15'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '2.15'
|
69
|
+
description: Supercharge your CLI tools. This gem helps you to write powerful CLI
|
70
|
+
tools without caring about the clutter
|
71
|
+
email:
|
72
|
+
- benny@itws.de
|
73
|
+
executables: []
|
74
|
+
extensions: []
|
75
|
+
extra_rdoc_files: []
|
76
|
+
files:
|
77
|
+
- README.md
|
78
|
+
- lib/_.rb
|
79
|
+
- lib/ferrets_on_fire.rb
|
80
|
+
- lib/ferrets_on_fire/argument.rb
|
81
|
+
- lib/ferrets_on_fire/command.rb
|
82
|
+
- lib/ferrets_on_fire/dsl.rb
|
83
|
+
- lib/ferrets_on_fire/dsl/declaration.rb
|
84
|
+
- lib/ferrets_on_fire/dsl/git.rb
|
85
|
+
- lib/ferrets_on_fire/dsl/logger.rb
|
86
|
+
- lib/ferrets_on_fire/dsl/shell.rb
|
87
|
+
- lib/ferrets_on_fire/gli_wrapper.rb
|
88
|
+
- lib/ferrets_on_fire/option.rb
|
89
|
+
- lib/ferrets_on_fire/switch.rb
|
90
|
+
- lib/ferrets_on_fire/version.rb
|
91
|
+
homepage: https://github.com/phortx/ferrets-on-fire
|
92
|
+
licenses:
|
93
|
+
- MIT
|
94
|
+
metadata: {}
|
95
|
+
post_install_message:
|
96
|
+
rdoc_options: []
|
97
|
+
require_paths:
|
98
|
+
- lib
|
99
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
105
|
+
requirements:
|
106
|
+
- - ">="
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
version: '0'
|
109
|
+
requirements: []
|
110
|
+
rubyforge_project:
|
111
|
+
rubygems_version: 2.6.10
|
112
|
+
signing_key:
|
113
|
+
specification_version: 4
|
114
|
+
summary: Supercharge your CLI
|
115
|
+
test_files: []
|