right_support 2.8.32 → 2.8.33
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 +4 -4
- data/.coveralls.yml +2 -0
- data/.simplecov +6 -0
- data/.travis.yml +12 -0
- data/Gemfile +22 -12
- data/Gemfile.lock +37 -17
- data/{README.rdoc → README.md} +19 -13
- data/Rakefile +40 -25
- data/VERSION +1 -1
- data/features/serialization.feature +1 -1
- data/features/step_definitions/serialization_steps.rb +18 -0
- data/features/support/env.rb +2 -0
- data/lib/right_support/ci/java_cucumber_formatter.rb +2 -0
- data/lib/right_support/ci/java_spec_formatter.rb +2 -0
- data/lib/right_support/ci/rake_task.rb +2 -0
- data/lib/right_support/data/serializer.rb +5 -3
- data/lib/right_support/rack/runtime.rb +52 -0
- data/lib/right_support/rack.rb +1 -0
- data/right_support.gemspec +16 -5
- data/spec/data/hash_tools_spec.rb +11 -2
- data/spec/rack/runtime_spec.rb +49 -0
- data/spec/spec_helper.rb +2 -0
- metadata +37 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: fb9b8dbbf196cce60a01939073f03dd056ae8c22
|
|
4
|
+
data.tar.gz: f1d9aaf339977d0124b0f0f658a47cd6e28e678c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 357ee9fddedc435739e1aa355a23f01d1177557b9a10bcd2149e60d0e20e360ee0aeafb39d5b497fecbed7b920e952aa94a4d85041df5b5e338e2fe662fd1881
|
|
7
|
+
data.tar.gz: 1a593d7bc80ef34e4fcabf650ed5c957f529bf9b9047fa27d46440f902d532163c72dbb39826b447e7f932a4faae58ef24bbb05c612776b2eb7ca626a2a9611b
|
data/.coveralls.yml
ADDED
data/.simplecov
ADDED
data/.travis.yml
ADDED
data/Gemfile
CHANGED
|
@@ -3,25 +3,31 @@ source 'https://rubygems.org'
|
|
|
3
3
|
# Gems that RightSupport can optionally make use of, but which it does
|
|
4
4
|
# not require to be installed. These would be 'optional dependencies'
|
|
5
5
|
# if gemspecs allowed for them.
|
|
6
|
+
#
|
|
7
|
+
# Note that these are all require-nil because we want to simulate the behavior
|
|
8
|
+
# of the library in a context where it lazy-loads its optional dependencies.
|
|
6
9
|
group :optional do
|
|
7
|
-
gem 'net-ssh', '~> 2.0'
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
10
|
+
gem 'net-ssh', '~> 2.0', :require => nil
|
|
11
|
+
# mime-types 2.x is no longer compatible with Ruby 1.8 and
|
|
12
|
+
# mime-types 1.x is only being maintained for security issues .. use 1.x for now, since we
|
|
13
|
+
# maintain 1.8 compatibility
|
|
14
|
+
gem 'mime-types', '~> 1.0', :require => nil
|
|
15
|
+
gem 'rest-client', '~> 1.6.7', :require => nil
|
|
16
|
+
gem 'addressable', '~> 2.2.7', :require => nil
|
|
11
17
|
gem 'uuidtools', '~> 2.0', :require => nil
|
|
12
18
|
gem 'simple_uuid', '~> 0.2', :require => nil
|
|
13
19
|
gem 'uuid', '~> 2.3', :require => nil
|
|
14
|
-
gem '
|
|
20
|
+
gem 'json', '~> 1.8', :require => nil
|
|
15
21
|
gem 'iconv', :platforms => :ruby_18
|
|
16
22
|
end
|
|
17
23
|
|
|
18
|
-
|
|
19
|
-
|
|
24
|
+
gem 'rake', '~> 10.0', :group=>[:development, :test]
|
|
25
|
+
|
|
26
|
+
# Gems used to run RightSupport tests; omitted from the gemspec, but available in CI.
|
|
20
27
|
group :test do
|
|
21
|
-
gem 'jeweler', '~> 2.0'
|
|
22
28
|
gem 'flexmock', '~> 1.0'
|
|
23
29
|
gem 'rspec', '~> 2.13.0'
|
|
24
|
-
gem 'right_develop', '~>
|
|
30
|
+
gem 'right_develop', '~> 3.1'
|
|
25
31
|
|
|
26
32
|
# Cuke >= 1.3.3 depends on RubyGems > 2.0 without specifying that in its gemspec
|
|
27
33
|
gem 'cucumber', ['~> 1.0', '< 1.3.3']
|
|
@@ -31,11 +37,15 @@ group :test do
|
|
|
31
37
|
# Work around the bug by locking ourselves to 1.5.x, guaranteeing that we can install our bundle
|
|
32
38
|
# under Ruby 1.8.
|
|
33
39
|
gem 'nokogiri', '~> 1.5.0'
|
|
40
|
+
|
|
41
|
+
# Code coverage reporting and metrics pp
|
|
42
|
+
gem 'coveralls', :require => false
|
|
34
43
|
end
|
|
35
44
|
|
|
36
|
-
# Gems that are used for development
|
|
45
|
+
# Gems that are used purely for development; present in the gemspec, not available in CI.
|
|
37
46
|
group :development do
|
|
47
|
+
gem 'jeweler', '~> 2.0'
|
|
38
48
|
gem 'ruby-debug', :platforms => [:ruby_18]
|
|
39
49
|
gem 'pry', :platforms => [:ruby_19, :ruby_20, :ruby_21]
|
|
40
|
-
gem 'pry-byebug', :platforms => [:
|
|
41
|
-
end
|
|
50
|
+
gem 'pry-byebug', :platforms => [:ruby_20, :ruby_21]
|
|
51
|
+
end
|
data/Gemfile.lock
CHANGED
|
@@ -8,6 +8,12 @@ GEM
|
|
|
8
8
|
debugger-linecache (~> 1.2)
|
|
9
9
|
coderay (1.1.0)
|
|
10
10
|
columnize (0.8.9)
|
|
11
|
+
coveralls (0.7.1)
|
|
12
|
+
multi_json (~> 1.3)
|
|
13
|
+
rest-client
|
|
14
|
+
simplecov (>= 0.7)
|
|
15
|
+
term-ansicolor
|
|
16
|
+
thor
|
|
11
17
|
cucumber (1.3.2)
|
|
12
18
|
builder (>= 2.1.2)
|
|
13
19
|
diff-lcs (>= 1.1.3)
|
|
@@ -15,7 +21,7 @@ GEM
|
|
|
15
21
|
multi_json (~> 1.3)
|
|
16
22
|
debugger-linecache (1.2.0)
|
|
17
23
|
diff-lcs (1.2.5)
|
|
18
|
-
|
|
24
|
+
docile (1.1.5)
|
|
19
25
|
faraday (0.8.9)
|
|
20
26
|
multipart-post (~> 1.2.0)
|
|
21
27
|
flexmock (1.3.3)
|
|
@@ -44,6 +50,8 @@ GEM
|
|
|
44
50
|
json (1.8.1)
|
|
45
51
|
jwt (0.1.11)
|
|
46
52
|
multi_json (>= 1.5)
|
|
53
|
+
linecache (0.46)
|
|
54
|
+
rbx-require-relative (> 0.0.4)
|
|
47
55
|
macaddr (1.6.5)
|
|
48
56
|
systemu (~> 2.6.2)
|
|
49
57
|
method_source (0.8.2)
|
|
@@ -67,28 +75,25 @@ GEM
|
|
|
67
75
|
byebug (~> 2.7)
|
|
68
76
|
pry (~> 0.10)
|
|
69
77
|
rack (1.5.2)
|
|
70
|
-
rake (
|
|
78
|
+
rake (10.3.2)
|
|
79
|
+
rbx-require-relative (0.0.9)
|
|
71
80
|
rdoc (4.1.1)
|
|
72
81
|
json (~> 1.4)
|
|
73
82
|
rest-client (1.6.7)
|
|
74
83
|
mime-types (>= 1.16)
|
|
75
84
|
right_aws (3.1.0)
|
|
76
85
|
right_http_connection (>= 1.2.5)
|
|
77
|
-
right_develop (
|
|
86
|
+
right_develop (3.1.4)
|
|
78
87
|
builder (~> 3.0)
|
|
79
|
-
cucumber (~> 1.0, < 1.3.3)
|
|
80
|
-
extlib
|
|
81
88
|
rack
|
|
82
|
-
rake (>= 0.8.7, < 0.10)
|
|
83
89
|
right_aws (>= 2.1.0)
|
|
84
|
-
right_git (
|
|
85
|
-
right_support (
|
|
86
|
-
rspec (>= 1.3, < 3.0)
|
|
90
|
+
right_git (>= 1.0)
|
|
91
|
+
right_support (>= 2.8.31, < 3.0.0)
|
|
87
92
|
trollop (>= 1.0, < 3.0)
|
|
88
|
-
right_git (0.1
|
|
89
|
-
right_support (>= 2.8.10
|
|
90
|
-
right_http_connection (1.
|
|
91
|
-
right_support (2.8.
|
|
93
|
+
right_git (1.0.1)
|
|
94
|
+
right_support (>= 2.8.10)
|
|
95
|
+
right_http_connection (1.5.0)
|
|
96
|
+
right_support (2.8.32)
|
|
92
97
|
rspec (2.13.0)
|
|
93
98
|
rspec-core (~> 2.13.0)
|
|
94
99
|
rspec-expectations (~> 2.13.0)
|
|
@@ -97,34 +102,49 @@ GEM
|
|
|
97
102
|
rspec-expectations (2.13.0)
|
|
98
103
|
diff-lcs (>= 1.1.3, < 2.0)
|
|
99
104
|
rspec-mocks (2.13.1)
|
|
105
|
+
ruby-debug (0.10.4)
|
|
106
|
+
columnize (>= 0.1)
|
|
107
|
+
ruby-debug-base (~> 0.10.4.0)
|
|
108
|
+
ruby-debug-base (0.10.4)
|
|
109
|
+
linecache (>= 0.3)
|
|
100
110
|
simple_uuid (0.4.0)
|
|
111
|
+
simplecov (0.9.1)
|
|
112
|
+
docile (~> 1.1.0)
|
|
113
|
+
multi_json (~> 1.0)
|
|
114
|
+
simplecov-html (~> 0.8.0)
|
|
115
|
+
simplecov-html (0.8.0)
|
|
101
116
|
slop (3.6.0)
|
|
102
117
|
systemu (2.6.3)
|
|
118
|
+
term-ansicolor (1.3.0)
|
|
119
|
+
tins (~> 1.0)
|
|
120
|
+
thor (0.19.1)
|
|
121
|
+
tins (1.3.3)
|
|
103
122
|
trollop (2.0)
|
|
104
123
|
uuid (2.3.7)
|
|
105
124
|
macaddr (~> 1.0)
|
|
106
125
|
uuidtools (2.1.4)
|
|
107
|
-
yajl-ruby (1.2.0)
|
|
108
126
|
|
|
109
127
|
PLATFORMS
|
|
110
128
|
ruby
|
|
111
129
|
|
|
112
130
|
DEPENDENCIES
|
|
113
131
|
addressable (~> 2.2.7)
|
|
132
|
+
coveralls
|
|
114
133
|
cucumber (~> 1.0, < 1.3.3)
|
|
115
134
|
flexmock (~> 1.0)
|
|
116
135
|
iconv
|
|
117
136
|
jeweler (~> 2.0)
|
|
137
|
+
json (~> 1.8)
|
|
118
138
|
mime-types (~> 1.0)
|
|
119
139
|
net-ssh (~> 2.0)
|
|
120
140
|
nokogiri (~> 1.5.0)
|
|
121
141
|
pry
|
|
122
142
|
pry-byebug
|
|
123
|
-
|
|
124
|
-
|
|
143
|
+
rake (~> 10.0)
|
|
144
|
+
rest-client (~> 1.6.7)
|
|
145
|
+
right_develop (~> 3.1)
|
|
125
146
|
rspec (~> 2.13.0)
|
|
126
147
|
ruby-debug
|
|
127
148
|
simple_uuid (~> 0.2)
|
|
128
149
|
uuid (~> 2.3)
|
|
129
150
|
uuidtools (~> 2.0)
|
|
130
|
-
yajl-ruby (~> 1.1)
|
data/{README.rdoc → README.md}
RENAMED
|
@@ -1,10 +1,16 @@
|
|
|
1
|
-
RightSupport
|
|
1
|
+
# RightSupport
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
This is a library of reusable, unit- and functional-tested Ruby code that RightScale has found broadly useful.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
[](https://travis-ci.org/rightscale/right_support)
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
[](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
|
|
8
14
|
|
|
9
15
|
SystemLogger is a rewrite of the seattle.rb SyslogLogger class that features the following improvements:
|
|
10
16
|
* Contains several bugfixes vs. SyslogLogger 1.4.0
|
|
@@ -26,7 +32,7 @@ loggers!
|
|
|
26
32
|
#but MY jet
|
|
27
33
|
@my_jet.logger = Logger.new(StringIO.new)
|
|
28
34
|
|
|
29
|
-
|
|
35
|
+
### Logging for Rack Applications
|
|
30
36
|
|
|
31
37
|
RightSupport also provides Rack middleware that allows a Rack app to use any log sink it wishes. The
|
|
32
38
|
stock Rack logger middleware is inflexible and gives the end user no control over which logger is used
|
|
@@ -56,9 +62,9 @@ After that all rack requests to MyApp will be logged, and since we mixed Log::Mi
|
|
|
56
62
|
|
|
57
63
|
logger.info "Hello world\nThis will appear on separate lines\nand without \e[33;0mbeautiful colors"
|
|
58
64
|
|
|
59
|
-
|
|
65
|
+
## Networking Stuff
|
|
60
66
|
|
|
61
|
-
|
|
67
|
+
### HTTP Client
|
|
62
68
|
|
|
63
69
|
We provide a very thin wrapper around the rest-client gem that enables simple but
|
|
64
70
|
robust rest requests with a timeout, headers, etc.
|
|
@@ -80,7 +86,7 @@ optional timeout to be specified as an extra parameter.
|
|
|
80
86
|
@client.get('http://localhost/moo', {:query=>{:a=>{:b=>:c}}} )
|
|
81
87
|
# the url that would be requested is http://localhost/moo?a[b]=c
|
|
82
88
|
|
|
83
|
-
|
|
89
|
+
### Client-Side Load Balancer
|
|
84
90
|
|
|
85
91
|
RequestBalancer randomly chooses endpoints for a network request, which lets
|
|
86
92
|
you perform easy client-side load balancing:
|
|
@@ -95,7 +101,7 @@ you perform easy client-side load balancing:
|
|
|
95
101
|
The balancer will keep trying requests until one of them succeeds without
|
|
96
102
|
throwing any exceptions. (NB: a nil return value counts as success!!)
|
|
97
103
|
|
|
98
|
-
|
|
104
|
+
### HTTP Request Tracking for Rack
|
|
99
105
|
|
|
100
106
|
Correlate data flows across your entire architecture with the RequestTracker
|
|
101
107
|
middleware, which uses custom HTTP headers to "tag" every Web request with
|
|
@@ -110,7 +116,7 @@ To use this functionality you need:
|
|
|
110
116
|
|
|
111
117
|
use RightSupport::Rack::RequestTracker
|
|
112
118
|
|
|
113
|
-
|
|
119
|
+
## Statistics Gathering
|
|
114
120
|
|
|
115
121
|
Profile your compute-heavy and network activities using a Stats::Activity counter.
|
|
116
122
|
|
|
@@ -125,7 +131,7 @@ Profile your compute-heavy and network activities using a Stats::Activity counte
|
|
|
125
131
|
|
|
126
132
|
puts "Only %.1f lines/sec? You are a slow typist!" % [stats.avg_rate]
|
|
127
133
|
|
|
128
|
-
|
|
134
|
+
## Input Validation
|
|
129
135
|
|
|
130
136
|
Validation contains several format-checkers that can be used to validate your
|
|
131
137
|
web app's models before saving, check for preconditions in your controllers,
|
|
@@ -149,7 +155,7 @@ but does not pollute the dispatch table of your application classes.
|
|
|
149
155
|
the_key = STDIN.read
|
|
150
156
|
raise ArgumentError unless RightSupport::Validation.ssh_public_key?(the_key)
|
|
151
157
|
|
|
152
|
-
|
|
158
|
+
## String Manipulation
|
|
153
159
|
|
|
154
160
|
StringExtensions contains String#camelize, which is only defined if the
|
|
155
161
|
ActiveSupport gem cannot be loaded. It also has some RightScale-specific
|
|
@@ -160,7 +166,7 @@ methods:
|
|
|
160
166
|
|
|
161
167
|
Net::StringEncoder applies and removes URL-escape, base64 and other encodings.
|
|
162
168
|
|
|
163
|
-
|
|
169
|
+
## Configuration
|
|
164
170
|
|
|
165
171
|
RightSupport::Config contains functionality, which provides possibility
|
|
166
172
|
to use human-readable yaml configuration files. For example, you have following yaml
|
data/Rakefile
CHANGED
|
@@ -3,13 +3,21 @@ require 'rubygems'
|
|
|
3
3
|
require 'bundler/setup'
|
|
4
4
|
|
|
5
5
|
require 'rake'
|
|
6
|
-
require 'rdoc/task'
|
|
7
6
|
require 'rubygems/package_task'
|
|
8
7
|
|
|
9
8
|
require 'rake/clean'
|
|
10
9
|
require 'rspec/core/rake_task'
|
|
11
10
|
require 'cucumber/rake/task'
|
|
12
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
|
+
|
|
13
21
|
# But, we have a very special need, because OUR Cucumbers need to run with a pristine
|
|
14
22
|
# environment that isn't polluted by RVM or RubyGems or anyone else, in order to validate
|
|
15
23
|
# that RightSupport's CI harness doesn't break your app if those gems are unavailable.
|
|
@@ -31,34 +39,41 @@ Cucumber::Rake::Task.new do |t|
|
|
|
31
39
|
t.cucumber_opts = %w{--color --format pretty}
|
|
32
40
|
end
|
|
33
41
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
rdoc
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
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
|
|
43
53
|
end
|
|
44
54
|
|
|
45
|
-
|
|
46
|
-
tasks = Jeweler::Tasks.new do |gem|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
end
|
|
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
|
+
end
|
|
56
66
|
|
|
57
|
-
# Never auto-commit during operations that change the repository. Allows developers to decide on their own commit comment
|
|
58
|
-
# and/or aggregate version bumps into other fixes.
|
|
59
|
-
tasks.jeweler.commit = false
|
|
67
|
+
# Never auto-commit during operations that change the repository. Allows developers to decide on their own commit comment
|
|
68
|
+
# and/or aggregate version bumps into other fixes.
|
|
69
|
+
tasks.jeweler.commit = false
|
|
60
70
|
|
|
61
|
-
Jeweler::RubygemsDotOrgTasks.new
|
|
71
|
+
Jeweler::RubygemsDotOrgTasks.new
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
if defined?(Coveralls)
|
|
75
|
+
Coveralls::RakeTask.new
|
|
76
|
+
end
|
|
62
77
|
|
|
63
78
|
CLEAN.include('pkg')
|
|
64
79
|
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
2.8.
|
|
1
|
+
2.8.33
|
|
@@ -33,7 +33,7 @@ Feature: JSON serialization
|
|
|
33
33
|
|
|
34
34
|
Scenario: invalid UTF-8 characters
|
|
35
35
|
When I serialize the Ruby value: "\xC0\xBCscript>\xC0\xBC/script>"
|
|
36
|
-
Then the serialized value should
|
|
36
|
+
Then the serialized value should have no invalid characters
|
|
37
37
|
|
|
38
38
|
Scenario: valid UTF-8 characters
|
|
39
39
|
When I serialize the Ruby value: "onê"
|
|
@@ -77,6 +77,24 @@ Then /^the serialized value should round-trip cleanly$/ do
|
|
|
77
77
|
end
|
|
78
78
|
end
|
|
79
79
|
|
|
80
|
+
Then /^the serialized value should have no invalid characters$/ do
|
|
81
|
+
if @serialized_value.respond_to?(:valid_encoding?)
|
|
82
|
+
# modern Rubies
|
|
83
|
+
@serialized_value.valid_encoding?.should be_true
|
|
84
|
+
else
|
|
85
|
+
# Ruby 1.8
|
|
86
|
+
raised = false
|
|
87
|
+
begin
|
|
88
|
+
iconv = Iconv.new('UTF-8', 'UTF-8')
|
|
89
|
+
iconv.iconv(@serialized_value)
|
|
90
|
+
rescue Exception => e
|
|
91
|
+
raised = true
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
raised.should be_false
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
80
98
|
When /^the serialized value should fail to round\-trip$/ do
|
|
81
99
|
@serializer.load(@serialized_value).should_not == @ruby_value
|
|
82
100
|
end
|
data/features/support/env.rb
CHANGED
|
@@ -26,6 +26,8 @@ require 'tmpdir'
|
|
|
26
26
|
require 'rubygems'
|
|
27
27
|
require 'bundler/setup'
|
|
28
28
|
|
|
29
|
+
require 'simplecov'
|
|
30
|
+
|
|
29
31
|
$:.unshift(File.expand_path('../../../lib', __FILE__)) #ensure we load THIS project's code, not an installed gem
|
|
30
32
|
require 'right_support'
|
|
31
33
|
require 'right_support/ci'
|
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
# RightSupport's main file. Make up for Cucumber's shortcomings.
|
|
25
25
|
require 'right_support'
|
|
26
26
|
|
|
27
|
+
# :nocov:
|
|
27
28
|
module RightSupport::CI
|
|
28
29
|
if require_succeeds?('cucumber/formatter/junit')
|
|
29
30
|
# @deprecated Please do not use this class
|
|
@@ -57,3 +58,4 @@ module RightSupport::CI
|
|
|
57
58
|
end
|
|
58
59
|
end
|
|
59
60
|
end
|
|
61
|
+
# :nocov:
|
|
@@ -25,6 +25,7 @@ require 'rake/tasklib'
|
|
|
25
25
|
# required directly.
|
|
26
26
|
require 'right_support'
|
|
27
27
|
|
|
28
|
+
# :nocov:
|
|
28
29
|
module RightSupport::CI
|
|
29
30
|
# A Rake task definition that creates a CI namespace with appropriate
|
|
30
31
|
# tests.
|
|
@@ -88,3 +89,4 @@ module RightSupport::CI
|
|
|
88
89
|
end
|
|
89
90
|
end
|
|
90
91
|
end
|
|
92
|
+
# :nocov:
|
|
@@ -163,9 +163,11 @@ module RightSupport::Data
|
|
|
163
163
|
# Nothing to do
|
|
164
164
|
dirty
|
|
165
165
|
else
|
|
166
|
-
#
|
|
167
|
-
#
|
|
168
|
-
|
|
166
|
+
# String has encoding other than UTF-8, or has invalid UTF-8 characters. Force the
|
|
167
|
+
# encoding to binary (if it's already UTF-8) to ensure that transcoding occurs,
|
|
168
|
+
# then transcode to UTF-8 and replace invalid characters with a question mark.
|
|
169
|
+
dirty.force_encoding(Encoding::BINARY) if dirty.encoding == Encoding::UTF_8
|
|
170
|
+
dirty.encode(Encoding::UTF_8,
|
|
169
171
|
:invalid => :replace,
|
|
170
172
|
:undef => :replace,
|
|
171
173
|
:replace => '?')
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright (c) 2007, 2008, 2009, 2010, 2011, 2012 Christian Neukirchen <purl.org/net/chneukirchen>
|
|
3
|
+
# Copyright (c) 2014 RightScale Inc
|
|
4
|
+
#
|
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
|
6
|
+
# a copy of this software and associated documentation files (the
|
|
7
|
+
# "Software"), to deal in the Software without restriction, including
|
|
8
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
|
9
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
|
10
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
|
11
|
+
# the following conditions:
|
|
12
|
+
#
|
|
13
|
+
# The above copyright notice and this permission notice shall be
|
|
14
|
+
# included in all copies or substantial portions of the Software.
|
|
15
|
+
#
|
|
16
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
17
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
18
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
19
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
20
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
21
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
22
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
23
|
+
|
|
24
|
+
# Copied and modified from
|
|
25
|
+
# https://github.com/rack/rack/blob/master/lib/rack/runtime.rb
|
|
26
|
+
module RightSupport::Rack
|
|
27
|
+
# Sets an "X-Runtime" response header, indicating the response
|
|
28
|
+
# time of the request, in milliseconds
|
|
29
|
+
#
|
|
30
|
+
# You can put it right before the application to see the processing
|
|
31
|
+
# time, or before all the other middlewares to include time for them,
|
|
32
|
+
# too.
|
|
33
|
+
class Runtime
|
|
34
|
+
def initialize(app, name = nil)
|
|
35
|
+
@app = app
|
|
36
|
+
@header_name = "X-Runtime"
|
|
37
|
+
@header_name << "-#{name}" if name
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def call(env)
|
|
41
|
+
start_time = Time.now
|
|
42
|
+
status, headers, body = @app.call(env)
|
|
43
|
+
request_time = Time.now - start_time
|
|
44
|
+
|
|
45
|
+
if !headers.has_key?(@header_name)
|
|
46
|
+
headers[@header_name] = (request_time * 1000).truncate.to_s
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
[status, headers, body]
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
data/lib/right_support/rack.rb
CHANGED
data/right_support.gemspec
CHANGED
|
@@ -2,29 +2,32 @@
|
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
|
4
4
|
# -*- encoding: utf-8 -*-
|
|
5
|
-
# stub: right_support 2.8.
|
|
5
|
+
# stub: right_support 2.8.33 ruby lib
|
|
6
6
|
|
|
7
7
|
Gem::Specification.new do |s|
|
|
8
8
|
s.name = "right_support"
|
|
9
|
-
s.version = "2.8.
|
|
9
|
+
s.version = "2.8.33"
|
|
10
10
|
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
12
12
|
s.require_paths = ["lib"]
|
|
13
13
|
s.authors = ["Tony Spataro", "Sergey Sergyenko", "Ryan Williamson", "Lee Kirchhoff", "Alexey Karpik", "Scott Messier"]
|
|
14
|
-
s.date = "2014-
|
|
14
|
+
s.date = "2014-10-18"
|
|
15
15
|
s.description = "A toolkit of useful, reusable foundation code created by RightScale."
|
|
16
16
|
s.email = "support@rightscale.com"
|
|
17
17
|
s.extra_rdoc_files = [
|
|
18
18
|
"LICENSE",
|
|
19
|
-
"README.
|
|
19
|
+
"README.md"
|
|
20
20
|
]
|
|
21
21
|
s.files = [
|
|
22
|
+
".coveralls.yml",
|
|
22
23
|
".rspec",
|
|
24
|
+
".simplecov",
|
|
25
|
+
".travis.yml",
|
|
23
26
|
"CHANGELOG.rdoc",
|
|
24
27
|
"Gemfile",
|
|
25
28
|
"Gemfile.lock",
|
|
26
29
|
"LICENSE",
|
|
27
|
-
"README.
|
|
30
|
+
"README.md",
|
|
28
31
|
"Rakefile",
|
|
29
32
|
"VERSION",
|
|
30
33
|
"features/balancer_error_handling.feature",
|
|
@@ -85,6 +88,7 @@ Gem::Specification.new do |s|
|
|
|
85
88
|
"lib/right_support/rack/log_setter.rb",
|
|
86
89
|
"lib/right_support/rack/request_logger.rb",
|
|
87
90
|
"lib/right_support/rack/request_tracker.rb",
|
|
91
|
+
"lib/right_support/rack/runtime.rb",
|
|
88
92
|
"lib/right_support/ruby.rb",
|
|
89
93
|
"lib/right_support/ruby/easy_singleton.rb",
|
|
90
94
|
"lib/right_support/ruby/object_extensions.rb",
|
|
@@ -131,6 +135,7 @@ Gem::Specification.new do |s|
|
|
|
131
135
|
"spec/rack/log_setter_spec.rb",
|
|
132
136
|
"spec/rack/request_logger_spec.rb",
|
|
133
137
|
"spec/rack/request_tracker_spec.rb",
|
|
138
|
+
"spec/rack/runtime_spec.rb",
|
|
134
139
|
"spec/ruby/easy_singleton_spec.rb",
|
|
135
140
|
"spec/ruby/object_extensions_spec.rb",
|
|
136
141
|
"spec/ruby/string_extensions_spec.rb",
|
|
@@ -150,15 +155,21 @@ Gem::Specification.new do |s|
|
|
|
150
155
|
s.specification_version = 4
|
|
151
156
|
|
|
152
157
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
|
158
|
+
s.add_development_dependency(%q<rake>, ["~> 10.0"])
|
|
159
|
+
s.add_development_dependency(%q<jeweler>, ["~> 2.0"])
|
|
153
160
|
s.add_development_dependency(%q<ruby-debug>, [">= 0"])
|
|
154
161
|
s.add_development_dependency(%q<pry>, [">= 0"])
|
|
155
162
|
s.add_development_dependency(%q<pry-byebug>, [">= 0"])
|
|
156
163
|
else
|
|
164
|
+
s.add_dependency(%q<rake>, ["~> 10.0"])
|
|
165
|
+
s.add_dependency(%q<jeweler>, ["~> 2.0"])
|
|
157
166
|
s.add_dependency(%q<ruby-debug>, [">= 0"])
|
|
158
167
|
s.add_dependency(%q<pry>, [">= 0"])
|
|
159
168
|
s.add_dependency(%q<pry-byebug>, [">= 0"])
|
|
160
169
|
end
|
|
161
170
|
else
|
|
171
|
+
s.add_dependency(%q<rake>, ["~> 10.0"])
|
|
172
|
+
s.add_dependency(%q<jeweler>, ["~> 2.0"])
|
|
162
173
|
s.add_dependency(%q<ruby-debug>, [">= 0"])
|
|
163
174
|
s.add_dependency(%q<pry>, [">= 0"])
|
|
164
175
|
s.add_dependency(%q<pry-byebug>, [">= 0"])
|
|
@@ -220,8 +220,17 @@ describe RightSupport::Data::HashTools do
|
|
|
220
220
|
{
|
|
221
221
|
:empty => {},
|
|
222
222
|
:shallow => { :x => 1, :y => 2 },
|
|
223
|
-
:deep => {
|
|
224
|
-
|
|
223
|
+
:deep => {
|
|
224
|
+
:x => 1,
|
|
225
|
+
:y => { :a => 'A' },
|
|
226
|
+
:z => { :b => 'B',
|
|
227
|
+
:c => { :foo => :bar } } },
|
|
228
|
+
:arrayed => [
|
|
229
|
+
{ :x => 1 },
|
|
230
|
+
{ :y => { :a => 'A' } },
|
|
231
|
+
{ :z => { :b => 'B',
|
|
232
|
+
:c => { :foo => :bar } } }
|
|
233
|
+
],
|
|
225
234
|
:duplicable => {
|
|
226
235
|
:tree => {
|
|
227
236
|
:branch => {
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
class FasterApp
|
|
4
|
+
def self.call(env)
|
|
5
|
+
sleep 0.05; [200, {}, "50ms"]
|
|
6
|
+
end
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
class SlowerApp
|
|
10
|
+
def self.call(env)
|
|
11
|
+
sleep 0.2; [200, {}, "200ms"]
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
describe RightSupport::Rack::Runtime do
|
|
16
|
+
before(:each) do
|
|
17
|
+
@app = flexmock('Rack app')
|
|
18
|
+
@app.should_receive(:call).and_return([200, {}, 'body']).by_default
|
|
19
|
+
@env = {'rack.logger' => @logger}
|
|
20
|
+
@middleware = RightSupport::Rack::Runtime.new(@app)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
context :call do
|
|
24
|
+
it 'sets an X-Runtime header in response' do
|
|
25
|
+
@middleware.call(@env).should == [200, {"X-Runtime"=>"0"}, 'body']
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it 'sets a correct X-Runtime value for 50 ms app' do
|
|
29
|
+
faster = RightSupport::Rack::Runtime.new(FasterApp)
|
|
30
|
+
result = faster.call(@env)
|
|
31
|
+
result[1].keys.should == ['X-Runtime']
|
|
32
|
+
result[1]['X-Runtime'].to_i.should >= 50
|
|
33
|
+
result[1]['X-Runtime'].to_i.should < 70
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it 'sets a correct X-Runtime value for 200 ms app' do
|
|
37
|
+
slower = RightSupport::Rack::Runtime.new(SlowerApp)
|
|
38
|
+
result = slower.call(@env)
|
|
39
|
+
result[1].keys.should == ['X-Runtime']
|
|
40
|
+
result[1]['X-Runtime'].to_i.should >= 200
|
|
41
|
+
result[1]['X-Runtime'].to_i.should < 270
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it 'allows appending custom name to X-Runtime header' do
|
|
45
|
+
customized = RightSupport::Rack::Runtime.new(@app, "Test")
|
|
46
|
+
customized.call(@env).should == [200, {"X-Runtime-Test"=>"0"}, 'body']
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
data/spec/spec_helper.rb
CHANGED
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.8.
|
|
4
|
+
version: 2.8.33
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Tony Spataro
|
|
@@ -13,8 +13,36 @@ authors:
|
|
|
13
13
|
autorequire:
|
|
14
14
|
bindir: bin
|
|
15
15
|
cert_chain: []
|
|
16
|
-
date: 2014-
|
|
16
|
+
date: 2014-10-18 00:00:00.000000000 Z
|
|
17
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'
|
|
18
46
|
- !ruby/object:Gem::Dependency
|
|
19
47
|
name: ruby-debug
|
|
20
48
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -63,14 +91,17 @@ executables: []
|
|
|
63
91
|
extensions: []
|
|
64
92
|
extra_rdoc_files:
|
|
65
93
|
- LICENSE
|
|
66
|
-
- README.
|
|
94
|
+
- README.md
|
|
67
95
|
files:
|
|
96
|
+
- ".coveralls.yml"
|
|
68
97
|
- ".rspec"
|
|
98
|
+
- ".simplecov"
|
|
99
|
+
- ".travis.yml"
|
|
69
100
|
- CHANGELOG.rdoc
|
|
70
101
|
- Gemfile
|
|
71
102
|
- Gemfile.lock
|
|
72
103
|
- LICENSE
|
|
73
|
-
- README.
|
|
104
|
+
- README.md
|
|
74
105
|
- Rakefile
|
|
75
106
|
- VERSION
|
|
76
107
|
- features/balancer_error_handling.feature
|
|
@@ -131,6 +162,7 @@ files:
|
|
|
131
162
|
- lib/right_support/rack/log_setter.rb
|
|
132
163
|
- lib/right_support/rack/request_logger.rb
|
|
133
164
|
- lib/right_support/rack/request_tracker.rb
|
|
165
|
+
- lib/right_support/rack/runtime.rb
|
|
134
166
|
- lib/right_support/ruby.rb
|
|
135
167
|
- lib/right_support/ruby/easy_singleton.rb
|
|
136
168
|
- lib/right_support/ruby/object_extensions.rb
|
|
@@ -177,6 +209,7 @@ files:
|
|
|
177
209
|
- spec/rack/log_setter_spec.rb
|
|
178
210
|
- spec/rack/request_logger_spec.rb
|
|
179
211
|
- spec/rack/request_tracker_spec.rb
|
|
212
|
+
- spec/rack/runtime_spec.rb
|
|
180
213
|
- spec/ruby/easy_singleton_spec.rb
|
|
181
214
|
- spec/ruby/object_extensions_spec.rb
|
|
182
215
|
- spec/ruby/string_extensions_spec.rb
|