right_support 2.8.12 → 2.8.15

Sign up to get free protection for your applications and to get access to all the features.
@@ -25,6 +25,7 @@ module RightSupport::Log
25
25
  #
26
26
  # === Basic Usage
27
27
  # Your class must opt into logging by including the mixin:
28
+ #
28
29
  # class AwesomenessProcessor
29
30
  # include RightSupport::Log::Mixin
30
31
  #
@@ -36,7 +37,7 @@ module RightSupport::Log
36
37
  # end
37
38
  #
38
39
  # def process_awesomeness(input)
39
- # input = self.class.prepare_awesomeness(input)
40
+ # input = self.class.prepare_awesomeness_for_processing(input)
40
41
  # logger.info "Processing #{input.size} units of awesomeness"
41
42
  # end
42
43
  #
@@ -66,7 +67,13 @@ module RightSupport::Log
66
67
  # Class methods that become available to classes that include Mixin.
67
68
  module ClassMethods
68
69
  def logger
69
- @logger || RightSupport::Log::Mixin.default_logger
70
+ if @logger
71
+ @logger
72
+ elsif superclass.respond_to?(:logger) && superclass.logger
73
+ superclass.logger
74
+ else
75
+ RightSupport::Log::Mixin.default_logger
76
+ end
70
77
  end
71
78
 
72
79
  def logger=(logger)
@@ -23,6 +23,7 @@
23
23
  require 'logger'
24
24
 
25
25
  module RightSupport::Rack
26
+
26
27
  # A Rack middleware that logs information about every HTTP request received and
27
28
  # every exception raised while processing a request.
28
29
  #
@@ -32,31 +33,36 @@ module RightSupport::Rack
32
33
  # RequestLogger can be used standalone to fulfill all logging needs, or combined
33
34
  # with Rack::Logger or another middleware that provides logging services.
34
35
  class RequestLogger
36
+
35
37
  # Initialize an instance of the middleware.
36
38
  #
37
- # === Parameters
38
- # app(Object):: the inner application or middleware layer; must respond to #call
39
+ # @param [Object] app inner application or middleware layer; must respond to #call
39
40
  #
40
- def initialize(app)
41
+ # @option options [Array] :only log for these path Regexps unless in debug mode
42
+ # @option options [Array] :except log except for these path Regexps unless in debug mode
43
+ def initialize(app, options = {})
41
44
  @app = app
45
+ @only = options[:only]
46
+ @except = options[:except]
42
47
  end
43
48
 
44
49
  # Add a logger to the Rack environment and call the next middleware.
50
+ # Set "rack.logging.enabled" in Rack environment to indicate whether logging
51
+ # is enabled for this request for use by other middleware in the call chain.
45
52
  #
46
- # === Parameters
47
- # env(Hash):: the Rack environment
53
+ # @param [Hash] env Rack environment
48
54
  #
49
- # === Return
50
- # always returns whatever value is returned by the next layer of middleware
55
+ # @return [Object] always returns whatever value is returned by the next layer of middleware
51
56
  def call(env)
52
57
  logger = env["rack.logger"]
58
+ env["rack.logging.enabled"] = enabled = logging_enabled?(logger, env)
53
59
 
54
60
  began_at = Time.now
55
61
 
56
- log_request_begin(logger, env)
62
+ log_request_begin(logger, env) if enabled
57
63
  status, header, body = @app.call(env)
58
64
  log_exception(logger, env['sinatra.error']) if env['sinatra.error']
59
- log_request_end(logger, status, header, began_at)
65
+ log_request_end(logger, status, header, began_at) if enabled
60
66
 
61
67
  return [status, header, body]
62
68
  rescue Exception => e
@@ -66,14 +72,25 @@ module RightSupport::Rack
66
72
 
67
73
  private
68
74
 
75
+ # Determine whether logging enabled for given request
76
+ #
77
+ # @param [Object] logger for Rack
78
+ # @param [Hash] env Rack environment
79
+ #
80
+ # @return [Boolean] enabled or not
81
+ def logging_enabled?(logger, env)
82
+ path = env["PATH_INFO"]
83
+ env["HTTP_X_DEBUG"] || [Logger::DEBUG, :debug].include?(logger.level) ||
84
+ @only && @only.any? { |o| o.is_a?(Regexp) ? (path =~ o) : (path == o) } ||
85
+ @except && @except.none? { |e| e.is_a?(Regexp) ? (path =~ e) : (path == e) }
86
+ end
87
+
69
88
  # Log beginning of request
