obfusk-util 0.0.1.SNAPSHOT.20130725000153 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: