unicorn-cuba-base 1.5.0 → 1.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- YzE3ODM1NDM5Y2ZhODc5ZGE4OTU5ZTFhZDU4M2RmNTExYzM5ZjQ3NQ==
4
+ NDM4MGI3YTdmZWYyNWE4NmU5M2Q0ODhlZDBmYzBmNGRhZmRhNDY3Mw==
5
5
  data.tar.gz: !binary |-
6
- OGM3NTRmYTYzOTgxN2Q2ZmY2NDQ3NjIwZjRjNzU0NTNiNjZmMDZhYg==
6
+ MjUzOTJiMTgwMmRkMGY2MDg1YTU3MGNjNzA2MDIyZGMzMDU0YTdhNQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NTExZDAxOTVkZDExNTJhMjViZjliODE1NzIwNDVlODZkMTdlZjAyZjFjNDNk
10
- OGQ4YzhkNjg4NGE2ODViZjg3NzI1YTk1NmZlOTVhN2E5ZDIwZTAzYTk2Nzdk
11
- NzQ5MjM5NWE4NjQ0Zjg3MWJlOGU4ZjBiMTQ3YzIzMjA0Zjc1ZWQ=
9
+ NzUzM2M4ODdkZTdjODM5ZTViNjJhZTYxNGRlNTFjNTQ5ZmNiZDJhMDVmYzVj
10
+ OTk5ODAyYjU4NzQwNWQzMzMwNjMzNDczYjlkMzMxZjJiYjkzMGI0Mjc5NDMx
11
+ MmVhNjFlZGE4ZTdlY2JmYjA1YWY1YmMzYTkxZTdiNTlhZGI3YmE=
12
12
  data.tar.gz: !binary |-
13
- ZjliMzIwMTM1YmUzMzY2YzVlMTFiMGI3ZDY0MzljN2ZiMDI4NGZhMjQ0NGI2
14
- ZTZiZWFjZTExZDUyODEyMjBlNTJmM2RlYjdkNjM1ZmRjZjcwNmI5OTUzM2Ux
15
- MmNmOTVjOWIyMmVlMTkyYTNhOWQ4YTdmNTViMGExMjQxY2Q2ODM=
13
+ ODAxOTFhZjRlNGY0ZTRhMjBhODczNDA3MTExMDdmYTBjZGEyOWFkN2I3YmNh
14
+ MTYxNjE2ZTkwZGRlMGM2YjNmMTYxYmNjZTgyYjdmODI1N2NiYjI0MmE3MjNj
15
+ NzdlMGYwYzEyNjI4Mjc5MzJkNmNjNjUzZWQ3YmM1ZmZiMDdmM2M=
data/Gemfile CHANGED
@@ -3,7 +3,7 @@ source "http://rubygems.org"
3
3
  ruby "1.9.3"
4
4
 
5
5
  gem "cuba", "~> 3.0"
6
- gem "unicorn", "~> 4.6.2"
6
+ gem "unicorn", '~> 4.6', '>= 4.6.2'
7
7
  gem "raindrops", "~> 0.11"
8
8
  gem "cli", "~> 1.3"
9
9
  gem "facter", "~> 1.6", ">= 1.6.18"
@@ -75,4 +75,4 @@ DEPENDENCIES
75
75
  rdoc (~> 3.9)
76
76
  rspec (~> 2.13)
77
77
  ruby-ip (~> 0.9)
78
- unicorn (~> 4.6.2)
78
+ unicorn (~> 4.6, >= 4.6.2)
data/Rakefile CHANGED
@@ -17,10 +17,13 @@ Jeweler::Tasks.new do |gem|
17
17
  gem.name = "unicorn-cuba-base"
18
18
  gem.homepage = "http://github.com/jpastuszek/unicorn-cuba-base"
19
19
  gem.license = "MIT"
