obfusk-util 0.0.1.SNAPSHOT.20130725000153 → 0.4.2

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.
@@ -2,10 +2,10 @@
2
2
  #
3
3
  # File : obfusk/util/run_spec.rb
4
4
  # Maintainer : Felix C. Stegerman <flx@obfusk.net>
5
- # Date : 2013-07-24
5
+ # Date : 2014-02-19
6
6
  #
7
- # Copyright : Copyright (C) 2013 Felix C. Stegerman
8
- # Licence : GPLv2
7
+ # Copyright : Copyright (C) 2014 Felix C. Stegerman
8
+ # Licence : LGPLv3+
9
9
  #
10
10
  # -- ; }}}1
11
11
 
@@ -78,10 +78,166 @@ describe 'obfusk/util/run' do
78
78
  end
79
79
  end # }}}1
80
80
 
81
+ context 'capture2' do # {{{1
82
+ it 'succeed' do
83
+ o, s = ou.capture2 'bash', '-c', 'echo $FOO',
84
+ env: { 'FOO' => 'foo' }
85
+ expect(s.exitstatus).to eq(0)
86
+ expect(o).to eq("foo\n")
87
+ end
88
+ it 'fail (no shell)' do
89
+ expect { ou.capture2 'echo THIS IS NOT A COMMAND' } .to \
90
+ raise_error(ou::RunError, /No such file or directory/) # ????
91
+ end
92
+ end # }}}1
93
+
94
+ context 'capture2e' do # {{{1
95
+ it 'succeed' do
96
+ oe, s = ou.capture2e 'bash', '-c', 'echo $FOO >&2; pwd',
97
+ env: { 'FOO' => 'foo' }, chdir: '/'
98
+ expect(s.exitstatus).to eq(0)
99
+ expect(oe).to eq("foo\n/\n")
100
+ end
101
+ it 'fail (no shell)' do
102
+ expect { ou.capture2e 'echo THIS IS NOT A COMMAND' } .to \
103
+ raise_error(ou::RunError, /No such file or directory/) # ????
104
+ end
105
+ end # }}}1
106
+
107
+ context 'capture3' do # {{{1
108
+ it 'succeed' do
109
+ o, e, s = ou.capture3 'bash', '-c', 'echo $FOO >&2; pwd',
110
+ env: { 'FOO' => 'foo' }, chdir: '/'
111
+ expect(s.exitstatus).to eq(0)
112
+ expect(o).to eq("/\n")
113
+ expect(e).to eq("foo\n")
114
+ end
115
+ it 'fail (no shell)' do
116
+ expect { ou.capture3 'echo THIS IS NOT A COMMAND' } .to \
117
+ raise_error(ou::RunError, /No such file or directory/) # ????
118
+ end
119
+ end # }}}1
120
+
121
+ context 'pipeline' do # {{{1
122
+ it 'succeed' do
123
+ ri, wi = IO.pipe; wi.puts %w{ foo bar baz foo }; wi.close
124
+ ro, wo = IO.pipe
125
+ ss = ou.pipeline ['sort'], %w{ uniq -c }, in: ri, out: wo;
126
+ wo.close
127
+ o = ro.read; ro.close; ri.close
128
+ expect(ss.length).to eq(2)
129
+ expect(ss[0].exitstatus).to eq(0)
130
+ expect(ss[1].exitstatus).to eq(0)
131
+ expect(o).to match(/\A +1 bar\n +1 baz\n +2 foo\n\z/)
132
+ end
133
+ it 'fail (no shell)' do
134
+ expect { ou.pipeline ['echo THIS IS NOT A COMMAND'] } .to \
135
+ raise_error(ou::RunError, /No such file or directory/) # ????
136
+ end
137
+ end # }}}1
138
+
139
+ context 'pipeline_r' do # {{{1
140
+ it 'succeed' do
141
+ ri, wi = IO.pipe; wi.puts %w{ foo bar baz foo }; wi.close
142
+ ou.pipeline_r(['sort'], %w{ uniq -c }, in: ri) do |o,ts|
143
+ expect(ts.length).to eq(2)
144
+ expect(ts[0].value.exitstatus).to eq(0)
145
+ expect(ts[1].value.exitstatus).to eq(0)
146
+ expect(o.read).to match(/\A +1 bar\n +1 baz\n +2 foo\n\z/)
147
+ end
148
+ end
149
+ it 'fail (no shell)' do
150
+ expect { ou.pipeline_r ['echo THIS IS NOT A COMMAND'] } .to \
151
+ raise_error(ou::RunError, /No such file or directory/) # ????
152
+ end
153
+ end # }}}1
154
+
155
+ context 'pipeline_rw' do # {{{1
156
+ it 'succeed' do
157
+ ou.pipeline_rw(['sort'], %w{ uniq -c }) do |i,o,ts|
158
+ i.puts %w{ foo bar baz foo }; i.close
159
+ expect(ts.length).to eq(2)
160
+ expect(ts[0].value.exitstatus).to eq(0)
161
+ expect(ts[1].value.exitstatus).to eq(0)
162
+ expect(o.read).to match(/\A +1 bar\n +1 baz\n +2 foo\n\z/)
163
+ end
164
+ end
165
+ it 'fail (no shell)' do
166
+ expect { ou.pipeline_rw ['echo THIS IS NOT A COMMAND'] } .to \
167
+ raise_error(ou::RunError, /No such file or directory/) # ????
168
+ end
169
+ end # }}}1
170
+
171
+ context 'pipeline_start' do # {{{1
172
+ it 'succeed' do
173
+ ri, wi = IO.pipe; wi.puts %w{ foo bar baz foo }; wi.close
174
+ ro, wo = IO.pipe
175
+ ou.pipeline_start(['sort'], %w{ uniq -c }, in: ri, out: wo) do |ts|
176
+ expect(ts.length).to eq(2)
177
+ expect(ts[0].value.exitstatus).to eq(0)
178
+ expect(ts[1].value.exitstatus).to eq(0)
179
+ end
180
+ wo.close; o = ro.read; ro.close; ri.close
181
+ expect(o).to match(/\A +1 bar\n +1 baz\n +2 foo\n\z/)
182
+ end
183
+ it 'fail (no shell)' do
184
+ expect { ou.pipeline_start ['echo THIS IS NOT A COMMAND'] } .to \
185
+ raise_error(ou::RunError, /No such file or directory/) # ????
186
+ end
187
+ end # }}}1
188
+
189
+ context 'pipeline_w' do # {{{1
190
+ it 'succeed' do
191
+ ro, wo = IO.pipe
192
+ ou.pipeline_w(['sort'], %w{ uniq -c }, out: wo) do |i,ts|
193
+ i.puts %w{ foo bar baz foo }; i.close
194
+ expect(ts.length).to eq(2)
195
+ expect(ts[0].value.exitstatus).to eq(0)
196
+ expect(ts[1].value.exitstatus).to eq(0)
197
+ end
198
+ wo.close; o = ro.read; ro.close
199
+ expect(o).to match(/\A +1 bar\n +1 baz\n +2 foo\n\z/)
200
+ end
201
+ it 'fail (no shell)' do
202
+ expect { ou.pipeline_w ['echo THIS IS NOT A COMMAND'] } .to \
203
+ raise_error(ou::RunError, /No such file or directory/) # ????
204
+ end
205
+ end # }}}1
206
+
207
+ context 'popen2' do # {{{1
208
+ it 'succeed' do
209
+ ou.popen2 'bash', '-c', 'echo $FOO',
210
+ env: { 'FOO' => 'foo' } do |i,o,t|
211
+ i.close
212
+ t.value.exitstatus.should == 0
213
+ o.read.should == "foo\n"
214
+ end
215
+ end
216
+ it 'fail (no shell)' do
217
+ expect { ou.popen2 'echo THIS IS NOT A COMMAND' } .to \
218
+ raise_error(ou::RunError, /No such file or directory/) # ????
219
+ end
220
+ end # }}}1
221
+
222
+ context 'popen2e' do # {{{1
223
+ it 'succeed' do
224
+ ou.popen2e 'bash', '-c', 'echo $FOO >&2; pwd',
225
+ env: { 'FOO' => 'foo' }, chdir: '/' do |i,oe,t|
226
+ i.close
227
+ t.value.exitstatus.should == 0
228
+ oe.read.should == "foo\n/\n"
229
+ end
230
+ end
231
+ it 'fail (no shell)' do
232
+ expect { ou.popen2e 'echo THIS IS NOT A COMMAND' } .to \
233
+ raise_error(ou::RunError, /No such file or directory/) # ????
234
+ end
235
+ end # }}}1
236
+
81
237
  context 'popen3' do # {{{1
