right_support 2.13.3 → 2.14.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 88f99381f01a8163458dfbb3428605aa10504ecf
4
- data.tar.gz: c15fde263a3abf66adf8a665b7aabb27a530a89a
3
+ metadata.gz: 1e82daed673214599b4e0206f8a766ba400d06ac
4
+ data.tar.gz: e6d9f64f58a4b3932e725dbbdaf071a094c4b4de
5
5
  SHA512:
6
- metadata.gz: c54a1945a13c506c38e2cfc337db07c9d68c2691fc2e501dc68ec16f1fa95670797927f384dd6bb2635c6b01d39b27c5a66994e8ffc910dded8ff505010c15e6
7
- data.tar.gz: 08b6bac68cc7b5ebbb12a319fac566b904ef993f452956ac39c9a8371961c2c0fabe1849f407a5681560f627fe80e2c1b588089653db8ee9ef1a3a4e68fe287b
6
+ metadata.gz: 76d3073f77651f586ae49aa3f956498512945584abe938baaa0e3ce8e0c68c94ed90ede39316aae6551c33f49957c3b06a0cd0a545b8f35ed8c29e18d1dc2511
7
+ data.tar.gz: b72d3a15b6cea55871a7a1f8a0ff7709aed8bba348bae85bb279d66b937be26f6edea2b49ae5a426f8d19aa161d7b9699803a82c8ab106b48c6ab546c0764142
@@ -41,7 +41,7 @@ module RightSupport::Crypto
41
41
  # a 512-bit RSA key would not be sufficiently long to create signatures of a SHA3-512 hash
42
42
  # due to the mathematical underpinnings of the RSA cipher. In practice this is not an issue,
43
43
  # because you should be using strong RSA keys (2048 bit or higher) for security reasons,
44
- # and even the strongest hash algorithms do not exceed 512-bit output.
44
+ # and even the strongest hash algorithms do not exceed 512-bit output.
45
45
  #
46
46
  # SignedHash provides reasonable defaults for the other three factors:
47
47
  # - JSON for message encoding (Yajl gem, JSON gem, Oj gem or built-in Ruby 1.9 JSON)
@@ -128,8 +128,13 @@ module RightSupport::Crypto
128
128
 
129
129
  if @envelope
130
130
  digest = DIGEST_MAP[@digest].new(encoded)
131
-
132
- @private_key.sign(digest, encoded)
131
+ if @private_key.respond_to?(:dsa_sign_asn1)
132
+ # DSA signature with ASN.1 encoding
133
+ @private_key.dsa_sign_asn1(digest.digest)
134
+ else
135
+ # RSA/DSA signature as specified in PKCS #1 v1.5
136
+ @private_key.sign(digest, encoded)
137
+ end
133
138
  else
134
139
  digest = @digest.new.update(encoded).digest
135
140
  @private_key.private_encrypt(digest)
@@ -153,7 +158,13 @@ module RightSupport::Crypto
153
158
 
154
159
  if @envelope
155
160
  digest = DIGEST_MAP[@digest].new
156
- result = @public_key.verify(digest, signature, plaintext)
161
+ if @public_key.respond_to?(:moo)
162
+ # DSA signature with ASN.1 encoding
163
+ @private_key.dsa_verify_asn1(digest.digest, signature)
164
+ else
165
+ # RSA/DSA signature as specified in PKCS #1 v1.5
166
+ result = @public_key.verify(digest, signature, plaintext)
167
+ end
157
168
  raise InvalidSignature, "Signature verification failed" unless true == result
158
169
  else
159
170
  expected = @digest.new.update(plaintext).digest
@@ -203,11 +214,21 @@ module RightSupport::Crypto
203
214
  unless @encoding.respond_to?(str_or_symb('dump'))
204
215
  raise ArgumentError, "Encoding class/module/object must respond to .dump method"
205
216
  end
