scout 5.7.1 → 5.7.2.pre

Sign up to get free protection for your applications and to get access to all the features.
Files changed (251) hide show
  1. data/CHANGELOG.markdown +5 -0
  2. data/lib/scout/command/run.rb +1 -1
  3. data/lib/scout/server.rb +2 -1
  4. data/lib/scout/streamer.rb +3 -2
  5. data/lib/scout/streamer_daemon.rb +4 -4
  6. data/lib/scout/version.rb +1 -1
  7. data/test/scout_test.rb +7 -8
  8. data/vendor/httpclient/README.txt +759 -0
  9. data/vendor/httpclient/bin/httpclient +65 -0
  10. data/vendor/httpclient/lib/hexdump.rb +50 -0
  11. data/vendor/httpclient/lib/http-access2.rb +55 -0
  12. data/vendor/httpclient/lib/http-access2/cookie.rb +1 -0
  13. data/vendor/httpclient/lib/http-access2/http.rb +1 -0
  14. data/vendor/httpclient/lib/httpclient.rb +1156 -0
  15. data/vendor/httpclient/lib/httpclient/auth.rb +899 -0
  16. data/vendor/httpclient/lib/httpclient/cacert.p7s +1912 -0
  17. data/vendor/httpclient/lib/httpclient/connection.rb +88 -0
  18. data/vendor/httpclient/lib/httpclient/cookie.rb +438 -0
  19. data/vendor/httpclient/lib/httpclient/http.rb +1046 -0
  20. data/vendor/httpclient/lib/httpclient/include_client.rb +83 -0
  21. data/vendor/httpclient/lib/httpclient/session.rb +1025 -0
  22. data/vendor/httpclient/lib/httpclient/ssl_config.rb +403 -0
  23. data/vendor/httpclient/lib/httpclient/timeout.rb +140 -0
  24. data/vendor/httpclient/lib/httpclient/util.rb +178 -0
  25. data/vendor/httpclient/lib/httpclient/version.rb +3 -0
  26. data/vendor/httpclient/lib/oauthclient.rb +110 -0
  27. data/vendor/httpclient/sample/async.rb +8 -0
  28. data/vendor/httpclient/sample/auth.rb +11 -0
  29. data/vendor/httpclient/sample/cookie.rb +18 -0
  30. data/vendor/httpclient/sample/dav.rb +103 -0
  31. data/vendor/httpclient/sample/howto.rb +49 -0
  32. data/vendor/httpclient/sample/oauth_buzz.rb +57 -0
  33. data/vendor/httpclient/sample/oauth_friendfeed.rb +59 -0
  34. data/vendor/httpclient/sample/oauth_salesforce_10.rb +63 -0
  35. data/vendor/httpclient/sample/oauth_twitter.rb +61 -0
  36. data/vendor/httpclient/sample/ssl/0cert.pem +22 -0
  37. data/vendor/httpclient/sample/ssl/0key.pem +30 -0
  38. data/vendor/httpclient/sample/ssl/1000cert.pem +19 -0
  39. data/vendor/httpclient/sample/ssl/1000key.pem +18 -0
  40. data/vendor/httpclient/sample/ssl/htdocs/index.html +10 -0
  41. data/vendor/httpclient/sample/ssl/ssl_client.rb +22 -0
  42. data/vendor/httpclient/sample/ssl/webrick_httpsd.rb +29 -0
  43. data/vendor/httpclient/sample/stream.rb +21 -0
  44. data/vendor/httpclient/sample/thread.rb +27 -0
  45. data/vendor/httpclient/sample/wcat.rb +21 -0
  46. data/vendor/httpclient/test/ca-chain.cert +44 -0
  47. data/vendor/httpclient/test/ca.cert +23 -0
  48. data/vendor/httpclient/test/client.cert +19 -0
  49. data/vendor/httpclient/test/client.key +15 -0
  50. data/vendor/httpclient/test/helper.rb +129 -0
  51. data/vendor/httpclient/test/htdigest +1 -0
  52. data/vendor/httpclient/test/htpasswd +2 -0
  53. data/vendor/httpclient/test/runner.rb +2 -0
  54. data/vendor/httpclient/test/server.cert +19 -0
  55. data/vendor/httpclient/test/server.key +15 -0
  56. data/vendor/httpclient/test/sslsvr.rb +65 -0
  57. data/vendor/httpclient/test/subca.cert +21 -0
  58. data/vendor/httpclient/test/test_auth.rb +321 -0
  59. data/vendor/httpclient/test/test_cookie.rb +391 -0
  60. data/vendor/httpclient/test/test_hexdump.rb +14 -0
  61. data/vendor/httpclient/test/test_http-access2.rb +507 -0
  62. data/vendor/httpclient/test/test_httpclient.rb +1783 -0
  63. data/vendor/httpclient/test/test_include_client.rb +52 -0
  64. data/vendor/httpclient/test/test_ssl.rb +235 -0
  65. data/vendor/multi_json/.document +5 -0
  66. data/vendor/multi_json/.rspec +3 -0
  67. data/vendor/multi_json/.travis.yml +11 -0
  68. data/vendor/multi_json/.yardopts +6 -0
  69. data/vendor/multi_json/CHANGELOG.md +169 -0
  70. data/vendor/multi_json/CONTRIBUTING.md +46 -0
  71. data/vendor/multi_json/Gemfile +31 -0
  72. data/vendor/multi_json/LICENSE.md +20 -0
  73. data/vendor/multi_json/README.md +109 -0
  74. data/vendor/multi_json/Rakefile +12 -0
  75. data/vendor/multi_json/lib/multi_json.rb +157 -0
  76. data/vendor/multi_json/lib/multi_json/adapter.rb +48 -0
  77. data/vendor/multi_json/lib/multi_json/adapters/gson.rb +19 -0
  78. data/vendor/multi_json/lib/multi_json/adapters/jr_jackson.rb +19 -0
  79. data/vendor/multi_json/lib/multi_json/adapters/json_common.rb +25 -0
  80. data/vendor/multi_json/lib/multi_json/adapters/json_gem.rb +11 -0
  81. data/vendor/multi_json/lib/multi_json/adapters/json_pure.rb +11 -0
  82. data/vendor/multi_json/lib/multi_json/adapters/nsjsonserialization.rb +34 -0
  83. data/vendor/multi_json/lib/multi_json/adapters/oj.rb +24 -0
  84. data/vendor/multi_json/lib/multi_json/adapters/ok_json.rb +22 -0
  85. data/vendor/multi_json/lib/multi_json/adapters/yajl.rb +19 -0
  86. data/vendor/multi_json/lib/multi_json/convertible_hash_keys.rb +43 -0
  87. data/vendor/multi_json/lib/multi_json/load_error.rb +11 -0
  88. data/vendor/multi_json/lib/multi_json/options.rb +48 -0
  89. data/vendor/multi_json/lib/multi_json/vendor/okjson.rb +606 -0
  90. data/vendor/multi_json/lib/multi_json/version.rb +20 -0
  91. data/vendor/multi_json/multi_json.gemspec +22 -0
  92. data/vendor/multi_json/spec/adapter_shared_example.rb +235 -0
  93. data/vendor/multi_json/spec/has_options.rb +119 -0
  94. data/vendor/multi_json/spec/helper.rb +35 -0
  95. data/vendor/multi_json/spec/json_common_shared_example.rb +30 -0
  96. data/vendor/multi_json/spec/multi_json_spec.rb +226 -0
  97. data/vendor/{signature → pusher}/.document +0 -0
  98. data/vendor/{json_pure/diagrams/.keep → pusher/.gemtest} +0 -0
  99. data/vendor/pusher/.gitignore +23 -0
  100. data/vendor/pusher/.travis.yml +15 -0
  101. data/vendor/pusher/Gemfile +2 -0
  102. data/vendor/{pusher-gem → pusher}/LICENSE +1 -1
  103. data/vendor/pusher/README.md +186 -0
  104. data/vendor/{pusher-gem → pusher}/Rakefile +0 -0
  105. data/vendor/{pusher-gem → pusher}/examples/async_message.rb +0 -0
  106. data/vendor/pusher/lib/pusher.rb +60 -0
  107. data/vendor/{pusher-gem → pusher}/lib/pusher/channel.rb +47 -54
  108. data/vendor/pusher/lib/pusher/client.rb +306 -0
  109. data/vendor/pusher/lib/pusher/request.rb +107 -0
  110. data/vendor/pusher/lib/pusher/resource.rb +36 -0
  111. data/vendor/pusher/lib/pusher/webhook.rb +110 -0
  112. data/vendor/{pusher-gem → pusher}/pusher.gemspec +6 -5
  113. data/vendor/pusher/spec/channel_spec.rb +127 -0
  114. data/vendor/pusher/spec/client_spec.rb +464 -0
  115. data/vendor/{pusher-gem → pusher}/spec/spec_helper.rb +12 -0
  116. data/vendor/pusher/spec/web_hook_spec.rb +117 -0
  117. data/vendor/signature/.travis.yml +15 -0
  118. data/vendor/signature/Gemfile +1 -1
  119. data/vendor/signature/README.md +38 -28
  120. data/vendor/signature/lib/signature.rb +97 -15
  121. data/vendor/signature/lib/signature/query_encoder.rb +47 -0
  122. data/vendor/signature/lib/signature/version.rb +1 -1
  123. data/vendor/signature/signature.gemspec +3 -2
  124. data/vendor/signature/spec/signature_spec.rb +164 -55
  125. data/vendor/signature/spec/spec_helper.rb +2 -3
  126. metadata +120 -145
  127. data/vendor/json_pure/.gitignore +0 -12
  128. data/vendor/json_pure/.travis.yml +0 -20
  129. data/vendor/json_pure/CHANGES +0 -282
  130. data/vendor/json_pure/COPYING +0 -58
  131. data/vendor/json_pure/COPYING-json-jruby +0 -57
  132. data/vendor/json_pure/GPL +0 -340
  133. data/vendor/json_pure/Gemfile +0 -11
  134. data/vendor/json_pure/README-json-jruby.markdown +0 -33
  135. data/vendor/json_pure/README.rdoc +0 -358
  136. data/vendor/json_pure/Rakefile +0 -412
  137. data/vendor/json_pure/TODO +0 -1
  138. data/vendor/json_pure/VERSION +0 -1
  139. data/vendor/json_pure/data/example.json +0 -1
  140. data/vendor/json_pure/data/index.html +0 -38
  141. data/vendor/json_pure/data/prototype.js +0 -4184
  142. data/vendor/json_pure/ext/json/ext/fbuffer/fbuffer.h +0 -181
  143. data/vendor/json_pure/ext/json/ext/generator/depend +0 -1
  144. data/vendor/json_pure/ext/json/ext/generator/extconf.rb +0 -14
  145. data/vendor/json_pure/ext/json/ext/generator/generator.c +0 -1435
  146. data/vendor/json_pure/ext/json/ext/generator/generator.h +0 -148
  147. data/vendor/json_pure/ext/json/ext/parser/depend +0 -1
  148. data/vendor/json_pure/ext/json/ext/parser/extconf.rb +0 -13
  149. data/vendor/json_pure/ext/json/ext/parser/parser.c +0 -2204
  150. data/vendor/json_pure/ext/json/ext/parser/parser.h +0 -77
  151. data/vendor/json_pure/ext/json/ext/parser/parser.rl +0 -927
  152. data/vendor/json_pure/install.rb +0 -23
  153. data/vendor/json_pure/java/src/json/ext/ByteListTranscoder.java +0 -167
  154. data/vendor/json_pure/java/src/json/ext/Generator.java +0 -444
  155. data/vendor/json_pure/java/src/json/ext/GeneratorMethods.java +0 -232
  156. data/vendor/json_pure/java/src/json/ext/GeneratorService.java +0 -43
  157. data/vendor/json_pure/java/src/json/ext/GeneratorState.java +0 -543
  158. data/vendor/json_pure/java/src/json/ext/OptionsReader.java +0 -114
  159. data/vendor/json_pure/java/src/json/ext/Parser.java +0 -2644
  160. data/vendor/json_pure/java/src/json/ext/Parser.rl +0 -968
  161. data/vendor/json_pure/java/src/json/ext/ParserService.java +0 -35
  162. data/vendor/json_pure/java/src/json/ext/RuntimeInfo.java +0 -121
  163. data/vendor/json_pure/java/src/json/ext/StringDecoder.java +0 -167
  164. data/vendor/json_pure/java/src/json/ext/StringEncoder.java +0 -106
  165. data/vendor/json_pure/java/src/json/ext/Utils.java +0 -89
  166. data/vendor/json_pure/json-java.gemspec +0 -23
  167. data/vendor/json_pure/json.gemspec +0 -37
  168. data/vendor/json_pure/json_pure.gemspec +0 -39
  169. data/vendor/json_pure/lib/json.rb +0 -62
  170. data/vendor/json_pure/lib/json/add/bigdecimal.rb +0 -28
  171. data/vendor/json_pure/lib/json/add/complex.rb +0 -22
  172. data/vendor/json_pure/lib/json/add/core.rb +0 -11
  173. data/vendor/json_pure/lib/json/add/date.rb +0 -34
  174. data/vendor/json_pure/lib/json/add/date_time.rb +0 -50
  175. data/vendor/json_pure/lib/json/add/exception.rb +0 -31
  176. data/vendor/json_pure/lib/json/add/ostruct.rb +0 -31
  177. data/vendor/json_pure/lib/json/add/range.rb +0 -29
  178. data/vendor/json_pure/lib/json/add/rational.rb +0 -22
  179. data/vendor/json_pure/lib/json/add/regexp.rb +0 -30
  180. data/vendor/json_pure/lib/json/add/struct.rb +0 -30
  181. data/vendor/json_pure/lib/json/add/symbol.rb +0 -25
  182. data/vendor/json_pure/lib/json/add/time.rb +0 -38
  183. data/vendor/json_pure/lib/json/common.rb +0 -487
  184. data/vendor/json_pure/lib/json/ext.rb +0 -21
  185. data/vendor/json_pure/lib/json/ext/.keep +0 -0
  186. data/vendor/json_pure/lib/json/generic_object.rb +0 -70
  187. data/vendor/json_pure/lib/json/pure.rb +0 -21
  188. data/vendor/json_pure/lib/json/pure/generator.rb +0 -522
  189. data/vendor/json_pure/lib/json/pure/parser.rb +0 -359
  190. data/vendor/json_pure/lib/json/version.rb +0 -8
  191. data/vendor/json_pure/tests/fixtures/fail1.json +0 -1
  192. data/vendor/json_pure/tests/fixtures/fail10.json +0 -1
  193. data/vendor/json_pure/tests/fixtures/fail11.json +0 -1
  194. data/vendor/json_pure/tests/fixtures/fail12.json +0 -1
  195. data/vendor/json_pure/tests/fixtures/fail13.json +0 -1
  196. data/vendor/json_pure/tests/fixtures/fail14.json +0 -1
  197. data/vendor/json_pure/tests/fixtures/fail18.json +0 -1
  198. data/vendor/json_pure/tests/fixtures/fail19.json +0 -1
  199. data/vendor/json_pure/tests/fixtures/fail2.json +0 -1
  200. data/vendor/json_pure/tests/fixtures/fail20.json +0 -1
  201. data/vendor/json_pure/tests/fixtures/fail21.json +0 -1
  202. data/vendor/json_pure/tests/fixtures/fail22.json +0 -1
  203. data/vendor/json_pure/tests/fixtures/fail23.json +0 -1
  204. data/vendor/json_pure/tests/fixtures/fail24.json +0 -1
  205. data/vendor/json_pure/tests/fixtures/fail25.json +0 -1
  206. data/vendor/json_pure/tests/fixtures/fail27.json +0 -2
  207. data/vendor/json_pure/tests/fixtures/fail28.json +0 -2
  208. data/vendor/json_pure/tests/fixtures/fail3.json +0 -1
  209. data/vendor/json_pure/tests/fixtures/fail4.json +0 -1
  210. data/vendor/json_pure/tests/fixtures/fail5.json +0 -1
  211. data/vendor/json_pure/tests/fixtures/fail6.json +0 -1
  212. data/vendor/json_pure/tests/fixtures/fail7.json +0 -1
  213. data/vendor/json_pure/tests/fixtures/fail8.json +0 -1
  214. data/vendor/json_pure/tests/fixtures/fail9.json +0 -1
  215. data/vendor/json_pure/tests/fixtures/pass1.json +0 -56
  216. data/vendor/json_pure/tests/fixtures/pass15.json +0 -1
  217. data/vendor/json_pure/tests/fixtures/pass16.json +0 -1
  218. data/vendor/json_pure/tests/fixtures/pass17.json +0 -1
  219. data/vendor/json_pure/tests/fixtures/pass2.json +0 -1
  220. data/vendor/json_pure/tests/fixtures/pass26.json +0 -1
  221. data/vendor/json_pure/tests/fixtures/pass3.json +0 -6
  222. data/vendor/json_pure/tests/setup_variant.rb +0 -11
  223. data/vendor/json_pure/tests/test_json.rb +0 -545
  224. data/vendor/json_pure/tests/test_json_addition.rb +0 -196
  225. data/vendor/json_pure/tests/test_json_encoding.rb +0 -65
  226. data/vendor/json_pure/tests/test_json_fixtures.rb +0 -35
  227. data/vendor/json_pure/tests/test_json_generate.rb +0 -322
  228. data/vendor/json_pure/tests/test_json_generic_object.rb +0 -75
  229. data/vendor/json_pure/tests/test_json_string_matching.rb +0 -39
  230. data/vendor/json_pure/tests/test_json_unicode.rb +0 -72
  231. data/vendor/json_pure/tools/fuzz.rb +0 -139
  232. data/vendor/json_pure/tools/server.rb +0 -62
  233. data/vendor/pusher-gem/Gemfile +0 -2
  234. data/vendor/pusher-gem/README.md +0 -80
  235. data/vendor/pusher-gem/lib/pusher.rb +0 -107
  236. data/vendor/pusher-gem/lib/pusher/request.rb +0 -107
  237. data/vendor/pusher-gem/spec/channel_spec.rb +0 -274
  238. data/vendor/pusher-gem/spec/pusher_spec.rb +0 -87
  239. data/vendor/ruby-hmac/History.txt +0 -15
  240. data/vendor/ruby-hmac/Manifest.txt +0 -11
  241. data/vendor/ruby-hmac/README.md +0 -41
  242. data/vendor/ruby-hmac/Rakefile +0 -23
  243. data/vendor/ruby-hmac/lib/hmac-md5.rb +0 -11
  244. data/vendor/ruby-hmac/lib/hmac-rmd160.rb +0 -11
  245. data/vendor/ruby-hmac/lib/hmac-sha1.rb +0 -11
  246. data/vendor/ruby-hmac/lib/hmac-sha2.rb +0 -25
  247. data/vendor/ruby-hmac/lib/hmac.rb +0 -118
  248. data/vendor/ruby-hmac/lib/ruby_hmac.rb +0 -2
  249. data/vendor/ruby-hmac/ruby-hmac.gemspec +0 -33
  250. data/vendor/ruby-hmac/test/test_hmac.rb +0 -89
  251. data/vendor/signature/VERSION +0 -1