82
238
  it 'succeed' do
83
239
  ou.popen3 'bash', '-c', 'echo $FOO >&2; pwd',
84
- env: { 'FOO' => 'foo' }, chdir: '/' do |i,o,e,t|
240
+ env: { 'FOO' => 'foo' }, chdir: '/' do |i,o,e,t|
85
241
  i.close
86
242
  t.value.exitstatus.should == 0
87
243
  o.read.should == "/\n"
@@ -98,7 +254,7 @@ describe 'obfusk/util/run' do
98
254
  it 'colour' do
99
255
  r, w = IO.pipe
100
256
  ou.capture_stdout(:tty) do
101
- pid = ou.ospawn *%w{ echo FOO }, out: w
257
+ pid = ou.ospawn(*%w{ echo FOO }, out: w)
102
258
  w.close; Process.wait pid; x = r.read; r.close
103
259
  x.should == "FOO\n"
104
260
  $?.exitstatus.should == 0
@@ -110,7 +266,7 @@ describe 'obfusk/util/run' do
110
266
  it 'colour' do
111
267
  r, w = IO.pipe
112
268
  ou.capture_stdout(:tty) do
113
- res = ou.ospawn_w *%w{ echo FOO }, out: w
269
+ res = ou.ospawn_w(*%w{ echo FOO }, out: w)
114
270
  w.close; x = r.read; r.close