206
- if @public_key && !@public_key.respond_to?(str_or_symb('public_decrypt'))
207
- raise ArgumentError, "Public key must respond to :public_decrypt (e.g. an OpenSSL::PKey instance)"
208
- end
209
- if @private_key && !@private_key.respond_to?(str_or_symb('private_encrypt'))
210
- raise ArgumentError, "Private key must respond to :private_encrypt (e.g. an OpenSSL::PKey instance)"
217
+
218
+ if @envelope
219
+ if @public_key && !@public_key.respond_to?(str_or_symb('verify'))
220
+ raise ArgumentError, "Public key must respond to :verify"
221
+ end
222
+ if @private_key && !@private_key.respond_to?(str_or_symb('sign'))
223
+ raise ArgumentError, "Private key must respond to :sign"
224
+ end
225
+ else
226
+ if @public_key && !@public_key.respond_to?(str_or_symb('public_decrypt'))
227
+ raise ArgumentError, "Public key must respond to :public_decrypt"
228
+ end
229
+ if @private_key && !@private_key.respond_to?(str_or_symb('private_encrypt'))
230
+ raise ArgumentError, "Private key must respond to :private_encrypt"
231
+ end
211
232
  end
212
233
  end
213
234
 
@@ -65,6 +65,7 @@ if require_succeeds?('airbrake-ruby')
65
65
  Proxy-Authorization
66
66
  X-Api-Shared-Secret
67
67
  X-Authorization X-Http-Authorization
68
+ X-Delegation-Token
68
69
  )
69
70
 
70
71
  # default blacklisted payload
@@ -66,7 +66,8 @@ module RightSupport::Validation
66
66
  return false unless alg
67
67
  key = alg.new(key_material, passphrase || 'dummy passphrase, should never work')
68
68
  key.to_der #make sure it's valid in addition to being well formed
69
- return key.private?
69
+ # deal with varying interfaces between RSA/DSA/EC
70
+ return (key.private? rescue false) || (key.private_key? rescue false)
70
71
  rescue ::OpenSSL::PKey::PKeyError, NotImplementedError
71
72
  return false
72
73
  end
@@ -84,9 +85,10 @@ module RightSupport::Validation
84
85
  return false unless alg
85
86
  key = alg.new(key_material)
86
87
  key.to_der #make sure it's valid in addition to being well formed
87
- return key.public?
88
+ # deal with varying interfaces between RSA/DSA/EC
89
+ return (key.public? rescue false) || (key.public_key? rescue false)
88
90
  rescue ::OpenSSL::PKey::PKeyError, NotImplementedError
89
91
  return false
90
92
  end
91
93
  end
92
- end
94
+ end
@@ -0,0 +1,4 @@
1
+ # encoding: utf-8
2
+ module RightSupport
3
+ VERSION = '2.14.0'.freeze
4
+ end
@@ -1,134 +1,25 @@
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: right_support 2.13.3 ruby lib
1
+ # encoding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'right_support/version'
6
5
 
7
- Gem::Specification.new do |s|
8
- s.name = "right_support"
9
- s.version = "2.13.3"
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "right_support"
8
+ spec.version = RightSupport::VERSION
9
+ spec.authors = ["Tony Spataro", "Sergey Sergyenko", "Ryan Williamson", "Lee Kirchhoff", "Alexey Karpik", "Scott Messier"]
10
+ spec.email = "support@rightscale.com"
10
11
 