20
- gem.summary = "web appliaction base powered by Unicorn and Cuba"
21
- gem.description = "web application base powered by Unicorn HTTP server and based on Cuba framework extended with additional Rack middleware and Cuba plugins"
20
+ gem.summary = "Web appliaction base powered by Unicorn and Cuba"
21
+ gem.description = "Web application base powered by Unicorn HTTP server and based on Cuba framework extended with additional Rack middleware and Cuba plugins"
22
22
  gem.email = "jpastuszek@gmail.com"
23
23
  gem.authors = ["Jakub Pastuszek"]
24
+ gem.files.exclude "spec/**/*"
25
+ gem.files.exclude "*.gemspec"
26
+ gem.files.exclude ".rspec"
24
27
  # dependencies defined in Gemfile
25
28
  end
26
29
  Jeweler::RubygemsDotOrgTasks.new
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.5.0
1
+ 1.6.0
@@ -63,6 +63,7 @@ class Application
63
63
  root_logger.level = RootLogger::WARN
64
64
  root_logger.level = RootLogger::INFO if @settings.verbose
65
65
  root_logger.level = RootLogger::DEBUG if @settings.debug
66
+ root_logger.enable_perf_logging if @settings.perf_stats
66
67
  Controller.logger = root_logger
67
68
  MemoryLimit.logger = Controller.logger_for(MemoryLimit)
68
69
 
@@ -175,6 +176,9 @@ class Application
175
176
  switch :debug,
176
177
  short: :d,
177
178
  description: 'enable verbose and debug logging (DEBUG)'
179
+ switch :perf_stats,
180
+ short: :V,
181
+ description: 'enable logging of performance statistics on ANY level'
178
182
  end
179
183
  end
180
184
 
@@ -1,18 +1,37 @@
1
1
  require 'benchmark'
2
2
 
3
3
  $perf_stats_nest_level = -1
4
+ $perf_stats_tasks = []
4
5
 
5
6
  module PerfStats
6
- def measure(name)
7
- $perf_stats_nest_level += 1
8
- ret = nil
9
- took = Benchmark.measure do
10
- ret = yield
7
+ def measure(task, object = nil)
8
+ if log.perf?
9
+ begin
10
+ $perf_stats_nest_level += 1
11
+ $perf_stats_tasks << task
12
+ task = $perf_stats_tasks.join(' -> ')
13
+ ret = nil
14
+ took = Benchmark.measure do
15
+ ret = yield
16
+ end
17
+ log.with_meta(
18
+ type: 'perf-stats',
19
+ user_time: took.utime.round(6),
20
+ system_time:took.stime.round(6),
21
+ total_time: took.total.round(6),
22
+ real_time: took.real.round(6),
23
+ task: task,
24
+ object: object,
25
+ level: $perf_stats_nest_level
26
+ ).perf "took #{"%0.6f" % took.real} sec - #{task}#{object ? ": #{object}" : ''}"
27
+ ret
28
+ ensure
29
+ $perf_stats_nest_level -= 1
30
+ $perf_stats_tasks.pop
31
+ end
32
+ else
33
+ yield
11
34
  end
12
- log.info "[PERF] #{took.to_s.chomp} -#{'+' * $perf_stats_nest_level} #{name}"
13
- ret
14
- ensure
15
- $perf_stats_nest_level -= 1
16
35
  end
17
36
  end
18
37
 
@@ -73,6 +73,8 @@ class RootLogger < Logger
73
73
  def initialize(logdev = STDERR, &formatter)
74
74
  super(logdev)
75
75
 
76
+ @perf_enabled = false
77
+
76
78
  @ext_formatter = proc do |severity, datetime, progname, meta, msg|
77
79
  if formatter
78
80
  formatter.call(severity, datetime, progname, meta, msg)
@@ -89,6 +91,19 @@ class RootLogger < Logger
89
91
  end
90
92
  end
91
93
 
94
+ def enable_perf_logging
95
+ @perf_enabled = true
96
+ self
97
+ end
98
+
99
+ def perf?
100
+ @perf_enabled
101
+ end
102
+
103
+ def perf(msg)
104
+ unknown(msg) if @perf_enabled
105
+ end
106
+
92
107
  def logger_for(class_obj)
93
108
  ClassLogger.new(self, class_obj)