115
271
  x.should == "FOO\n"
116
272
  res.exitstatus.should == 0
@@ -120,11 +276,11 @@ describe 'obfusk/util/run' do
120
276
 
121
277
  context 'chk_exit' do # {{{1
122
278
  it 'zero' do
123
- expect { ou.chk_exit(%w{ true }) { |a| ou.spawn_w *a } } \
279
+ expect { ou.chk_exit(%w{ true }) { |a| ou.spawn_w(*a) } } \
124
280
  .to_not raise_error
125
281
  end
126
282
  it 'non-zero' do
127
- expect { ou.chk_exit(%w{ false }) { |a| ou.spawn_w *a } } \
283
+ expect { ou.chk_exit(%w{ false }) { |a| ou.spawn_w(*a) } } \
128
284
  .to raise_error(ou::RunError, /command returned non-zero/)
129
285
  end
130
286
  end # }}}1
@@ -0,0 +1,125 @@
1
+ # -- ; {{{1
2
+ #
3
+ # File : obfusk/util/sh_spec.rb
4
+ # Maintainer : Felix C. Stegerman <flx@obfusk.net>
5
+ # Date : 2014-02-19
6
+ #
7
+ # Copyright : Copyright (C) 2014 Felix C. Stegerman
8
+ # Licence : LGPLv3+
9
+ #
10
+ # -- ; }}}1
11
+
12
+ require 'obfusk/util/sh'
13
+
14
+ ou = Obfusk::Util
15
+
16
+ describe 'obfusk/util/sh' do
17
+
18
+ context 'sh (1)' do # {{{1
19
+ it 'echoes w/ args and env' do
20
+ r = ou.sh 'echo "$0" ">>$1<<" ">>$FOO<<"', '"one"',
21
+ 'FOO' => 'foo'
22
+ expect(r.ok?).to eq(true)
23
+ expect(r.stdout).to eq(%Q{bash >>"one"<< >>foo<<\n})
24
+ expect(r.stderr).to eq('')
25
+ end
26
+ it 'works w/ print, exit, and merge' do
27
+ r = ou.sh 'echo step1; false; echo step3', print: true, exit: true,
28
+ merge: true
29
+ expect(r.ok?).to eq(false)
30
+ expect(r.stdout).to eq("+ echo step1\nstep1\n+ false\n")
31
+ expect(r.stderr).to eq(nil)
32
+ end
33
+ it 'outputs pwd w/ arg' do
34
+ r = ou.sh 'cd "$1"; pwd', '/'
35
+ expect(r.ok?).to eq(true)
36
+ expect(r.stdout).to eq("/\n")
37
+ expect(r.stderr).to eq('')
38
+ end
39
+ it 'outputs pwd w/ :chdir' do
40
+ r = ou.sh 'pwd', chdir: '/'
41
+ expect(r.ok?).to eq(true)
42
+ expect(r.stdout).to eq("/\n")
43
+ expect(r.stderr).to eq('')
44
+ end
45
+ end # }}}1
46
+
47
+ context 'sh (2)' do # {{{1
48
+ it 'prints to stderr w/ print/-x' do
49
+ r = ou.sh 'echo FOO; echo BAR', print: true
50
+ expect(r.ok?).to eq(true)
51
+ expect(r.stdout).to eq("FOO\nBAR\n")
52
+ expect(r.stderr).to eq("+ echo FOO\n+ echo BAR\n")
53
+ end
54
+ it 'ignores false w/o exit/-e' do
55
+ r = ou.sh 'echo FOO; false; echo BAR'
56
+ expect(r.ok?).to eq(true)
57
+ expect(r.stdout).to eq("FOO\nBAR\n")
58
+ expect(r.stderr).to eq('')
59
+ end
60
+ it 'stops at false w/ exit/-e' do
61
+ r = ou.sh 'echo FOO; false; echo BAR', exit: true
62
+ expect(r.ok?).to eq(false)
63
+ expect(r.stdout).to eq("FOO\n")
64
+ expect(r.stderr).to eq('')
65
+ end
66
+ it 'merges stdout and stderr w/ merge' do
67
+ r = ou.sh 'echo FOO; echo BAR >&2; echo BAZ', merge: true
68
+ expect(r.ok?).to eq(true)
69
+ expect(r.stdout).to eq("FOO\nBAR\nBAZ\n")
70
+ expect(r.stderr).to eq(nil)
71
+ end
72
+ it 'merges env w/ string keys' do
73
+ r = ou.sh 'echo $FOO; echo $BAR',
74
+ env: { 'FOO' => 'no', 'BAR' => 'bar' }, 'FOO' => 'yes'
75
+ expect(r.ok?).to eq(true)
76
+ expect(r.stdout).to eq("yes\nbar\n")
77
+ expect(r.stderr).to eq('')
78
+ end
79
+ end # }}}1
80
+
81
+ context 'sh (3)' do # {{{1
82
+ it 'false => ok? returns false and ok! raises' do
83
+ r = ou.sh 'false'
84
+ expect(r.ok?).to eq(false)
85
+ expect(r.status.exitstatus).to eq(1)
86
+ expect { r.ok! } .to \
87
+ raise_error(ou::RunError, /command returned non-zero/)
88
+ expect(r.stdout).to eq('')
89
+ expect(r.stderr).to eq('')
90
+ end
91
+ it 'fails w/ message on stderr w/ NONEXISTENT' do
92
+ r = ou.sh 'NONEXISTENT'
93
+ expect(r.ok?).to eq(false)
94
+ expect(r.status.exitstatus).to eq(127)
95
+ expect(r.stdout).to eq('')
96
+ expect(r.stderr).to eq("bash: NONEXISTENT: command not found\n")
97
+ end
98
+ it 'fails w/ RunError w/ shell NONEXISTENT' do
99
+ expect { ou.sh 'irrelevant', shell: 'NONEXISTENT' } .to \
100
+ raise_error(ou::RunError, /failed to capture3 command/)
101
+ end
102
+ end # }}}1
103
+
104
+ context 'sh?' do # {{{1
105
+ it 'true => true' do
106
+ expect(ou.sh? 'true').to eq(true)
107
+ end
108
+ it 'false => false' do
109
+ expect(ou.sh? 'false').to eq(false)
110
+ end
111
+ end # }}}1
112
+
113
+ context 'sh!' do # {{{1
114
+ it 'true => nil' do
115
+ expect( ou.sh! 'true' ).to eq(nil)
116
+ end
117
+ it 'false => RunError' do
118
+ expect { ou.sh! 'false' } .to \
119
+ raise_error(ou::RunError, /command returned non-zero/)
120
+ end
121
+ end # }}}1
122
+
123
+ end
124
+
125
+ # vim: set tw=70 sw=2 sts=2 et fdm=marker :
@@ -2,10 +2,10 @@
2
2
  #
