hyperion_http 0.1.7 → 0.1.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGES.md +250 -2
- data/build.yml +2 -0
- data/hyperion_http.gemspec +1 -1
- data/lib/hyperion/aux/logger.rb +16 -1
- data/lib/hyperion/aux/version.rb +1 -1
- data/lib/hyperion/result_handling/result_maker.rb +20 -17
- data/lib/hyperion/types/client_error_response.rb +2 -2
- data/lib/hyperion/types/hyperion_result.rb +10 -0
- data/lib/hyperion/types/payload_descriptor.rb +6 -0
- data/lib/hyperion/types/response_descriptor.rb +8 -0
- data/lib/hyperion/types/rest_route.rb +9 -0
- data/spec/lib/hyperion/headers_spec.rb +1 -1
- data/spec/lib/hyperion/logger_spec.rb +106 -11
- data/spec/support/core_helpers.rb +1 -1
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bd1bb08f526c6320e99bbc66052e3ab4656e374f
|
4
|
+
data.tar.gz: 25c5a2e50937af640d09c60d34144e4d579b769b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4f384cd0917f0273a17c7e1b7a1214690dc8fceb64ea8b4879e92b56c92cba941961b86e672137e84e2a8c174d1cfd42ad23708a539bda6cbde24e0c2b16c994
|
7
|
+
data.tar.gz: 7f9ca1053b7cd9d004480bb2737f432aecc3a952bb541a49bbc3bb4dedc709beb4954eb69abc6ad483774420206ae0e3d83b79ce5f7341ee376c54170c3fd3c3
|
data/CHANGES.md
CHANGED
@@ -1,3 +1,253 @@
|
|
1
|
+
## [0.1.7](https://github.com/indigobio/hyperion/compare/v0.1.6...indigobio:v0.1.7) (2015-12-14)
|
2
|
+
|
3
|
+
- fake_route now works with multipart body
|
4
|
+
([6e1e7d3](https://github.com/indigobio/hyperion/commit/6e1e7d3c4db6e284522ed468adbac1fecd8fcb91))
|
5
|
+
|
6
|
+
|
7
|
+
## [0.1.6](https://github.com/indigobio/hyperion/compare/v0.1.5...indigobio:v0.1.6) (2015-11-16)
|
8
|
+
|
9
|
+
- added form data support
|
10
|
+
([68f8ef0](https://github.com/indigobio/hyperion/commit/68f8ef0258da941b2cdf6b4e12081d8c979be50a))
|
11
|
+
|
12
|
+
|
13
|
+
## [0.1.5](https://github.com/indigobio/hyperion/compare/v0.1.4...indigobio:v0.1.5) (2015-11-13)
|
14
|
+
|
15
|
+
- Propagate logatron headers
|
16
|
+
([03c8fc8](https://github.com/indigobio/hyperion/commit/03c8fc8df0c40a2008a13496036d2e9aa741e7ba))
|
17
|
+
- Use logatron
|
18
|
+
([5f9182f](https://github.com/indigobio/hyperion/commit/5f9182f875c396d73e5c3e412a424946ad7c5d99))
|
19
|
+
- Restrict Oj from loading decimal numbers as BigDecimal
|
20
|
+
([56537a6](https://github.com/indigobio/hyperion/commit/56537a6054691e5e89397fbc860159e08485a479))
|
21
|
+
|
22
|
+
|
23
|
+
## [0.1.4](https://github.com/indigobio/hyperion/compare/v0.1.3...indigobio:v0.1.4) (2015-11-11)
|
24
|
+
|
25
|
+
- Added a spec in superion for passing headers into the belly of the beast
|
26
|
+
([dd01c70](https://github.com/indigobio/hyperion/commit/dd01c70dc72f90302121da7416930734a71be249))
|
27
|
+
- Passthrough of headers
|
28
|
+
([a49851b](https://github.com/indigobio/hyperion/commit/a49851b67146fa31730a2109e332dd19152b946b))
|
29
|
+
|
30
|
+
|
31
|
+
## [0.1.3](https://github.com/indigobio/hyperion/compare/v0.1.2...indigobio:v0.1.3) (2015-11-02)
|
32
|
+
|
33
|
+
- Expect header causes problems on AWS. Found a better way to disable the header.
|
34
|
+
([7949c98](https://github.com/indigobio/hyperion/commit/7949c98c962c05616e91afa10b153f4153a2c95c))
|
35
|
+
- Renamed gem to hyperion_http
|
36
|
+
([0fab86b](https://github.com/indigobio/hyperion/commit/0fab86bc92fc7d279ce5b2ca32d5f2cad5261f4e))
|
37
|
+
|
38
|
+
|
39
|
+
## [0.1.2](https://github.com/indigobio/hyperion/compare/ddb7f399f4fd18c3e1fee07495bb082da9b6f2ff...indigobio:v0.1.2) (2015-10-14)
|
40
|
+
|
41
|
+
- Attempted to solve problem in tests where clients hit an old server
|
42
|
+
([420f017](https://github.com/indigobio/hyperion/commit/420f017b1d2e1dcd39f313982fe713c29d7ff3a9))
|
43
|
+
- Updated gems. Hyperion.fake supports up to RSpec 3.3 now.
|
44
|
+
([d82184a](https://github.com/indigobio/hyperion/commit/d82184a95ae6a3b85d37ee8db49487f4a417aea5))
|
45
|
+
- Changed require for rspec to use rspec/core
|
46
|
+
([4e29d43](https://github.com/indigobio/hyperion/commit/4e29d431d58375487a27a947e745adaba12566c1))
|
47
|
+
- Added RspecJunitFormatter gem as development dependency
|
48
|
+
([b8a8d34](https://github.com/indigobio/hyperion/commit/b8a8d34c8d16c056f3873ee615ca82311586eb0d))
|
49
|
+
- Fixed Time object in tests to have specified timezone
|
50
|
+
([aec7305](https://github.com/indigobio/hyperion/commit/aec73059941eae3ff59289b5592f94eeb9198b33))
|
51
|
+
- Fixed timezone representation in tests
|
52
|
+
([de8f2fa](https://github.com/indigobio/hyperion/commit/de8f2faba7fbb046975d8c65a02d9bbd0b21d7c1))
|
53
|
+
- Improved Errors section
|
54
|
+
([b116b26](https://github.com/indigobio/hyperion/commit/b116b26080d73eee0f16262aa3bdd4b47c86e715))
|
55
|
+
- Added Maintenance section
|
56
|
+
([5ffaf31](https://github.com/indigobio/hyperion/commit/5ffaf31b0b06aafbad1470ec867dd8927e290a3d))
|
57
|
+
- Filled out Versioning section
|
58
|
+
([5dd0fc2](https://github.com/indigobio/hyperion/commit/5dd0fc2b2f3387bfb725777eef1a28e628f170e9))
|
59
|
+
- Whitelisted branches in travisCI config
|
60
|
+
([a1c9eab](https://github.com/indigobio/hyperion/commit/a1c9eab54d6043fec681b5af0905aba7f2251e4b))
|
61
|
+
- Fixed tests failing on TravisCI
|
62
|
+
([ca26e20](https://github.com/indigobio/hyperion/commit/ca26e206ccf7bc155f63e2c10875aec4b80d36a8))
|
63
|
+
- constraint rspec version
|
64
|
+
([439d01e](https://github.com/indigobio/hyperion/commit/439d01eaf2d89375bc12fdbaa31253b3d45efc98))
|
65
|
+
- Default rake task runs rspec
|
66
|
+
([da171c5](https://github.com/indigobio/hyperion/commit/da171c59a75a071cf00eb50af18456677d26b3ae))
|
67
|
+
- TravisCI integration
|
68
|
+
([3ed1637](https://github.com/indigobio/hyperion/commit/3ed16378c4db1dff742c7e63c2995838fcfb3625))
|
69
|
+
- Renamed `ClientErrorResponse#body` -> `ClientErrorResponse#content`
|
70
|
+
([8e95ddf](https://github.com/indigobio/hyperion/commit/8e95ddf4a02909ee2eda7349c3f8ee28db9cb8de))
|
71
|
+
- json enum support from abstractivator
|
72
|
+
([2140f6f](https://github.com/indigobio/hyperion/commit/2140f6fb5c1fa544b41c819e624ae01916ce2642))
|
73
|
+
- another enum tweak
|
74
|
+
([470fd2e](https://github.com/indigobio/hyperion/commit/470fd2ed9146d5bb0bf639df308bfa711cf324fc))
|
75
|
+
- upgraded abstractivator for wrapped enum values
|
76
|
+
([39b934f](https://github.com/indigobio/hyperion/commit/39b934f0f83904cc7174e4f3f4cef63c9c9b9d57))
|
77
|
+
- abstractivator 0.0.27
|
78
|
+
([97a00b2](https://github.com/indigobio/hyperion/commit/97a00b24f770e2bcf55ca6cc9f7e78d6f4318286))
|
79
|
+
- Fixed bug due to missing `require`
|
80
|
+
([102cbcb](https://github.com/indigobio/hyperion/commit/102cbcb10aa33c1d5f379b04e95304ef9860205e))
|
81
|
+
- Removed Superion.missing
|
82
|
+
([f565d5f](https://github.com/indigobio/hyperion/commit/f565d5f8f834f695911af8d78a037fdb99ab9602))
|
83
|
+
- Removed hyperion_fallthrough
|
84
|
+
([14354ce](https://github.com/indigobio/hyperion/commit/14354cec924709fc1481a5e617b77aa813cdeb89))
|
85
|
+
- Renamed Superion -> Hyperion::Requestor
|
86
|
+
([e9c4e15](https://github.com/indigobio/hyperion/commit/e9c4e153aa9dcba8f388b47d91da199148001c7c))
|
87
|
+
- Added to readme
|
88
|
+
([88b732c](https://github.com/indigobio/hyperion/commit/88b732cc9150b97711804adc76032ab9d696b8b1))
|
89
|
+
- Use Oj's time formatting facilities, rather than a hack.
|
90
|
+
([4a8ef9e](https://github.com/indigobio/hyperion/commit/4a8ef9e63f2d79f6e24c9e75cb5f65c17955889a))
|
91
|
+
- Added doc comments
|
92
|
+
([4445689](https://github.com/indigobio/hyperion/commit/44456894e62acc1aa514b8ddf08ed26b7cd2dfe9))
|
93
|
+
- README tweaks
|
94
|
+
([24a19b1](https://github.com/indigobio/hyperion/commit/24a19b11f8e5bad135e087bd2c93ce9b8178b885))
|
95
|
+
- More README additions
|
96
|
+
([7c79296](https://github.com/indigobio/hyperion/commit/7c7929620d6f22a9fd952631fa976149eaedae45))
|
97
|
+
- First stab at README
|
98
|
+
([6b1833b](https://github.com/indigobio/hyperion/commit/6b1833b54b4ae8d2ad23674ccd166c0edf2e7e85))
|
99
|
+
- Factored out the vendor string
|
100
|
+
([bfc4d8c](https://github.com/indigobio/hyperion/commit/bfc4d8c18b6c897e7e5945d7ca93ad03fbb3ed2c))
|
101
|
+
- Cleaned up Hyperion::fake code
|
102
|
+
([ab9431a](https://github.com/indigobio/hyperion/commit/ab9431a7aff88ebd3f5cbde9fc256287f5259fec))
|
103
|
+
- tweak
|
104
|
+
([9a32738](https://github.com/indigobio/hyperion/commit/9a32738da123efe1589f996a587f69012836e2b3))
|
105
|
+
- reinstated superion specs
|
106
|
+
([17ea2a8](https://github.com/indigobio/hyperion/commit/17ea2a8d8fa1877e992039e2efb7622105a73e94))
|
107
|
+
- Allow dispatching on client error code
|
108
|
+
([41fa215](https://github.com/indigobio/hyperion/commit/41fa2150becd2891fa7bcc381fc76169ecc670db))
|
109
|
+
- Cleaned up error raising. Moved superion code into lib/hyperion
|
110
|
+
([05725aa](https://github.com/indigobio/hyperion/commit/05725aae1e7a9d4f1c355c9e3766982f59a6b594))
|
111
|
+
- Switch to new style enums
|
112
|
+
([c9225f1](https://github.com/indigobio/hyperion/commit/c9225f1347f4a5cb6204266e72aa22209715862c))
|
113
|
+
- Upgraded abstractivator. Fixed failing spec due to Oj behavior change.
|
114
|
+
([aed6f12](https://github.com/indigobio/hyperion/commit/aed6f12026c1087e2e6b3c78aea6548899911fc5))
|
115
|
+
- Log when requests complete
|
116
|
+
([812b71e](https://github.com/indigobio/hyperion/commit/812b71ea59525a8bf882c3b07eaeb81f916ad510))
|
117
|
+
- Do not require dispatch predicates to take an argument
|
118
|
+
([1ab265b](https://github.com/indigobio/hyperion/commit/1ab265ba4052af924829933057640878e354b49f))
|
119
|
+
- Code cleanup
|
120
|
+
([a92e6d3](https://github.com/indigobio/hyperion/commit/a92e6d30f9a25a54f5d0839c99662b6bc7a479be))
|
121
|
+
- Fixed bug where superion's interface was too loose
|
122
|
+
([806d280](https://github.com/indigobio/hyperion/commit/806d280ea0d7b6e089c2aeeace551696666d6df8))
|
123
|
+
- Fixed slow POSTs > 1KB
|
124
|
+
([53db42b](https://github.com/indigobio/hyperion/commit/53db42b05ff51f82f7ea9c3ba475c8023e38d007))
|
125
|
+
- Allow query to be nil (bugfix)
|
126
|
+
([b9c6df5](https://github.com/indigobio/hyperion/commit/b9c6df55d7143df943ce8ac0a021fcece065904e))
|
127
|
+
- 0.0.45
|
128
|
+
([a1fe768](https://github.com/indigobio/hyperion/commit/a1fe7688008c6b8f65921c6024637238e28781ec))
|
129
|
+
- Cleaned up HyperionUri
|
130
|
+
([0268c97](https://github.com/indigobio/hyperion/commit/0268c97c6d65627e7c4d39e3d6a2dc682e822f0e))
|
131
|
+
- Support query params that are arrays
|
132
|
+
([c7e5e00](https://github.com/indigobio/hyperion/commit/c7e5e0057d529a989eac80f2e13e5d20db3e5548))
|
133
|
+
- Added ci.sh
|
134
|
+
([af6bd5b](https://github.com/indigobio/hyperion/commit/af6bd5be9fea93fbe5322ee44176ce03ec39aad2))
|
135
|
+
- Fixed "require" problems
|
136
|
+
([d54b13c](https://github.com/indigobio/hyperion/commit/d54b13c5a7352398d8460dd6942d8344ecaddc9b))
|
137
|
+
- Raise an error if superion response falls through and no superion_fallthrough method is defined.
|
138
|
+
([d46d84a](https://github.com/indigobio/hyperion/commit/d46d84acd4341b0b5ac9993d0ac6b6fb3484983a))
|
139
|
+
- Always read client error response as JSON
|
140
|
+
([c043a9e](https://github.com/indigobio/hyperion/commit/c043a9ec75df7ac4330566158044fbec9d5b2e9d))
|
141
|
+
- Made ClientErrorResponse constructor interface less error-prone
|
142
|
+
([19eaadd](https://github.com/indigobio/hyperion/commit/19eaadde9e541194d1ec0f3b938d2aa09895831d))
|
143
|
+
- Fixed ClientErrorResponse#from_attrs
|
144
|
+
([0f79140](https://github.com/indigobio/hyperion/commit/0f79140acee6c7c4d8ab5c1902b0acdb129a0970))
|
145
|
+
- Moved mimic back to being a runtime dependency
|
146
|
+
([36feba4](https://github.com/indigobio/hyperion/commit/36feba4dc9c25ddf3610629e0ac9c3429838f155))
|
147
|
+
- Refactored to appease CodeClimate
|
148
|
+
([465e7cc](https://github.com/indigobio/hyperion/commit/465e7cc1c24b497fe10caa44be72794ce4bd2582))
|
149
|
+
- Read 400-level bodies as ClientErrorResponse
|
150
|
+
([9447159](https://github.com/indigobio/hyperion/commit/94471595a3fb2944e8b1ffaafb0700d71bc413e1))
|
151
|
+
- Catch raised errors in handler predicates
|
152
|
+
([506d06b](https://github.com/indigobio/hyperion/commit/506d06b42da41bebfd164cd2682918a8bd97dcd5))
|
153
|
+
- Added superion
|
154
|
+
([5ed8757](https://github.com/indigobio/hyperion/commit/5ed8757f26749f88dd4e6f7de217bbf7fb6d9bee))
|
155
|
+
- Pass the HyperionResult to the block, since it won't always be in lexical scope.
|
156
|
+
([2370e54](https://github.com/indigobio/hyperion/commit/2370e54e83135acfd35edbdfb5947eeb3e74232e))
|
157
|
+
- If parsing JSON fails, just return the unparsed JSON.
|
158
|
+
([2b41d2f](https://github.com/indigobio/hyperion/commit/2b41d2fdce0c7bd821d32397028fe22db5356b7b))
|
159
|
+
- Hyperion.fake: try to serialize body of rack results
|
160
|
+
([ab38b77](https://github.com/indigobio/hyperion/commit/ab38b77a7170d3a652dcb553f4d21c8e90127289))
|
161
|
+
- Pretty ResponseDescriptor#to_s
|
162
|
+
([f2f28d9](https://github.com/indigobio/hyperion/commit/f2f28d9812372c69566479d5c84d4ad83cdfe215))
|
163
|
+
- Canonicalize HyperionUri#to_s output by sorting query param names to make route matching possible.
|
164
|
+
([002f7e8](https://github.com/indigobio/hyperion/commit/002f7e81972a20e84d8bd9877d7d189e5148b28a))
|
165
|
+
- Fixed logging bug where the logger would capture the first time it saw it.
|
166
|
+
([e7e267a](https://github.com/indigobio/hyperion/commit/e7e267a40ef9e2f68cc7aa3eb2ff8f307ed8743b))
|
167
|
+
- HyperionUri (models query params as a hash)
|
168
|
+
([7d552b9](https://github.com/indigobio/hyperion/commit/7d552b9221c904382d1205a82f5b085e8290196c))
|
169
|
+
- Pretty HyperionResult#to_s
|
170
|
+
([a8f6cfa](https://github.com/indigobio/hyperion/commit/a8f6cfac9c76c0595f4f518f1798da3486477344))
|
171
|
+
- Include requested route on response object
|
172
|
+
([a0fcc4c](https://github.com/indigobio/hyperion/commit/a0fcc4c6b088879f74be151dd621115b78415e59))
|
173
|
+
- JSON writing fixes
|
174
|
+
([c1de890](https://github.com/indigobio/hyperion/commit/c1de890960ad0006a6f3b64a365e88804b4a19a3))
|
175
|
+
- Added the ability to match responses on an HTTP code range
|
176
|
+
([ee93c51](https://github.com/indigobio/hyperion/commit/ee93c51a84029f43ca703e501954bd57c32d5efe))
|
177
|
+
- Friendly RestRoute#to_s
|
178
|
+
([e3db641](https://github.com/indigobio/hyperion/commit/e3db6415bc64aa2f33997caa9e7c8b8d765293ec))
|
179
|
+
- Tolerate Railes.logger == nil
|
180
|
+
([40a8ceb](https://github.com/indigobio/hyperion/commit/40a8cebd3a77aafcbf2479b8eb2ce3c2581d3e55))
|
181
|
+
- Use Rails.logger if present
|
182
|
+
([b209b8b](https://github.com/indigobio/hyperion/commit/b209b8b44e83026dd438f2d796c049925c849681))
|
183
|
+
- Removed unnecessary shared examples from tests
|
184
|
+
([f337522](https://github.com/indigobio/hyperion/commit/f3375222ecbf7732da19ffa75f9223d45de1e68f))
|
185
|
+
- Fixed bug with Hyperion fake not defaulting the port to 80
|
186
|
+
([0a33d52](https://github.com/indigobio/hyperion/commit/0a33d5216c964d81cd46f64af0e105309d7014d5))
|
187
|
+
- Allow payload descriptor to be nil (for things like DELETE)
|
188
|
+
([12dd4bf](https://github.com/indigobio/hyperion/commit/12dd4bf02c436652798130042d45249930f36c8d))
|
189
|
+
- fixed contract
|
190
|
+
([8ddfdaa](https://github.com/indigobio/hyperion/commit/8ddfdaa3565ac478413dac94abad7e39ca1e33b6))
|
191
|
+
- fixed contract
|
192
|
+
([fdccd0a](https://github.com/indigobio/hyperion/commit/fdccd0a84d754f4ef70ab12b539f0a47e7561c54))
|
193
|
+
- fixed contract
|
194
|
+
([4afa67f](https://github.com/indigobio/hyperion/commit/4afa67f706fafcce9ff9f745c016ef1edc143bc1))
|
195
|
+
- fixed bug
|
196
|
+
([6403cd7](https://github.com/indigobio/hyperion/commit/6403cd78cbceadea233c1db46a08cb54c1cea30f))
|
197
|
+
- Added some method contracts
|
198
|
+
([1c52054](https://github.com/indigobio/hyperion/commit/1c52054ec5fc386b7c461556de8552a4a3508dbb))
|
199
|
+
- Log stubs and requests for debugging purposes.
|
200
|
+
([18647ac](https://github.com/indigobio/hyperion/commit/18647acc0168e273a13170aafd202b189b901b15))
|
201
|
+
- Return 404 instead of crashing when headers are the only thing preventing a faked route from matching.
|
202
|
+
([9e7af87](https://github.com/indigobio/hyperion/commit/9e7af8764f08b9f3606d3ec17d92e326c5bc6450))
|
203
|
+
- Serialize the POST/PUT payload according to the route's payload descriptor.
|
204
|
+
([7652e5a](https://github.com/indigobio/hyperion/commit/7652e5a072b9ec5eafd19f75dae7893c65302b1e))
|
205
|
+
- If Hyperion.fake allow is passed a route, its block can now return an object instead of a rack-style response.
|
206
|
+
([47f2b1e](https://github.com/indigobio/hyperion/commit/47f2b1ec65ebed3413b7fc9af21802fd169dc4e4))
|
207
|
+
- Hyperion::request now takes a block for dispatching on response properties.
|
208
|
+
([86328c7](https://github.com/indigobio/hyperion/commit/86328c7dc4604b2713b089b1bb9bd489a4886ea9))
|
209
|
+
- Improved documentation; monkeypatched some methods onto URI
|
210
|
+
([c106480](https://github.com/indigobio/hyperion/commit/c106480992f598adad8e32cb86514f1640ac55c2))
|
211
|
+
- Print to stdout when a request is redirected due to a stub/fake
|
212
|
+
([be05c3f](https://github.com/indigobio/hyperion/commit/be05c3f966aecaac80ee9dfeb9f7afb9c17afec4))
|
213
|
+
- Refactored
|
214
|
+
([7ca0f4d](https://github.com/indigobio/hyperion/commit/7ca0f4de4b4416d923d4a2f13f0c0da8c64a507b))
|
215
|
+
- bump
|
216
|
+
([905815e](https://github.com/indigobio/hyperion/commit/905815e0f6c2c20967d9004bf1d68d375eda9046))
|
217
|
+
- fixed bug
|
218
|
+
([4081fcf](https://github.com/indigobio/hyperion/commit/4081fcf746f318cd20c1154fbc16ad3fed888c06))
|
219
|
+
- Removed RestRoute.path; uri is now a URI object. Hyperion.fake's allow() now takes routes too
|
220
|
+
([6bc1aff](https://github.com/indigobio/hyperion/commit/6bc1affe378e18567775508c5224b79a08e65ebd))
|
221
|
+
- Added PUT and DELETE
|
222
|
+
([3a11fee](https://github.com/indigobio/hyperion/commit/3a11fee5386e02a3f9807a1c48b250fbc789fc0c))
|
223
|
+
- Removed hyperion/util.rb
|
224
|
+
([096ba85](https://github.com/indigobio/hyperion/commit/096ba8514d4c0561cc8a4f534d335711786b8d63))
|
225
|
+
- Hyperion::fake can be called multiple times to add new routes
|
226
|
+
([52398cb](https://github.com/indigobio/hyperion/commit/52398cbee465f6f9cd94d60d6f880fd7c0c4f257))
|
227
|
+
- Added Hyperion::request
|
228
|
+
([31ccb42](https://github.com/indigobio/hyperion/commit/31ccb42ab7a758c883e902e54907e86e28185968))
|
229
|
+
- Hyperion::ResponseParams => ResponseParams
|
230
|
+
([dbedbf4](https://github.com/indigobio/hyperion/commit/dbedbf4906aa97c0973d688da8548c8295f586b4))
|
231
|
+
- Don't try to hook RSpec when RSpec is not being used
|
232
|
+
([2da102a](https://github.com/indigobio/hyperion/commit/2da102ae8bd6bcd24e9b3a4d1744800d40e1abea))
|
233
|
+
- Fake now cleans up after itself in all groups
|
234
|
+
([5d66fb2](https://github.com/indigobio/hyperion/commit/5d66fb246e21d9bb187303e85663f84409180a5b))
|
235
|
+
- Fixed header comparison for Hyperion::fake
|
236
|
+
([530df29](https://github.com/indigobio/hyperion/commit/530df295310688ddbb944b503dd5c04ab2777bf8))
|
237
|
+
- Hyperion.fake now cleans up after itself automagically
|
238
|
+
([5ae95d7](https://github.com/indigobio/hyperion/commit/5ae95d74e4f9fe65fd6f2b9f396b90bac0a5102a))
|
239
|
+
- Made private Hyperion::Test methods actually private
|
240
|
+
([63ebe87](https://github.com/indigobio/hyperion/commit/63ebe87c0603019f3c070ac715026972c6fc79ef))
|
241
|
+
- Hyperion::fake now passes tests
|
242
|
+
([b3a18ad](https://github.com/indigobio/hyperion/commit/b3a18ad4de2bc876f8d5ba9e9aa9c973f8486876))
|
243
|
+
- Fixed broken other tests
|
244
|
+
([06ac677](https://github.com/indigobio/hyperion/commit/06ac6779a3ca6e02660abdd88fafce95100142e0))
|
245
|
+
- wip
|
246
|
+
([9858b28](https://github.com/indigobio/hyperion/commit/9858b28e8c95b35f2984a9325cc6e1a66a6926d9))
|
247
|
+
- Fixed gemspec dependencies
|
248
|
+
([585b3d1](https://github.com/indigobio/hyperion/commit/585b3d1b25c8a4821362f2932944e296b2865415))
|
249
|
+
|
250
|
+
|
1
251
|
### 0.0.16
|
2
252
|
- Hyperion::request can now take a block an easily dispatch on response status, code, or other stuff
|
3
253
|
|
@@ -120,7 +370,6 @@
|
|
120
370
|
- Fixed bug due to missing `require`
|
121
371
|
|
122
372
|
### 0.0.54
|
123
|
-
- abstractivator 0.0.27
|
124
373
|
|
125
374
|
### 0.0.55
|
126
375
|
- upgraded abstractivator for wrapped enum values
|
@@ -135,7 +384,6 @@
|
|
135
384
|
- Renamed `ClientErrorResponse#body` -> `ClientErrorResponse#content`
|
136
385
|
|
137
386
|
### 0.1.0
|
138
|
-
- Bumped version
|
139
387
|
|
140
388
|
### 0.1.1
|
141
389
|
- Attempted to solve problem in tests where clients hit an old server while
|
data/build.yml
ADDED
data/hyperion_http.gemspec
CHANGED
@@ -30,6 +30,6 @@ Gem::Specification.new do |spec|
|
|
30
30
|
spec.add_runtime_dependency 'immutable_struct', '~> 1.1'
|
31
31
|
spec.add_runtime_dependency 'oj', '~> 2.12'
|
32
32
|
spec.add_runtime_dependency 'typhoeus', '~> 0.7'
|
33
|
-
spec.add_runtime_dependency 'mimic', '
|
33
|
+
spec.add_runtime_dependency 'mimic', '0.4.3' # pin because 0.4.4 breaks tests
|
34
34
|
spec.add_runtime_dependency 'logatron'
|
35
35
|
end
|
data/lib/hyperion/aux/logger.rb
CHANGED
@@ -14,6 +14,10 @@ class Hyperion
|
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
+
def log_result(result)
|
18
|
+
logger.error(dump_json(result.as_json)) if should_log_result?(result)
|
19
|
+
end
|
20
|
+
|
17
21
|
def log_stub(rule)
|
18
22
|
mr = rule.mimic_route
|
19
23
|
logger.debug "Stubbed #{mr.method.to_s.upcase} #{mr.path}"
|
@@ -23,7 +27,18 @@ class Hyperion
|
|
23
27
|
private
|
24
28
|
|
25
29
|
def log_headers(headers, logger)
|
26
|
-
headers.
|
30
|
+
h = headers.delete_if { |_k, v| v.nil? }
|
31
|
+
logger.info(dump_json(h))
|
32
|
+
end
|
33
|
+
|
34
|
+
def should_log_result?(result)
|
35
|
+
result.body && result.status != HyperionStatus::SUCCESS
|
36
|
+
end
|
37
|
+
|
38
|
+
def dump_json(obj)
|
39
|
+
Oj.dump(obj)
|
40
|
+
rescue
|
41
|
+
obj.inspect
|
27
42
|
end
|
28
43
|
end
|
29
44
|
end
|
data/lib/hyperion/aux/version.rb
CHANGED
@@ -7,6 +7,7 @@ class Hyperion
|
|
7
7
|
# Produces a hyperion result object from a typhoeus result object
|
8
8
|
class ResultMaker
|
9
9
|
include Hyperion::Formats
|
10
|
+
include Hyperion::Logger
|
10
11
|
|
11
12
|
def self.make(route, typho_result, continuation=nil)
|
12
13
|
self.new(route).make(typho_result, continuation)
|
@@ -35,29 +36,31 @@ class Hyperion
|
|
35
36
|
read_body = proc { read(typho_result.body, route.response_descriptor) }
|
36
37
|
code = typho_result.code
|
37
38
|
|
38
|
-
if typho_result.success?
|
39
|
-
|
39
|
+
result = if typho_result.success?
|
40
|
+
result_class.new(route, HyperionStatus::SUCCESS, code, read_body.call)
|
40
41
|
|
41
|
-
|
42
|
-
|
42
|
+
elsif typho_result.timed_out?
|
43
|
+
result_class.new(route, HyperionStatus::TIMED_OUT)
|
43
44
|
|
44
|
-
|
45
|
-
|
45
|
+
elsif code == 0
|
46
|
+
result_class.new(route, HyperionStatus::NO_RESPONSE)
|
46
47
|
|
47
|
-
|
48
|
-
|
48
|
+
elsif code == 404
|
49
|
+
result_class.new(route, HyperionStatus::BAD_ROUTE, code)
|
49
50
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
51
|
+
elsif (400..499).include?(code)
|
52
|
+
hash_body = read(typho_result.body, :json)
|
53
|
+
err = ClientErrorResponse.from_attrs(hash_body) || hash_body
|
54
|
+
result_class.new(route, HyperionStatus::CLIENT_ERROR, code, err)
|
54
55
|
|
55
|
-
|
56
|
-
|
56
|
+
elsif (500..599).include?(code)
|
57
|
+
result_class.new(route, HyperionStatus::SERVER_ERROR, code, read_body.call)
|
57
58
|
|
58
|
-
|
59
|
-
|
60
|
-
|
59
|
+
else
|
60
|
+
result_class.new(route, HyperionStatus::CHECK_CODE, code, read_body.call)
|
61
|
+
end
|
62
|
+
log_result(result)
|
63
|
+
result
|
61
64
|
end
|
62
65
|
|
63
66
|
end
|
@@ -5,9 +5,9 @@ require 'hyperion/types/client_error_detail'
|
|
5
5
|
class ClientErrorResponse
|
6
6
|
# The structure expected in a 400 response.
|
7
7
|
|
8
|
-
attr_reader :code # [ClientErrorCode]
|
8
|
+
attr_reader :code # [ClientErrorCode] The type of error. At least one of the ClientErrorDetails should have the same code.
|
9
9
|
attr_reader :message # [String] An error message that can be presented to the user
|
10
|
-
attr_reader :errors # [Array<
|
10
|
+
attr_reader :errors # [Array<ClientErrorDetail>] Structured information with error specifics
|
11
11
|
attr_reader :content # [String, nil] Optional content to return; may be an application-specific description of the error.
|
12
12
|
|
13
13
|
def initialize(message, errors, code=nil, content=nil)
|
@@ -3,6 +3,7 @@ require 'active_support/inflector'
|
|
3
3
|
class HyperionResult
|
4
4
|
attr_reader :route, :status, :code, :body
|
5
5
|
|
6
|
+
# @param route [RestRoute]
|
6
7
|
# @param status [HyperionStatus]
|
7
8
|
# @param code [Integer] the HTTP response code
|
8
9
|
# @param body [Object, Hash<String,Object>] the deserialized response body.
|
@@ -12,6 +13,15 @@ class HyperionResult
|
|
12
13
|
@route, @status, @code, @body = route, status, code, body
|
13
14
|
end
|
14
15
|
|
16
|
+
def as_json(*_args)
|
17
|
+
{
|
18
|
+
'route' => route.as_json(*_args),
|
19
|
+
'status' => status.value,
|
20
|
+
'code' => code,
|
21
|
+
'body' => body.as_json(*_args),
|
22
|
+
}
|
23
|
+
end
|
24
|
+
|
15
25
|
def to_s
|
16
26
|
if status == HyperionStatus::CHECK_CODE
|
17
27
|
"HTTP #{code}: #{route.to_s}"
|
@@ -14,6 +14,15 @@ class RestRoute
|
|
14
14
|
@payload_descriptor = payload_descriptor
|
15
15
|
end
|
16
16
|
|
17
|
+
def as_json(*_args)
|
18
|
+
{
|
19
|
+
'method' => method.to_s,
|
20
|
+
'uri' => uri.to_s,
|
21
|
+
'response_descriptor' => response_descriptor.as_json(*_args),
|
22
|
+
'payload_descriptor' => payload_descriptor.as_json(*_args),
|
23
|
+
}
|
24
|
+
end
|
25
|
+
|
17
26
|
def to_s
|
18
27
|
"#{method.to_s.upcase} #{uri}"
|
19
28
|
end
|
@@ -54,7 +54,7 @@ class Hyperion
|
|
54
54
|
expect(format_for('multipart/form-data; boundary=------------------------2b463b63688b28fa')).to eql Multipart.format
|
55
55
|
end
|
56
56
|
it 'raises an error if the content type is unknown' do
|
57
|
-
expect{format_for('aaa/bbb')}.to raise_error
|
57
|
+
expect{format_for('aaa/bbb')}.to raise_error /Unsupported content type/
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
@@ -6,14 +6,12 @@ describe Hyperion::Logger do
|
|
6
6
|
include Hyperion::Logger
|
7
7
|
|
8
8
|
it 'logs to $stdout by default' do
|
9
|
-
output =
|
10
|
-
with_stdout(output) do
|
9
|
+
output = capture_stdout do
|
11
10
|
logger.debug 'xyzzy'
|
12
11
|
logger.debug 'qwerty'
|
13
12
|
end
|
14
|
-
|
15
|
-
expect(
|
16
|
-
expect(output_str).to include 'qwerty'
|
13
|
+
expect(output).to include 'xyzzy'
|
14
|
+
expect(output).to include 'qwerty'
|
17
15
|
end
|
18
16
|
|
19
17
|
it 'logs to Rails.logger if present' do
|
@@ -27,24 +25,121 @@ describe Hyperion::Logger do
|
|
27
25
|
end
|
28
26
|
|
29
27
|
it 'respects the log level' do
|
30
|
-
output =
|
31
|
-
with_stdout(output) do
|
28
|
+
output = capture_stdout do
|
32
29
|
Logatron.level = Logatron::ERROR
|
33
30
|
logger.debug 'xyzzy'
|
34
31
|
logger.error 'qwerty'
|
35
32
|
Logatron.level = Logatron::DEBUG
|
36
33
|
end
|
37
|
-
|
38
|
-
expect(
|
39
|
-
|
34
|
+
expect(output).to include 'qwert'
|
35
|
+
expect(output).to_not include 'xyzzy'
|
36
|
+
end
|
37
|
+
|
38
|
+
context '#with_request_logging' do
|
39
|
+
let(:route) { RestRoute.new(:get, 'http://test.com', ResponseDescriptor.new('type', 1, :json)) }
|
40
|
+
let(:uri) { 'http://foo.bar' }
|
41
|
+
let(:headers) { {'Present' => 'here', 'Empty' => '', 'Absent' => nil} }
|
42
|
+
let!(:error_raised) { false }
|
43
|
+
|
44
|
+
it 'logs the method' do
|
45
|
+
expect(the_log).to include 'GET'
|
46
|
+
end
|
47
|
+
it 'logs the URI' do
|
48
|
+
expect(the_log).to include uri
|
49
|
+
end
|
50
|
+
context 'when the block raises an error' do
|
51
|
+
let!(:error_raised) { true }
|
52
|
+
it 'logs the headers when the block raises an error' do
|
53
|
+
expect(the_log).to include '"Present":"here"'
|
54
|
+
expect(the_log).to include '"Empty":""'
|
55
|
+
end
|
56
|
+
it 'hides nil headers' do
|
57
|
+
expect(the_log).to_not include 'Absent'
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def the_log
|
62
|
+
capture_stdout do
|
63
|
+
begin
|
64
|
+
with_request_logging(route, uri, headers) { raise 'oops' if error_raised }
|
65
|
+
rescue
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
context '#log_result' do
|
72
|
+
let(:response_desc) { ResponseDescriptor.new('type', 1, :json) }
|
73
|
+
let(:payload_desc) { PayloadDescriptor.new(:protobuf) }
|
74
|
+
let(:route) { RestRoute.new(:get, 'http://test.com', response_desc, payload_desc) }
|
75
|
+
|
76
|
+
context 'for a successful response' do
|
77
|
+
let(:result) { HyperionResult.new(route, HyperionStatus::SUCCESS, 200, 'test') }
|
78
|
+
it 'does not log anything' do
|
79
|
+
verify_result_not_logged
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
context 'for an unsuccessful response' do
|
84
|
+
context 'with no body' do
|
85
|
+
let(:result) { HyperionResult.new(route, HyperionStatus::TIMED_OUT) }
|
86
|
+
it 'does not log anything ' do
|
87
|
+
verify_result_not_logged
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
context 'with a ClientErrorResponse body' do
|
92
|
+
let(:message) { 'test' }
|
93
|
+
let(:code) { ClientErrorCode::MISSING }
|
94
|
+
let(:error) { ClientErrorDetail.new(code, 'resource', field: 'field', value: 1, reason: 'oops') }
|
95
|
+
let(:content) { 'content' }
|
96
|
+
let(:error_response) { ClientErrorResponse.new(message, [error], code, content) }
|
97
|
+
let(:result) { HyperionResult.new(route, HyperionStatus::CLIENT_ERROR, 400, error_response) }
|
98
|
+
|
99
|
+
it 'logs the key value pairs of the ClientErrorResponse' do
|
100
|
+
verify_result_logged
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
context 'for all other bodies' do
|
105
|
+
let(:body) { 'error' }
|
106
|
+
let(:result) { HyperionResult.new(route, HyperionStatus::CLIENT_ERROR, 500, body) }
|
107
|
+
it 'logs them' do
|
108
|
+
verify_result_logged
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
def verify_result_not_logged
|
114
|
+
output = capture_stdout do
|
115
|
+
log_result(result)
|
116
|
+
end
|
117
|
+
expect(output).to be_empty
|
118
|
+
end
|
119
|
+
|
120
|
+
def verify_result_logged
|
121
|
+
output = capture_stdout do
|
122
|
+
log_result(result)
|
123
|
+
end
|
124
|
+
expect(output).to eql Oj.dump(result.as_json) + "\n"
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
def capture_stdout
|
129
|
+
output = StringIO.new
|
130
|
+
with_stdout(output) do
|
131
|
+
yield
|
132
|
+
end
|
133
|
+
output.string
|
40
134
|
end
|
41
135
|
|
42
136
|
def with_stdout(io)
|
137
|
+
prev_logger = Logatron.configuration.logger
|
43
138
|
set_log_io(io)
|
44
139
|
begin
|
45
140
|
yield
|
46
141
|
ensure
|
47
|
-
|
142
|
+
Logatron.configuration.logger = prev_logger
|
48
143
|
end
|
49
144
|
end
|
50
145
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hyperion_http
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Indigo BioAutomation, Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-07-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -168,14 +168,14 @@ dependencies:
|
|
168
168
|
name: mimic
|
169
169
|
requirement: !ruby/object:Gem::Requirement
|
170
170
|
requirements:
|
171
|
-
- -
|
171
|
+
- - '='
|
172
172
|
- !ruby/object:Gem::Version
|
173
173
|
version: 0.4.3
|
174
174
|
type: :runtime
|
175
175
|
prerelease: false
|
176
176
|
version_requirements: !ruby/object:Gem::Requirement
|
177
177
|
requirements:
|
178
|
-
- -
|
178
|
+
- - '='
|
179
179
|
- !ruby/object:Gem::Version
|
180
180
|
version: 0.4.3
|
181
181
|
- !ruby/object:Gem::Dependency
|
@@ -207,6 +207,7 @@ files:
|
|
207
207
|
- LICENSE.txt
|
208
208
|
- README.md
|
209
209
|
- Rakefile
|
210
|
+
- build.yml
|
210
211
|
- hyperion_http.gemspec
|
211
212
|
- lib/hyperion.rb
|
212
213
|
- lib/hyperion/aux/bug_error.rb
|