94
109
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unicorn-cuba-base
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.0
4
+ version: 1.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jakub Pastuszek
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-13 00:00:00.000000000 Z
11
+ date: 2015-06-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cuba
@@ -28,16 +28,22 @@ dependencies:
28
28
  name: unicorn
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - ! '>='
32
32
  - !ruby/object:Gem::Version
33
33
  version: 4.6.2
34
+ - - ~>
35
+ - !ruby/object:Gem::Version
36
+ version: '4.6'
34
37
  type: :runtime
35
38
  prerelease: false
36
39
  version_requirements: !ruby/object:Gem::Requirement
37
40
  requirements:
38
- - - ~>
41
+ - - ! '>='
39
42
  - !ruby/object:Gem::Version
40
43
  version: 4.6.2
44
+ - - ~>
45
+ - !ruby/object:Gem::Version
46
+ version: '4.6'
41
47
  - !ruby/object:Gem::Dependency
42
48
  name: raindrops
43
49
  requirement: !ruby/object:Gem::Requirement
@@ -162,7 +168,7 @@ dependencies:
162
168
  - - ~>
163
169
  - !ruby/object:Gem::Version
164
170
  version: '1.0'
165
- description: web application base powered by Unicorn HTTP server and based on Cuba
171
+ description: Web application base powered by Unicorn HTTP server and based on Cuba
166
172
  framework extended with additional Rack middleware and Cuba plugins
167
173
  email: jpastuszek@gmail.com
168
174
  executables: []
@@ -172,7 +178,6 @@ extra_rdoc_files:
172
178
  - README.md
173
179
  files:
174
180
  - .document
175
- - .rspec
176
181
  - Gemfile
177
182
  - Gemfile.lock
178
183
  - LICENSE.txt
@@ -196,10 +201,6 @@ files:
196
201
  - lib/unicorn-cuba-base/stats.rb
197
202
  - lib/unicorn-cuba-base/stats_reporter.rb
198
203
  - lib/unicorn-cuba-base/uri_ext.rb
199
- - spec/memory_limit_spec.rb
200
- - spec/root_logger_spec.rb
201
- - spec/spec_helper.rb
202
- - unicorn-cuba-base.gemspec
203
204
  homepage: http://github.com/jpastuszek/unicorn-cuba-base
204
205
  licenses:
205
206
  - MIT
@@ -220,8 +221,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
220
221
  version: '0'
221
222
  requirements: []
222
223
  rubyforge_project:
223
- rubygems_version: 2.2.2
224
+ rubygems_version: 2.4.7
224
225
  signing_key:
225
226
  specification_version: 4
226
- summary: web appliaction base powered by Unicorn and Cuba
227
+ summary: Web appliaction base powered by Unicorn and Cuba
227
228
  test_files: []