3
3
  # File : obfusk/util/spec_spec.rb
4
4
  # Maintainer : Felix C. Stegerman <flx@obfusk.net>
5
- # Date : 2013-07-24
5
+ # Date : 2014-02-19
6
6
  #
7
- # Copyright : Copyright (C) 2013 Felix C. Stegerman
8
- # Licence : GPLv2
7
+ # Copyright : Copyright (C) 2014 Felix C. Stegerman
8
+ # Licence : LGPLv3+
9
9
  #
10
10
  # -- ; }}}1
11
11
 
@@ -2,10 +2,10 @@
2
2
  #
3
3
  # File : obfusk/util/struct_spec.rb
4
4
  # Maintainer : Felix C. Stegerman <flx@obfusk.net>
5
- # Date : 2013-07-24
5
+ # Date : 2014-02-19
6
6
  #
7
- # Copyright : Copyright (C) 2013 Felix C. Stegerman
8
- # Licence : GPLv2
7
+ # Copyright : Copyright (C) 2014 Felix C. Stegerman
8
+ # Licence : LGPLv3+
9
9
  #
10
10
  # -- ; }}}1
11
11
 
@@ -2,10 +2,10 @@
2
2
  #
3
3
  # File : obfusk/util/term_spec.rb
4
4
  # Maintainer : Felix C. Stegerman <flx@obfusk.net>