70
89
  #
71
- # === Parameters
72
- # logger(Object):: the Rack logger
73
- # env(Hash):: the Rack environment
90
+ # @param [Object] logger for Rack
91
+ # @param [Hash] env Rack environment
74
92
  #
75
- # === Return
76
- # always returns true
93
+ # @return [TrueClass] always true
77
94
  def log_request_begin(logger, env)
78
95
  # Assuming remote addresses are IPv4, make them all align to the same width
79
96
  remote_addr = env['HTTP_X_FORWARDED_FOR'] || env["REMOTE_ADDR"] || "-"
@@ -114,14 +131,12 @@ module RightSupport::Rack
114
131
 
115
132
  # Log end of request
116
133
  #
117
- # === Parameters
118
- # logger(Object):: the Rack logger
119
- # env(Hash):: the Rack environment
120
- # status(Fixnum):: status of the Rack request
121
- # began_at(Time):: time of the Rack request begging
134
+ # @param [Object] logger for Rack
135
+ # @param [Hash] env Rack environment
136
+ # @param [Fixnum] status of the Rack request
137
+ # @param [Time] began_at time of the Rack request beginning
122
138
  #
123
- # === Return
124
- # always returns true
139
+ # @return [TrueClass] always true
125
140
  def log_request_end(logger, status, headers, began_at)
126
141
  duration = (Time.now - began_at) * 1000
127
142
 
@@ -142,14 +157,12 @@ module RightSupport::Rack
142
157
 
143
158
  # Log exception
144
159
  #
145
- # === Parameters
146
- # logger(Object):: the Rack logger
147
- # e(Exception):: Exception to be logged
160
+ # @param [Object] logger for Rack
161
+ # @param [Exception] exception to be logged
148
162
  #
149
- # === Return
150
- # always returns true
151
- def log_exception(logger, e)
152
- msg = ["#{e.class} - #{e.message}", *e.backtrace].join("\n")
163
+ # @return [TrueClass] always true
164
+ def log_exception(logger, exception)
165
+ msg = ["#{exception.class} - #{exception.message}", *exception.backtrace].join("\n")
153
166
  logger.error(msg)
154
167
  rescue
155
168
  #no-op, something is seriously messed up by this point...
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "right_support"
8
- s.version = "2.8.12"
8
+ s.version = "2.8.15"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Tony Spataro", "Sergey Sergyenko", "Ryan Williamson", "Lee Kirchhoff", "Alexey Karpik", "Scott Messier"]
12
- s.date = "2014-01-22"
12
+ s.date = "2014-02-26"
13
13
  s.description = "A toolkit of useful, reusable foundation code created by RightScale."
14
14
  s.email = "support@rightscale.com"