11
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
- s.require_paths = ["lib"]
13
- s.authors = ["Tony Spataro", "Sergey Sergyenko", "Ryan Williamson", "Lee Kirchhoff", "Alexey Karpik", "Scott Messier"]
14
- s.date = "2016-09-12"
15
- s.description = "A toolkit of useful, reusable foundation code created by RightScale."
16
- s.email = "support@rightscale.com"
17
- s.extra_rdoc_files = [
18
- "LICENSE",
19
- "README.md"
20
- ]
21
- s.files = [
22
- "CHANGELOG.rdoc",
23
- "LICENSE",
24
- "README.md",
25
- "Rakefile",
26
- "VERSION",
27
- "lib/right_support.rb",
28
- "lib/right_support/ci.rb",
29
- "lib/right_support/ci/java_cucumber_formatter.rb",
30
- "lib/right_support/ci/java_spec_formatter.rb",
31
- "lib/right_support/ci/rake_task.rb",
32
- "lib/right_support/config.rb",
33
- "lib/right_support/config/feature_set.rb",
34
- "lib/right_support/config/recursive_true_class.rb",
35
- "lib/right_support/config/yaml_config.rb",
36
- "lib/right_support/crypto.rb",
37
- "lib/right_support/crypto/signed_hash.rb",
38
- "lib/right_support/data.rb",
39
- "lib/right_support/data/hash_tools.rb",
40
- "lib/right_support/data/mash.rb",
41
- "lib/right_support/data/serializer.rb",
42
- "lib/right_support/data/token.rb",
43
- "lib/right_support/data/unknown_type.rb",
44
- "lib/right_support/data/uuid.rb",
45
- "lib/right_support/db.rb",
46
- "lib/right_support/db/cassandra_model.rb",
47
- "lib/right_support/deployment.rb",
48
- "lib/right_support/deployment/info.rb",
49
- "lib/right_support/log.rb",
50
- "lib/right_support/log/exception_logger.rb",
51
- "lib/right_support/log/filter_logger.rb",
52
- "lib/right_support/log/mixin.rb",
53
- "lib/right_support/log/multiplexer.rb",
54
- "lib/right_support/log/null_logger.rb",
55
- "lib/right_support/log/step_level_logger.rb",
56
- "lib/right_support/log/syslog/remote.rb",
57
- "lib/right_support/log/system_logger.rb",
58
- "lib/right_support/net.rb",
59
- "lib/right_support/net/address_helper.rb",
60
- "lib/right_support/net/dns.rb",
61
- "lib/right_support/net/http_client.rb",
62
- "lib/right_support/net/lb.rb",
63
- "lib/right_support/net/lb/base.rb",
64
- "lib/right_support/net/lb/health_check.rb",
65
- "lib/right_support/net/lb/round_robin.rb",
66
- "lib/right_support/net/lb/sticky.rb",
67
- "lib/right_support/net/request_balancer.rb",
68
- "lib/right_support/net/s3_helper.rb",
69
- "lib/right_support/net/ssl.rb",
70
- "lib/right_support/net/ssl/open_ssl_patch.rb",
71
- "lib/right_support/net/string_encoder.rb",
72
- "lib/right_support/notifiers.rb",
73
- "lib/right_support/notifiers/airbrake.rb",
74
- "lib/right_support/notifiers/base.rb",
75
- "lib/right_support/notifiers/blacklisters.rb",
76
- "lib/right_support/notifiers/blacklisters/base.rb",
77
- "lib/right_support/notifiers/blacklisters/canonical.rb",
78
- "lib/right_support/notifiers/blacklisters/regular_expression.rb",
79
- "lib/right_support/notifiers/blacklisters/simple.rb",
80
- "lib/right_support/notifiers/blacklisters/snake_case.rb",
81
- "lib/right_support/notifiers/blacklisters/wildcard.rb",
82
- "lib/right_support/notifiers/logger.rb",
83
- "lib/right_support/notifiers/notification.rb",
84
- "lib/right_support/notifiers/utilities.rb",
85
- "lib/right_support/notifiers/utilities/backtrace_decoder.rb",
86
- "lib/right_support/rack.rb",
87
- "lib/right_support/rack/log_setter.rb",
88
- "lib/right_support/rack/request_logger.rb",
89
- "lib/right_support/rack/request_tracker.rb",
90
- "lib/right_support/rack/runtime.rb",
91
- "lib/right_support/rack/shared_environment.rb",
92
- "lib/right_support/ruby.rb",
93
- "lib/right_support/ruby/easy_singleton.rb",
94
- "lib/right_support/ruby/object_extensions.rb",
95
- "lib/right_support/ruby/string_extensions.rb",
96
- "lib/right_support/stats.rb",
97
- "lib/right_support/stats/activity.rb",
98
- "lib/right_support/stats/exceptions.rb",
99
- "lib/right_support/stats/helpers.rb",
100
- "lib/right_support/validation.rb",
101
- "lib/right_support/validation/openssl.rb",
102
- "lib/right_support/validation/ssh.rb",
103
- "right_support.gemspec"
104
- ]
105
- s.homepage = "https://github.com/rightscale/right_support"
106
- s.licenses = ["MIT"]
107
- s.rubygems_version = "2.2.5"
108
- s.summary = "Reusable foundation code."
12
+ spec.summary = "Reusable foundation code."
13
+ spec.description = "A toolkit of useful, reusable foundation code created by RightScale."
14
+ spec.homepage = "https://github.com/rightscale/right_support"
15
+ spec.license = "MIT"
109
16
 
110
- if s.respond_to? :specification_version then
111
- s.specification_version = 4
17
+ spec.files = `git ls-files -z`.split("\x0").select { |f| f.match(%r{lib/|gemspec}) }
18
+ spec.require_paths = ['lib']
112
19
 