5
- # Date : 2013-07-24
5
+ # Date : 2014-02-19
6
6
  #
7
- # Copyright : Copyright (C) 2013 Felix C. Stegerman
8
- # Licence : GPLv2
7
+ # Copyright : Copyright (C) 2014 Felix C. Stegerman
8
+ # Licence : LGPLv3+
9
9
  #
10
10
  # -- ; }}}1
11
11
 
@@ -2,10 +2,10 @@
2
2
  #
3
3
  # File : obfusk/util/valid_spec.rb
4
4
  # Maintainer : Felix C. Stegerman <flx@obfusk.net>
5
- # Date : 2013-07-24
5
+ # Date : 2014-02-19
6
6
  #
7
- # Copyright : Copyright (C) 2013 Felix C. Stegerman
8
- # Licence : GPLv2
7
+ # Copyright : Copyright (C) 2014 Felix C. Stegerman
8
+ # Licence : LGPLv3+
9
9
  #
10
10
  # -- ; }}}1
11
11
 
metadata CHANGED
@@ -1,110 +1,112 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: obfusk-util
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1.SNAPSHOT.20130725000153
5
- prerelease: 6
4
+ version: 0.4.2
6
5
  platform: ruby
7
6
  authors:
8
7
  - Felix C. Stegerman
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-07-24 00:00:00.000000000 Z
11
+ date: 2014-02-19 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: rake
16
- requirement: &14769780 !ruby/object:Gem::Requirement
17
- none: false
15
+ requirement: !ruby/object:Gem::Requirement
18
16
  requirements:
19
- - - ! '>='
17
+ - - ">="
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :development
23
21
  prerelease: false
24
- version_requirements: *14769780
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
25
27
  - !ruby/object:Gem::Dependency
26
28
  name: rspec
27
- requirement: &14764420 !ruby/object:Gem::Requirement
28
- none: false
29
+ requirement: !ruby/object:Gem::Requirement
29
30
  requirements:
30
- - - ! '>='
31
+ - - ">="
31
32
  - !ruby/object:Gem::Version
32
33
  version: '0'
33
34
  type: :development
34
35
  prerelease: false
35
- version_requirements: *14764420
36
- description: ! 'miscellaneous utility library for ruby
37
-
38
-
39
- ...
40
-
41
- '
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: |
42
+ miscellaneous utility library for ruby
42
43
  email:
43
44
  - flx@obfusk.net
44
45
  executables: []
45
46
  extensions: []
46
47
  extra_rdoc_files: []
47
48
  files:
48
- - .yardopts
49
+ - ".yardopts"
49
50
  - README.md
