stack_loop 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/bin/stack_loop +11 -0
- data/lib/stack_loop/app.rb +156 -0
- data/lib/stack_loop/optparse.rb +33 -0
- data/spec_help/gem_test_suite.rb +0 -0
- metadata +59 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: fc67ea44a103f6c3d7321520c5e513711bdf3483
|
4
|
+
data.tar.gz: 9eed716be05d7546f0d9b924f7a66a561bb131e1
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 2219b1e2e8138275698578f17b4335af98f76c954aeb361cf15766555334b05aa266d21edd6f0c743ae01b2c892fb1b9ebeff9d7e17f8038d530d2eba5e1350b
|
7
|
+
data.tar.gz: 738046750d39cb3ab65c879283029d121d4f6f81c8d6fdeab1a58298c22b2e3bf0e15ae69382d59682180a061e3cf833a67e6e5ab2c544211dca3e1c5c8083f0
|
data/bin/stack_loop
ADDED
@@ -0,0 +1,156 @@
|
|
1
|
+
require 'abbrev'
|
2
|
+
|
3
|
+
module StackLoop
|
4
|
+
class App
|
5
|
+
class Command
|
6
|
+
attr_accessor :name, :desc
|
7
|
+
|
8
|
+
def initialize(name, desc=nil, &action)
|
9
|
+
@name = name
|
10
|
+
@desc = desc
|
11
|
+
@action = action
|
12
|
+
end
|
13
|
+
|
14
|
+
def run
|
15
|
+
@action.call
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def commands
|
20
|
+
[
|
21
|
+
Command.new("run"){ run_stack_loop },
|
22
|
+
Command.new("collect"){ push_new; run_stack_loop },
|
23
|
+
Command.new("pop"){ pop_argset },
|
24
|
+
Command.new("quit"){ raise "Quitting!" },
|
25
|
+
Command.new("help"){ puts "Don't know that one - try: #{command_names.join(", ")}" }
|
26
|
+
]
|
27
|
+
end
|
28
|
+
|
29
|
+
attr_accessor :command, :stack_file, :collect_file, :default_args
|
30
|
+
|
31
|
+
def initialize
|
32
|
+
@default_args = ""
|
33
|
+
end
|
34
|
+
|
35
|
+
def validate_options!
|
36
|
+
raise "Need a command!" if command.nil?
|
37
|
+
raise "Need a stack file!" if stack_file.nil?
|
38
|
+
end
|
39
|
+
|
40
|
+
def push_new
|
41
|
+
unless collect_file.nil?
|
42
|
+
push_argset File::read(collect_file).split("\n")
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def read_stack
|
47
|
+
stack_string = File.read(stack_file)
|
48
|
+
@stack = stack_string.split("\n\n").map do |item|
|
49
|
+
item.split("\n")
|
50
|
+
end.reject do |item|
|
51
|
+
item.empty?
|
52
|
+
end
|
53
|
+
rescue Errno::ENOENT
|
54
|
+
@stack = []
|
55
|
+
end
|
56
|
+
|
57
|
+
def write_stack
|
58
|
+
File::write(stack_file, @stack.map do |argset|
|
59
|
+
argset.join("\n")
|
60
|
+
end.join("\n\n") + "\n")
|
61
|
+
end
|
62
|
+
|
63
|
+
def get_argset
|
64
|
+
read_stack
|
65
|
+
if @stack.empty?
|
66
|
+
[default_args]
|
67
|
+
else
|
68
|
+
@stack.last
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def push_argset(args)
|
73
|
+
read_stack
|
74
|
+
@stack.push(args)
|
75
|
+
write_stack
|
76
|
+
end
|
77
|
+
|
78
|
+
def pop_argset
|
79
|
+
read_stack
|
80
|
+
@stack.pop
|
81
|
+
write_stack
|
82
|
+
end
|
83
|
+
|
84
|
+
def stack_depth
|
85
|
+
read_stack
|
86
|
+
@stack.length
|
87
|
+
end
|
88
|
+
|
89
|
+
def run
|
90
|
+
validate_options!
|
91
|
+
|
92
|
+
puts "Starting with: " + current_command_line.join(" ")
|
93
|
+
puts
|
94
|
+
run_stack_loop
|
95
|
+
|
96
|
+
abbreviations = Abbrev.abbrev(command_names)
|
97
|
+
|
98
|
+
loop do
|
99
|
+
prompt
|
100
|
+
command_name = $stdin.gets.chomp
|
101
|
+
if command_name.empty?
|
102
|
+
command_name = "run"
|
103
|
+
end
|
104
|
+
|
105
|
+
command_name = abbreviations[command_name]
|
106
|
+
command = command_hash.fetch(command_name, command_hash["help"])
|
107
|
+
command.run
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
def command_list
|
112
|
+
@command_list ||= command.split(/\s/)
|
113
|
+
end
|
114
|
+
|
115
|
+
def current_command_line
|
116
|
+
args = get_argset
|
117
|
+
|
118
|
+
command_list + get_argset
|
119
|
+
end
|
120
|
+
|
121
|
+
def prompt
|
122
|
+
puts
|
123
|
+
puts "Next: " + current_command_line.join(" ")
|
124
|
+
print "#{stack_depth} > "
|
125
|
+
end
|
126
|
+
|
127
|
+
def command_names
|
128
|
+
@command_names ||= command_hash.keys
|
129
|
+
end
|
130
|
+
|
131
|
+
def command_hash
|
132
|
+
@command_hash ||= Hash[ commands.map{|cmd| [cmd.name, cmd] } ]
|
133
|
+
end
|
134
|
+
|
135
|
+
def run_stack_loop
|
136
|
+
while run_stack
|
137
|
+
puts
|
138
|
+
puts "Success - running again..."
|
139
|
+
puts
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
def run_stack
|
144
|
+
success = system(*current_command_line)
|
145
|
+
|
146
|
+
if success.nil?
|
147
|
+
raise "#{[command, *args].inspect} couldn't be run"
|
148
|
+
end
|
149
|
+
pop_argset if success
|
150
|
+
|
151
|
+
return false if @stack.empty?
|
152
|
+
|
153
|
+
return success
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'optparse'
|
2
|
+
|
3
|
+
module StackLoop
|
4
|
+
class OptParse < OptionParser
|
5
|
+
def initialize(app)
|
6
|
+
@app = app
|
7
|
+
super do |opti|
|
8
|
+
opti.banner = "Usage: #$0 [options]"
|
9
|
+
|
10
|
+
opti.on("-c", "--command COMMAND", "The command string prefix to run") do |command|
|
11
|
+
app.command = command
|
12
|
+
end
|
13
|
+
|
14
|
+
opti.on("-s", "--stack-file FILE", "The file to read for argument sets") do |stack|
|
15
|
+
app.stack_file = stack
|
16
|
+
end
|
17
|
+
|
18
|
+
opti.on("-p", "--push-file FILE", "A path to read for new argument sets") do |file| #ok
|
19
|
+
app.collect_file = file
|
20
|
+
end
|
21
|
+
|
22
|
+
opti.on("-d", "--default FILE", "Argument to use if the stack is empty") do |default|
|
23
|
+
app.default_args = default
|
24
|
+
end
|
25
|
+
|
26
|
+
opti.on_tail("-h", "--help", "Show this message") do
|
27
|
+
puts opti
|
28
|
+
exit
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
File without changes
|
metadata
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: stack_loop
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Judson Lester
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-05-16 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: |2
|
14
|
+
The idea here is to take arguments off of a stack, run a command, and proceed down the stack iff the command
|
15
|
+
exits 0.
|
16
|
+
|
17
|
+
Why? Consider running rspec with a tight focus, adding bredth on success
|
18
|
+
email:
|
19
|
+
- nyarly@gmail.com
|
20
|
+
executables:
|
21
|
+
- stack_loop
|
22
|
+
extensions: []
|
23
|
+
extra_rdoc_files: []
|
24
|
+
files:
|
25
|
+
- lib/stack_loop/app.rb
|
26
|
+
- lib/stack_loop/optparse.rb
|
27
|
+
- bin/stack_loop
|
28
|
+
- spec_help/gem_test_suite.rb
|
29
|
+
homepage: http://nyarly.github.com/stack_loop
|
30
|
+
licenses:
|
31
|
+
- MIT
|
32
|
+
metadata: {}
|
33
|
+
post_install_message:
|
34
|
+
rdoc_options:
|
35
|
+
- --inline-source
|
36
|
+
- --main
|
37
|
+
- doc/README
|
38
|
+
- --title
|
39
|
+
- stack_loop-0.0.1 Documentation
|
40
|
+
require_paths:
|
41
|
+
- lib/
|
42
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - '>='
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
47
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
48
|
+
requirements:
|
49
|
+
- - '>='
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
version: '0'
|
52
|
+
requirements: []
|
53
|
+
rubyforge_project: stack_loop
|
54
|
+
rubygems_version: 2.0.14
|
55
|
+
signing_key:
|
56
|
+
specification_version: 4
|
57
|
+
summary: Run related commands in a loop
|
58
|
+
test_files:
|
59
|
+
- spec_help/gem_test_suite.rb
|