113
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
114
- s.add_development_dependency(%q<rake>, ["~> 10.0"])
115
- s.add_development_dependency(%q<jeweler>, ["~> 2.0"])
116
- s.add_development_dependency(%q<ruby-debug>, [">= 0"])
117
- s.add_development_dependency(%q<pry>, [">= 0"])
118
- s.add_development_dependency(%q<pry-byebug>, [">= 0"])
119
- else
120
- s.add_dependency(%q<rake>, ["~> 10.0"])
121
- s.add_dependency(%q<jeweler>, ["~> 2.0"])
122
- s.add_dependency(%q<ruby-debug>, [">= 0"])
123
- s.add_dependency(%q<pry>, [">= 0"])
124
- s.add_dependency(%q<pry-byebug>, [">= 0"])
125
- end
126
- else
127
- s.add_dependency(%q<rake>, ["~> 10.0"])
128
- s.add_dependency(%q<jeweler>, ["~> 2.0"])
129
- s.add_dependency(%q<ruby-debug>, [">= 0"])
130
- s.add_dependency(%q<pry>, [">= 0"])
131
- s.add_dependency(%q<pry-byebug>, [">= 0"])
132
- end
133
- end
20
+ spec.required_ruby_version = Gem::Requirement.new('~> 2.1')
134
21
 
22
+ # RightSupport has no mandatory dependencies. It has some optional
23
+ # dependencies (i.e. gems that it will require and use if they are present).
24
+ # For more information, refer right_support/Gemfile.
25
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: right_support
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.13.3
4
+ version: 2.14.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tony Spataro
@@ -13,91 +13,14 @@ authors:
13
13
  autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
- date: 2016-09-13 00:00:00.000000000 Z
17
- dependencies:
18
- - !ruby/object:Gem::Dependency
19
- name: rake
20
- requirement: !ruby/object:Gem::Requirement
21
- requirements:
22
- - - "~>"
23
- - !ruby/object:Gem::Version
24
- version: '10.0'
25
- type: :development
26
- prerelease: false
27
- version_requirements: !ruby/object:Gem::Requirement
28
- requirements:
29
- - - "~>"
30
- - !ruby/object:Gem::Version
31
- version: '10.0'
32
- - !ruby/object:Gem::Dependency
33
- name: jeweler
34
- requirement: !ruby/object:Gem::Requirement
35
- requirements:
36
- - - "~>"
37
- - !ruby/object:Gem::Version
38
- version: '2.0'
39
- type: :development
40
- prerelease: false
41
- version_requirements: !ruby/object:Gem::Requirement
42
- requirements:
43
- - - "~>"
44
- - !ruby/object:Gem::Version
45
- version: '2.0'
46
- - !ruby/object:Gem::Dependency
47
- name: ruby-debug
48
- requirement: !ruby/object:Gem::Requirement
49
- requirements:
50
- - - ">="
51
- - !ruby/object:Gem::Version
52
- version: '0'
53
- type: :development
54
- prerelease: false
55
- version_requirements: !ruby/object:Gem::Requirement
56
- requirements:
57
- - - ">="
58
- - !ruby/object:Gem::Version
59
- version: '0'
60
- - !ruby/object:Gem::Dependency
61
- name: pry
62
- requirement: !ruby/object:Gem::Requirement
63
- requirements:
64
- - - ">="
65
- - !ruby/object:Gem::Version
66
- version: '0'
67
- type: :development
68
- prerelease: false
69
- version_requirements: !ruby/object:Gem::Requirement
70
- requirements:
71
- - - ">="
72
- - !ruby/object:Gem::Version
73
- version: '0'
74
- - !ruby/object:Gem::Dependency
75
- name: pry-byebug
76
- requirement: !ruby/object:Gem::Requirement
77
- requirements:
78
- - - ">="
79
- - !ruby/object:Gem::Version
80
- version: '0'
81
- type: :development
82
- prerelease: false
83
- version_requirements: !ruby/object:Gem::Requirement
84
- requirements:
85
- - - ">="
86
- - !ruby/object:Gem::Version
87
- version: '0'
16
+ date: 2016-12-14 00:00:00.000000000 Z
17
+ dependencies: []
88
18
  description: A toolkit of useful, reusable foundation code created by RightScale.
89
19
  email: support@rightscale.com
90
20
  executables: []
91
21
  extensions: []
