applix 0.4.11 → 0.4.12
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 +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
|