belafonte 0.1.2 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +21 -3
- data/lib/belafonte/app.rb +3 -67
- data/lib/belafonte/argument_processor.rb +4 -1
- data/lib/belafonte/dsl/{class_methods.rb → definition.rb} +12 -8
- data/lib/belafonte/dsl.rb +2 -6
- data/lib/belafonte/flag.rb +11 -3
- data/lib/belafonte/help/flag_extensions.rb +2 -0
- data/lib/belafonte/help/generator.rb +6 -6
- data/lib/belafonte/helpers/arguments.rb +13 -0
- data/lib/belafonte/helpers/flags.rb +21 -0
- data/lib/belafonte/helpers/meta_data.rb +33 -0
- data/lib/belafonte/helpers/restricted.rb +22 -0
- data/lib/belafonte/helpers/sharing.rb +15 -0
- data/lib/belafonte/helpers/subcommands.rb +11 -0
- data/lib/belafonte/helpers.rb +17 -0
- data/lib/belafonte/parser.rb +0 -4
- data/lib/belafonte/rhythm.rb +87 -0
- data/lib/belafonte/senora.rb +19 -0
- data/lib/belafonte/version.rb +1 -1
- data/lib/belafonte/wrapomatic.rb +6 -13
- metadata +12 -5
- data/lib/belafonte/dsl/instance_methods.rb +0 -98
- data/lib/belafonte/helpers/tokens.rb +0 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c8b79a1d44e0ead9355e7daf0091c3b93aac55fe
|
4
|
+
data.tar.gz: 7aa26f871377c9b8a0a110859500cb65f90f3c30
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7c5245a9afd12af2cb31ff4d5633afb8233db43ae1f02f9b0612f479b7869de05b144ba2321ce60faa35f12224a0bc88d3db15c52fdc77bb836fb99b918f85ee
|
7
|
+
data.tar.gz: 992f421cf4b967f43f0a7b6668f90cd333f55f0f948eb1acbbc9f2c200376c1cfe76936d588d6d0cba90455d6d9debefcb2e103f006f90b585a9bef9152c72ef
|
data/README.md
CHANGED
@@ -26,6 +26,16 @@ Or install it yourself as:
|
|
26
26
|
|
27
27
|
## Usage ##
|
28
28
|
|
29
|
+
Belafonte can be used both to create traditional single-purpose applications
|
30
|
+
(like `cat`, `ls`, `make`, etc), but it can also be used to create "command
|
31
|
+
suite" applications (like `git`, `rails`, `heroku`, etc).
|
32
|
+
|
33
|
+
### Traditional Applications ###
|
34
|
+
|
35
|
+
As mentioned above, "traditional" applications are single-purpose utilities.
|
36
|
+
They tend to do one thing, with the goal of doing that one thing exceptionally
|
37
|
+
well.
|
38
|
+
|
29
39
|
```ruby
|
30
40
|
require 'belafonte'
|
31
41
|
|
@@ -113,11 +123,19 @@ end
|
|
113
123
|
exit MyApp.new(ARGV).execute!
|
114
124
|
```
|
115
125
|
|
116
|
-
|
126
|
+
### Command Suite Applications ###
|
127
|
+
|
128
|
+
Command suite applications (CSAs) are, in the simplest scenario, a collection
|
129
|
+
of Traditional Applications that are collected under a wrapper to provide a
|
130
|
+
uniform user interface.
|
131
|
+
|
132
|
+
Belafonte supports this sort of application through mounting, which is very
|
133
|
+
similar in spirit to, say, mounting one Rack application under another. The API is the same as the Traditional App API with two exceptions:
|
117
134
|
|
118
|
-
|
135
|
+
* Use `mount App` to mount an application as a subcommand
|
136
|
+
* Apps that mount other apps cannot have :unlimited args
|
119
137
|
|
120
|
-
|
138
|
+
Here's an example:
|
121
139
|
|
122
140
|
```ruby
|
123
141
|
require 'belafonte'
|
data/lib/belafonte/app.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
|
-
require 'optparse'
|
2
1
|
require 'belafonte/dsl'
|
3
|
-
require 'belafonte/
|
4
|
-
require 'belafonte/help'
|
2
|
+
require 'belafonte/rhythm'
|
5
3
|
|
6
4
|
module Belafonte
|
7
5
|
# An application container
|
8
6
|
class App
|
9
7
|
include Belafonte::DSL
|
8
|
+
include Belafonte::Helpers
|
9
|
+
include Belafonte::Rhythm
|
10
10
|
|
11
11
|
attr_reader :argv, :stdin, :stdout, :stderr, :kernel
|
12
12
|
|
@@ -18,69 +18,5 @@ module Belafonte
|
|
18
18
|
@kernel = kernel
|
19
19
|
@parent = parent
|
20
20
|
end
|
21
|
-
|
22
|
-
def execute!
|
23
|
-
(@parser = Parser.new(
|
24
|
-
switches: configured_switches,
|
25
|
-
options: configured_options,
|
26
|
-
commands: configured_subcommands,
|
27
|
-
arguments: configured_args,
|
28
|
-
argv: @argv
|
29
|
-
)).parsed.tap do |parsed|
|
30
|
-
@switches = parsed[:switches]
|
31
|
-
@options = parsed[:options]
|
32
|
-
@arguments = parsed[:args]
|
33
|
-
activate_help! if parsed[:help]
|
34
|
-
end
|
35
|
-
|
36
|
-
@command = arg(:command).shift if arg(:command)
|
37
|
-
|
38
|
-
unless dispatch || show_help || run_handle
|
39
|
-
stderr.puts "No handler for the provided command line"
|
40
|
-
return 1
|
41
|
-
end
|
42
|
-
|
43
|
-
0
|
44
|
-
end
|
45
|
-
|
46
|
-
private
|
47
|
-
def parent
|
48
|
-
@parent
|
49
|
-
end
|
50
|
-
|
51
|
-
def subcommand_instance(command)
|
52
|
-
command_class = configured_subcommands.
|
53
|
-
find {|subcommand| subcommand.info(:title) == command}
|
54
|
-
|
55
|
-
return nil unless command_class
|
56
|
-
|
57
|
-
command_class.new(arg(:command), stdin, stdout, stderr, kernel, self)
|
58
|
-
end
|
59
|
-
|
60
|
-
def dispatch
|
61
|
-
return false if @command.nil?
|
62
|
-
handler = subcommand_instance(@command)
|
63
|
-
|
64
|
-
unless handler
|
65
|
-
activate_help!
|
66
|
-
return false
|
67
|
-
end
|
68
|
-
|
69
|
-
handler.activate_help! if help_active?
|
70
|
-
handler.execute!
|
71
|
-
true
|
72
|
-
end
|
73
|
-
|
74
|
-
def show_help
|
75
|
-
return false unless help_active?
|
76
|
-
stdout.print Belafonte::Help.content_for(self)
|
77
|
-
true
|
78
|
-
end
|
79
|
-
|
80
|
-
def run_handle
|
81
|
-
return false unless respond_to?(:handle)
|
82
|
-
handle
|
83
|
-
true
|
84
|
-
end
|
85
21
|
end
|
86
22
|
end
|
@@ -18,6 +18,9 @@ module Belafonte
|
|
18
18
|
argv = @argv.clone
|
19
19
|
arguments.each do |arg|
|
20
20
|
values = arg.process(argv)
|
21
|
+
if arg.unlimited? && values.empty?
|
22
|
+
values.push('')
|
23
|
+
end
|
21
24
|
processed[arg.name] = values
|
22
25
|
argv.shift(values.length)
|
23
26
|
end
|
@@ -34,7 +37,7 @@ module Belafonte
|
|
34
37
|
end
|
35
38
|
|
36
39
|
def validate_processed_args
|
37
|
-
raise Belafonte::Errors::TooFewArguments.new("You didn't provide enough arguments") if processed.values.any? {|arg| arg.empty?}
|
40
|
+
raise Belafonte::Errors::TooFewArguments.new("You didn't provide enough arguments") if processed.values.any? {|arg| arg.empty? && !arg.unlimited?}
|
38
41
|
end
|
39
42
|
end
|
40
43
|
end
|
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'optparse'
|
2
1
|
require 'belafonte/switch'
|
3
2
|
require 'belafonte/option'
|
4
3
|
require 'belafonte/argument'
|
@@ -7,7 +6,7 @@ require 'belafonte/errors'
|
|
7
6
|
module Belafonte
|
8
7
|
module DSL
|
9
8
|
# Class methods for defining apps
|
10
|
-
module
|
9
|
+
module Definition
|
11
10
|
def meta
|
12
11
|
@meta ||= {}
|
13
12
|
end
|
@@ -49,12 +48,13 @@ module Belafonte
|
|
49
48
|
end
|
50
49
|
|
51
50
|
def arg(name, arg_options = {})
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
51
|
+
if has_unlimited_arg?
|
52
|
+
raise Belafonte::Errors::InvalidArgument.new("You may not add other arguments after an unlimited argument")
|
53
|
+
|
54
|
+
else
|
55
|
+
|
56
|
+
args.push(Belafonte::Argument.new(arg_options.merge({name: name})))
|
57
|
+
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
@@ -70,6 +70,10 @@ module Belafonte
|
|
70
70
|
raise Belafonte::Errors::CircularMount.new("An app cannot mount itself") if app == self
|
71
71
|
subcommands.push(app)
|
72
72
|
end
|
73
|
+
|
74
|
+
def has_unlimited_arg?
|
75
|
+
!(args.find {|arg| arg.unlimited?}).nil?
|
76
|
+
end
|
73
77
|
end
|
74
78
|
end
|
75
79
|
end
|
data/lib/belafonte/dsl.rb
CHANGED
@@ -1,14 +1,10 @@
|
|
1
|
-
require 'belafonte/dsl/
|
2
|
-
require 'belafonte/dsl/class_methods'
|
1
|
+
require 'belafonte/dsl/definition'
|
3
2
|
|
4
3
|
module Belafonte
|
5
4
|
# A DSL for making apps
|
6
5
|
module DSL
|
7
6
|
def self.included(klass)
|
8
|
-
klass.extend(Belafonte::DSL::
|
7
|
+
klass.extend(Belafonte::DSL::Definition)
|
9
8
|
end
|
10
|
-
|
11
|
-
include Belafonte::DSL::InstanceMethods
|
12
|
-
#include Belafonte::DSL::Mountin
|
13
9
|
end
|
14
10
|
end
|
data/lib/belafonte/flag.rb
CHANGED
@@ -10,13 +10,21 @@ module Belafonte
|
|
10
10
|
|
11
11
|
attr_reader :name, :short, :long, :description
|
12
12
|
|
13
|
+
def self.shortify(option)
|
14
|
+
"-#{option.to_s}"
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.longify(option)
|
18
|
+
"--#{option.to_s}"
|
19
|
+
end
|
20
|
+
|
13
21
|
def normalize_flag(flag)
|
14
22
|
flag.to_s.strip.gsub(/\s+/, '-')
|
15
23
|
end
|
16
24
|
|
17
25
|
def initialize(options = {})
|
18
26
|
options[:name].tap do |name|
|
19
|
-
unless
|
27
|
+
unless name
|
20
28
|
raise Belafonte::Errors::NoName.new("Flag name cannot be blank")
|
21
29
|
end
|
22
30
|
@name = name.to_sym
|
@@ -47,11 +55,11 @@ module Belafonte
|
|
47
55
|
|
48
56
|
private
|
49
57
|
def shortify(option)
|
50
|
-
|
58
|
+
self.class.shortify(option)
|
51
59
|
end
|
52
60
|
|
53
61
|
def longify(option)
|
54
|
-
|
62
|
+
self.class.longify(option)
|
55
63
|
end
|
56
64
|
|
57
65
|
def flag_array(items)
|
@@ -22,24 +22,24 @@ module Belafonte
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def name_section
|
25
|
-
"NAME\n#{Wrapomatic.
|
25
|
+
"NAME\n#{Wrapomatic.wrap("#{app.display_title} - #{app.summary}", 1)}\n"
|
26
26
|
end
|
27
27
|
|
28
28
|
def synopsis
|
29
|
-
synopsis = "\nSYNOPSIS\n#{Wrapomatic.
|
29
|
+
synopsis = "\nSYNOPSIS\n#{Wrapomatic.wrap(app.full_path, 1)}"
|
30
30
|
if app.description
|
31
|
-
synopsis += "\n\n#{Wrapomatic.wrap(app.display_description)}"
|
31
|
+
synopsis += "\n\n#{Wrapomatic.wrap(app.display_description, 1)}"
|
32
32
|
end
|
33
33
|
synopsis + "\n"
|
34
34
|
end
|
35
35
|
|
36
36
|
def options
|
37
|
-
return '' unless app.has_flags?
|
38
37
|
options = "\nOPTIONS\n"
|
39
38
|
app.sorted_flags.each do |flag|
|
40
39
|
flag.extend(FlagExtensions)
|
41
|
-
options += "#{Wrapomatic.
|
40
|
+
options += "#{Wrapomatic.wrap(flag.signature, 1)}\n"
|
42
41
|
end
|
42
|
+
options += "#{Wrapomatic.wrap('-h, --help - Shows this message', 1)}"
|
43
43
|
|
44
44
|
options + "\n"
|
45
45
|
end
|
@@ -50,7 +50,7 @@ module Belafonte
|
|
50
50
|
|
51
51
|
app.sorted_commands.each do |command|
|
52
52
|
command.extend(CommandExtensions)
|
53
|
-
commands += "#{Wrapomatic.
|
53
|
+
commands += "#{Wrapomatic.wrap("#{command.display_title} - #{command.display_summary}", 1)}\n"
|
54
54
|
end
|
55
55
|
|
56
56
|
commands + "\n"
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Belafonte
|
2
|
+
module Helpers
|
3
|
+
module Flags
|
4
|
+
def switches
|
5
|
+
@switches ||= {}
|
6
|
+
end
|
7
|
+
|
8
|
+
def switch_active?(switch)
|
9
|
+
switches[switch]
|
10
|
+
end
|
11
|
+
|
12
|
+
def options
|
13
|
+
@options ||= {}
|
14
|
+
end
|
15
|
+
|
16
|
+
def option(option)
|
17
|
+
options[option]
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Belafonte
|
2
|
+
module Helpers
|
3
|
+
module MetaData
|
4
|
+
def title
|
5
|
+
self.class.info(:title)
|
6
|
+
end
|
7
|
+
|
8
|
+
def summary
|
9
|
+
self.class.info(:summary)
|
10
|
+
end
|
11
|
+
|
12
|
+
def description
|
13
|
+
self.class.info(:description)
|
14
|
+
end
|
15
|
+
|
16
|
+
def configured_switches
|
17
|
+
self.class.switches
|
18
|
+
end
|
19
|
+
|
20
|
+
def configured_options
|
21
|
+
self.class.options
|
22
|
+
end
|
23
|
+
|
24
|
+
def configured_args
|
25
|
+
self.class.args
|
26
|
+
end
|
27
|
+
|
28
|
+
def configured_subcommands
|
29
|
+
self.class.subcommands
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Belafonte
|
2
|
+
module Helpers
|
3
|
+
# Instance methods for apps
|
4
|
+
module Restricted
|
5
|
+
protected
|
6
|
+
|
7
|
+
def activate_help!
|
8
|
+
@help = true
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def help
|
14
|
+
@help ||= false
|
15
|
+
end
|
16
|
+
|
17
|
+
def help_active?
|
18
|
+
help
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'belafonte/helpers/meta_data'
|
2
|
+
require 'belafonte/helpers/sharing'
|
3
|
+
require 'belafonte/helpers/flags'
|
4
|
+
require 'belafonte/helpers/arguments'
|
5
|
+
require 'belafonte/helpers/subcommands'
|
6
|
+
require 'belafonte/helpers/restricted'
|
7
|
+
|
8
|
+
module Belafonte
|
9
|
+
module Helpers
|
10
|
+
include MetaData
|
11
|
+
include Sharing
|
12
|
+
include Flags
|
13
|
+
include Arguments
|
14
|
+
include Subcommands
|
15
|
+
include Restricted
|
16
|
+
end
|
17
|
+
end
|
data/lib/belafonte/parser.rb
CHANGED
@@ -0,0 +1,87 @@
|
|
1
|
+
require 'optparse'
|
2
|
+
require 'belafonte/errors'
|
3
|
+
require 'belafonte/help'
|
4
|
+
require 'belafonte/parser'
|
5
|
+
require 'belafonte/helpers'
|
6
|
+
require 'belafonte/wrapomatic'
|
7
|
+
|
8
|
+
module Belafonte
|
9
|
+
module Rhythm
|
10
|
+
def execute!
|
11
|
+
(@parser = Parser.new(
|
12
|
+
switches: configured_switches,
|
13
|
+
options: configured_options,
|
14
|
+
commands: configured_subcommands,
|
15
|
+
arguments: configured_args,
|
16
|
+
argv: @argv
|
17
|
+
)).parsed.tap do |parsed|
|
18
|
+
@switches = parsed[:switches]
|
19
|
+
@options = parsed[:options]
|
20
|
+
@arguments = parsed[:args]
|
21
|
+
activate_help! if parsed[:help]
|
22
|
+
end
|
23
|
+
|
24
|
+
@command = arg(:command).shift if arg(:command)
|
25
|
+
|
26
|
+
begin
|
27
|
+
run_setup
|
28
|
+
|
29
|
+
unless dispatch || show_help || run_handle
|
30
|
+
stderr.puts "No handler for the provided command line"
|
31
|
+
return 1
|
32
|
+
end
|
33
|
+
rescue => uncaught_error
|
34
|
+
stderr.puts "The application encountered the following error:"
|
35
|
+
stderr.puts Wrapomatic.wrap(uncaught_error.to_s, 1)
|
36
|
+
return 255
|
37
|
+
end
|
38
|
+
|
39
|
+
0
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
def parent
|
44
|
+
@parent
|
45
|
+
end
|
46
|
+
|
47
|
+
def subcommand_instance(command)
|
48
|
+
command_class = configured_subcommands.
|
49
|
+
find {|subcommand| subcommand.info(:title) == command}
|
50
|
+
|
51
|
+
return nil unless command_class
|
52
|
+
|
53
|
+
command_class.new(arg(:command), stdin, stdout, stderr, kernel, self)
|
54
|
+
end
|
55
|
+
|
56
|
+
def dispatch
|
57
|
+
return false if @command.nil?
|
58
|
+
handler = subcommand_instance(@command)
|
59
|
+
|
60
|
+
unless handler
|
61
|
+
activate_help!
|
62
|
+
return false
|
63
|
+
end
|
64
|
+
|
65
|
+
handler.activate_help! if help_active?
|
66
|
+
handler.execute!
|
67
|
+
true
|
68
|
+
end
|
69
|
+
|
70
|
+
def show_help
|
71
|
+
return false unless help_active?
|
72
|
+
stdout.print Belafonte::Help.content_for(self)
|
73
|
+
true
|
74
|
+
end
|
75
|
+
|
76
|
+
def run_handle
|
77
|
+
return false unless respond_to?(:handle)
|
78
|
+
handle
|
79
|
+
true
|
80
|
+
end
|
81
|
+
|
82
|
+
def run_setup
|
83
|
+
return nil unless respond_to?(:setup)
|
84
|
+
setup
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
data/lib/belafonte/version.rb
CHANGED
data/lib/belafonte/wrapomatic.rb
CHANGED
@@ -2,25 +2,18 @@ module Belafonte
|
|
2
2
|
class Wrapomatic
|
3
3
|
attr_reader :text, :lines, :indents, :columns
|
4
4
|
|
5
|
-
def self.wrap(text, indents =
|
5
|
+
def self.wrap(text, indents = 0, columns = 80)
|
6
6
|
new(text, indents, columns).wrapped
|
7
7
|
end
|
8
8
|
|
9
|
-
def initialize(text, indents =
|
10
|
-
@text = text
|
9
|
+
def initialize(text, indents = 0, columns = 80)
|
10
|
+
@text = text.split("\n").join(' ')
|
11
11
|
@indents = indents
|
12
12
|
@columns = columns
|
13
13
|
@lines = []
|
14
14
|
indentomize
|
15
15
|
end
|
16
16
|
|
17
|
-
def refresh(text, indents = 1, columns = 80)
|
18
|
-
@text = text
|
19
|
-
@remainder = ''
|
20
|
-
@lines = []
|
21
|
-
indentomize
|
22
|
-
end
|
23
|
-
|
24
17
|
def wrapped
|
25
18
|
lines.join("\n")
|
26
19
|
end
|
@@ -28,9 +21,9 @@ module Belafonte
|
|
28
21
|
private
|
29
22
|
|
30
23
|
def indentomize
|
31
|
-
|
32
|
-
@lines.push(
|
33
|
-
end
|
24
|
+
until (line = next_line).nil?
|
25
|
+
@lines.push(line)
|
26
|
+
end
|
34
27
|
end
|
35
28
|
|
36
29
|
def next_line
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: belafonte
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dennis Walters
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-10-
|
11
|
+
date: 2015-10-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -109,8 +109,7 @@ files:
|
|
109
109
|
- lib/belafonte/argument.rb
|
110
110
|
- lib/belafonte/argument_processor.rb
|
111
111
|
- lib/belafonte/dsl.rb
|
112
|
-
- lib/belafonte/dsl/
|
113
|
-
- lib/belafonte/dsl/instance_methods.rb
|
112
|
+
- lib/belafonte/dsl/definition.rb
|
114
113
|
- lib/belafonte/errors.rb
|
115
114
|
- lib/belafonte/flag.rb
|
116
115
|
- lib/belafonte/help.rb
|
@@ -118,9 +117,17 @@ files:
|
|
118
117
|
- lib/belafonte/help/command_extensions.rb
|
119
118
|
- lib/belafonte/help/flag_extensions.rb
|
120
119
|
- lib/belafonte/help/generator.rb
|
121
|
-
- lib/belafonte/helpers
|
120
|
+
- lib/belafonte/helpers.rb
|
121
|
+
- lib/belafonte/helpers/arguments.rb
|
122
|
+
- lib/belafonte/helpers/flags.rb
|
123
|
+
- lib/belafonte/helpers/meta_data.rb
|
124
|
+
- lib/belafonte/helpers/restricted.rb
|
125
|
+
- lib/belafonte/helpers/sharing.rb
|
126
|
+
- lib/belafonte/helpers/subcommands.rb
|
122
127
|
- lib/belafonte/option.rb
|
123
128
|
- lib/belafonte/parser.rb
|
129
|
+
- lib/belafonte/rhythm.rb
|
130
|
+
- lib/belafonte/senora.rb
|
124
131
|
- lib/belafonte/switch.rb
|
125
132
|
- lib/belafonte/version.rb
|
126
133
|
- lib/belafonte/wrapomatic.rb
|
@@ -1,98 +0,0 @@
|
|
1
|
-
require 'belafonte/parser'
|
2
|
-
|
3
|
-
module Belafonte
|
4
|
-
module DSL
|
5
|
-
# Instance methods for apps
|
6
|
-
module InstanceMethods
|
7
|
-
def title
|
8
|
-
self.class.info(:title)
|
9
|
-
end
|
10
|
-
|
11
|
-
def summary
|
12
|
-
self.class.info(:summary)
|
13
|
-
end
|
14
|
-
|
15
|
-
def description
|
16
|
-
self.class.info(:description)
|
17
|
-
end
|
18
|
-
|
19
|
-
def configured_switches
|
20
|
-
self.class.switches
|
21
|
-
end
|
22
|
-
|
23
|
-
def configured_options
|
24
|
-
self.class.options
|
25
|
-
end
|
26
|
-
|
27
|
-
def configured_args
|
28
|
-
self.class.args
|
29
|
-
end
|
30
|
-
|
31
|
-
def configured_subcommands
|
32
|
-
self.class.subcommands
|
33
|
-
end
|
34
|
-
|
35
|
-
def switches
|
36
|
-
@switches ||= {}
|
37
|
-
end
|
38
|
-
|
39
|
-
def switch_active(switch)
|
40
|
-
switches[switch]
|
41
|
-
end
|
42
|
-
|
43
|
-
def options
|
44
|
-
@options ||= {}
|
45
|
-
end
|
46
|
-
|
47
|
-
def option(option)
|
48
|
-
options[option]
|
49
|
-
end
|
50
|
-
|
51
|
-
def args
|
52
|
-
@arguments ||= {}
|
53
|
-
end
|
54
|
-
|
55
|
-
def arg(arg)
|
56
|
-
args[arg]
|
57
|
-
end
|
58
|
-
|
59
|
-
def subcommands
|
60
|
-
@subcommands ||= []
|
61
|
-
end
|
62
|
-
|
63
|
-
def estate
|
64
|
-
@estate ||= {}
|
65
|
-
end
|
66
|
-
|
67
|
-
def bequeathed(name, value)
|
68
|
-
estate[name] ||= value
|
69
|
-
end
|
70
|
-
|
71
|
-
def activate_help!
|
72
|
-
@help = true
|
73
|
-
end
|
74
|
-
|
75
|
-
private
|
76
|
-
|
77
|
-
def parser
|
78
|
-
@parser
|
79
|
-
end
|
80
|
-
|
81
|
-
#def short(option)
|
82
|
-
#"-#{option.to_s}"
|
83
|
-
#end
|
84
|
-
|
85
|
-
#def long(option)
|
86
|
-
#"-#{short(option)}"
|
87
|
-
#end
|
88
|
-
|
89
|
-
def help
|
90
|
-
@help ||= false
|
91
|
-
end
|
92
|
-
|
93
|
-
def help_active?
|
94
|
-
help
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|