Class: Ned::Command
- Inherits:
-
Object
show all
- Defined in:
- lib/ned/command.rb
Direct Known Subclasses
Append, Backward, Cut, Eval, Grep, Head, Index, Join, Prepend, Print, Quote, Read, Sort, Tail, Uniq
Defined Under Namespace
Classes: ParseError
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(input) ⇒ Command
Returns a new instance of Command.
54
55
56
57
58
|
# File 'lib/ned/command.rb', line 54
def initialize(input)
@input = input
@require_all = true if self.class.require_all?
@first = true
end
|
Class Method Details
.config(name, args) ⇒ Object
6
7
8
9
10
11
12
13
14
15
16
17
|
# File 'lib/ned/command.rb', line 6
def config(name, args)
@config ||= { }
if args.empty?
@config[name]
elsif args.size == 1
@config[name] = args[0]
nil
else
raise "invalid args: #{args}"
end
end
|
.description(*args) ⇒ Object
27
28
29
|
# File 'lib/ned/command.rb', line 27
def description(*args)
config(:description, args)
end
|
.help ⇒ Object
47
48
49
50
51
|
# File 'lib/ned/command.rb', line 47
def help
OptionParser.new do |opts|
option_parser.call(opts)
end.help
end
|
.long_name(*args) ⇒ Object
19
20
21
|
# File 'lib/ned/command.rb', line 19
def long_name(*args)
config(:long_name, args)
end
|
.option_parser(&block) ⇒ Object
39
40
41
42
43
44
45
|
# File 'lib/ned/command.rb', line 39
def option_parser(&block)
if block_given?
@option_parser = block
else
@option_parser
end
end
|
.require_all ⇒ Object
31
32
33
|
# File 'lib/ned/command.rb', line 31
def require_all
@require_all = true
end
|
.require_all? ⇒ Boolean
35
36
37
|
# File 'lib/ned/command.rb', line 35
def require_all?
@require_all
end
|
.short_name(*args) ⇒ Object
23
24
25
|
# File 'lib/ned/command.rb', line 23
def short_name(*args)
config(:short_name, args)
end
|
Instance Method Details
#execute ⇒ Object
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
# File 'lib/ned/command.rb', line 78
def execute
if @require_all
load_lines.empty? ? nil : load_lines.shift
else
return nil if @next.nil? && !@first
if @first
@first = false
current = @input.execute
@next = @input.execute
else
current = @next
@next = @input.execute
end
if current.is_a? Array
current.flat_map do |line|
result = execute_internal(line)
result.is_a?(Array) ? result : [result]
end
else
execute_internal(current)
end
end
end
|
#execute_all ⇒ Object
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
# File 'lib/ned/command.rb', line 104
def execute_all
if @require_all
load_lines
@lines.shift(@lines.size)
else
lines = @input.execute_all
lines = lines.each_with_index.flat_map do |line, i|
@next = lines[i + 1]
result = execute_internal(line)
result.is_a?(Array) ? result : [result]
end
lines
end
end
|
#execute_internal(line) ⇒ Object
119
120
121
|
# File 'lib/ned/command.rb', line 119
def execute_internal(line)
line
end
|
#load_lines ⇒ Object
131
132
133
134
135
136
137
|
# File 'lib/ned/command.rb', line 131
def load_lines
unless @lines
@lines = @input.execute_all
@lines = execute_internal(@lines)
end
@lines
end
|
#options ⇒ Object
60
61
62
|
# File 'lib/ned/command.rb', line 60
def options
@options ||= {}
end
|
#parse(args) ⇒ Object
64
65
66
67
68
69
70
71
72
73
74
75
76
|
# File 'lib/ned/command.rb', line 64
def parse(args)
OptionParser.new do |opts|
opts.on('-h', '--help', 'Print this help.') do |help|
help
end
opts.on('-v', '--version', 'Print Ned version.') do |version|
version
end
instance_exec(opts, &self.class.option_parser)
end.parse!(args, into: options)
end
|
#peek ⇒ Object
139
140
141
|
# File 'lib/ned/command.rb', line 139
def peek
require_all? ? @lines[0] : @next
end
|
#require_all ⇒ Object
123
124
125
|
# File 'lib/ned/command.rb', line 123
def require_all
@require_all = true
end
|
#require_all? ⇒ Boolean
127
128
129
|
# File 'lib/ned/command.rb', line 127
def require_all?
@require_all
end
|