92
- extra_rdoc_files:
93
- - LICENSE
94
- - README.md
22
+ extra_rdoc_files: []
95
23
  files:
96
- - CHANGELOG.rdoc
97
- - LICENSE
98
- - README.md
99
- - Rakefile
100
- - VERSION
101
24
  - lib/right_support.rb
102
25
  - lib/right_support/ci.rb
103
26
  - lib/right_support/ci/java_cucumber_formatter.rb
@@ -174,6 +97,7 @@ files:
174
97
  - lib/right_support/validation.rb
175
98
  - lib/right_support/validation/openssl.rb
176
99
  - lib/right_support/validation/ssh.rb
100
+ - lib/right_support/version.rb
177
101
  - right_support.gemspec
178
102
  homepage: https://github.com/rightscale/right_support
179
103
  licenses:
@@ -185,9 +109,9 @@ require_paths:
185
109
  - lib
186
110
  required_ruby_version: !ruby/object:Gem::Requirement
187
111
  requirements:
188
- - - ">="
112
+ - - "~>"
189
113
  - !ruby/object:Gem::Version
190
- version: '0'
114
+ version: '2.1'
191
115
  required_rubygems_version: !ruby/object:Gem::Requirement
192
116
  requirements:
193
117
  - - ">="
@@ -195,7 +119,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
195
119
  version: '0'
196
120
  requirements: []
197
121
  rubyforge_project:
198
- rubygems_version: 2.2.5
122
+ rubygems_version: 2.4.5
199
123
  signing_key:
200
124
  specification_version: 4
201
125
  summary: Reusable foundation code.
