ali-cli 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/LICENSE.txt +26 -0
- data/README.md +67 -0
- data/exe/ali +5 -0
- data/lib/ali/arguments.rb +63 -0
- data/lib/ali/cli.rb +13 -0
- data/lib/ali/formatter.rb +47 -0
- data/lib/ali/option.rb +12 -0
- data/lib/ali/quotes.rb +49 -0
- data/lib/ali/registry.rb +43 -0
- data/lib/ali/task.rb +61 -0
- data/lib/ali/tasks/help.rb +10 -0
- data/lib/ali/tasks/version.rb +10 -0
- data/lib/ali/tasks.rb +4 -0
- data/lib/ali/template.rb +49 -0
- data/lib/ali/templates/help.liquid +14 -0
- data/lib/ali/templates/version.liquid +5 -0
- data/lib/ali/version.rb +5 -0
- data/lib/ali.rb +18 -0
- metadata +219 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: '094ee32de699f8ab31bfbb9c34ff42b40de0fe50ec8f75cf449a35f5faeb2cd9'
|
4
|
+
data.tar.gz: 7ba097d6fbe68081da2ed7015196a737daab083d5cb447624e53081ff56a3afa
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8a679c30c3ca9441e5dcbbfbd0cdc7399e03efa909077a6954cfc1cd1b02ba39e06a0feb9531726081d5f8fe94cba8958699dae5a9cf01e9ebbaf54fda69e410
|
7
|
+
data.tar.gz: 20c5d812134a25212f66db2d849327a6b0a657954ad9faf0a4639c3294489d65936d4285fb9c068a42925ba4ff6b89beaf45fadf1f0b838371a7bdca78ed251b
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
Copyright 2023 Nathan Hopkins, @hopsoft
|
2
|
+
|
3
|
+
Redistribution and use in source and binary forms, with or without modification,
|
4
|
+
are permitted provided that the following conditions are met:
|
5
|
+
|
6
|
+
1. Redistributions of source code must retain the above copyright notice, this
|
7
|
+
list of conditions and the following disclaimer.
|
8
|
+
|
9
|
+
2. Redistributions in binary form must reproduce the above copyright notice,
|
10
|
+
this list of conditions and the following disclaimer in the documentation and/or
|
11
|
+
other materials provided with the distribution.
|
12
|
+
|
13
|
+
3. Neither the name of the copyright holder nor the names of its contributors
|
14
|
+
may be used to endorse or promote products derived from this software without
|
15
|
+
specific prior written permission.
|
16
|
+
|
17
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
18
|
+
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
19
|
+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
20
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
21
|
+
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
22
|
+
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
23
|
+
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
24
|
+
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
25
|
+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
26
|
+
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
data/README.md
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
# Ali
|
2
|
+
|
3
|
+
> Float like a butterfly, sting like a bee. -Muhammad Ali
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
```bash
|
8
|
+
gem install ali
|
9
|
+
```
|
10
|
+
|
11
|
+
## Usage
|
12
|
+
|
13
|
+
## Development
|
14
|
+
|
15
|
+
### Setup
|
16
|
+
|
17
|
+
1. Clone the project
|
18
|
+
|
19
|
+
```sh
|
20
|
+
git clone git://github.com/hopsoft/ali.git
|
21
|
+
cd ali
|
22
|
+
```
|
23
|
+
|
24
|
+
1. Install dependencies and prepare environment for development
|
25
|
+
|
26
|
+
```bash
|
27
|
+
bin/dev/setup
|
28
|
+
|
29
|
+
# or...
|
30
|
+
asdf install ruby 2.7.8
|
31
|
+
asdf local ruby 2.7.8
|
32
|
+
gem install bundler -v 1.17.3
|
33
|
+
```
|
34
|
+
|
35
|
+
1. Install GEM dependencies
|
36
|
+
|
37
|
+
```bash
|
38
|
+
bin/dev/update
|
39
|
+
|
40
|
+
# or...
|
41
|
+
bundle _1.17.3_ update
|
42
|
+
```
|
43
|
+
|
44
|
+
1. Use the GEM and test your contribution
|
45
|
+
|
46
|
+
```bash
|
47
|
+
bundle exec ali --help
|
48
|
+
```
|
49
|
+
|
50
|
+
1. Standardize your code before creating a Pull Request
|
51
|
+
|
52
|
+
```bash
|
53
|
+
bin/dev/standardize
|
54
|
+
```
|
55
|
+
|
56
|
+
## Contributing
|
57
|
+
|
58
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/hopsoft/ali. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/hopsoft/ali/blob/master/CODE_OF_CONDUCT.md).
|
59
|
+
|
60
|
+
|
61
|
+
## Code of Conduct
|
62
|
+
|
63
|
+
Everyone interacting in the Ali project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/hopsoft/ali/blob/master/CODE_OF_CONDUCT.md).
|
64
|
+
|
65
|
+
## Copyright
|
66
|
+
|
67
|
+
Copyright (c) 2023 Nathan Hopkins, @hopsoft. See [BSD 3-Clause License (Revised)](LICENSE.txt) for further details.
|
data/exe/ali
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "optparse"
|
4
|
+
|
5
|
+
class Ali::Arguments
|
6
|
+
attr_reader :unparsed, :task_name, :task_moniker, :task, :options
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
@unparsed = ARGV.dup
|
10
|
+
@options = []
|
11
|
+
|
12
|
+
unparsed.dup.tap do |args|
|
13
|
+
parse_task args
|
14
|
+
parse_options args if task
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def parse_task_name_or_moniker(args)
|
21
|
+
args.first.start_with?("-") ?
|
22
|
+
@task_moniker = args.shift :
|
23
|
+
@task_name = args.shift
|
24
|
+
end
|
25
|
+
|
26
|
+
def parse_task(args)
|
27
|
+
parse_task_name_or_moniker args
|
28
|
+
@task = find_task&.new
|
29
|
+
end
|
30
|
+
|
31
|
+
def parse_options(args)
|
32
|
+
while args.any?
|
33
|
+
arg = args.shift
|
34
|
+
|
35
|
+
if arg.start_with?("-")
|
36
|
+
match = task.options.find { |o| o.flag == arg }
|
37
|
+
option = match&.dup
|
38
|
+
options << option if option
|
39
|
+
else
|
40
|
+
option = options.last || Ali::Option.new
|
41
|
+
option.values << arg
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
@options = Set.new(options).to_a
|
46
|
+
end
|
47
|
+
|
48
|
+
def find_task
|
49
|
+
Ali::Registry.instance.find { |key, task| task_match? key, task }&.last
|
50
|
+
end
|
51
|
+
|
52
|
+
def task_match?(key, task)
|
53
|
+
task_name_match?(key) || task_moniker_match?(task)
|
54
|
+
end
|
55
|
+
|
56
|
+
def task_name_match?(key)
|
57
|
+
task_name && key == task_name
|
58
|
+
end
|
59
|
+
|
60
|
+
def task_moniker_match?(task)
|
61
|
+
task_moniker && task.monikers.include?(task_moniker)
|
62
|
+
end
|
63
|
+
end
|
data/lib/ali/cli.rb
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "liquid"
|
4
|
+
require "rainbow"
|
5
|
+
|
6
|
+
class Ali::Formatter
|
7
|
+
COLORS = (Rainbow::Color::Named.color_names + Rainbow::Color::X11Named.color_names).uniq.sort.freeze
|
8
|
+
|
9
|
+
MODIFIERS = %i[
|
10
|
+
background
|
11
|
+
bg
|
12
|
+
blink
|
13
|
+
bold
|
14
|
+
bright
|
15
|
+
color
|
16
|
+
cross_out
|
17
|
+
dark
|
18
|
+
faint
|
19
|
+
italic
|
20
|
+
strike
|
21
|
+
underline
|
22
|
+
].freeze
|
23
|
+
|
24
|
+
STYLE_METHODS = (COLORS + MODIFIERS).uniq.sort.freeze
|
25
|
+
|
26
|
+
STYLE_METHODS.each do |name|
|
27
|
+
define_method name do |string|
|
28
|
+
string = Rainbow(string) unless string.is_a?(Rainbow::Presenter)
|
29
|
+
string.send name
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
module LiquidFilters
|
34
|
+
Ali::Formatter::STYLE_METHODS.each do |method|
|
35
|
+
define_method method do |input|
|
36
|
+
input = Rainbow(input) unless input.is_a?(Rainbow::Presenter)
|
37
|
+
input.public_send method
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def rjust(input, size = 0, string = " ")
|
42
|
+
input.to_s.rjust size, string
|
43
|
+
end
|
44
|
+
|
45
|
+
Liquid::Template.register_filter self
|
46
|
+
end
|
47
|
+
end
|
data/lib/ali/option.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class Ali::Option
|
4
|
+
attr_reader :name, :flag, :values
|
5
|
+
|
6
|
+
def initialize(name: nil, description: nil, flag: nil, values: [])
|
7
|
+
@name = name
|
8
|
+
@description = description
|
9
|
+
@flag = flag
|
10
|
+
@values = values || Set.new(values).to_a
|
11
|
+
end
|
12
|
+
end
|
data/lib/ali/quotes.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Ali
|
4
|
+
module Quotes
|
5
|
+
class << self
|
6
|
+
delegate :sample, :take, to: :list
|
7
|
+
|
8
|
+
def list
|
9
|
+
@list ||= [
|
10
|
+
"A [person] who views the world the same at 50 as he did at 20 has wasted 30 years.",
|
11
|
+
"Age is whatever you think it is.",
|
12
|
+
"Don't quit. Suffer now, and live the rest of your life as a champion.",
|
13
|
+
"Don’t count the days; make the days count.",
|
14
|
+
"Float like a butterfly, sting like a bee.",
|
15
|
+
"I am the greatest. I said that before I knew I was the greatest. I just grew into it.",
|
16
|
+
"I am the greatest.",
|
17
|
+
"I don’t have to be what you want me to be.",
|
18
|
+
"I shook up the world.",
|
19
|
+
"I should be a postage stamp. That's the only way I'll ever get licked.",
|
20
|
+
"I'm not the greatest, I'm the most.",
|
21
|
+
"I'm not the greatest; I'm the double greatest.",
|
22
|
+
"I'm young; I'm handsome; I'm fast. I can't possibly be beat.",
|
23
|
+
"If my mind can conceive it, and my heart can believe it—then I can achieve it.",
|
24
|
+
"If you only dream at night, you'll live in the shadows of life.",
|
25
|
+
"Impossible is nothing.",
|
26
|
+
"It ain't over till it's over.",
|
27
|
+
"It isn't the mountains ahead to climb that wear you out; it's the pebble in your shoe.",
|
28
|
+
"It's hard to be humble when you're as great as I am.",
|
29
|
+
"It's not bragging if you can back it up.",
|
30
|
+
"It’s not the size of a [person] but the size of [their] heart that matters.",
|
31
|
+
"Live everyday as if it were your last.",
|
32
|
+
"Me? Whew! I like me. I'm my own favorite...",
|
33
|
+
"My road may be rough, but it's still my road.",
|
34
|
+
"Only a [person] who knows defeat can reach down and come up with extra power to win.",
|
35
|
+
"Service to others is the rent you pay for your room here on earth.",
|
36
|
+
"Silence is golden when you can't think of a good answer.",
|
37
|
+
"The [person] who has no imagination has no wings.",
|
38
|
+
"The [person] who views the world at 50 the same as he did at 20 has wasted 30 years.",
|
39
|
+
"The champion ain't afraid of losing. Everyone's afraid of losing. But the champion's afraid of not even trying.",
|
40
|
+
"The fight is won or lost far away from witnesses.",
|
41
|
+
"The mind is everything. What you think you become.",
|
42
|
+
"To be a great champion you must believe you are the best.",
|
43
|
+
"What you're thinking is what you're becoming.",
|
44
|
+
"[The person] who is not courageous enough to take risks will accomplish nothing."
|
45
|
+
].freeze
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/lib/ali/registry.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "singleton"
|
4
|
+
require "monitor"
|
5
|
+
|
6
|
+
class Ali::Registry
|
7
|
+
include Enumerable
|
8
|
+
include MonitorMixin
|
9
|
+
include Singleton
|
10
|
+
|
11
|
+
class Error < StandardError; end
|
12
|
+
|
13
|
+
def register(task)
|
14
|
+
synchronize do
|
15
|
+
key = task.name(for: :registry)
|
16
|
+
raise Error, "Task #{key} already exists!" if dictionary.key?(key)
|
17
|
+
dictionary[key] = task
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def [](key)
|
22
|
+
scynchronize { dictionary[key.to_s] }
|
23
|
+
end
|
24
|
+
|
25
|
+
def each
|
26
|
+
synchronize do
|
27
|
+
dictionary.each { |key, task| yield key, task }
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def to_a
|
32
|
+
synchronize { dictionary.values }
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
attr_reader :dictionary
|
38
|
+
|
39
|
+
def initialize
|
40
|
+
super
|
41
|
+
@dictionary = {}
|
42
|
+
end
|
43
|
+
end
|
data/lib/ali/task.rb
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class Ali::Task
|
4
|
+
class << self
|
5
|
+
def inherited(subclass)
|
6
|
+
Ali::Registry.instance.register subclass
|
7
|
+
end
|
8
|
+
|
9
|
+
def name(options = {for: :class})
|
10
|
+
return super() if options[:for] == :class
|
11
|
+
super()
|
12
|
+
.then { |it| it.delete_prefix("Ali::Tasks::") }
|
13
|
+
.then { |it| it.split("::").map(&:parameterize).join(":") }
|
14
|
+
end
|
15
|
+
|
16
|
+
def description(value = nil)
|
17
|
+
return @description.to_s if value.nil?
|
18
|
+
@description = value
|
19
|
+
end
|
20
|
+
|
21
|
+
def monikers(*values)
|
22
|
+
return @monikers.to_a if values.none?
|
23
|
+
@monikers ||= Set.new(values.flatten.map(&:to_s))
|
24
|
+
end
|
25
|
+
|
26
|
+
def options(*values)
|
27
|
+
return @options.to_a if values.none?
|
28
|
+
@options ||= Set.new(values.flatten.select { |it| it.is_a?(Ali::Option) })
|
29
|
+
end
|
30
|
+
|
31
|
+
def inspect
|
32
|
+
value = <<~INSPECT
|
33
|
+
#<#{name}
|
34
|
+
name=#{name(for: :task).inspect}
|
35
|
+
monikers=#{monikers.inspect}
|
36
|
+
description=#{description.to_s.squish.inspect}
|
37
|
+
options=#{options.inspect}>
|
38
|
+
INSPECT
|
39
|
+
value.squish
|
40
|
+
end
|
41
|
+
|
42
|
+
def to_h
|
43
|
+
{
|
44
|
+
name: name(for: :task),
|
45
|
+
monikers: monikers,
|
46
|
+
description: description
|
47
|
+
# options: options
|
48
|
+
}.stringify_keys
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
attr_reader :template
|
53
|
+
|
54
|
+
def initialize
|
55
|
+
@template = Ali::Template.new(self)
|
56
|
+
end
|
57
|
+
|
58
|
+
def perform(*args)
|
59
|
+
raise NotImplementedError, "#perform must be implemented by subclass"
|
60
|
+
end
|
61
|
+
end
|
data/lib/ali/tasks.rb
ADDED
data/lib/ali/template.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "liquid"
|
4
|
+
require "rouge"
|
5
|
+
require "rouge/plugins/redcarpet"
|
6
|
+
|
7
|
+
class Ali::Template
|
8
|
+
attr_reader :task
|
9
|
+
|
10
|
+
def initialize(task)
|
11
|
+
@task = task
|
12
|
+
end
|
13
|
+
|
14
|
+
def source_location
|
15
|
+
task.method(:perform).source_location
|
16
|
+
end
|
17
|
+
|
18
|
+
def task_path
|
19
|
+
Pathname.new(source_location.first)
|
20
|
+
end
|
21
|
+
|
22
|
+
def liquid_path
|
23
|
+
path = File.join(task_path.dirname, "..", "templates", task_path.basename.sub_ext(".liquid"))
|
24
|
+
Pathname File.expand_path(path)
|
25
|
+
end
|
26
|
+
|
27
|
+
def liquid_template
|
28
|
+
return nil unless liquid_path.file?
|
29
|
+
Liquid::Template.parse File.read(liquid_path)
|
30
|
+
end
|
31
|
+
|
32
|
+
def render(liquid_template = self.liquid_template)
|
33
|
+
context = {
|
34
|
+
tasks: Ali::Registry.instance.to_a.map(&:to_h),
|
35
|
+
task: task,
|
36
|
+
quote: Ali::Quotes.sample,
|
37
|
+
version: Ali::VERSION
|
38
|
+
}
|
39
|
+
liquid_template&.render(context.stringify_keys)&.strip
|
40
|
+
end
|
41
|
+
|
42
|
+
def render_source
|
43
|
+
source = task.method(:perform).source
|
44
|
+
indent = source.scan(/\s+/).first&.size.to_i
|
45
|
+
formatter = Rouge::Formatters::Terminal256.new(theme: Rouge::Themes::Monokai.new)
|
46
|
+
lexer = Rouge::Lexers::Ruby.new
|
47
|
+
Rouge.highlight "\n#{"".ljust(indent, " ")}# #{task_path}:#{source_location.last}\n#{source}", lexer, formatter
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
{% assign count = 0 -%}
|
2
|
+
|
3
|
+
{{ quote | prepend: '"' | append: '"' | faint }} 🥊 {{ "Ali" | firebrick | bright }}
|
4
|
+
{% for task in tasks -%}
|
5
|
+
{% assign count = count | plus: 1 -%}
|
6
|
+
|
7
|
+
{% capture t -%}
|
8
|
+
{% assign num = count | rjust: 3, "0" | append: "." | faint -%}
|
9
|
+
{% assign call = "ali " | cyan | bright | append: task.name -%}
|
10
|
+
{{ num }} {{ call }} {{ "(" | faint }}{{ task.monikers | join: ", " }}{{ ")" | faint }}
|
11
|
+
{% endcapture -%}
|
12
|
+
|
13
|
+
{{ t | strip }} {{ task.description | darkcyan }}
|
14
|
+
{% endfor -%}
|
data/lib/ali/version.rb
ADDED
data/lib/ali.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "active_support/all"
|
4
|
+
require "zeitwerk"
|
5
|
+
require "pry-byebug" if ENV["DEBUG"]
|
6
|
+
|
7
|
+
module Ali
|
8
|
+
class << self
|
9
|
+
def root
|
10
|
+
Pathname.new File.expand_path(__dir__)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
loader = Zeitwerk::Loader.for_gem
|
16
|
+
loader.inflector.inflect("cli" => "CLI")
|
17
|
+
loader.setup
|
18
|
+
loader.eager_load
|
metadata
ADDED
@@ -0,0 +1,219 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ali-cli
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Nate Hopkins (@hopsoft)
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2023-12-18 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: liquid
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rouge
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rainbow
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rake
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: zeitwerk
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: magic_frozen_string_literal
|
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'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: minitest
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: minitest-reporters
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: pry-byebug
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: standardrb
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
167
|
+
description: CLI tool suite for the Etision LLC suite subsidiary companies
|
168
|
+
email:
|
169
|
+
- natehop@gmail.com
|
170
|
+
executables:
|
171
|
+
- ali
|
172
|
+
extensions: []
|
173
|
+
extra_rdoc_files: []
|
174
|
+
files:
|
175
|
+
- LICENSE.txt
|
176
|
+
- README.md
|
177
|
+
- exe/ali
|
178
|
+
- lib/ali.rb
|
179
|
+
- lib/ali/arguments.rb
|
180
|
+
- lib/ali/cli.rb
|
181
|
+
- lib/ali/formatter.rb
|
182
|
+
- lib/ali/option.rb
|
183
|
+
- lib/ali/quotes.rb
|
184
|
+
- lib/ali/registry.rb
|
185
|
+
- lib/ali/task.rb
|
186
|
+
- lib/ali/tasks.rb
|
187
|
+
- lib/ali/tasks/help.rb
|
188
|
+
- lib/ali/tasks/version.rb
|
189
|
+
- lib/ali/template.rb
|
190
|
+
- lib/ali/templates/help.liquid
|
191
|
+
- lib/ali/templates/version.liquid
|
192
|
+
- lib/ali/version.rb
|
193
|
+
homepage: https://github.com/hopsoft/ali
|
194
|
+
licenses:
|
195
|
+
- BSD-3-Clause
|
196
|
+
metadata:
|
197
|
+
homepage_uri: https://github.com/hopsoft/ali
|
198
|
+
source_code_uri: https://github.com/hopsoft/ali
|
199
|
+
changelog_uri: https://github.com/hopsoft/ali/CHANGELOG.md
|
200
|
+
post_install_message:
|
201
|
+
rdoc_options: []
|
202
|
+
require_paths:
|
203
|
+
- lib
|
204
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
205
|
+
requirements:
|
206
|
+
- - ">="
|
207
|
+
- !ruby/object:Gem::Version
|
208
|
+
version: 2.7.8
|
209
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
210
|
+
requirements:
|
211
|
+
- - ">="
|
212
|
+
- !ruby/object:Gem::Version
|
213
|
+
version: '0'
|
214
|
+
requirements: []
|
215
|
+
rubygems_version: 3.5.1
|
216
|
+
signing_key:
|
217
|
+
specification_version: 4
|
218
|
+
summary: CLI tool suite for the Etision LLC suite subsidiary companies
|
219
|
+
test_files: []
|