data/.rspec DELETED
@@ -1 +0,0 @@
1
- --color
@@ -1,66 +0,0 @@
1
- require_relative 'spec_helper'
2
- require 'unicorn-cuba-base/memory_limit'
3
- MemoryLimit.logger = Logger.new('/dev/null')
4
-
5
- describe MemoryLimit do
6
- subject do
7
- MemoryLimit.new(10)
8
- end
9
-
10
- it 'should raise MemoryLimitedExceededError when too much memory is borrowed' do
11
- subject.borrow 8
12
- subject.return 3
13
- subject.borrow 4
14
- subject.borrow 1
15
- expect {
16
- subject.borrow 1
17
- }.to raise_error MemoryLimit::MemoryLimitedExceededError, 'memory limit exceeded'
18
- end
19
-
20
- describe '#get' do
21
- it 'should yield limit left and borrow as much as returned string bytesize' do
22
- subject.get do |limit|
23
- limit.should == 10
24
- '123'
25
- end.should == '123'
26
- subject.limit.should == 7
27
- end
28
-
29
- it 'should raise MemoryLimit::MemoryLimitedExceededError if retruned string is longer than the limit' do
30
- expect {
31
- subject.get do |limit|
32
- '12345678901'
33
- end
34
- }.to raise_error MemoryLimit::MemoryLimitedExceededError
35
- end
36
- end
37
-
38
- describe MemoryLimit::IO do
39
- it 'should limit reading from extended IO like object' do
40
- test_file = Pathname.new('/tmp/memlimtest')
41
- test_file.open('w+') { |io|
42
- io.write '12345'
43
- io.seek 0
44
-
45
- subject.io io
46
- io.read.should == '12345'
47
-
48
- io.seek 0
49
- io.truncate 0
50
- io.write '678'
51
- io.seek 0
52
- io.read.should == '678'
53
-
54
- io.seek 0
55
- io.write '09123'
56
- io.seek 0
57
-
58
- expect {
59
- io.read
60
- }.to raise_error MemoryLimit::MemoryLimitedExceededError, 'memory limit exceeded'
61
- }
62
- test_file.unlink
63
- end
64
- end
65
- end
66
-
@@ -1,152 +0,0 @@
1
- require_relative 'spec_helper'
2
-
3
- require 'unicorn-cuba-base/root_logger'
4
- require 'stringio'
5
-
6
- describe RootLogger do
7
- let! :log_out do
8
- StringIO.new
9
- end
10
-
11
- subject do
12
- RootLogger.new(log_out)
13
- end
14
-
15
- it 'should log to given logger' do
16
- subject.info 'hello world'
17
- log_out.string.should include 'INFO'
18
- log_out.string.should include 'hello world'
19
- end
20
-
21
- describe 'support for different logging levels' do
22
- it 'should log info' do
23
- subject.info 'hello world'
24
- log_out.string.should include 'INFO'
25
- end
26
-
27
- it 'should log warn' do
28
- subject.warn 'hello world'
29
- log_out.string.should include 'WARN'
30
- end
31
-
32
- it 'should log error' do
33
- subject.error 'hello world'
34
- log_out.string.should include 'ERROR'
35
- end
36
- end
37
-
38
- describe 'class logger' do
39
- it 'should report class name' do
40
- TestApp = Class.new
41
- subject.logger_for(TestApp).info 'hello world'
42
- log_out.string.should include 'TestApp'
43
-
44
- subject.logger_for(String).info 'hello world'
45
- log_out.string.should include 'String'
46
- end
47
- end
48
-
49
- it 'should log exceptions' do
50
- begin
51
- raise RuntimeError, 'bad luck'
52
- rescue => error
53
- subject.logger_for(String).error 'hello world', error
54
- end
55
- log_out.string.should include 'hello world: RuntimeError: bad luck'
56
- end
57
-
58
- describe 'meta data' do
59
- it 'should log with metadata in RFC5424 format' do
60
- subject.with_meta(type: 'access-log').info 'GET /asdfas'
61
- log_out.string.should include '"type":"access-log"'
62
-
63
- subject.info 'GET /asdfas'
64
- log_out.string.lines.to_a.last.should_not include '"type":"access-log"'
65
- end
66
-
67
- it 'should work with chaining' do
68
- subject.with_meta(type: 'access-log').with_meta(blah: 'xxx').info 'GET /asdfas'
69
- log_out.string.should include '"type":"access-log","blah":"xxx"'
70
- end
71
-
72
- it 'should log with metadata context' do
73
- subject.with_meta_context(type: 'app-log') do
74
- subject.info 'GET /asdfas'
75
- end
76
- log_out.string.should include '"type":"app-log"'
77
-
78
- subject.info 'GET /asdfas'
79
- log_out.string.lines.to_a.last.should_not include '"type":"app-log"'
80
- end
81
- end
82
- end
83
-
84
- require 'capture-output'
85
-
86
- describe SyslogLogDev do
87
- subject do
88
- SyslogLogDev.new('unicorn-cuba-base-test', 'daemon', true)
89
- end
90
-
91
- after :each do
92
- subject.close
93
- end
94
-
95
- it 'should write messages to syslog expecting first word to be log level' do
96
- Capture.stderr{subject.write 'INFO hello world'}.should include '<Info>'
97
- Capture.stderr{subject.write 'WARN hello world'}.should include '<Warning>'
98
- Capture.stderr{subject.write 'INFO hello world'}.should include 'hello world'
99
- end
100
-
101
- it 'should handle multiline log entries' do
102
- Capture.stderr{subject.write "INFO hello\nworld"}.should include "<Info>: hello\n\tworld\n"
103
- end
104
- end
105
-
106
- describe RootSyslogLogger do
107
- subject do
108
- @subject ||= RootSyslogLogger.new('unicorn-cuba-base-test', 'daemon', true).logger_for(RSpec)
109
- end
110
-
111
- after :each do
112
- subject.close
113
- end
114
-
115
- it 'should log to syslog' do
116
- log_out = Capture.stderr{subject.info 'hello world'}
117
-
118
- log_out.should include 'unicorn-cuba-base-test'
119
- log_out.should match /\[[0-9]+\]/
120
- log_out.should include '<Info>:'
121
- end
122
-
123
- it 'should include message' do
124
- Capture.stderr{subject.info 'hello world'}.should include 'hello world'
125
- end
126
-
127
- it 'should include class name' do
128
- Capture.stderr{subject.info 'hello world'}.should include 'RSpec'
129
- end
130
-
131
- it 'should map log levels to syslog severities' do
132
- Capture.stderr{subject.debug 'hello world'}.should include '<Debug>'
133
- Capture.stderr{subject.info 'hello world'}.should include '<Info>'
134
- Capture.stderr{subject.warn 'hello world'}.should include '<Warning>'
135
- Capture.stderr{subject.error 'hello world'}.should include '<Error>'
136
- Capture.stderr{subject.fatal 'hello world'}.should include '<Critical>'
137
- end
138
-
139
- it 'should handle multiline logs by appending tab after new line (done by syslog?)' do
140
- Capture.stderr{subject.info "hello\nworld\ntest"}.should include "hello\n\tworld\n\ttest\n"
141
- end
142
-
143
- describe 'direct wirtes' do
144
- it 'should use Info level' do
145
- Capture.stderr{subject.write "hello world"}.should include '<Info>'
146
- end
147
-
148
- it 'should allow use of meta data' do
149
- Capture.stderr{subject.with_meta('type' => 'access-log').write "hello world"}.should include '"type":"access-log"'
150
- end
151
- end
152
- end
@@ -1,12 +0,0 @@
1
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
- $LOAD_PATH.unshift(File.dirname(__FILE__))
3
- require 'rspec'
4
- require 'unicorn-cuba-base'
5
-
6
- # Requires supporting files with custom matchers and macros, etc,
7
- # in ./support/ and its subdirectories.
8
- Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
9
-
10
- RSpec.configure do |config|
11
-
12
- end
@@ -1,96 +0,0 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
- # -*- encoding: utf-8 -*-
5
- # stub: unicorn-cuba-base 1.5.0 ruby lib
6
-
7
- Gem::Specification.new do |s|
8
- s.name = "unicorn-cuba-base"
9
- s.version = "1.5.0"
10
-
11
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
- s.require_paths = ["lib"]
13
- s.authors = ["Jakub Pastuszek"]
14
- s.date = "2015-05-13"
15
- s.description = "web application base powered by Unicorn HTTP server and based on Cuba framework extended with additional Rack middleware and Cuba plugins"
16
- s.email = "jpastuszek@gmail.com"
17
- s.extra_rdoc_files = [
18
- "LICENSE.txt",
19
- "README.md"
20
- ]
21
- s.files = [
22
- ".document",
23
- ".rspec",
24
- "Gemfile",
25
- "Gemfile.lock",
26
- "LICENSE.txt",
27
- "README.md",
28
- "Rakefile",
29
- "VERSION",
30
- "lib/unicorn-cuba-base.rb",
31
- "lib/unicorn-cuba-base/default_error_reporter.rb",
32
- "lib/unicorn-cuba-base/memory_limit.rb",
33
- "lib/unicorn-cuba-base/perf_stats.rb",
34
- "lib/unicorn-cuba-base/plugin/error_matcher.rb",
35
- "lib/unicorn-cuba-base/plugin/logging.rb",
36
- "lib/unicorn-cuba-base/plugin/memory_limit.rb",
37
- "lib/unicorn-cuba-base/plugin/response_helpers.rb",
38
- "lib/unicorn-cuba-base/rack/common_logger_xid.rb",
39
- "lib/unicorn-cuba-base/rack/error_handling.rb",
40
- "lib/unicorn-cuba-base/rack/memory_limit.rb",
41
- "lib/unicorn-cuba-base/rack/unhandled_request.rb",
42
- "lib/unicorn-cuba-base/rack/xid_logging.rb",
43
- "lib/unicorn-cuba-base/root_logger.rb",
44
- "lib/unicorn-cuba-base/stats.rb",
45
- "lib/unicorn-cuba-base/stats_reporter.rb",
46
- "lib/unicorn-cuba-base/uri_ext.rb",
47
- "spec/memory_limit_spec.rb",
48
- "spec/root_logger_spec.rb",
49
- "spec/spec_helper.rb",
50
- "unicorn-cuba-base.gemspec"
51
- ]
52
- s.homepage = "http://github.com/jpastuszek/unicorn-cuba-base"
53
- s.licenses = ["MIT"]
54
- s.rubygems_version = "2.2.2"
55
- s.summary = "web appliaction base powered by Unicorn and Cuba"
56
-
57
- if s.respond_to? :specification_version then
58
- s.specification_version = 4
59
-
60
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
61
- s.add_runtime_dependency(%q<cuba>, ["~> 3.0"])
62
- s.add_runtime_dependency(%q<unicorn>, ["~> 4.6.2"])
63
- s.add_runtime_dependency(%q<raindrops>, ["~> 0.11"])
64
- s.add_runtime_dependency(%q<cli>, ["~> 1.3"])
65
- s.add_runtime_dependency(%q<facter>, [">= 1.6.18", "~> 1.6"])
66
- s.add_runtime_dependency(%q<ruby-ip>, ["~> 0.9"])
67
- s.add_development_dependency(%q<rspec>, ["~> 2.13"])
68
- s.add_development_dependency(%q<rdoc>, ["~> 3.9"])
69
- s.add_development_dependency(%q<jeweler>, [">= 1.8.8", "~> 1.8"])
70
- s.add_development_dependency(%q<capture-output>, ["~> 1.0"])
71
- else
72
- s.add_dependency(%q<cuba>, ["~> 3.0"])
73
- s.add_dependency(%q<unicorn>, ["~> 4.6.2"])
74
- s.add_dependency(%q<raindrops>, ["~> 0.11"])
75
- s.add_dependency(%q<cli>, ["~> 1.3"])
76
- s.add_dependency(%q<facter>, [">= 1.6.18", "~> 1.6"])
77
- s.add_dependency(%q<ruby-ip>, ["~> 0.9"])
78
- s.add_dependency(%q<rspec>, ["~> 2.13"])
79
- s.add_dependency(%q<rdoc>, ["~> 3.9"])
80
- s.add_dependency(%q<jeweler>, [">= 1.8.8", "~> 1.8"])
81
- s.add_dependency(%q<capture-output>, ["~> 1.0"])
82
- end
83
- else
84
- s.add_dependency(%q<cuba>, ["~> 3.0"])
85
- s.add_dependency(%q<unicorn>, ["~> 4.6.2"])
86
- s.add_dependency(%q<raindrops>, ["~> 0.11"])
87
- s.add_dependency(%q<cli>, ["~> 1.3"])
88
- s.add_dependency(%q<facter>, [">= 1.6.18", "~> 1.6"])
89
- s.add_dependency(%q<ruby-ip>, ["~> 0.9"])
90
- s.add_dependency(%q<rspec>, ["~> 2.13"])
91
- s.add_dependency(%q<rdoc>, ["~> 3.9"])
92
- s.add_dependency(%q<jeweler>, [">= 1.8.8", "~> 1.8"])
93
- s.add_dependency(%q<capture-output>, ["~> 1.0"])
94
- end
95
- end
96
-