engineyard-serverside 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (220) hide show
  1. data/LICENSE +19 -0
  2. data/bin/engineyard-serverside +10 -0
  3. data/lib/engineyard-serverside.rb +49 -0
  4. data/lib/engineyard-serverside/bundle_installer.rb +4 -0
  5. data/lib/engineyard-serverside/cli.rb +146 -0
  6. data/lib/engineyard-serverside/configuration.rb +130 -0
  7. data/lib/engineyard-serverside/default_maintenance_page.html +29 -0
  8. data/lib/engineyard-serverside/deploy.rb +321 -0
  9. data/lib/engineyard-serverside/deploy_hook.rb +80 -0
  10. data/lib/engineyard-serverside/lockfile_parser.rb +55 -0
  11. data/lib/engineyard-serverside/logged_output.rb +78 -0
  12. data/lib/engineyard-serverside/server.rb +70 -0
  13. data/lib/engineyard-serverside/strategies/git.rb +136 -0
  14. data/lib/engineyard-serverside/task.rb +62 -0
  15. data/lib/engineyard-serverside/version.rb +3 -0
  16. data/lib/vendor/dataflow/HISTORY +52 -0
  17. data/lib/vendor/dataflow/LICENSE +19 -0
  18. data/lib/vendor/dataflow/README.textile +290 -0
  19. data/lib/vendor/dataflow/Rakefile +36 -0
  20. data/lib/vendor/dataflow/dataflow.rb +120 -0
  21. data/lib/vendor/dataflow/dataflow/actor.rb +22 -0
  22. data/lib/vendor/dataflow/dataflow/equality.rb +28 -0
  23. data/lib/vendor/dataflow/dataflow/future_queue.rb +24 -0
  24. data/lib/vendor/dataflow/dataflow/port.rb +54 -0
  25. data/lib/vendor/dataflow/examples/barrier.rb +9 -0
  26. data/lib/vendor/dataflow/examples/data_driven.rb +17 -0
  27. data/lib/vendor/dataflow/examples/dataflow_http_gets.rb +13 -0
  28. data/lib/vendor/dataflow/examples/flow.rb +20 -0
  29. data/lib/vendor/dataflow/examples/future_http_gets.rb +12 -0
  30. data/lib/vendor/dataflow/examples/future_queue.rb +11 -0
  31. data/lib/vendor/dataflow/examples/instance_variables.rb +15 -0
  32. data/lib/vendor/dataflow/examples/laziness.rb +9 -0
  33. data/lib/vendor/dataflow/examples/local_variables.rb +11 -0
  34. data/lib/vendor/dataflow/examples/messages.rb +26 -0
  35. data/lib/vendor/dataflow/examples/port_http_gets.rb +13 -0
  36. data/lib/vendor/dataflow/examples/port_send.rb +10 -0
  37. data/lib/vendor/dataflow/examples/ring.rb +21 -0
  38. data/lib/vendor/dataflow/spec/actor_spec.rb +28 -0
  39. data/lib/vendor/dataflow/spec/anonymous_variables_spec.rb +21 -0
  40. data/lib/vendor/dataflow/spec/barrier_spec.rb +25 -0
  41. data/lib/vendor/dataflow/spec/by_need_spec.rb +55 -0
  42. data/lib/vendor/dataflow/spec/dataflow_spec.rb +151 -0
  43. data/lib/vendor/dataflow/spec/equality_spec.rb +40 -0
  44. data/lib/vendor/dataflow/spec/flow_spec.rb +25 -0
  45. data/lib/vendor/dataflow/spec/forker_spec.rb +28 -0
  46. data/lib/vendor/dataflow/spec/future_queue_spec.rb +31 -0
  47. data/lib/vendor/dataflow/spec/inspect_spec.rb +19 -0
  48. data/lib/vendor/dataflow/spec/need_later_spec.rb +12 -0
  49. data/lib/vendor/dataflow/spec/port_spec.rb +26 -0
  50. data/lib/vendor/dataflow/spec/spec.opts +1 -0
  51. data/lib/vendor/dataflow/spec/spec_helper.rb +10 -0
  52. data/lib/vendor/escape/Readme +21 -0
  53. data/lib/vendor/escape/doc_include/template/qualitysmith.rb +631 -0
  54. data/lib/vendor/escape/lib/escape.rb +247 -0
  55. data/lib/vendor/json_pure/CHANGES +166 -0
  56. data/lib/vendor/json_pure/COPYING +58 -0
  57. data/lib/vendor/json_pure/GPL +340 -0
  58. data/lib/vendor/json_pure/README +358 -0
  59. data/lib/vendor/json_pure/Rakefile +292 -0
  60. data/lib/vendor/json_pure/TODO +1 -0
  61. data/lib/vendor/json_pure/VERSION +1 -0
  62. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkComparison.log +52 -0
  63. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast-autocorrelation.dat +1000 -0
  64. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast.dat +1001 -0
  65. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty-autocorrelation.dat +900 -0
  66. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty.dat +901 -0
  67. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe-autocorrelation.dat +1000 -0
  68. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe.dat +1001 -0
  69. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt.log +261 -0
  70. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast-autocorrelation.dat +1000 -0
  71. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast.dat +1001 -0
  72. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty-autocorrelation.dat +1000 -0
  73. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty.dat +1001 -0
  74. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe-autocorrelation.dat +1000 -0
  75. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe.dat +1001 -0
  76. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure.log +262 -0
  77. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator-autocorrelation.dat +1000 -0
  78. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator.dat +1001 -0
  79. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails.log +82 -0
  80. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkComparison.log +34 -0
  81. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser-autocorrelation.dat +900 -0
  82. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser.dat +901 -0
  83. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt.log +81 -0
  84. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser-autocorrelation.dat +1000 -0
  85. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser.dat +1001 -0
  86. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure.log +82 -0
  87. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser-autocorrelation.dat +1000 -0
  88. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser.dat +1001 -0
  89. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails.log +82 -0
  90. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser-autocorrelation.dat +1000 -0
  91. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser.dat +1001 -0
  92. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML.log +82 -0
  93. data/lib/vendor/json_pure/benchmarks/generator2_benchmark.rb +222 -0
  94. data/lib/vendor/json_pure/benchmarks/generator_benchmark.rb +224 -0
  95. data/lib/vendor/json_pure/benchmarks/ohai.json +1216 -0
  96. data/lib/vendor/json_pure/benchmarks/ohai.ruby +1 -0
  97. data/lib/vendor/json_pure/benchmarks/parser2_benchmark.rb +251 -0
  98. data/lib/vendor/json_pure/benchmarks/parser_benchmark.rb +259 -0
  99. data/lib/vendor/json_pure/bin/edit_json.rb +9 -0
  100. data/lib/vendor/json_pure/bin/prettify_json.rb +75 -0
  101. data/lib/vendor/json_pure/data/example.json +1 -0
  102. data/lib/vendor/json_pure/data/index.html +38 -0
  103. data/lib/vendor/json_pure/data/prototype.js +4184 -0
  104. data/lib/vendor/json_pure/ext/json/ext/generator/extconf.rb +16 -0
  105. data/lib/vendor/json_pure/ext/json/ext/generator/generator.c +1323 -0
  106. data/lib/vendor/json_pure/ext/json/ext/generator/generator.h +170 -0
  107. data/lib/vendor/json_pure/ext/json/ext/parser/extconf.rb +15 -0
  108. data/lib/vendor/json_pure/ext/json/ext/parser/parser.c +1935 -0
  109. data/lib/vendor/json_pure/ext/json/ext/parser/parser.h +71 -0
  110. data/lib/vendor/json_pure/ext/json/ext/parser/parser.rl +792 -0
  111. data/lib/vendor/json_pure/install.rb +26 -0
  112. data/lib/vendor/json_pure/lib/json.rb +10 -0
  113. data/lib/vendor/json_pure/lib/json/Array.xpm +21 -0
  114. data/lib/vendor/json_pure/lib/json/FalseClass.xpm +21 -0
  115. data/lib/vendor/json_pure/lib/json/Hash.xpm +21 -0
  116. data/lib/vendor/json_pure/lib/json/Key.xpm +73 -0
  117. data/lib/vendor/json_pure/lib/json/NilClass.xpm +21 -0
  118. data/lib/vendor/json_pure/lib/json/Numeric.xpm +28 -0
  119. data/lib/vendor/json_pure/lib/json/String.xpm +96 -0
  120. data/lib/vendor/json_pure/lib/json/TrueClass.xpm +21 -0
  121. data/lib/vendor/json_pure/lib/json/add/core.rb +148 -0
  122. data/lib/vendor/json_pure/lib/json/add/rails.rb +58 -0
  123. data/lib/vendor/json_pure/lib/json/common.rb +397 -0
  124. data/lib/vendor/json_pure/lib/json/editor.rb +1371 -0
  125. data/lib/vendor/json_pure/lib/json/ext.rb +15 -0
  126. data/lib/vendor/json_pure/lib/json/json.xpm +1499 -0
  127. data/lib/vendor/json_pure/lib/json/pure.rb +77 -0
  128. data/lib/vendor/json_pure/lib/json/pure/generator.rb +452 -0
  129. data/lib/vendor/json_pure/lib/json/pure/parser.rb +307 -0
  130. data/lib/vendor/json_pure/lib/json/version.rb +8 -0
  131. data/lib/vendor/json_pure/tests/fixtures/fail1.json +1 -0
  132. data/lib/vendor/json_pure/tests/fixtures/fail10.json +1 -0
  133. data/lib/vendor/json_pure/tests/fixtures/fail11.json +1 -0
  134. data/lib/vendor/json_pure/tests/fixtures/fail12.json +1 -0
  135. data/lib/vendor/json_pure/tests/fixtures/fail13.json +1 -0
  136. data/lib/vendor/json_pure/tests/fixtures/fail14.json +1 -0
  137. data/lib/vendor/json_pure/tests/fixtures/fail18.json +1 -0
  138. data/lib/vendor/json_pure/tests/fixtures/fail19.json +1 -0
  139. data/lib/vendor/json_pure/tests/fixtures/fail2.json +1 -0
  140. data/lib/vendor/json_pure/tests/fixtures/fail20.json +1 -0
  141. data/lib/vendor/json_pure/tests/fixtures/fail21.json +1 -0
  142. data/lib/vendor/json_pure/tests/fixtures/fail22.json +1 -0
  143. data/lib/vendor/json_pure/tests/fixtures/fail23.json +1 -0
  144. data/lib/vendor/json_pure/tests/fixtures/fail24.json +1 -0
  145. data/lib/vendor/json_pure/tests/fixtures/fail25.json +1 -0
  146. data/lib/vendor/json_pure/tests/fixtures/fail27.json +2 -0
  147. data/lib/vendor/json_pure/tests/fixtures/fail28.json +2 -0
  148. data/lib/vendor/json_pure/tests/fixtures/fail3.json +1 -0
  149. data/lib/vendor/json_pure/tests/fixtures/fail4.json +1 -0
  150. data/lib/vendor/json_pure/tests/fixtures/fail5.json +1 -0
  151. data/lib/vendor/json_pure/tests/fixtures/fail6.json +1 -0
  152. data/lib/vendor/json_pure/tests/fixtures/fail7.json +1 -0
  153. data/lib/vendor/json_pure/tests/fixtures/fail8.json +1 -0
  154. data/lib/vendor/json_pure/tests/fixtures/fail9.json +1 -0
  155. data/lib/vendor/json_pure/tests/fixtures/pass1.json +56 -0
  156. data/lib/vendor/json_pure/tests/fixtures/pass15.json +1 -0
  157. data/lib/vendor/json_pure/tests/fixtures/pass16.json +1 -0
  158. data/lib/vendor/json_pure/tests/fixtures/pass17.json +1 -0
  159. data/lib/vendor/json_pure/tests/fixtures/pass2.json +1 -0
  160. data/lib/vendor/json_pure/tests/fixtures/pass26.json +1 -0
  161. data/lib/vendor/json_pure/tests/fixtures/pass3.json +6 -0
  162. data/lib/vendor/json_pure/tests/test_json.rb +361 -0
  163. data/lib/vendor/json_pure/tests/test_json_addition.rb +162 -0
  164. data/lib/vendor/json_pure/tests/test_json_encoding.rb +68 -0
  165. data/lib/vendor/json_pure/tests/test_json_fixtures.rb +34 -0
  166. data/lib/vendor/json_pure/tests/test_json_generate.rb +122 -0
  167. data/lib/vendor/json_pure/tests/test_json_rails.rb +144 -0
  168. data/lib/vendor/json_pure/tests/test_json_unicode.rb +76 -0
  169. data/lib/vendor/json_pure/tools/fuzz.rb +139 -0
  170. data/lib/vendor/json_pure/tools/server.rb +61 -0
  171. data/lib/vendor/open4/lib/open4.rb +403 -0
  172. data/lib/vendor/thor/CHANGELOG.rdoc +89 -0
  173. data/lib/vendor/thor/LICENSE +20 -0
  174. data/lib/vendor/thor/README.rdoc +297 -0
  175. data/lib/vendor/thor/Thorfile +69 -0
  176. data/lib/vendor/thor/bin/rake2thor +86 -0
  177. data/lib/vendor/thor/bin/thor +6 -0
  178. data/lib/vendor/thor/lib/thor.rb +244 -0
  179. data/lib/vendor/thor/lib/thor/actions.rb +275 -0
  180. data/lib/vendor/thor/lib/thor/actions/create_file.rb +103 -0
  181. data/lib/vendor/thor/lib/thor/actions/directory.rb +91 -0
  182. data/lib/vendor/thor/lib/thor/actions/empty_directory.rb +134 -0
  183. data/lib/vendor/thor/lib/thor/actions/file_manipulation.rb +223 -0
  184. data/lib/vendor/thor/lib/thor/actions/inject_into_file.rb +104 -0
  185. data/lib/vendor/thor/lib/thor/base.rb +540 -0
  186. data/lib/vendor/thor/lib/thor/core_ext/file_binary_read.rb +9 -0
  187. data/lib/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +75 -0
  188. data/lib/vendor/thor/lib/thor/core_ext/ordered_hash.rb +100 -0
  189. data/lib/vendor/thor/lib/thor/error.rb +30 -0
  190. data/lib/vendor/thor/lib/thor/group.rb +271 -0
  191. data/lib/vendor/thor/lib/thor/invocation.rb +180 -0
  192. data/lib/vendor/thor/lib/thor/parser.rb +4 -0
  193. data/lib/vendor/thor/lib/thor/parser/argument.rb +67 -0
  194. data/lib/vendor/thor/lib/thor/parser/arguments.rb +150 -0
  195. data/lib/vendor/thor/lib/thor/parser/option.rb +128 -0
  196. data/lib/vendor/thor/lib/thor/parser/options.rb +169 -0
  197. data/lib/vendor/thor/lib/thor/rake_compat.rb +66 -0
  198. data/lib/vendor/thor/lib/thor/runner.rb +314 -0
  199. data/lib/vendor/thor/lib/thor/shell.rb +83 -0
  200. data/lib/vendor/thor/lib/thor/shell/basic.rb +239 -0
  201. data/lib/vendor/thor/lib/thor/shell/color.rb +108 -0
  202. data/lib/vendor/thor/lib/thor/task.rb +102 -0
  203. data/lib/vendor/thor/lib/thor/util.rb +230 -0
  204. data/lib/vendor/thor/lib/thor/version.rb +3 -0
  205. data/lib/vendor/thor/thor.gemspec +120 -0
  206. data/spec/custom_deploy_spec.rb +95 -0
  207. data/spec/deploy_hook_spec.rb +211 -0
  208. data/spec/fixtures/gitrepo.tar.gz +0 -0
  209. data/spec/fixtures/gitrepo/foo +0 -0
  210. data/spec/fixtures/invalid_hook.rb +1 -0
  211. data/spec/fixtures/valid_hook.rb +1 -0
  212. data/spec/git_strategy_spec.rb +22 -0
  213. data/spec/lockfile_parser_spec.rb +30 -0
  214. data/spec/spec_helper.rb +37 -0
  215. data/spec/support/lockfiles/0.9-no-bundler +111 -0
  216. data/spec/support/lockfiles/0.9-with-bundler +117 -0
  217. data/spec/support/lockfiles/1.0-no-bundler +54 -0
  218. data/spec/support/lockfiles/1.0.0.rc.1-with-bundler +162 -0
  219. data/spec/support/lockfiles/not-a-lockfile +10 -0
  220. metadata +279 -0