50
51
  - Rakefile
51
52
  - obfusk-util.gemspec
52
- - lib/obfusk/util/message.rb
53
- - lib/obfusk/util/struct.rb
54
- - lib/obfusk/util/spec.rb
55
- - lib/obfusk/util/os.rb
56
- - lib/obfusk/util/version.rb
57
- - lib/obfusk/util/process.rb
58
53
  - lib/obfusk/util/run.rb
59
- - lib/obfusk/util/data.rb
60
- - lib/obfusk/util/opt.rb
61
- - lib/obfusk/util/fs.rb
62
- - lib/obfusk/util/term.rb
63
54
  - lib/obfusk/util/misc.rb
55
+ - lib/obfusk/util/opt.rb
56
+ - lib/obfusk/util/os.rb
64
57
  - lib/obfusk/util/valid.rb
58
+ - lib/obfusk/util/module.rb
65
59
  - lib/obfusk/util/all.rb
60
+ - lib/obfusk/util/process.rb
61
+ - lib/obfusk/util/fs.rb
62
+ - lib/obfusk/util/sh.rb
63
+ - lib/obfusk/util/data.rb
64
+ - lib/obfusk/util/spec.rb
65
+ - lib/obfusk/util/message.rb
66
+ - lib/obfusk/util/version.rb
66
67
  - lib/obfusk/util/die.rb
67
- - lib/obfusk/util/module.rb
68
+ - lib/obfusk/util/term.rb
69
+ - lib/obfusk/util/struct.rb
68
70
  - lib/obfusk/util/cmd.rb
69
- - spec/obfusk/util/misc_spec.rb
70
- - spec/obfusk/util/fs_spec.rb
71
- - spec/obfusk/util/opt_spec.rb
71
+ - spec/obfusk/util/die_spec.rb
72
+ - spec/obfusk/util/valid_spec.rb
73
+ - spec/obfusk/util/sh_spec.rb
72
74
  - spec/obfusk/util/message_spec.rb
75
+ - spec/obfusk/util/term_spec.rb
73
76
  - spec/obfusk/util/os_spec.rb
74
- - spec/obfusk/util/module_spec.rb
75
- - spec/obfusk/util/data_spec.rb
77
+ - spec/obfusk/util/spec_spec.rb
78
+ - spec/obfusk/util/opt_spec.rb
76
79
  - spec/obfusk/util/struct_spec.rb
77
- - spec/obfusk/util/valid_spec.rb
80
+ - spec/obfusk/util/module_spec.rb
81
+ - spec/obfusk/util/fs_spec.rb
82
+ - spec/obfusk/util/misc_spec.rb
78
83
  - spec/obfusk/util/cmd_spec.rb
79
- - spec/obfusk/util/die_spec.rb
80
- - spec/obfusk/util/term_spec.rb
84
+ - spec/obfusk/util/data_spec.rb
81
85
  - spec/obfusk/util/process_spec.rb
82
- - spec/obfusk/util/spec_spec.rb
83
86
  - spec/obfusk/util/run_spec.rb
84
87
  homepage: https://github.com/obfusk/rb-obfusk-util
85
88
  licenses:
86
- - GPLv2
89
+ - LGPLv3+
90
+ metadata: {}
87
91
  post_install_message:
88
92
  rdoc_options: []
89
93
  require_paths:
90
94
  - lib
91
95
  required_ruby_version: !ruby/object:Gem::Requirement
92
- none: false
93
96
  requirements:
94
- - - ! '>='
97
+ - - ">="
95
98
  - !ruby/object:Gem::Version
96
99
  version: 1.9.1
97
100
  required_rubygems_version: !ruby/object:Gem::Requirement
98
- none: false
99
101
  requirements:
100
- - - ! '>'
102
+ - - ">="
101
103
  - !ruby/object:Gem::Version
102
- version: 1.3.1
104
+ version: '0'
103
105
  requirements: []
104
106
  rubyforge_project:
105
- rubygems_version: 1.8.11
107
+ rubygems_version: 2.0.14
106
108
  signing_key:
107
- specification_version: 3
109
+ specification_version: 4
108
110
  summary: miscellaneous utility library for ruby
109
111
  test_files: []
110
112
  has_rdoc: