applix 0.4.11 → 0.4.12
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rspec +1 -1
- data/Guardfile +1 -1
- data/README.mkd +52 -0
- data/applix.gemspec +2 -4
- data/lib/applix.rb +14 -2
- data/lib/applix/version.rb +1 -1
- data/spec/applix_hash_spec.rb +8 -6
- data/spec/applix_spec.rb +102 -83
- data/spec/spec_helper.rb +8 -0
- metadata +25 -25
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 54a476e8df75c875f08de5e5ac9a0a952d20fb50
|
4
|
+
data.tar.gz: 22f80002098e75c8a0ed9e492aecf5e12b31a2a5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9657b4faae0275463346437eabd2fcb8d7058fdce52ba2330b9c1f53257080e2442c9429a94b67b39ebef7cca559e69170633b4cd96458dd2f9e21c0e9ee2059
|
7
|
+
data.tar.gz: 221e610a1609fb16d73591cce387b1e73655accdff8928f0a56d638ea6b6d599c591c58f3042975ef66527e4d7a5e17c2fc293738931acd42990679a6630f75d
|
data/.rspec
CHANGED
@@ -1 +1 @@
|
|
1
|
-
--color --backtrace
|
1
|
+
--color --backtrace
|
data/Guardfile
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# A sample Guardfile
|
2
2
|
# More info at https://github.com/guard/guard#readme
|
3
3
|
|
4
|
-
guard
|
4
|
+
guard(:rspec, all_on_start: true) do
|
5
5
|
watch(%r{^spec/.+_spec\.rb$})
|
6
6
|
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
|
7
7
|
watch('spec/spec_helper.rb') { "spec" }
|
data/README.mkd
CHANGED
@@ -52,6 +52,58 @@ becomes:
|
|
52
52
|
|
53
53
|
{ :foo => true, :bar => 'loo', :args => ["123", "now"] }
|
54
54
|
|
55
|
+
## Command line micro DSLs with @argsloop@
|
56
|
+
|
57
|
+
Imagine you have an app which could perform multiple operations on a excel
|
58
|
+
sheet. Like reading, validating and reporting. You could put all variations in
|
59
|
+
a single command which to call directly from a command line. A better is to
|
60
|
+
break down such a procedure into single steps which can be performed
|
61
|
+
independently and combined freely on the command line. Example procedure:
|
62
|
+
|
63
|
+
load <filename>
|
64
|
+
select <sheetname>
|
65
|
+
validate
|
66
|
+
print
|
67
|
+
|
68
|
+
Now you can make this an applix command line DSL like this:
|
69
|
+
|
70
|
+
Applix.main(ARGV) do
|
71
|
+
any(argsloop: MyExcelApp.new)
|
72
|
+
end
|
73
|
+
|
74
|
+
and calling it like:
|
75
|
+
|
76
|
+
$ my_app load <filename> select <sheetname> validate print
|
77
|
+
|
78
|
+
Now to make applix call your app with the right commands and parameters the
|
79
|
+
commands just have to take its parameters off the arg vector like this:
|
80
|
+
|
81
|
+
app.load(args)
|
82
|
+
filename = args.shift
|
83
|
+
...
|
84
|
+
args
|
85
|
+
end
|
86
|
+
|
87
|
+
app.select(args)
|
88
|
+
sheetname = args.shift
|
89
|
+
...
|
90
|
+
args
|
91
|
+
end
|
92
|
+
|
93
|
+
app.validate(args)
|
94
|
+
...
|
95
|
+
args
|
96
|
+
end
|
97
|
+
|
98
|
+
app.print(args)
|
99
|
+
...
|
100
|
+
args
|
101
|
+
end
|
102
|
+
|
103
|
+
Adding new steps now is easy, like instead of print you could make an upload
|
104
|
+
to another database for example without the need touch existing code.
|
105
|
+
|
106
|
+
|
55
107
|
## Note on Patches/Pull Requests
|
56
108
|
|
57
109
|
* Fork the project.
|
data/applix.gemspec
CHANGED
@@ -42,10 +42,8 @@ Gem::Specification.new do |s|
|
|
42
42
|
s.add_development_dependency 'rspec-mocks'
|
43
43
|
s.add_development_dependency 'guard-rspec'
|
44
44
|
|
45
|
-
|
46
|
-
s.add_development_dependency '
|
47
|
-
else
|
48
|
-
s.add_development_dependency 'debugger'
|
45
|
+
unless RUBY_PLATFORM.match /java/i
|
46
|
+
s.add_development_dependency 'byebug'
|
49
47
|
end
|
50
48
|
|
51
49
|
# version class is read from
|
data/lib/applix.rb
CHANGED
@@ -105,17 +105,29 @@ usage: #{$0} <args...>
|
|
105
105
|
@epilog_cb = blk
|
106
106
|
end
|
107
107
|
|
108
|
+
# opts[:argsloop], the target for any, may be be class or an object. In case
|
109
|
+
# of class we instantiate an object from it, other we use the object itself
|
108
110
|
def any(opts = {}, &blk)
|
109
111
|
if(app = opts[:argsloop])
|
112
|
+
|
110
113
|
blk = lambda do |*args, opts|
|
114
|
+
# instantiate or assign target object before first usage
|
115
|
+
target = (app.is_a? Class) ? app.new(opts) : app
|
116
|
+
|
111
117
|
while(args && 0 < args.size) do
|
112
118
|
args = begin
|
113
119
|
if(op = args.shift)
|
114
120
|
puts " --(#{op})-- (#{args.join ', '})"
|
115
|
-
|
121
|
+
if(target == app)
|
122
|
+
# object target
|
123
|
+
target.send(op, args, opts)
|
124
|
+
else
|
125
|
+
# object instance created from class target
|
126
|
+
target.send(op, *args)
|
127
|
+
end
|
116
128
|
end
|
117
129
|
rescue ArgumentError => e
|
118
|
-
|
130
|
+
target.send(op, opts)
|
119
131
|
end
|
120
132
|
end
|
121
133
|
end
|
data/lib/applix/version.rb
CHANGED
data/spec/applix_hash_spec.rb
CHANGED
@@ -2,19 +2,21 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe ApplixHash do
|
4
4
|
it 'parses dashed string options' do
|
5
|
-
(ApplixHash.parse '--foo-bar').should == ["foo-bar".to_sym, true]
|
6
|
-
(ApplixHash.parse '--foo-bar
|
5
|
+
#(ApplixHash.parse '--foo-bar').should == ["foo-bar".to_sym, true]
|
6
|
+
expect(ApplixHash.parse '--foo-bar').to eq(["foo-bar".to_sym, true])
|
7
|
+
#(ApplixHash.parse '--foo-bar=321').should == ["foo-bar".to_sym, '321']
|
8
|
+
expect(ApplixHash.parse '--foo-bar=321').to eq(["foo-bar".to_sym, '321'])
|
7
9
|
end
|
8
10
|
|
9
11
|
it "parses the old unit test..." do
|
10
12
|
# -f becomes { :f => true }
|
11
13
|
# --flag becomes { :flag => true }
|
12
|
-
(ApplixHash.parse '-f').
|
13
|
-
(ApplixHash.parse '--flag').
|
14
|
+
expect(ApplixHash.parse '-f').to eq([:f, true])
|
15
|
+
expect(ApplixHash.parse '--flag').to eq([:flag, true])
|
14
16
|
# --flag:false becomes { :flag => false }
|
15
|
-
(ApplixHash.parse '--flag:false').
|
17
|
+
expect(ApplixHash.parse '--flag:false').to eq([:flag, false])
|
16
18
|
|
17
19
|
# --option=value becomes { :option => "value" }
|
18
|
-
(ApplixHash.parse '--opt=val').
|
20
|
+
expect(ApplixHash.parse '--opt=val').to eq([:opt, 'val'])
|
19
21
|
end
|
20
22
|
end
|
data/spec/applix_spec.rb
CHANGED
@@ -4,28 +4,28 @@ describe Applix do
|
|
4
4
|
|
5
5
|
context 'main' do
|
6
6
|
it 'catches unknown task errors' do
|
7
|
-
expect { Applix.main(%w(
|
7
|
+
expect { Applix.main(%w(0no-such-task)) {} }.not_to raise_error
|
8
8
|
end
|
9
9
|
|
10
10
|
context 'with captured I/O streams' do
|
11
11
|
it 'prints a minimal (better than nothing?) usage line on errors' do
|
12
|
-
output = capture(:stdout) { Applix.main(%w(
|
13
|
-
output.
|
12
|
+
output = capture(:stdout) { Applix.main(%w(1no-such-task)) {} }
|
13
|
+
expect(output).to match(/usage: /)
|
14
14
|
end
|
15
15
|
|
16
16
|
it 'suppresses the callstack on errors' do
|
17
|
-
output = capture(:stdout) { Applix.main(%w(
|
18
|
-
output.
|
19
|
-
output.
|
17
|
+
output = capture(:stdout) { Applix.main(%w(expected-task-error-output)) {} }
|
18
|
+
expect(output).to match(/ ## no such task:/)
|
19
|
+
expect(output).not_to match(/ !! no such task:/)
|
20
20
|
end
|
21
21
|
|
22
22
|
it 'shows callstack on --debug option' do
|
23
|
-
output = capture(:stdout) { Applix.main(%w(--debug
|
24
|
-
output.
|
23
|
+
output = capture(:stdout) { Applix.main(%w(--debug 2no-such-task)) {} }
|
24
|
+
expect(output).to match(/ !! no such task:/)
|
25
25
|
end
|
26
26
|
|
27
27
|
it 'dumps a stacktrace on main with a !' do
|
28
|
-
expect { Applix.main!(%w(
|
28
|
+
expect { Applix.main!(%w(3no-such-task)) {} }.
|
29
29
|
to raise_error /no such task:/
|
30
30
|
end
|
31
31
|
end
|
@@ -46,7 +46,7 @@ describe Applix do
|
|
46
46
|
end
|
47
47
|
|
48
48
|
it 'calls cluster prolog' do
|
49
|
-
Applix.main(%w(foo a b)) do
|
49
|
+
expect(Applix.main(%w(foo a b)) do
|
50
50
|
cluster(:foo) do
|
51
51
|
prolog { |args, options|
|
52
52
|
args.should == %w(a b)
|
@@ -55,12 +55,12 @@ describe Applix do
|
|
55
55
|
handle(:a) { raise 'should not be called!' }
|
56
56
|
handle(:b) { :b_was_called }
|
57
57
|
end
|
58
|
-
end.
|
58
|
+
end).to be(:b_was_called)
|
59
59
|
end
|
60
60
|
|
61
61
|
it 'support :cluster for nesting' do
|
62
62
|
args = %w(-a -b:2 foo bar p1 p2)
|
63
|
-
Applix.main(args) do
|
63
|
+
expect(Applix.main(args) do
|
64
64
|
handle(:foo) do
|
65
65
|
raise 'should not be called!'
|
66
66
|
end
|
@@ -71,12 +71,12 @@ describe Applix do
|
|
71
71
|
args
|
72
72
|
end
|
73
73
|
end
|
74
|
-
end.
|
74
|
+
end).to eq(%w{p1 p2})
|
75
75
|
end
|
76
76
|
|
77
77
|
it 'can even cluster clusters' do
|
78
78
|
args = %w(foo bar f p1 p2)
|
79
|
-
Applix.main(args) do
|
79
|
+
expect(Applix.main(args) do
|
80
80
|
cluster(:foo) do
|
81
81
|
cluster(:bar) do
|
82
82
|
handle(:f) do |*args, options|
|
@@ -86,36 +86,58 @@ describe Applix do
|
|
86
86
|
end
|
87
87
|
end
|
88
88
|
end
|
89
|
-
end.
|
89
|
+
end).to eq(%w{p1 p2})
|
90
90
|
end
|
91
91
|
end #.cluster
|
92
92
|
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
93
|
+
context 'prolog invokations' do
|
94
|
+
it 'prolog can even temper with arguments to modify the handle sequence' do
|
95
|
+
expect(Applix.main(['a', 'b']) do
|
96
|
+
prolog { |args, options|
|
97
|
+
args.should == ['a', 'b']
|
98
|
+
args.reverse!
|
99
|
+
}
|
100
|
+
handle(:a) { raise 'should not be called!' }
|
101
|
+
handle(:b) { :b_was_called }
|
102
|
+
end).to eq(:b_was_called)
|
103
|
+
end
|
103
104
|
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
105
|
+
it 'prolog has read/write access to args and options' do
|
106
|
+
Applix.main(['func']) do
|
107
|
+
prolog { |args, options|
|
108
|
+
args.should == ['func']
|
109
|
+
options[:prolog] = Time.now
|
110
|
+
}
|
111
|
+
|
112
|
+
handle(:func) { |*_, options|
|
113
|
+
options[:prolog]
|
114
|
+
}
|
115
|
+
end.should_not be_nil
|
116
|
+
end
|
110
117
|
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
118
|
+
it 'runs before callback before handle calls' do
|
119
|
+
expect(Applix.main(['func']) do
|
120
|
+
|
121
|
+
# @prolog will be available in handle invocations
|
122
|
+
prolog {
|
123
|
+
@prolog = :prolog
|
124
|
+
}
|
125
|
+
|
126
|
+
# @epilog will NOT make it into the handle invocation
|
127
|
+
epilog { |rc, *_|
|
128
|
+
@epilog = :epilog
|
129
|
+
rc
|
130
|
+
}
|
131
|
+
|
132
|
+
handle(:func) {
|
133
|
+
[@prolog, @epilog]
|
134
|
+
}
|
135
|
+
end).to eq([:prolog, nil])
|
136
|
+
end
|
115
137
|
end
|
116
138
|
|
117
139
|
it 'epilog has access to task handler results' do
|
118
|
-
Applix.main(['func']) do
|
140
|
+
expect(Applix.main(['func']) do
|
119
141
|
# @epilog will NOT make it into the handle invocation
|
120
142
|
epilog { |rc, *_|
|
121
143
|
rc.should == [1, 2, 3]
|
@@ -123,27 +145,7 @@ describe Applix do
|
|
123
145
|
}
|
124
146
|
handle(:func) { [1, 2, 3] }
|
125
147
|
|
126
|
-
end.
|
127
|
-
end
|
128
|
-
|
129
|
-
it 'runs before callback before handle calls' do
|
130
|
-
Applix.main(['func']) do
|
131
|
-
|
132
|
-
# @prolog will be available in handle invocations
|
133
|
-
prolog {
|
134
|
-
@prolog = :prolog
|
135
|
-
}
|
136
|
-
|
137
|
-
# @epilog will NOT make it into the handle invocation
|
138
|
-
epilog { |rc, *_|
|
139
|
-
@epilog = :epilog
|
140
|
-
rc
|
141
|
-
}
|
142
|
-
|
143
|
-
handle(:func) {
|
144
|
-
[@prolog, @epilog]
|
145
|
-
}
|
146
|
-
end.should == [:prolog, nil]
|
148
|
+
end).to eq([3, 2, 1])
|
147
149
|
end
|
148
150
|
|
149
151
|
it 'runs epilog callback after handle' do
|
@@ -160,7 +162,7 @@ describe Applix do
|
|
160
162
|
last_action = :handle
|
161
163
|
}
|
162
164
|
end
|
163
|
-
last_action.
|
165
|
+
expect(last_action).to be(:epilog)
|
164
166
|
end
|
165
167
|
|
166
168
|
it 'supports :any as fallback on command lines without matching task' do
|
@@ -194,46 +196,63 @@ describe Applix do
|
|
194
196
|
end
|
195
197
|
end
|
196
198
|
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
199
|
+
describe 'any with argsloop' do
|
200
|
+
it 'loops over args' do
|
201
|
+
# stubbed app simulates consuming the args while looping over app calls
|
202
|
+
app = double(:app)
|
203
|
+
#app.should_receive(:op1).with(%w(p1 op2 2 3 op3 4 5 6), {}).and_return(%w(op2 2 3))
|
204
|
+
expect(app).to receive(:op1).with(%w(p1 op2 2 3 op3 4 5 6), {}).and_return(%w(op2 2 3))
|
205
|
+
#app.should_receive(:op2).with(%w(2 3), {}).and_return(%w(op3 4 5 6))
|
206
|
+
expect(app).to receive(:op2).with(%w(2 3), {}).and_return(%w(op3 4 5 6))
|
207
|
+
#app.should_receive(:op3).with(%w(4 5 6), {}).and_return([])
|
208
|
+
expect(app).to receive(:op3).with(%w(4 5 6), {}).and_return([])
|
209
|
+
Applix.main(%w(op1 p1 op2 2 3 op3 4 5 6)) do
|
210
|
+
handle(:not_called) { raise "can't possible happen" }
|
211
|
+
any(argsloop: app)
|
212
|
+
end
|
213
|
+
end
|
214
|
+
|
215
|
+
it 'instantiates a class instance' do
|
216
|
+
obj = double(:obj)
|
217
|
+
clazz = Class.new
|
218
|
+
expect(clazz).to receive(:new).with({o: true}).and_return(obj)
|
219
|
+
expect(obj).to receive(:p).with('a1', 'a2').and_return([])
|
220
|
+
Applix.main(%w(-o p a1 a2)) do
|
221
|
+
handle(:not_called) { raise "can't possible happen" }
|
222
|
+
any(argsloop: clazz)
|
223
|
+
end
|
206
224
|
end
|
207
225
|
end
|
208
226
|
|
209
227
|
it 'should call actions by first argument names' do
|
210
228
|
argv = ['func']
|
211
|
-
Applix.main(argv) do
|
229
|
+
expect(Applix.main(argv) do
|
212
230
|
handle(:func) { :func_return }
|
213
|
-
end.
|
231
|
+
end).to be(:func_return)
|
214
232
|
end
|
215
233
|
|
216
234
|
it 'passes arguments to function' do
|
217
235
|
argv = ['func', 'p1', 'p2']
|
218
236
|
subject = Applix.main(argv) { handle(:func) {|*args, options| args} }
|
219
|
-
subject.
|
237
|
+
expect(subject).to eq(%w(p1 p2))
|
220
238
|
end
|
221
239
|
|
222
240
|
it 'passes a default options hash to function' do
|
223
241
|
argv = %w(func)
|
224
|
-
Applix.main(argv) do
|
242
|
+
expect(Applix.main(argv) do
|
225
243
|
handle(:func) { |*_, options| options }
|
226
|
-
end.
|
244
|
+
end).to eq({})
|
227
245
|
end
|
228
246
|
|
229
247
|
it 'should pass a processed options hash' do
|
230
248
|
argv = %w(-a --bar func)
|
231
|
-
Applix.main(argv) do
|
249
|
+
expect(Applix.main(argv) do
|
232
250
|
handle(:func) { |*_, options| options }
|
233
|
-
end.
|
251
|
+
end).to include(:a => true, :bar => true)
|
234
252
|
end
|
235
253
|
|
236
254
|
pending 'parses dashes in string options' do
|
255
|
+
fail '?'
|
237
256
|
end
|
238
257
|
|
239
258
|
it "should parse the old unit test..." do
|
@@ -244,22 +263,22 @@ describe Applix do
|
|
244
263
|
# --float=2.3 becomes { :float => "2.3" }
|
245
264
|
# --float:2.3 becomes { :float => 2.3 }
|
246
265
|
# -f:1.234 becomes { :f => 1.234 }
|
247
|
-
(Hash.from_argv ["--int=1"])[:int].
|
248
|
-
(Hash.from_argv ["--int:1"])[:int].
|
249
|
-
(Hash.from_argv ["--float=2.3"])[:float].
|
250
|
-
(Hash.from_argv ["--float:2.3"])[:float].
|
251
|
-
(Hash.from_argv ["-f:2.345"])[:f].
|
266
|
+
expect((Hash.from_argv ["--int=1"])[:int]).to eq("1")
|
267
|
+
expect((Hash.from_argv ["--int:1"])[:int]).to eq(1)
|
268
|
+
expect((Hash.from_argv ["--float=2.3"])[:float]).to eq("2.3")
|
269
|
+
expect((Hash.from_argv ["--float:2.3"])[:float]).to eq(2.3)
|
270
|
+
expect((Hash.from_argv ["-f:2.345"])[:f]).to eq(2.345)
|
252
271
|
|
253
272
|
# --txt="foo bar" becomes { :txt => "foo bar" }
|
254
273
|
# --txt:'"foo bar"' becomes { :txt => "foo bar" }
|
255
274
|
# --txt:%w{foo bar} becomes { :txt => ["foo", "bar"] }
|
256
|
-
(Hash.from_argv ['--txt="foo bar"'])[:txt].
|
257
|
-
(Hash.from_argv [%q|--txt:'"foo bar"'|])[:txt].
|
258
|
-
(Hash.from_argv [%q|--txt:'%w{foo bar}'|])[:txt].
|
275
|
+
expect((Hash.from_argv ['--txt="foo bar"'])[:txt]).to eq("foo bar")
|
276
|
+
expect((Hash.from_argv [%q|--txt:'"foo bar"'|])[:txt]).to eq("foo bar")
|
277
|
+
expect((Hash.from_argv [%q|--txt:'%w{foo bar}'|])[:txt]).to eq(["foo", "bar"])
|
259
278
|
|
260
279
|
# --now:Time.now becomes { :now => Mon Jul 09 01:30:21 0200 2007 }
|
261
280
|
#dt = Time.now - H.parse("--now:Time.now")[1]
|
262
|
-
(t = (Hash.from_argv ["--now:Time.now"])[:now]).
|
281
|
+
expect((t = (Hash.from_argv ["--now:Time.now"])[:now])).to be
|
263
282
|
end
|
264
283
|
end
|
265
284
|
|
data/spec/spec_helper.rb
CHANGED
@@ -4,6 +4,7 @@ $:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
|
4
4
|
#require 'rspec/mocks'
|
5
5
|
require 'applix'
|
6
6
|
require 'applix/oattr'
|
7
|
+
require 'byebug'
|
7
8
|
|
8
9
|
RSpec.configure do |config|
|
9
10
|
config.before :each do
|
@@ -11,6 +12,13 @@ RSpec.configure do |config|
|
|
11
12
|
|
12
13
|
config.after :each do
|
13
14
|
end
|
15
|
+
|
16
|
+
# disable $crux debug flag after each test
|
17
|
+
config.after(:each) { $crux = false }
|
18
|
+
|
19
|
+
config.expect_with :rspec do |c|
|
20
|
+
c.syntax = [:should, :expect]
|
21
|
+
end
|
14
22
|
end
|
15
23
|
|
16
24
|
# captures standard output streams to help testing console I/O
|
metadata
CHANGED
@@ -1,111 +1,111 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: applix
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.12
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- art+com/dirk luesebrink
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-01-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: daemons
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - ~>
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '1.3'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - ~>
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '1.3'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rspec
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rspec-mocks
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: guard-rspec
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
98
|
+
name: byebug
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- -
|
101
|
+
- - ">="
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: '0'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- -
|
108
|
+
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
111
|
description: "\n ApplixHash#from_argv builds hashes from ARGV like argument vectors\n
|
@@ -127,11 +127,11 @@ executables: []
|
|
127
127
|
extensions: []
|
128
128
|
extra_rdoc_files: []
|
129
129
|
files:
|
130
|
-
- .autotest
|
131
|
-
- .document
|
132
|
-
- .gitignore
|
133
|
-
- .rspec
|
134
|
-
- .travis.yml
|
130
|
+
- ".autotest"
|
131
|
+
- ".document"
|
132
|
+
- ".gitignore"
|
133
|
+
- ".rspec"
|
134
|
+
- ".travis.yml"
|
135
135
|
- Gemfile
|
136
136
|
- Guardfile
|
137
137
|
- LICENSE
|
@@ -155,17 +155,17 @@ require_paths:
|
|
155
155
|
- lib
|
156
156
|
required_ruby_version: !ruby/object:Gem::Requirement
|
157
157
|
requirements:
|
158
|
-
- -
|
158
|
+
- - ">="
|
159
159
|
- !ruby/object:Gem::Version
|
160
160
|
version: '0'
|
161
161
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
162
162
|
requirements:
|
163
|
-
- -
|
163
|
+
- - ">="
|
164
164
|
- !ruby/object:Gem::Version
|
165
165
|
version: '0'
|
166
166
|
requirements: []
|
167
167
|
rubyforge_project:
|
168
|
-
rubygems_version: 2.
|
168
|
+
rubygems_version: 2.4.2
|
169
169
|
signing_key:
|
170
170
|
specification_version: 4
|
171
171
|
summary: extracting typed option hashes from command line arguments
|