@@ -0,0 +1,247 @@
1
+ # escape.rb - escape/unescape library for several formats
2
+ #
3
+ # Copyright (C) 2006,2007 Tanaka Akira <akr@fsij.org>
4
+ #
5
+ # Redistribution and use in source and binary forms, with or without
6
+ # modification, are permitted provided that the following conditions are met:
7
+ #
8
+ # 1. Redistributions of source code must retain the above copyright notice, this
9
+ # list of conditions and the following disclaimer.
10
+ # 2. Redistributions in binary form must reproduce the above copyright notice,
11
+ # this list of conditions and the following disclaimer in the documentation
12
+ # and/or other materials provided with the distribution.
13
+ # 3. The name of the author may not be used to endorse or promote products
14
+ # derived from this software without specific prior written permission.
15
+ #
16
+ # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
17
+ # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18
+ # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
19
+ # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
20
+ # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
21
+ # OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22
+ # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23
+ # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
24
+ # IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
25
+ # OF SUCH DAMAGE.
26
+
27
+ # Escape module provides several escape functions.
28
+ # * URI
29
+ # * HTML
30
+ # * shell command
31
+ module Escape
32
+ module_function
33
+
34
+ # Escape.shell_command composes
35
+ # a sequence of words to
36
+ # a single shell command line.
37
+ # All shell meta characters are quoted and
38
+ # the words are concatenated with interleaving space.
39
+ #
40
+ # Escape.shell_command(["ls", "/"]) #=> "ls /"
41
+ # Escape.shell_command(["echo", "*"]) #=> "echo '*'"
42
+ #
43
+ # Note that system(*command) and
44
+ # system(Escape.shell_command(command)) is roughly same.
45
+ # There are two exception as follows.
46
+ # * The first is that the later may invokes /bin/sh.
47
+ # * The second is an interpretation of an array with only one element:
48
+ # the element is parsed by the shell with the former but
49
+ # it is recognized as single word with the later.
50
+ # For example, system(*["echo foo"]) invokes echo command with an argument "foo".
51
+ # But system(Escape.shell_command(["echo foo"])) invokes "echo foo" command without arguments (and it probably fails).
52
+ def shell_command(command)
53
+ command.map {|word| shell_single_word(word) }.join(' ')
54
+ end
55
+
56
+ # Escape.shell_single_word quotes shell meta characters.
57
+ #
58
+ # The result string is always single shell word, even if
59
+ # the argument is "".
60
+ # Escape.shell_single_word("") returns "''".
61
+ #
62
+ # Escape.shell_single_word("") #=> "''"
63
+ # Escape.shell_single_word("foo") #=> "foo"
64
+ # Escape.shell_single_word("*") #=> "'*'"
65
+ def shell_single_word(str)
66
+ if str.empty?
67
+ "''"
68
+ elsif %r{\A[0-9A-Za-z+,./:=@_-]+\z} =~ str
69
+ str
70
+ else
71
+ result = ''
72
+ str.scan(/('+)|[^']+/) {
73
+ if $1
74
+ result << %q{\'} * $1.length
75
+ else
76
+ result << "'#{$&}'"
77
+ end
78
+ }
79
+ result
80
+ end
81
+ end
82
+
83
+ # Escape.uri_segment escapes URI segment using percent-encoding.
84
+ #
85
+ # Escape.uri_segment("a/b") #=> "a%2Fb"
86
+ #
87
+ # The segment is "/"-splitted element after authority before query in URI, as follows.
88
+ #
89
+ # scheme://authority/segment1/segment2/.../segmentN?query#fragment
90
+ #
91
+ # See RFC 3986 for details of URI.
92
+ def uri_segment(str)
93
+ # pchar - pct-encoded = unreserved / sub-delims / ":" / "@"
94
+ # unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
95
+ # sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "="
96
+ str.gsub(%r{[^A-Za-z0-9\-._~!$&'()*+,;=:@]}n) {
97
+ '%' + $&.unpack("H2")[0].upcase
98
+ }
99
+ end
100
+
101
+ # Escape.uri_path escapes URI path using percent-encoding.
102
+ # The given path should be a sequence of (non-escaped) segments separated by "/".
103
+ # The segments cannot contains "/".
104
+ #
105
+ # Escape.uri_path("a/b/c") #=> "a/b/c"
106
+ # Escape.uri_path("a?b/c?d/e?f") #=> "a%3Fb/c%3Fd/e%3Ff"
107
+ #
108
+ # The path is the part after authority before query in URI, as follows.
109
+ #
110
+ # scheme://authority/path#fragment
111
+ #
112
+ # See RFC 3986 for details of URI.
113
+ #
114
+ # Note that this function is not appropriate to convert OS path to URI.
115
+ def uri_path(str)
116
+ str.gsub(%r{[^/]+}n) { uri_segment($&) }
117
+ end
118
+
119
+ # :stopdoc:
120
+ def html_form_fast(pairs, sep=';')
121
+ pairs.map {|k, v|
122
+ # query-chars - pct-encoded - x-www-form-urlencoded-delimiters =
123
+ # unreserved / "!" / "$" / "'" / "(" / ")" / "*" / "," / ":" / "@" / "/" / "?"
124
+ # query-char - pct-encoded = unreserved / sub-delims / ":" / "@" / "/" / "?"
125
+ # query-char = pchar / "/" / "?" = unreserved / pct-encoded / sub-delims / ":" / "@" / "/" / "?"
126
+ # unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
127
+ # sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "="
128
+ # x-www-form-urlencoded-delimiters = "&" / "+" / ";" / "="
129
+ k = k.gsub(%r{[^0-9A-Za-z\-\._~:/?@!\$'()*,]}n) {
130
+ '%' + $&.unpack("H2")[0].upcase
131
+ }
132
+ v = v.gsub(%r{[^0-9A-Za-z\-\._~:/?@!\$'()*,]}n) {
133
+ '%' + $&.unpack("H2")[0].upcase
134
+ }
135
+ "#{k}=#{v}"
136
+ }.join(sep)
137
+ end
138
+ # :startdoc:
139
+
140
+ # Escape.html_form composes HTML form key-value pairs as a x-www-form-urlencoded encoded string.
141
+ #
142
+ # Escape.html_form takes an array of pair of strings or
143
+ # an hash from string to string.
144
+ #
145
+ # Escape.html_form([["a","b"], ["c","d"]]) #=> "a=b&c=d"
146
+ # Escape.html_form({"a"=>"b", "c"=>"d"}) #=> "a=b&c=d"
147
+ #
148
+ # In the array form, it is possible to use same key more than once.
149
+ # (It is required for a HTML form which contains
150
+ # checkboxes and select element with multiple attribute.)
151
+ #
152
+ # Escape.html_form([["k","1"], ["k","2"]]) #=> "k=1&k=2"
153
+ #
154
+ # If the strings contains characters which must be escaped in x-www-form-urlencoded,
155
+ # they are escaped using %-encoding.
156
+ #
157
+ # Escape.html_form([["k=","&;="]]) #=> "k%3D=%26%3B%3D"
158
+ #
159
+ # The separator can be specified by the optional second argument.
160
+ #
161
+ # Escape.html_form([["a","b"], ["c","d"]], ";") #=> "a=b;c=d"
162
+ #
163
+ # See HTML 4.01 for details.
164
+ def html_form(pairs, sep='&')
165
+ r = ''
166
+ first = true
167
+ pairs.each {|k, v|
168
+ # query-chars - pct-encoded - x-www-form-urlencoded-delimiters =
169
+ # unreserved / "!" / "$" / "'" / "(" / ")" / "*" / "," / ":" / "@" / "/" / "?"
170
+ # query-char - pct-encoded = unreserved / sub-delims / ":" / "@" / "/" / "?"
171
+ # query-char = pchar / "/" / "?" = unreserved / pct-encoded / sub-delims / ":" / "@" / "/" / "?"
172
+ # unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
173
+ # sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "="
174
+ # x-www-form-urlencoded-delimiters = "&" / "+" / ";" / "="
175
+ r << sep if !first
176
+ first = false
177
+ k.each_byte {|byte|
178
+ ch = byte.chr
179
+ if %r{[^0-9A-Za-z\-\._~:/?@!\$'()*,]}n =~ ch
180
+ r << "%" << ch.unpack("H2")[0].upcase
181
+ else
182
+ r << ch
183
+ end
184
+ }
185
+ r << '='
186
+ v.each_byte {|byte|
187
+ ch = byte.chr
188
+ if %r{[^0-9A-Za-z\-\._~:/?@!\$'()*,]}n =~ ch
189
+ r << "%" << ch.unpack("H2")[0].upcase
190
+ else
191
+ r << ch
192
+ end
193
+ }
194
+ }
195
+ r
196
+ end
197
+
198
+ # :stopdoc:
199
+ HTML_TEXT_ESCAPE_HASH = {
200
+ '&' => '&amp;',
201
+ '<' => '&lt;',
202
+ '>' => '&gt;',
203
+ }
204
+ # :startdoc:
205
+
206
+ # Escape.html_text escapes a string appropriate for HTML text using character references.
207
+ #
208
+ # It escapes 3 characters:
209
+ # * '&' to '&amp;'
210
+ # * '<' to '&lt;'
211
+ # * '>' to '&gt;'
212
+ #
213
+ # Escape.html_text("abc") #=> "abc"
214
+ # Escape.html_text("a & b < c > d") #=> "a &amp; b &lt; c &gt; d"
215
+ #
216
+ # This function is not appropriate for escaping HTML element attribute
217
+ # because quotes are not escaped.
218
+ def html_text(str)
219
+ str.gsub(/[&<>]/) {|ch| HTML_TEXT_ESCAPE_HASH[ch] }
220
+ end
221
+
222
+ # :stopdoc:
223
+ HTML_ATTR_ESCAPE_HASH = {
224
+ '&' => '&amp;',
225
+ '<' => '&lt;',
226
+ '>' => '&gt;',
227
+ '"' => '&quot;',
228
+ }
229
+ # :startdoc:
230
+
231
+ # Escape.html_attr encodes a string as a double-quoted HTML attribute using character references.
232
+ #
233
+ # Escape.html_attr("abc") #=> "\"abc\""
234
+ # Escape.html_attr("a&b") #=> "\"a&amp;b\""
235
+ # Escape.html_attr("ab&<>\"c") #=> "\"ab&amp;&lt;&gt;&quot;c\""
236
+ # Escape.html_attr("a'c") #=> "\"a'c\""
237
+ #
238
+ # It escapes 4 characters:
239
+ # * '&' to '&amp;'
240
+ # * '<' to '&lt;'
241
+ # * '>' to '&gt;'
242
+ # * '"' to '&quot;'
243
+ #
244
+ def html_attr(str)
245
+ '"' + str.gsub(/[&<>"]/) {|ch| HTML_ATTR_ESCAPE_HASH[ch] } + '"'
246
+ end
247
+ end
@@ -0,0 +1,166 @@
1
+ 2010-05-05 (1.4.3)
2
+ * Fixed some test assertions, from Ruby r27587 and r27590, patch by nobu.
3
+ * Fixed issue http://github.com/flori/json/issues/#issue/20 reported by
4
+ electronicwhisper@github. Thx!
5
+ 2010-04-26 (1.4.2)
6
+ * Applied patch from naruse Yui NARUSE <naruse@airemix.com> to make building with
7
+ Microsoft Visual C possible again.
8
+ * Applied patch from devrandom <c1.github@niftybox.net> in order to allow building of
9
+ json_pure if extensiontask is not present.
10
+ * Thanks to Dustin Schneider <dustin@stocktwits.com>, who reported a memory
11
+ leak, which is fixed in this release.
12
+ * Applied 993f261ccb8f911d2ae57e9db48ec7acd0187283 patch from josh@github.
13
+ 2010-04-25 (1.4.1)
14
+ * Fix for a bug reported by Dan DeLeo <dan@kallistec.com>, caused by T_FIXNUM
15
+ being different on 32bit/64bit architectures.
16
+ 2010-04-23 (1.4.0)
17
+ * Major speed improvements and building with simplified
18
+ directory/file-structure.
19
+ * Extension should at least be comapatible with MRI, YARV and Rubinius.
20
+ 2010-04-07 (1.2.4)
21
+ * Triger const_missing callback to make Rails' dynamic class loading work.
22
+ 2010-03-11 (1.2.3)
23
+ * Added a State#[] method which returns an attribute's value in order to
24
+ increase duck type compatibility to Hash.
25
+ 2010-02-27 (1.2.2)
26
+ * Made some changes to make the building of the parser/generator compatible
27
+ to Rubinius.
28
+ 2009-11-25 (1.2.1)
29
+ * Added :symbolize_names option to Parser, which returns symbols instead of
30
+ strings in object names/keys.
31
+ 2009-10-01 (1.2.0)
32
+ * fast_generate now raises an exeception for nan and infinite floats.
33
+ * On Ruby 1.8 json supports parsing of UTF-8, UTF-16BE, UTF-16LE, UTF-32BE,
34
+ and UTF-32LE JSON documents now. Under Ruby 1.9 the M17n conversion
35
+ functions are used to convert from all supported encodings. ASCII-8BIT
36
+ encoded strings are handled like all strings under Ruby 1.8 were.
37
+ * Better documentation
38
+ 2009-08-23 (1.1.9)
39
+ * Added forgotten main doc file extra_rdoc_files.
40
+ 2009-08-23 (1.1.8)
41
+ * Applied a patch by OZAWA Sakuro <sakuro@2238club.org> to make json/pure
42
+ work in environments that don't provide iconv.
43
+ * Applied patch by okkez_ in order to fix Ruby Bug #1768:
44
+ http://redmine.ruby-lang.org/issues/show/1768.
45
+ * Finally got around to avoid the rather paranoid escaping of ?/ characters
46
+ in the generator's output. The parsers aren't affected by this change.
47
+ Thanks to Rich Apodaca <rapodaca@metamolecular.com> for the suggestion.
48
+ 2009-06-29 (1.1.7)
49
+ * Security Fix for JSON::Pure::Parser. A specially designed string could
50
+ cause catastrophic backtracking in one of the parser's regular expressions
51
+ in earlier 1.1.x versions. JSON::Ext::Parser isn't affected by this issue.
52
+ Thanks to Bartosz Blimke <bartosz@new-bamboo.co.uk> for reporting this
53
+ problem.
54
+ * This release also uses a less strict ruby version requirement for the
55
+ creation of the mswin32 native gem.
56
+ 2009-05-10 (1.1.6)
57
+ * No changes. І tested native linux gems in the last release and they don't
58
+ play well with different ruby versions other than the one the gem was built
59
+ with. This release is just to bump the version number in order to skip the
60
+ native gem on rubyforge.
61
+ 2009-05-10 (1.1.5)
62
+ * Started to build gems with rake-compiler gem.
63
+ * Applied patch object/array class patch from Brian Candler
64
+ <B.Candler@pobox.com> and fixes.
65
+ 2009-04-01 (1.1.4)
66
+ * Fixed a bug in the creation of serialized generic rails objects reported by
67
+ Friedrich Graeter <graeter@hydrixos.org>.
68
+ * Deleted tests/runner.rb, we're using testrb instead.
69
+ * Editor supports Infinity in numbers now.
70
+ * Made some changes in order to get the library to compile/run under Ruby
71
+ 1.9.
72
+ * Improved speed of the code path for the fast_generate method in the pure
73
+ variant.
74
+ 2008-07-10 (1.1.3)
75
+ * Wesley Beary <monki@geemus.com> reported a bug in json/add/core's DateTime
76
+ handling: If the nominator and denominator of the offset were divisible by
77
+ each other Ruby's Rational#to_s returns them as an integer not a fraction
78
+ with '/'. This caused a ZeroDivisionError during parsing.
79
+ * Use Date#start and DateTime#start instead of sg method, while
80
+ remaining backwards compatible.
81
+ * Supports ragel >= 6.0 now.
82
+ * Corrected some tests.
83
+ * Some minor changes.
84
+ 2007-11-27 (1.1.2)
85
+ * Remember default dir (last used directory) in editor.
86
+ * JSON::Editor.edit method added, the editor can now receive json texts from
87
+ the clipboard via C-v.
88
+ * Load json texts from an URL pasted via middle button press.
89
+ * Added :create_additions option to Parser. This makes it possible to disable
90
+ the creation of additions by force, in order to treat json texts as data
91
+ while having additions loaded.
92
+ * Jacob Maine <jmaine@blurb.com> reported, that JSON(:foo) outputs a JSON
93
+ object if the rails addition is enabled, which is wrong. It now outputs a
94
+ JSON string "foo" instead, like suggested by Jacob Maine.
95
+ * Discovered a bug in the Ruby Bugs Tracker on rubyforge, that was reported
96
+ by John Evans lgastako@gmail.com. He could produce a crash in the JSON
97
+ generator by returning something other than a String instance from a
98
+ to_json method. I now guard against this by doing a rather crude type
99
+ check, which raises an exception instead of crashing.
100
+ 2007-07-06 (1.1.1)
101
+ * Yui NARUSE <naruse@airemix.com> sent some patches to fix tests for Ruby
102
+ 1.9. I applied them and adapted some of them a bit to run both on 1.8 and
103
+ 1.9.
104
+ * Introduced a JSON.parse! method without depth checking for people who like
105
+ danger.
106
+ * Made generate and pretty_generate methods configurable by an options hash.
107
+ * Added :allow_nan option to parser and generator in order to handle NaN,
108
+ Infinity, and -Infinity correctly - if requested. Floats, which aren't numbers,
109
+ aren't valid JSON according to RFC4627, so by default an exception will be
110
+ raised if any of these symbols are encountered. Thanks to Andrea Censi
111
+ <andrea.censi@dis.uniroma1.it> for his hint about this.
112
+ * Fixed some more tests for Ruby 1.9.
113
+ * Implemented dump/load interface of Marshal as suggested in ruby-core:11405
114
+ by murphy <murphy@rubychan.de>.
115
+ * Implemented the max_nesting feature for generate methods, too.
116
+ * Added some implementations for ruby core's custom objects for
117
+ serialisation/deserialisation purposes.
118
+ 2007-05-21 (1.1.0)
119
+ * Implemented max_nesting feature for parser to avoid stack overflows for
120
+ data from untrusted sources. If you trust the source, you can disable it
121
+ with the option max_nesting => false.
122
+ * Piers Cawley <pdcawley@bofh.org.uk> reported a bug, that not every
123
+ character can be escaped by ?\ as required by RFC4627. There's a
124
+ contradiction between David Crockford's JSON checker test vectors (in
125
+ tests/fixtures) and RFC4627, though. I decided to stick to the RFC, because
126
+ the JSON checker seems to be a bit older than the RFC.
127
+ * Extended license to Ruby License, which includes the GPL.
128
+ * Added keyboard shortcuts, and 'Open location' menu item to edit_json.rb.
129
+ 2007-05-09 (1.0.4)
130
+ * Applied a patch from Yui NARUSE <naruse@airemix.com> to make JSON compile
131
+ under Ruby 1.9. Thank you very much for mailing it to me!
132
+ * Made binary variants of JSON fail early, instead of falling back to the
133
+ pure version. This should avoid overshadowing of eventual problems while
134
+ loading of the binary.
135
+ 2007-03-24 (1.0.3)
136
+ * Improved performance of pure variant a bit.
137
+ * The ext variant of this release supports the mswin32 platform. Ugh!
138
+ 2007-03-24 (1.0.2)
139
+ * Ext Parser didn't parse 0e0 correctly into 0.0: Fixed!
140
+ 2007-03-24 (1.0.1)
141
+ * Forgot some object files in the build dir. I really like that - not!
142
+ 2007-03-24 (1.0.0)
143
+ * Added C implementations for the JSON generator and a ragel based JSON
144
+ parser in C.
145
+ * Much more tests, especially fixtures from json.org.
146
+ * Further improved conformance to RFC4627.
147
+ 2007-02-09 (0.4.3)
148
+ * Conform more to RFC4627 for JSON: This means JSON strings
149
+ now always must contain exactly one object "{ ... }" or array "[ ... ]" in
150
+ order to be parsed without raising an exception. The definition of what
151
+ constitutes a whitespace is narrower in JSON than in Ruby ([ \t\r\n]), and
152
+ there are differences in floats and integers (no octals or hexadecimals) as
153
+ well.
154
+ * Added aliases generate and pretty_generate of unparse and pretty_unparse.
155
+ * Fixed a test case.
156
+ * Catch an Iconv::InvalidEncoding exception, that seems to occur on some Sun
157
+ boxes with SunOS 5.8, if iconv doesn't support utf16 conversions. This was
158
+ reported by Andrew R Jackson <andrewj@bcm.tmc.edu>, thanks a bunch!
159
+ 2006-08-25 (0.4.2)
160
+ * Fixed a bug in handling solidi (/-characters), that was reported by
161
+ Kevin Gilpin <kevin.gilpin@alum.mit.edu>.
162
+ 2006-02-06 (0.4.1)
163
+ * Fixed a bug related to escaping with backslashes. Thanks for the report go
164
+ to Florian Munz <surf@theflow.de>.
165
+ 2005-09-23 (0.4.0)
166
+ * Initial Rubyforge Version
@@ -0,0 +1,58 @@
1
+ Ruby is copyrighted free software by Yukihiro Matsumoto <matz@netlab.co.jp>.
2
+ You can redistribute it and/or modify it under either the terms of the GPL
3
+ (see GPL file), or the conditions below:
4
+
5
+ 1. You may make and give away verbatim copies of the source form of the
6
+ software without restriction, provided that you duplicate all of the
7
+ original copyright notices and associated disclaimers.
8
+
9
+ 2. You may modify your copy of the software in any way, provided that
10
+ you do at least ONE of the following:
11
+
12
+ a) place your modifications in the Public Domain or otherwise
13
+ make them Freely Available, such as by posting said
14
+ modifications to Usenet or an equivalent medium, or by allowing
15
+ the author to include your modifications in the software.
16
+
17
+ b) use the modified software only within your corporation or
18
+ organization.
19
+
20
+ c) rename any non-standard executables so the names do not conflict
21
+ with standard executables, which must also be provided.
22
+
23
+ d) make other distribution arrangements with the author.
24
+
25
+ 3. You may distribute the software in object code or executable
26
+ form, provided that you do at least ONE of the following:
27
+
28
+ a) distribute the executables and library files of the software,
29
+ together with instructions (in the manual page or equivalent)
30
+ on where to get the original distribution.
31
+
32
+ b) accompany the distribution with the machine-readable source of
33
+ the software.
34
+
35
+ c) give non-standard executables non-standard names, with
36
+ instructions on where to get the original software distribution.
37
+
38
+ d) make other distribution arrangements with the author.
39
+
40
+ 4. You may modify and include the part of the software into any other
41
+ software (possibly commercial). But some files in the distribution
42
+ are not written by the author, so that they are not under this terms.
43
+
44
+ They are gc.c(partly), utils.c(partly), regex.[ch], st.[ch] and some
45
+ files under the ./missing directory. See each file for the copying
46
+ condition.
47
+
48
+ 5. The scripts and library files supplied as input to or produced as
49
+ output from the software do not automatically fall under the
50
+ copyright of the software, but belong to whomever generated them,
51
+ and may be sold commercially, and may be aggregated with this
52
+ software.
53
+
54
+ 6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
55
+ IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
56
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
57
+ PURPOSE.
58
+