@@ -0,0 +1,46 @@
1
+ ## Contributing
2
+ In the spirit of [free software][free-sw], **everyone** is encouraged to help
3
+ improve this project.
4
+
5
+ [free-sw]: http://www.fsf.org/licensing/essays/free-sw.html
6
+
7
+ Here are some ways *you* can contribute:
8
+
9
+ * by using alpha, beta, and prerelease versions
10
+ * by reporting bugs
11
+ * by suggesting new features
12
+ * by writing or editing documentation
13
+ * by writing specifications
14
+ * by writing code (**no patch is too small**: fix typos, add comments, clean up
15
+ inconsistent whitespace)
16
+ * by refactoring code
17
+ * by closing [issues][]
18
+ * by reviewing patches
19
+
20
+ [issues]: https://github.com/intridea/multi_json/issues
21
+
22
+ ## Submitting an Issue
23
+ We use the [GitHub issue tracker][issues] to track bugs and features. Before
24
+ submitting a bug report or feature request, check to make sure it hasn't
25
+ already been submitted. When submitting a bug report, please include a [Gist][]
26
+ that includes a stack trace and any details that may be necessary to reproduce
27
+ the bug, including your gem version, Ruby version, and operating system.
28
+ Ideally, a bug report should include a pull request with failing specs.
29
+
30
+ [gist]: https://gist.github.com/
31
+
32
+ ## Submitting a Pull Request
33
+ 1. [Fork the repository.][fork]
34
+ 2. [Create a topic branch.][branch]
35
+ 3. Add specs for your unimplemented feature or bug fix.
36
+ 4. Run `bundle exec rake spec`. If your specs pass, return to step 3.
37
+ 5. Implement your feature or bug fix.
38
+ 6. Run `bundle exec rake spec`. If your specs fail, return to step 5.
39
+ 7. Run `open coverage/index.html`. If your changes are not completely covered
40
+ by your tests, return to step 3.
41
+ 8. Add, commit, and push your changes.
42
+ 9. [Submit a pull request.][pr]
43
+
44
+ [fork]: http://help.github.com/fork-a-repo/
45
+ [branch]: http://learn.github.com/p/branching.html
46
+ [pr]: http://help.github.com/send-pull-requests/
@@ -0,0 +1,31 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'rake', '>= 0.9'
4
+ gem 'yard', '>= 0.8'
5
+
6
+ gem 'json', '~> 1.4', :require => nil
7
+ gem 'json_pure', '~> 1.4', :require => nil
8
+
9
+ platforms :ruby, :mswin, :mingw do
10
+ gem 'oj', '~> 2.0', :require => nil
11
+ gem 'yajl-ruby', '~> 1.0', :require => nil
12
+ end
13
+
14
+ platforms :jruby do
15
+ gem 'gson', '>= 0.6', :require => nil
16
+ gem 'jrjackson', '~> 0.1.1', :require => nil
17
+ end
18
+
19
+ group :development do
20
+ gem 'kramdown', '>= 0.14'
21
+ gem 'pry'
22
+ gem 'pry-debugger', :platforms => :mri_19
23
+ end
24
+
25
+ group :test do
26
+ gem 'coveralls', :require => false
27
+ gem 'rspec', '>= 2.14'
28
+ gem 'simplecov', :require => false
29
+ end
30
+
31
+ gemspec
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2010-2013 Michael Bleigh, Josh Kalderimis, Erik Michaels-Ober, Pavel Pravosud
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
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,109 @@
1
+ # MultiJSON
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/multi_json.png)][gem]
4
+ [![Build Status](https://secure.travis-ci.org/intridea/multi_json.png?branch=master)][travis]
5
+ [![Dependency Status](https://gemnasium.com/intridea/multi_json.png?travis)][gemnasium]
6
+ [![Code Climate](https://codeclimate.com/github/intridea/multi_json.png)][codeclimate]
7
+ [![Coverage Status](https://coveralls.io/repos/intridea/multi_json/badge.png?branch=master)][coveralls]
8
+
9
+ [gem]: https://rubygems.org/gems/multi_json
10
+ [travis]: http://travis-ci.org/intridea/multi_json
11
+ [gemnasium]: https://gemnasium.com/intridea/multi_json
12
+ [codeclimate]: https://codeclimate.com/github/intridea/multi_json
13
+ [coveralls]: https://coveralls.io/r/intridea/multi_json
14
+
15
+ Lots of Ruby libraries parse JSON and everyone has their favorite JSON coder.
16
+ Instead of choosing a single JSON coder and forcing users of your library to be
17
+ stuck with it, you can use MultiJSON instead, which will simply choose the
18
+ fastest available JSON coder. Here's how to use it:
19
+
20
+ ```ruby
21
+ require 'multi_json'
22
+
23
+ MultiJson.load('{"abc":"def"}') #=> {"abc" => "def"}
24
+ MultiJson.load('{"abc":"def"}', :symbolize_keys => true) #=> {:abc => "def"}
25
+ MultiJson.dump({:abc => 'def'}) # convert Ruby back to JSON
26
+ MultiJson.dump({:abc => 'def'}, :pretty => true) # encoded in a pretty form (if supported by the coder)
27
+ ```
28
+
29
+ When loading invalid JSON, multiJSON will throw a `MultiJson::LoadError`. `MultiJson::DecodeError` is an alias for backwards compatibility.
30
+
31
+ ```ruby
32
+ MultiJson.load('invalid json') #=> MultiJson::LoadError
33
+ ```
34
+
35
+ The `use` method, which sets the MultiJson adapter, takes either a symbol or a
36
+ class (to allow for custom JSON parsers) that responds to both `.load` and `.dump`
37
+ at the class level.
38
+
39
+ MultiJSON tries to have intelligent defaulting. That is, if you have any of the
40
+ supported engines already loaded, it will utilize them before attempting to
41
+ load any. When loading, libraries are ordered by speed. First Oj, then Yajl,
42
+ then the JSON gem, then JSON pure. If no other JSON library is available,
43
+ MultiJSON falls back to [OkJson][], a simple, vendorable JSON parser.
44
+
45
+ [okjson]: https://github.com/kr/okjson
46
+
47
+ ## Supported JSON Engines
48
+
49
+ * [Oj](https://github.com/ohler55/oj) Optimized JSON by Peter Ohler
50
+ * [Yajl](https://github.com/brianmario/yajl-ruby) Yet Another JSON Library by Brian Lopez
51
+ * [JSON](https://github.com/flori/json) The default JSON gem with C-extensions (ships with Ruby 1.9)
52
+ * [JSON Pure](https://github.com/flori/json) A Ruby variant of the JSON gem
53
+ * [NSJSONSerialization](https://developer.apple.com/library/ios/#documentation/Foundation/Reference/NSJSONSerialization_Class/Reference/Reference.html) Wrapper for Apple's NSJSONSerialization in the Cocoa Framework (MacRuby only)
54
+ * [gson.rb](https://github.com/avsej/gson.rb) A Ruby wrapper for google-gson library (JRuby only)
55
+ * [JrJackson](https://github.com/guyboertje/jrjackson) JRuby wrapper for Jackson (JRuby only)
56
+ * [OkJson][okjson] A simple, vendorable JSON parser
57
+
58
+ ## Supported Ruby Versions
59
+ This library aims to support and is [tested against][travis] the following Ruby
60
+ implementations:
61
+
62
+ * Ruby 1.8.7
63
+ * Ruby 1.9.2
64
+ * Ruby 1.9.3
65
+ * Ruby 2.0.0
66
+ * [JRuby][]
67
+ * [Rubinius][]
68
+ * [MacRuby][] (not tested on Travis CI)
69
+
70
+ [jruby]: http://www.jruby.org/
71
+ [rubinius]: http://rubini.us/
72
+ [macruby]: http://www.macruby.org/
73
+
74
+ If something doesn't work on one of these interpreters, it's a bug.
75
+
76
+ This library may inadvertently work (or seem to work) on other Ruby
77
+ implementations, however support will only be provided for the versions listed
78
+ above.
79
+
80
+ If you would like this library to support another Ruby version, you may
81
+ volunteer to be a maintainer. Being a maintainer entails making sure all tests
82
+ run and pass on that implementation. When something breaks on your
83
+ implementation, you will be responsible for providing patches in a timely
84
+ fashion. If critical issues for a particular implementation exist at the time
85
+ of a major release, support for that Ruby version may be dropped.
86
+
87
+ ## Versioning
88
+
89
+ This library aims to adhere to [Semantic Versioning 2.0.0][semver]. Violations
90
+ of this scheme should be reported as bugs. Specifically, if a minor or patch
91
+ version is released that breaks backward compatibility, that version should be
92
+ immediately yanked and/or a new version should be immediately released that
93
+ restores compatibility. Breaking changes to the public API will only be
94
+ introduced with new major versions. As a result of this policy, you can (and
95
+ should) specify a dependency on this gem using the [Pessimistic Version
96
+ Constraint][pvc] with two digits of precision. For example:
97
+
98
+ ```ruby
99
+ spec.add_dependency 'multi_json', '~> 1.0'
100
+ ```
101
+
102
+ [semver]: http://semver.org/
103
+ [pvc]: http://docs.rubygems.org/read/chapter/16#page74
104
+
105
+ ## Copyright
106
+ Copyright (c) 2010-2013 Michael Bleigh, Josh Kalderimis, Erik Michaels-Ober,
107
+ and Pavel Pravosud. See [LICENSE][] for details.
108
+
109
+ [license]: LICENSE.md
@@ -0,0 +1,12 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ require 'rspec/core/rake_task'
5
+ desc "Run all examples"
6
+ RSpec::Core::RakeTask.new(:spec)
7
+
8
+ task :default => :spec
9
+ task :test => :spec
10
+
11
+ require 'yard'
12
+ YARD::Rake::YardocTask.new
@@ -0,0 +1,157 @@
1
+ require 'multi_json/options'
2
+ require 'multi_json/version'
3
+ require 'multi_json/load_error'
4
+
5
+ module MultiJson
6
+ include Options
7
+ extend self
8
+
9
+ class << self
10
+ def cached_options
11
+ @cached_options ||= {}
12
+ end
13
+
14
+ def reset_cached_options!
15
+ @cached_options = {}
16
+ end
17
+ end
18
+
19
+ # Since `default_options` is deprecated, the
20
+ # reader is aliased to `dump_options` and the
21
+ # writer sets both `dump_options` and `load_options`
22
+ alias default_options dump_options
23
+
24
+ def default_options=(value)
25
+ Kernel.warn "MultiJson.default_options setter is deprecated\n" +
26
+ "Use MultiJson.load_options and MultiJson.dump_options instead"
27
+
28
+ self.load_options = self.dump_options = value
29
+ end
30
+
31
+ ALIASES = { 'jrjackson' => :jr_jackson }
32
+
33
+ REQUIREMENT_MAP = [
34
+ ['oj', :oj],
35
+ ['yajl', :yajl],
36
+ ['jrjackson', :jr_jackson],
37
+ ['json/ext', :json_gem],
38
+ ['gson', :gson],
39
+ ['json/pure', :json_pure]
40
+ ]
41
+
42
+ # The default adapter based on what you currently
43
+ # have loaded and installed. First checks to see
44
+ # if any adapters are already loaded, then checks
45
+ # to see which are installed if none are loaded.
46
+ def default_adapter
47
+ return :oj if defined?(::Oj)
48
+ return :yajl if defined?(::Yajl)
49
+ return :jr_jackson if defined?(::JrJackson)
50
+ return :json_gem if defined?(::JSON::JSON_LOADED)
51
+ return :gson if defined?(::Gson)
52
+
53
+ REQUIREMENT_MAP.each do |library, adapter|
54
+ begin
55
+ require library
56
+ return adapter
57
+ rescue ::LoadError
58
+ next
59
+ end
60
+ end
61
+
62
+ Kernel.warn '[WARNING] MultiJson is using the default adapter (ok_json). We recommend loading a different JSON library to improve performance.'
63
+ :ok_json
64
+ end
65
+ alias default_engine default_adapter
66
+
67
+ # Get the current adapter class.
68
+ def adapter
69
+ return @adapter if defined?(@adapter) && @adapter
70
+
71
+ self.use nil # load default adapter
72
+
73
+ @adapter
74
+ end
75
+ alias engine adapter
76
+
77
+ # Set the JSON parser utilizing a symbol, string, or class.
78
+ # Supported by default are:
79
+ #
80
+ # * <tt>:oj</tt>
81
+ # * <tt>:json_gem</tt>
82
+ # * <tt>:json_pure</tt>
83
+ # * <tt>:ok_json</tt>
84
+ # * <tt>:yajl</tt>
85
+ # * <tt>:nsjsonserialization</tt> (MacRuby only)
86
+ # * <tt>:gson</tt> (JRuby only)
87
+ # * <tt>:jr_jackson</tt> (JRuby only)
88
+ def use(new_adapter)
89
+ @adapter = load_adapter(new_adapter)
90
+ end
91
+ alias adapter= use
92
+ alias engine= use
93
+
94
+ def load_adapter(new_adapter)
95
+ case new_adapter
96
+ when String, Symbol
97
+ load_adapter_from_string_name new_adapter.to_s
98
+ when NilClass, FalseClass
99
+ load_adapter default_adapter
100
+ when Class, Module
101
+ new_adapter
102
+ else
103
+ raise ::LoadError
104
+ end
105
+ rescue ::LoadError
106
+ raise ArgumentError, 'Did not recognize your adapter specification.'
107
+ end
108
+
109
+ # Decode a JSON string into Ruby.
110
+ #
111
+ # <b>Options</b>
112
+ #
113
+ # <tt>:symbolize_keys</tt> :: If true, will use symbols instead of strings for the keys.
114
+ # <tt>:adapter</tt> :: If set, the selected adapter will be used for this call.
115
+ def load(string, options={})
116
+ adapter = current_adapter(options)
117
+ begin
118
+ adapter.load(string, options)
119
+ rescue adapter::ParseError => exception
120
+ raise LoadError.new(exception.message, exception.backtrace, string)
121
+ end
122
+ end
123
+ alias decode load
124
+
125
+ def current_adapter(options={})
126
+ if new_adapter = options[:adapter]
127
+ load_adapter(new_adapter)
128
+ else
129
+ adapter
130
+ end
131
+ end
132
+
133
+ # Encodes a Ruby object as JSON.
134
+ def dump(object, options={})
135
+ current_adapter(options).dump(object, options)
136
+ end
137
+ alias encode dump
138
+
139
+ # Executes passed block using specified adapter.
140
+ def with_adapter(new_adapter)
141
+ old_adapter, self.adapter = adapter, new_adapter
142
+ yield
143
+ ensure
144
+ self.adapter = old_adapter
145
+ end
146
+ alias with_engine with_adapter
147
+
148
+ private
149
+
150
+ def load_adapter_from_string_name(name)
151
+ name = ALIASES.fetch(name, name)
152
+ require "multi_json/adapters/#{name}"
153
+ klass_name = name.to_s.split('_').map(&:capitalize) * ''
154
+ MultiJson::Adapters.const_get(klass_name)
155
+ end
156
+
157
+ end
@@ -0,0 +1,48 @@
1
+ require 'singleton'
2
+ require 'multi_json/options'
3
+
4
+ module MultiJson
5
+ class Adapter
6
+ extend Options
7
+ include Singleton
8
+ class << self
9
+
10
+ def defaults(action, value)
11
+ metaclass = class << self; self; end
12
+
13
+ metaclass.instance_eval do
14
+ define_method("default_#{action}_options"){ value }
15
+ end
16
+ end
17
+
18
+ def load(string, options={})
19
+ instance.load(string, collect_load_options(options).clone)
20
+ end
21
+
22
+ def dump(object, options={})
23
+ instance.dump(object, collect_dump_options(options).clone)
24
+ end
25
+
26
+ protected
27
+
28
+ def collect_load_options(options)
29
+ cache('load', options){ collect_options(:load_options, options).merge(options) }
30
+ end
31
+
32
+ def collect_dump_options(options)
33
+ cache('dump', options){ collect_options(:dump_options, options).merge(options) }
34
+ end
35
+
36
+ def collect_options(method, *args)
37
+ global, local = *[MultiJson, self].map{ |r| r.send(method, *args) }
38
+ local.merge(global)
39
+ end
40
+
41
+ def cache(method, options)
42
+ cache_key = [self, options].map(&:hash).join + method
43
+ MultiJson.cached_options[cache_key] ||= yield
44
+ end
45
+
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,19 @@
1
+ require 'gson' unless defined?(::Gson)
2
+ require 'multi_json/adapter'
3
+
4
+ module MultiJson
5
+ module Adapters
6
+ # Use the gson.rb library to dump/load.
7
+ class Gson < Adapter
8
+ ParseError = ::Gson::DecodeError
9
+
10
+ def load(string, options={})
11
+ ::Gson::Decoder.new(options).decode(string)
12
+ end
13
+
14
+ def dump(object, options={})
15
+ ::Gson::Encoder.new(options).encode(object)
16
+ end
17
+ end
18
+ end
19
+ end