@@ -1,37 +0,0 @@
1
- == 2.0
2
-
3
- === Interface-breaking changes
4
-
5
- * Changed some of the more esoteric options of RequestBalancer
6
- * Removed TagLogger and CustomLogger middlwares
7
- * Renamed Balancing module to LB
8
- * Renamed StickyPolicy class to Sticky
9
- * Removed Object#if_require_succeeds(&block); too dangerous -- use
10
- Object#require_succeeds instead!
11
-
12
- === New functionality
13
-
14
- * Several new Rack middlewares for request logging & tracking
15
- * Statistics gathering, string extensions,
16
- * HTTPClient methods can accept query-strings (:query) and/or request body
17
- (:payload)
18
-
19
- == 1.0
20
-
21
- === Interface-breaking changes
22
-
23
- * Moved logging classes (FilterLogger, SystemLogger, TagLogger) into RightSupport::Log namespace
24
- * Moved CassandraModel into RightSupport::DB
25
- * Removed RightSupport::REST module entirely. Replaced by RightSupport::Net::HTTPClient class.
26
-
27
- === New functionality
28
-
29
- * RequestBalancer now capable of using multiple policies for endpoint selection.
30
- Default is RoundRobin (previously the only option); now you can choose HealthCheck
31
- in addition. See rdoc for more info.
32
- * RequestBalancer can accept a logger as a class attribute. If supplied, any failed requests
33
- will be logged with the error severity, including detailed information about exception type,
34
- retryability, etc.
35
- * HTTPClient object is a thin wrapper around RestClient that adds some default timeouts.
36
- It's appropriate for low-latency REST requests to nearby services; by tweaking the
37
- defaults, you can use it for various other scenarios.
data/LICENSE DELETED
@@ -1,76 +0,0 @@
1
- Copyright (c) 2009-2014 RightScale, Inc.
2
-
3
- Permission is hereby granted, free of charge, to any person obtaining
4
- a copy of this software and associated documentation files (the
5
- 'Software'), to deal in the Software without restriction, including
6
- without limitation the rights to use, copy, modify, merge, publish,
7
- distribute, sublicense, and/or sell copies of the Software, and to
8
- permit persons to whom the Software is furnished to do so, subject to
9
- the following conditions:
10
-
11
- The above copyright notice and this permission notice shall be
12
- included in all copies or substantial portions of the Software.
13
-
14
- THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
15
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17
- IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
18
- CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
19
- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
20
- SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
-
22
- ---
23
- ---
24
-
25
- Some portions of lib/right_support/data/mash.rb and spec/data/mash_spec.rb
26
- are modified versions of the extlib library, which is licensed under the
27
- MIT license. That license, plus the license of the code from which extlib
28
- was derived, is included below:
29
-
30
- Copyright (c) 2010 Dan Kubb
31
-
32
- Permission is hereby granted, free of charge, to any person obtaining
33
- a copy of this software and associated documentation files (the
34
- "Software"), to deal in the Software without restriction, including
35
- without limitation the rights to use, copy, modify, merge, publish,
36
- distribute, sublicense, and/or sell copies of the Software, and to
37
- permit persons to whom the Software is furnished to do so, subject to
38
- the following conditions:
39
-
40
- The above copyright notice and this permission notice shall be
41
- included in all copies or substantial portions of the Software.
42
-
43
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
44
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
45
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
46
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
47
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
48
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
49
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
50
-
51
- ---
52
- ---
53
-
54
- Some portions of blank.rb and mash.rb are verbatim copies of software
55
- licensed under the MIT license. That license is included below:
56
-
57
- Copyright (c) 2005-2008 David Heinemeier Hansson
58
-
59
- Permission is hereby granted, free of charge, to any person obtaining
60
- a copy of this software and associated documentation files (the
61
- "Software"), to deal in the Software without restriction, including
62
- without limitation the rights to use, copy, modify, merge, publish,
63
- distribute, sublicense, and/or sell copies of the Software, and to
64
- permit persons to whom the Software is furnished to do so, subject to
65
- the following conditions:
66
-
67
- The above copyright notice and this permission notice shall be
68
- included in all copies or substantial portions of the Software.
69
-
70
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
71
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
72
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
73
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
74
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
75
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
76
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md DELETED
@@ -1,192 +0,0 @@
1
- # RightSupport
2
-
3
- This is a library of reusable, unit- and functional-tested Ruby code that RightScale has found broadly useful.
4
-
5
- [![Build Status](https://travis-ci.org/rightscale/right_support.svg?branch=master)](https://travis-ci.org/rightscale/right_support)
6
-
7
- [![Coverage Status](https://img.shields.io/coveralls/rightscale/right_support.svg)](https://coveralls.io/r/rightscale/right_support?branch=master)
8
-
9
- Maintained by the RightScale Technicolor Team
10
-
11
- # What Does It Do?
12
-
13
- ## Logging
14
-
15
- SystemLogger is a rewrite of the seattle.rb SyslogLogger class that features the following improvements:
16
- * Contains several bugfixes vs. SyslogLogger 1.4.0
17
- * Inherits from standard Ruby Logger class for guaranteed compatibility
18
- * Can be configured with options about how to handle newlines, ANSI escape codes, etc
19
-
20
- We also provide Log::Mixin, a powerful tool that lets you sprinkle a logger
21
- into any object or class, and supports per-class or per-instance custom
22
- loggers!
23
-
24
- class Jet < Aircraft
25
- include RightSupport::Log.Mixin
26
- end
27
-
28
- #most jets log to the syslog
29
- Jet.logger = RightSupport::Log::SystemLogger.new('black box',
30
- :facility=>'local0')
31
-
32
- #but MY jet
33
- @my_jet.logger = Logger.new(StringIO.new)
34
-
35
- ### Logging for Rack Applications
36
-
37
- RightSupport also provides Rack middleware that allows a Rack app to use any log sink it wishes. The
38
- stock Rack logger middleware is inflexible and gives the end user no control over which logger is used
39
- or where the log entries go. Example of usage on Sinatra based application:
40
-
41
- class MyApp < Sinatra::Base
42
- ...
43
- # Specify which logger will be used as default logger
44
- LOGGER =\
45
- if ENV['RACK_ENV'].downcase == 'development'
46
- Logger.new(STDOUT)
47
- else
48
- RightSupport::Log::SystemLogger.new("MyApp", {:facility => "local0"})
49
- end
50
-
51
- # use the RequestLogger via LogSetter to log requests for application
52
- use RightSupport::Rack::LogSetter, {:logger => LOGGER}
53
- use RightSupport::Rack::RequestLogger
54
-
55
- # set logger and mix Log::Mixin
56
- RightSupport::Log::Mixin.default_logger = LOGGER
57
- include RightSupport::Log::Mixin
58
- ...
59
- end
60
-
61
- After that all rack requests to MyApp will be logged, and since we mixed Log::Mixin we can use:
62
-
63
- logger.info "Hello world\nThis will appear on separate lines\nand without \e[33;0mbeautiful colors"
64
-
65
- ## Networking Stuff
66
-
67
- ### HTTP Client
68
-
69
- We provide a very thin wrapper around the rest-client gem that enables simple but
70
- robust rest requests with a timeout, headers, etc.
71
-
72
- HTTPClient is interface-compatible with the RestClient module, but allows an
73
- optional timeout to be specified as an extra parameter.
74
-
75
- # Create a wrapper object
76
- @client = RightSupport::Net::HTTPClient.new
77
-
78
- # Default timeout is 5 seconds
79
- @client.get('http://localhost')
80
-
81
- # Make sure the HTTPClient request fails after 1 second so we can report an error
82
- # and move on!
83
- @client.get('http://localhost', {:headers => {'X-Hello'=>'hi!'}, :timeout => 1)}
84
-
85
- # HTTPClient transforms String or Hash :query into query string, for example;
86
- @client.get('http://localhost/moo', {:query=>{:a=>{:b=>:c}}} )
87
- # the url that would be requested is http://localhost/moo?a[b]=c
88
-
89
- ### Client-Side Load Balancer
90
-
91
- RequestBalancer randomly chooses endpoints for a network request, which lets
92
- you perform easy client-side load balancing:
93
-
94
- include RightSupport::Net
95
-
96
- urls = ['http://localhost', 'http://otherhost']
97
- RequestBalancer.request(urls, :fatal=>RestClient::ResourceNotFound) do |url|
98
- REST.get(url)
99
- end
100
-
101
- The balancer will keep trying requests until one of them succeeds without
102
- throwing any exceptions. (NB: a nil return value counts as success!!)
103
-
104
- ### HTTP Request Tracking for Rack
105
-
106
- Correlate data flows across your entire architecture with the RequestTracker
107
- middleware, which uses custom HTTP headers to "tag" every Web request with
108
- a UUID, and works with RequestLogger to log "begin" and "end" lines containing
109
- the UUID.
110
-
111
- If your app consumes the UUID and passes it on to HTTP services that it
112
- invokes, the same request UUID will appear in all logs and you can grep for
113
- the "big picture" instead of wasting time paging between logs.
114
-
115
- To use this functionality you need:
116
-
117
- use RightSupport::Rack::RequestTracker
118
-
119
- ## Statistics Gathering
120
-
121
- Profile your compute-heavy and network activities using a Stats::Activity counter.
122
-
123
- stats = RightSupport::Stats::Activity.new
124
-
125
- puts 'enter 5 lines:'
126
- 5.times do
127
- stats.update(:read_input)
128
- line = STDIN.readline
129
- stats.finish
130
- end
131
-
132
- puts "Only %.1f lines/sec? You are a slow typist!" % [stats.avg_rate]
133
-
134
- ## Input Validation
135
-
136
- Validation contains several format-checkers that can be used to validate your
137
- web app's models before saving, check for preconditions in your controllers,
138
- and so forth.
139
-
140
- You can use it as a mixin by including the appropriate child module of
141
- RightSupport::Validation.
142
-
143
- class AwesomenessGenerator < ActiveRecord::Base
144
- include RightSupport::Validation::OpenSSL
145
-
146
- before_save do |record|
147
- errors[:foo] = 'Hey, that's not a key!' unless pem_public_key?(record.foo)
148
- end
149
- end
150
-
151
- But you really don't want to do that, do you? Instead, you want to call the module
152
- methods of RightSupport::Validation, which contains all of the same mixin methods,
153
- but does not pollute the dispatch table of your application classes.
154
-
155
- the_key = STDIN.read
156
- raise ArgumentError unless RightSupport::Validation.ssh_public_key?(the_key)
157
-
158
- ## String Manipulation
159
-
160
- StringExtensions contains String#camelize, which is only defined if the
161
- ActiveSupport gem cannot be loaded. It also has some RightScale-specific
162
- methods:
163
- * String#snake_case
164
- * String#to_const
165
- * String#to_const_path
166
-
167
- Net::StringEncoder applies and removes URL-escape, base64 and other encodings.
168
-
169
- ## Configuration
170
-
171
- RightSupport::Config contains functionality, which provides possibility
172
- to use human-readable yaml configuration files. For example, you have following yaml
173
- file '/tmp/features_config.yml', with content:
174
-
175
- eat:
176
- khlav kalash: YES!
177
- speak:
178
- klingonese: false
179
- belarusian: true
180
-
181
- Then, if you would add configuration in you class, like:
182
-
183
- class SweetestClass
184
- CONFIG = RightSupport::Config.features('/tmp/features_config.yml')
185
- end
186
-
187
- * RightSupport::Config.features receives file` path, io or string.
188
-
189
- Now you can call CONFIG['feature_group']['feature'], like:
190
-
191
- * SweetestClass::CONFIG['eat']['khlav kalash'] would return 'YES!'
192
- * SweetestClass::CONFIG['speak']['belarusian'] would return true
data/Rakefile DELETED
@@ -1,85 +0,0 @@
1
- # -*-ruby-*-
2
- require 'rubygems'
3
- require 'bundler/setup'
4
-
5
- require 'rake'
6
- require 'rubygems/package_task'
7
-
8
- require 'rake/clean'
9
- require 'rspec/core/rake_task'
10
- require 'cucumber/rake/task'
11
-
12
- # These dependencies can be omitted using "bundle install --without"; tolerate their absence.
13
- ['rdoc/task', 'jeweler', 'coveralls/rake/task'].each do |optional|
14
- begin
15
- require optional
16
- rescue LoadError
17
- # ignore
18
- end
19
- end
20
-
21
- # But, we have a very special need, because OUR Cucumbers need to run with a pristine
22
- # environment that isn't polluted by RVM or RubyGems or anyone else, in order to validate
23
- # that RightSupport's CI harness doesn't break your app if those gems are unavailable.
24
- # Thus when our own Rake task runs spec or cucumber as a subprocess, we need to give it
25
- # a pristine non-bundled environment, so it can use Bundler.with_clean_env to launch
26
- # subprocesses.
27
- require File.expand_path('../features/support/file_utils_bundler_mixin', __FILE__)
28
-
29
- desc "Run unit tests"
30
- task :default => :spec
31
-
32
- desc "Run unit tests"
33
- RSpec::Core::RakeTask.new do |t|
34
- t.pattern = Dir['**/*_spec.rb']
35
- end
36
-
37
- desc "Run functional tests"
38
- Cucumber::Rake::Task.new do |t|
39
- t.cucumber_opts = %w{--color --format pretty}
40
- end
41
-
42
- if defined?(Rake::RDocTask)
43
- desc 'Generate documentation for the right_support gem.'
44
- Rake::RDocTask.new(:rdoc) do |rdoc|
45
- rdoc.rdoc_dir = 'doc'
46
- rdoc.title = 'RightSupport'
47
- rdoc.options << '--line-numbers' << '--inline-source'
48
- rdoc.rdoc_files.include('README.rdoc')
49
- rdoc.rdoc_files.include('lib/**/*.rb')
50
- rdoc.rdoc_files.exclude('features/**/*')
51
- rdoc.rdoc_files.exclude('spec/**/*')
52
- end
53
- end
54
-
55
- if defined?(Jeweler)
56
- tasks = Jeweler::Tasks.new do |gem|
57
- # gem is a Gem::Specification; see http://docs.rubygems.org/read/chapter/20 for more options
58
- gem.name = "right_support"
59
- gem.homepage = "https://github.com/rightscale/right_support"
60
- gem.license = "MIT"
61
- gem.summary = %Q{Reusable foundation code.}
62
- gem.description = %Q{A toolkit of useful, reusable foundation code created by RightScale.}
63
- gem.email = "support@rightscale.com"
64
- gem.authors = ['Tony Spataro', 'Sergey Sergyenko', 'Ryan Williamson', 'Lee Kirchhoff', 'Alexey Karpik', 'Scott Messier']
65
- gem.files.exclude "Gemfile*"
66
- gem.files.exclude ".*"
67
- gem.files.exclude "features/**/*"
68
- gem.files.exclude "spec/**/*"
69
- end
70
-
71
- # Never auto-commit during operations that change the repository. Allows developers to decide on their own commit comment
72
- # and/or aggregate version bumps into other fixes.
73
- tasks.jeweler.commit = false
74
-
75
- Jeweler::RubygemsDotOrgTasks.new
76
- end
77
-
78
- if defined?(Coveralls)
79
- Coveralls::RakeTask.new
80
- end
81
-
82
- CLEAN.include('pkg')
83
-
84
- require 'right_develop'
85
- RightDevelop::CI::RakeTask.new
data/VERSION DELETED
@@ -1 +0,0 @@
1
- 2.13.3