15
15
  s.extra_rdoc_files = [
@@ -27,12 +27,10 @@ Gem::Specification.new do |s|
27
27
  "VERSION",
28
28
  "features/balancer_error_handling.feature",
29
29
  "features/balancer_health_check.feature",
30
- "features/continuous_integration.feature",
31
- "features/continuous_integration_cucumber.feature",
32
- "features/continuous_integration_rspec1.feature",
33
- "features/continuous_integration_rspec2.feature",
30
+ "features/hash_tools.feature",
34
31
  "features/http_client_timeout.feature",
35
32
  "features/serialization.feature",
33
+ "features/step_definitions/hash_tools_steps.rb",
36
34
  "features/step_definitions/http_client_steps.rb",
37
35
  "features/step_definitions/request_balancer_steps.rb",
38
36
  "features/step_definitions/ruby_steps.rb",
@@ -139,43 +137,28 @@ Gem::Specification.new do |s|
139
137
  s.homepage = "https://github.com/rightscale/right_support"
140
138
  s.licenses = ["MIT"]
141
139
  s.require_paths = ["lib"]
142
- s.rubygems_version = "1.8.15"
140
+ s.rubygems_version = "1.8.28"
143
141
  s.summary = "Reusable foundation code."
144
142
 
145
143
  if s.respond_to? :specification_version then
146
144
  s.specification_version = 3
147
145
 
148
146
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
149
- s.add_development_dependency(%q<rake>, ["~> 0.9"])
150
- s.add_development_dependency(%q<jeweler>, ["~> 1.8.3"])
151
- s.add_development_dependency(%q<right_develop>, ["~> 1.0"])
152
- s.add_development_dependency(%q<ruby-debug>, [">= 0.10"])
153
- s.add_development_dependency(%q<ruby-debug19>, [">= 0.11.6"])
154
- s.add_development_dependency(%q<rdoc>, [">= 2.4.2"])
147
+ s.add_development_dependency(%q<jeweler>, ["~> 2.0"])
155
148
  s.add_development_dependency(%q<flexmock>, ["~> 1.0"])
156
- s.add_development_dependency(%q<syntax>, ["~> 1.0.0"])
157
- s.add_development_dependency(%q<nokogiri>, ["~> 1.5"])
149
+ s.add_development_dependency(%q<rspec>, ["~> 2.13.0"])
150
+ s.add_development_dependency(%q<cucumber>, ["< 1.3.3", "~> 1.0"])
158
151
  else
159
- s.add_dependency(%q<rake>, ["~> 0.9"])
160
- s.add_dependency(%q<jeweler>, ["~> 1.8.3"])
161
- s.add_dependency(%q<right_develop>, ["~> 1.0"])
162
- s.add_dependency(%q<ruby-debug>, [">= 0.10"])
163
- s.add_dependency(%q<ruby-debug19>, [">= 0.11.6"])
164
- s.add_dependency(%q<rdoc>, [">= 2.4.2"])
152
+ s.add_dependency(%q<jeweler>, ["~> 2.0"])
165
153
  s.add_dependency(%q<flexmock>, ["~> 1.0"])
166
- s.add_dependency(%q<syntax>, ["~> 1.0.0"])
167
- s.add_dependency(%q<nokogiri>, ["~> 1.5"])
154
+ s.add_dependency(%q<rspec>, ["~> 2.13.0"])
155
+ s.add_dependency(%q<cucumber>, ["< 1.3.3", "~> 1.0"])
168
156
  end
169
157
  else
170
- s.add_dependency(%q<rake>, ["~> 0.9"])
171
- s.add_dependency(%q<jeweler>, ["~> 1.8.3"])
172
- s.add_dependency(%q<right_develop>, ["~> 1.0"])
173
- s.add_dependency(%q<ruby-debug>, [">= 0.10"])
174
- s.add_dependency(%q<ruby-debug19>, [">= 0.11.6"])
175
- s.add_dependency(%q<rdoc>, [">= 2.4.2"])
158
+ s.add_dependency(%q<jeweler>, ["~> 2.0"])
176
159
  s.add_dependency(%q<flexmock>, ["~> 1.0"])
177
- s.add_dependency(%q<syntax>, ["~> 1.0.0"])
178
- s.add_dependency(%q<nokogiri>, ["~> 1.5"])
160
+ s.add_dependency(%q<rspec>, ["~> 2.13.0"])
161
+ s.add_dependency(%q<cucumber>, ["< 1.3.3", "~> 1.0"])
179
162
  end
180
163
  end
181
164
 
data/right_support.rconf CHANGED
@@ -1,7 +1,9 @@
1
1
  ruby do
2
- version 'ree-1.8.7-2012.02'
2
+ version '2.1.0'
3
+ # version 'ree-1.8.7-2012.02'
4
+ # version 'ruby-1.9.3-p484'
3
5
  gemset 'right_support'
4
6
  end
5
7
  bundler do
6
- version '1.2.5'
8
+ version '1.5.3'
7
9
  end
@@ -65,7 +65,7 @@ describe RightSupport::DB::CassandraModel do
65
65
  begin
66
66
  ENV['RACK_ENV'] = env
67
67
 
68
- flexmock(Cassandra).should_receive(:new).with(/#{default_keyspace}_#{env}/, congig_test , {:timeout=>10, :server_retry_period=>nil}).and_return(default_keyspace_connection)
68
+ flexmock(Cassandra).should_receive(:new).with(/#{default_keyspace}_#{env}/, congig_test , {:timeout=>20, :server_retry_period=>nil}).and_return(default_keyspace_connection)
69
69
  default_keyspace_connection.should_receive(:disable_node_auto_discovery!).and_return(true)
70
70
 
71
71
 
@@ -43,8 +43,8 @@ describe RightSupport::DB::CassandraModel do
43
43
  default_keyspace_connection.should_receive(:disable_node_auto_discovery!).and_return(true)
44
44
  default_keyspace_connection.should_receive(:name).and_return('connection2')
45
45
 
46
- flexmock(Cassandra).should_receive(:new).with(keyspace + '_' + (ENV['RACK_ENV'] || 'development') + "_testns", "localhost:9160", {:timeout=>10, :server_retry_period=>nil}).and_return(current_keyspace_connection)
47
- flexmock(Cassandra).should_receive(:new).with(default_keyspace + '_' + (ENV['RACK_ENV'] || 'development') + "_testns", "localhost:9160", {:timeout=>10, :server_retry_period=>nil}).and_return(default_keyspace_connection)
46
+ flexmock(Cassandra).should_receive(:new).with(keyspace + '_' + (ENV['RACK_ENV'] || 'development') + "_testns", "localhost:9160", {:timeout=>20, :server_retry_period=>nil}).and_return(current_keyspace_connection)
47
+ flexmock(Cassandra).should_receive(:new).with(default_keyspace + '_' + (ENV['RACK_ENV'] || 'development') + "_testns", "localhost:9160", {:timeout=>20, :server_retry_period=>nil}).and_return(default_keyspace_connection)
48
48
  end
49
49
 
50
50
  it 'raises a meaningful exception when a config stanza is missing' do
@@ -4,6 +4,9 @@ class InnocentVictim
4
4
  include RightSupport::Log::Mixin
5
5
  end
6
6
 
7
+ class Bystander < InnocentVictim
8
+ end
9
+
7
10
  describe RightSupport::Log::Mixin do
8
11
  context 'when mixed into a base class' do
9
12
  before(:each) do
@@ -59,4 +62,30 @@ describe RightSupport::Log::Mixin do
59
62
  end
60
63
  end
61
64
  end
65
+
66
+ context 'when inherited from a base class' do
67
+ let(:base_logger) { flexmock('base-class logger') }
68
+ let(:subclass_logger) { flexmock('derived-class logger') }
69
+
70
+ after(:each) do
71
+ InnocentVictim.logger = nil
72
+ Bystander.logger = nil
73
+ end
74
+
75
+ it 'delegates to base class' do
76
+ InnocentVictim.logger = base_logger
77
+ base_logger.should_receive(:error).with('foo').once
78
+
79
+ Bystander.logger.error('foo')
80
+ end
81
+
82
+ it 'allows override in child class' do
83
+ InnocentVictim.logger = base_logger
84
+ Bystander.logger = subclass_logger
85
+ base_logger.should_receive(:error).never
86
+ subclass_logger.should_receive(:error).with('foo').once
87
+
88
+ Bystander.logger.error('foo')
89
+ end
90
+ end
62
91
  end
@@ -316,7 +316,6 @@ describe RightSupport::Net::RequestBalancer do
316
316
  it 're-raises reasonable default fatal errors' do
317
317
  test_raise(nil, ArgumentError, [ArgumentError, 1])
318
318
  test_raise(nil, MockResourceNotFound, [MockResourceNotFound, 1])
319
- test_raise(nil, RSpec::Expectations::ExpectationNotMetError, [RSpec::Expectations::ExpectationNotMetError, 1])
320
319
  end
321
320
 
322
321
  it 'swallows StandardError and friends' do
@@ -47,6 +47,45 @@ describe RightSupport::Rack::RequestLogger do
47
47
  end
48
48
  end
49
49
 
50
+ context 'when limit logging extent' do
51
+ before(:each) do
52
+ @options = {:except => [/bar/]}
53
+ @env.merge!('PATH_INFO' => '/foo/bar')
54
+ @middleware = RightSupport::Rack::RequestLogger.new(@app, @options)
55
+ @logger.should_receive(:level).and_return(Logger::INFO).by_default
56
+ end
57
+
58
+ it 'does not limit if logger in debug mode' do
59
+ @logger.should_receive(:level).and_return(Logger::DEBUG)
60
+ @logger.should_receive(:info)
61
+ @middleware.call(@env)
62
+ end
63
+
64
+ it 'does not limit if HTTP_X_DEBUG set' do
65
+ @logger.should_receive(:info)
66
+ @middleware.call(@env.merge('HTTP_X_DEBUG' => true))
67
+ end
68
+
69
+ it 'does not log for paths matching :except option' do
70
+ @logger.should_receive(:info).never
71
+ @middleware.call(@env)
72
+ end
73
+
74
+ it 'does log for paths matching :only option' do
75
+ @options = {:only => [/bar/]}
76
+ @middleware = RightSupport::Rack::RequestLogger.new(@app, @options)
77
+ @logger.should_receive(:info)
78
+ @middleware.call(@env)
79
+ end
80
+
81
+ it 'sets rack.logging.enabled in Rack environment' do
82
+ @logger.should_receive(:info)
83
+ @env.merge!('PATH_INFO' => '/my/app')
84
+ @middleware.call(@env)
85
+ @env['rack.logging.enabled'].should be_true
86
+ end
87
+ end
88
+
50
89
  context 'Shard ID logging' do
51
90
  before(:each) do
52
91
  @logger = mock_logger
data/spec/spec_helper.rb CHANGED
@@ -22,9 +22,6 @@
22
22
  require 'rubygems'
23
23
  require 'bundler/setup'
24
24
  require 'flexmock'
25
- require 'ruby-debug'
26
- require 'syntax'
27
- require 'right_develop'
28
25
 
29
26
  $:.unshift(File.expand_path('../../../lib', __FILE__)) #ensure we load THIS project's code, not an installed gem
30
27
  require 'right_support'
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: right_support
3
3
  version: !ruby/object:Gem::Version
4
- hash: 55
4
+ hash: 49
5
5
  prerelease:
6
6
  segments:
7
7
  - 2
8
8
  - 8
9
- - 12
10
- version: 2.8.12
9
+ - 15
10
+ version: 2.8.15
11
11
  platform: ruby
12
12
  authors:
13
13
  - Tony Spataro
@@ -20,41 +20,27 @@ autorequire:
20
20
  bindir: bin
21
21
  cert_chain: []
22
22
 
23
- date: 2014-01-22 00:00:00 Z
23
+ date: 2014-02-27 00:00:00 -08:00
24
+ default_executable:
24
25
  dependencies:
25
26
  - !ruby/object:Gem::Dependency
27
+ type: :development
26
28
  version_requirements: &id001 !ruby/object:Gem::Requirement
27
29
  none: false
28
30
  requirements:
29
31
  - - ~>
30
32
  - !ruby/object:Gem::Version
31
- hash: 25
33
+ hash: 3
32
34
  segments:
35
+ - 2
33
36
  - 0
34
- - 9
35
- version: "0.9"
36
- type: :development
37
- requirement: *id001
38
- prerelease: false
39
- name: rake
40
- - !ruby/object:Gem::Dependency
41
- version_requirements: &id002 !ruby/object:Gem::Requirement
42
- none: false
43
- requirements:
44
- - - ~>
45
- - !ruby/object:Gem::Version
46
- hash: 49
47
- segments:
48
- - 1
49
- - 8
50
- - 3
51
- version: 1.8.3
52
- type: :development
53
- requirement: *id002
37
+ version: "2.0"
54
38
  prerelease: false
39
+ requirement: *id001
55
40
  name: jeweler
56
41
  - !ruby/object:Gem::Dependency
57
- version_requirements: &id003 !ruby/object:Gem::Requirement
42
+ type: :development
43
+ version_requirements: &id002 !ruby/object:Gem::Requirement
58
44
  none: false
59
45
  requirements:
60
46
  - - ~>
@@ -64,103 +50,48 @@ dependencies:
64
50
  - 1
65
51
  - 0
66
52
  version: "1.0"
67
- type: :development
68
- requirement: *id003
69
53
  prerelease: false
70
- name: right_develop
54
+ requirement: *id002
55
+ name: flexmock
71
56
  - !ruby/object:Gem::Dependency
72
- version_requirements: &id004 !ruby/object:Gem::Requirement
73
- none: false
74
- requirements:
75
- - - ">="
76
- - !ruby/object:Gem::Version
77
- hash: 31
78
- segments:
79
- - 0
80
- - 10
81
- version: "0.10"
82
57
  type: :development
83
- requirement: *id004
84
- prerelease: false
85
- name: ruby-debug
86
- - !ruby/object:Gem::Dependency
87
- version_requirements: &id005 !ruby/object:Gem::Requirement
58
+ version_requirements: &id003 !ruby/object:Gem::Requirement
88
59
  none: false
89
60
  requirements:
90
- - - ">="
61
+ - - ~>
91
62
  - !ruby/object:Gem::Version
92
- hash: 63
63
+ hash: 59
93
64
  segments:
65
+ - 2
66
+ - 13
94
67
  - 0
95
- - 11
96
- - 6
97
- version: 0.11.6
98
- type: :development
99
- requirement: *id005
68
+ version: 2.13.0
100
69
  prerelease: false
101
- name: ruby-debug19
70
+ requirement: *id003
71
+ name: rspec
102
72
  - !ruby/object:Gem::Dependency
103
- version_requirements: &id006 !ruby/object:Gem::Requirement
104
- none: false
105
- requirements:
106
- - - ">="
107
- - !ruby/object:Gem::Version
108
- hash: 27
109
- segments:
110
- - 2
111
- - 4
112
- - 2
113
- version: 2.4.2
114
73
  type: :development
115
- requirement: *id006
116
- prerelease: false
117
- name: rdoc
118
- - !ruby/object:Gem::Dependency
119
- version_requirements: &id007 !ruby/object:Gem::Requirement
74
+ version_requirements: &id004 !ruby/object:Gem::Requirement
120
75
  none: false
121
76
  requirements:
122
- - - ~>
77
+ - - <
123
78
  - !ruby/object:Gem::Version
124
- hash: 15
79
+ hash: 29
125
80
  segments:
126
81
  - 1
127
- - 0
128
- version: "1.0"
129
- type: :development
130
- requirement: *id007
131
- prerelease: false
132
- name: flexmock
133
- - !ruby/object:Gem::Dependency
134
- version_requirements: &id008 !ruby/object:Gem::Requirement
135
- none: false
136
- requirements:
82
+ - 3
83
+ - 3
84
+ version: 1.3.3
137
85
  - - ~>
138
86
  - !ruby/object:Gem::Version
139
- hash: 23
87
+ hash: 15
140
88
  segments:
141
89
  - 1
142
90
  - 0
143
- - 0
144
- version: 1.0.0
145
- type: :development
146
- requirement: *id008
147
- prerelease: false
148
- name: syntax
149
- - !ruby/object:Gem::Dependency
150
- version_requirements: &id009 !ruby/object:Gem::Requirement
151
- none: false
152
- requirements:
153
- - - ~>
154
- - !ruby/object:Gem::Version
155
- hash: 5
156
- segments:
157
- - 1
158
- - 5
159
- version: "1.5"
160
- type: :development
161
- requirement: *id009
91
+ version: "1.0"
162
92
  prerelease: false
163
- name: nokogiri
93
+ requirement: *id004
94
+ name: cucumber
164
95
  description: A toolkit of useful, reusable foundation code created by RightScale.
165
96
  email: support@rightscale.com
166
97
  executables: []
@@ -181,12 +112,10 @@ files:
181
112
  - VERSION
182
113
  - features/balancer_error_handling.feature
183
114
  - features/balancer_health_check.feature
184
- - features/continuous_integration.feature
185
- - features/continuous_integration_cucumber.feature
186
- - features/continuous_integration_rspec1.feature
187
- - features/continuous_integration_rspec2.feature
115
+ - features/hash_tools.feature
188
116
  - features/http_client_timeout.feature
189
117
  - features/serialization.feature
118
+ - features/step_definitions/hash_tools_steps.rb
190
119
  - features/step_definitions/http_client_steps.rb
191
120
  - features/step_definitions/request_balancer_steps.rb
192
121
  - features/step_definitions/ruby_steps.rb
@@ -289,6 +218,7 @@ files:
289
218
  - spec/stats/helpers_spec.rb
290
219
  - spec/validation/openssl_spec.rb
291
220
  - spec/validation/ssh_spec.rb
221
+ has_rdoc: true
292
222
  homepage: https://github.com/rightscale/right_support
293
223
  licenses:
294
224
  - MIT
@@ -318,7 +248,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
318
248
  requirements: []
319
249
 
320
250
  rubyforge_project:
321
- rubygems_version: 1.8.15
251
+ rubygems_version: 1.6.2
322
252
  signing_key:
323
253
  specification_version: 3
324
254
  summary: Reusable foundation code.