nutshell-crm 0.0.5 → 0.0.6.alpha

Sign up to get free protection for your applications and to get access to all the features.
Files changed (260) hide show
  1. data/.rbenv-version +1 -0
  2. data/.travis.yml +8 -0
  3. data/CHANGELOG.md +5 -0
  4. data/README.md +37 -0
  5. data/Rakefile +14 -3
  6. data/lib/nutshell-crm.rb +92 -5
  7. data/lib/nutshell-crm/version.rb +1 -1
  8. data/nutshell-crm.gemspec +1 -0
  9. data/spec/nutshell-crm_spec.rb +17 -8
  10. data/vendor/bundle/bin/rake +19 -0
  11. data/vendor/bundle/gems/json-1.6.4/.gitignore +8 -0
  12. data/vendor/bundle/gems/json-1.6.4/.travis.yml +15 -0
  13. data/vendor/bundle/gems/json-1.6.4/CHANGES +227 -0
  14. data/vendor/bundle/gems/json-1.6.4/COPYING +58 -0
  15. data/vendor/bundle/gems/json-1.6.4/COPYING-json-jruby +57 -0
  16. data/vendor/bundle/gems/json-1.6.4/GPL +340 -0
  17. data/vendor/bundle/gems/json-1.6.4/Gemfile +11 -0
  18. data/vendor/bundle/gems/json-1.6.4/README-json-jruby.markdown +33 -0
  19. data/vendor/bundle/gems/json-1.6.4/README.rdoc +358 -0
  20. data/vendor/bundle/gems/json-1.6.4/Rakefile +408 -0
  21. data/vendor/bundle/gems/json-1.6.4/TODO +1 -0
  22. data/vendor/bundle/gems/json-1.6.4/VERSION +1 -0
  23. data/{README → vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/.keep} +0 -0
  24. data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkComparison.log +52 -0
  25. data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast-autocorrelation.dat +1000 -0
  26. data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast.dat +1001 -0
  27. data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty-autocorrelation.dat +900 -0
  28. data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty.dat +901 -0
  29. data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe-autocorrelation.dat +1000 -0
  30. data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe.dat +1001 -0
  31. data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt.log +261 -0
  32. data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast-autocorrelation.dat +1000 -0
  33. data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast.dat +1001 -0
  34. data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty-autocorrelation.dat +1000 -0
  35. data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty.dat +1001 -0
  36. data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe-autocorrelation.dat +1000 -0
  37. data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe.dat +1001 -0
  38. data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure.log +262 -0
  39. data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator-autocorrelation.dat +1000 -0
  40. data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator.dat +1001 -0
  41. data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails.log +82 -0
  42. data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkComparison.log +34 -0
  43. data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser-autocorrelation.dat +900 -0
  44. data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser.dat +901 -0
  45. data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt.log +81 -0
  46. data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser-autocorrelation.dat +1000 -0
  47. data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser.dat +1001 -0
  48. data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure.log +82 -0
  49. data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser-autocorrelation.dat +1000 -0
  50. data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser.dat +1001 -0
  51. data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails.log +82 -0
  52. data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser-autocorrelation.dat +1000 -0
  53. data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser.dat +1001 -0
  54. data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML.log +82 -0
  55. data/vendor/bundle/gems/json-1.6.4/benchmarks/data/.keep +0 -0
  56. data/vendor/bundle/gems/json-1.6.4/benchmarks/generator2_benchmark.rb +222 -0
  57. data/vendor/bundle/gems/json-1.6.4/benchmarks/generator_benchmark.rb +224 -0
  58. data/vendor/bundle/gems/json-1.6.4/benchmarks/ohai.json +1216 -0
  59. data/vendor/bundle/gems/json-1.6.4/benchmarks/ohai.ruby +1 -0
  60. data/vendor/bundle/gems/json-1.6.4/benchmarks/parser2_benchmark.rb +251 -0
  61. data/vendor/bundle/gems/json-1.6.4/benchmarks/parser_benchmark.rb +259 -0
  62. data/vendor/bundle/gems/json-1.6.4/data/example.json +1 -0
  63. data/vendor/bundle/gems/json-1.6.4/data/index.html +38 -0
  64. data/vendor/bundle/gems/json-1.6.4/data/prototype.js +4184 -0
  65. data/vendor/bundle/gems/json-1.6.4/diagrams/.keep +0 -0
  66. data/vendor/bundle/gems/json-1.6.4/ext/json/ext/fbuffer/fbuffer.h +156 -0
  67. data/vendor/bundle/gems/json-1.6.4/ext/json/ext/generator/Makefile +187 -0
  68. data/vendor/bundle/gems/json-1.6.4/ext/json/ext/generator/extconf.rb +13 -0
  69. data/vendor/bundle/gems/json-1.6.4/ext/json/ext/generator/generator.bundle +0 -0
  70. data/vendor/bundle/gems/json-1.6.4/ext/json/ext/generator/generator.c +1384 -0
  71. data/vendor/bundle/gems/json-1.6.4/ext/json/ext/generator/generator.h +161 -0
  72. data/vendor/bundle/gems/json-1.6.4/ext/json/ext/generator/generator.o +0 -0
  73. data/vendor/bundle/gems/json-1.6.4/ext/json/ext/json/ext/generator.bundle +0 -0
  74. data/vendor/bundle/gems/json-1.6.4/ext/json/ext/json/ext/parser.bundle +0 -0
  75. data/vendor/bundle/gems/json-1.6.4/ext/json/ext/parser/Makefile +187 -0
  76. data/vendor/bundle/gems/json-1.6.4/ext/json/ext/parser/extconf.rb +13 -0
  77. data/vendor/bundle/gems/json-1.6.4/ext/json/ext/parser/parser.bundle +0 -0
  78. data/vendor/bundle/gems/json-1.6.4/ext/json/ext/parser/parser.c +2203 -0
  79. data/vendor/bundle/gems/json-1.6.4/ext/json/ext/parser/parser.h +77 -0
  80. data/vendor/bundle/gems/json-1.6.4/ext/json/ext/parser/parser.o +0 -0
  81. data/vendor/bundle/gems/json-1.6.4/ext/json/ext/parser/parser.rl +926 -0
  82. data/vendor/bundle/gems/json-1.6.4/install.rb +19 -0
  83. data/vendor/bundle/gems/json-1.6.4/java/src/json/ext/ByteListTranscoder.java +167 -0
  84. data/vendor/bundle/gems/json-1.6.4/java/src/json/ext/Generator.java +437 -0
  85. data/vendor/bundle/gems/json-1.6.4/java/src/json/ext/GeneratorMethods.java +232 -0
  86. data/vendor/bundle/gems/json-1.6.4/java/src/json/ext/GeneratorService.java +43 -0
  87. data/vendor/bundle/gems/json-1.6.4/java/src/json/ext/GeneratorState.java +522 -0
  88. data/vendor/bundle/gems/json-1.6.4/java/src/json/ext/OptionsReader.java +113 -0
  89. data/vendor/bundle/gems/json-1.6.4/java/src/json/ext/Parser.java +2640 -0
  90. data/vendor/bundle/gems/json-1.6.4/java/src/json/ext/Parser.rl +964 -0
  91. data/vendor/bundle/gems/json-1.6.4/java/src/json/ext/ParserService.java +35 -0
  92. data/vendor/bundle/gems/json-1.6.4/java/src/json/ext/RuntimeInfo.java +121 -0
  93. data/vendor/bundle/gems/json-1.6.4/java/src/json/ext/StringDecoder.java +166 -0
  94. data/vendor/bundle/gems/json-1.6.4/java/src/json/ext/StringEncoder.java +106 -0
  95. data/vendor/bundle/gems/json-1.6.4/java/src/json/ext/Utils.java +89 -0
  96. data/vendor/bundle/gems/json-1.6.4/json-java.gemspec +22 -0
  97. data/vendor/bundle/gems/json-1.6.4/json.gemspec +40 -0
  98. data/vendor/bundle/gems/json-1.6.4/json_pure.gemspec +42 -0
  99. data/vendor/bundle/gems/json-1.6.4/lib/json.rb +62 -0
  100. data/vendor/bundle/gems/json-1.6.4/lib/json/add/bigdecimal.rb +21 -0
  101. data/vendor/bundle/gems/json-1.6.4/lib/json/add/complex.rb +22 -0
  102. data/vendor/bundle/gems/json-1.6.4/lib/json/add/core.rb +11 -0
  103. data/vendor/bundle/gems/json-1.6.4/lib/json/add/date.rb +34 -0
  104. data/vendor/bundle/gems/json-1.6.4/lib/json/add/date_time.rb +50 -0
  105. data/vendor/bundle/gems/json-1.6.4/lib/json/add/exception.rb +31 -0
  106. data/vendor/bundle/gems/json-1.6.4/lib/json/add/ostruct.rb +31 -0
  107. data/vendor/bundle/gems/json-1.6.4/lib/json/add/range.rb +29 -0
  108. data/vendor/bundle/gems/json-1.6.4/lib/json/add/rational.rb +22 -0
  109. data/vendor/bundle/gems/json-1.6.4/lib/json/add/regexp.rb +30 -0
  110. data/vendor/bundle/gems/json-1.6.4/lib/json/add/struct.rb +30 -0
  111. data/vendor/bundle/gems/json-1.6.4/lib/json/add/symbol.rb +25 -0
  112. data/vendor/bundle/gems/json-1.6.4/lib/json/add/time.rb +35 -0
  113. data/vendor/bundle/gems/json-1.6.4/lib/json/common.rb +470 -0
  114. data/vendor/bundle/gems/json-1.6.4/lib/json/ext.rb +21 -0
  115. data/vendor/bundle/gems/json-1.6.4/lib/json/ext/.keep +0 -0
  116. data/vendor/bundle/gems/json-1.6.4/lib/json/pure.rb +21 -0
  117. data/vendor/bundle/gems/json-1.6.4/lib/json/pure/generator.rb +468 -0
  118. data/vendor/bundle/gems/json-1.6.4/lib/json/pure/parser.rb +359 -0
  119. data/vendor/bundle/gems/json-1.6.4/lib/json/version.rb +8 -0
  120. data/vendor/bundle/gems/json-1.6.4/tests/fixtures/fail1.json +1 -0
  121. data/vendor/bundle/gems/json-1.6.4/tests/fixtures/fail10.json +1 -0
  122. data/vendor/bundle/gems/json-1.6.4/tests/fixtures/fail11.json +1 -0
  123. data/vendor/bundle/gems/json-1.6.4/tests/fixtures/fail12.json +1 -0
  124. data/vendor/bundle/gems/json-1.6.4/tests/fixtures/fail13.json +1 -0
  125. data/vendor/bundle/gems/json-1.6.4/tests/fixtures/fail14.json +1 -0
  126. data/vendor/bundle/gems/json-1.6.4/tests/fixtures/fail18.json +1 -0
  127. data/vendor/bundle/gems/json-1.6.4/tests/fixtures/fail19.json +1 -0
  128. data/vendor/bundle/gems/json-1.6.4/tests/fixtures/fail2.json +1 -0
  129. data/vendor/bundle/gems/json-1.6.4/tests/fixtures/fail20.json +1 -0
  130. data/vendor/bundle/gems/json-1.6.4/tests/fixtures/fail21.json +1 -0
  131. data/vendor/bundle/gems/json-1.6.4/tests/fixtures/fail22.json +1 -0
  132. data/vendor/bundle/gems/json-1.6.4/tests/fixtures/fail23.json +1 -0
  133. data/vendor/bundle/gems/json-1.6.4/tests/fixtures/fail24.json +1 -0
  134. data/vendor/bundle/gems/json-1.6.4/tests/fixtures/fail25.json +1 -0
  135. data/vendor/bundle/gems/json-1.6.4/tests/fixtures/fail27.json +2 -0
  136. data/vendor/bundle/gems/json-1.6.4/tests/fixtures/fail28.json +2 -0
  137. data/vendor/bundle/gems/json-1.6.4/tests/fixtures/fail3.json +1 -0
  138. data/vendor/bundle/gems/json-1.6.4/tests/fixtures/fail4.json +1 -0
  139. data/vendor/bundle/gems/json-1.6.4/tests/fixtures/fail5.json +1 -0
  140. data/vendor/bundle/gems/json-1.6.4/tests/fixtures/fail6.json +1 -0
  141. data/vendor/bundle/gems/json-1.6.4/tests/fixtures/fail7.json +1 -0
  142. data/vendor/bundle/gems/json-1.6.4/tests/fixtures/fail8.json +1 -0
  143. data/vendor/bundle/gems/json-1.6.4/tests/fixtures/fail9.json +1 -0
  144. data/vendor/bundle/gems/json-1.6.4/tests/fixtures/pass1.json +56 -0
  145. data/vendor/bundle/gems/json-1.6.4/tests/fixtures/pass15.json +1 -0
  146. data/vendor/bundle/gems/json-1.6.4/tests/fixtures/pass16.json +1 -0
  147. data/vendor/bundle/gems/json-1.6.4/tests/fixtures/pass17.json +1 -0
  148. data/vendor/bundle/gems/json-1.6.4/tests/fixtures/pass2.json +1 -0
  149. data/vendor/bundle/gems/json-1.6.4/tests/fixtures/pass26.json +1 -0
  150. data/vendor/bundle/gems/json-1.6.4/tests/fixtures/pass3.json +6 -0
  151. data/vendor/bundle/gems/json-1.6.4/tests/setup_variant.rb +11 -0
  152. data/vendor/bundle/gems/json-1.6.4/tests/test_json.rb +527 -0
  153. data/vendor/bundle/gems/json-1.6.4/tests/test_json_addition.rb +188 -0
  154. data/vendor/bundle/gems/json-1.6.4/tests/test_json_encoding.rb +65 -0
  155. data/vendor/bundle/gems/json-1.6.4/tests/test_json_fixtures.rb +35 -0
  156. data/vendor/bundle/gems/json-1.6.4/tests/test_json_generate.rb +249 -0
  157. data/vendor/bundle/gems/json-1.6.4/tests/test_json_string_matching.rb +40 -0
  158. data/vendor/bundle/gems/json-1.6.4/tests/test_json_unicode.rb +72 -0
  159. data/vendor/bundle/gems/json-1.6.4/tools/fuzz.rb +139 -0
  160. data/vendor/bundle/gems/json-1.6.4/tools/server.rb +62 -0
  161. data/vendor/bundle/gems/rake-0.9.2.2/.gemtest +0 -0
  162. data/vendor/bundle/gems/rake-0.9.2.2/CHANGES +522 -0
  163. data/vendor/bundle/gems/rake-0.9.2.2/MIT-LICENSE +21 -0
  164. data/vendor/bundle/gems/rake-0.9.2.2/README.rdoc +197 -0
  165. data/vendor/bundle/gems/rake-0.9.2.2/Rakefile +369 -0
  166. data/vendor/bundle/gems/rake-0.9.2.2/TODO +20 -0
  167. data/vendor/bundle/gems/rake-0.9.2.2/bin/rake +33 -0
  168. data/vendor/bundle/gems/rake-0.9.2.2/install.rb +90 -0
  169. data/vendor/bundle/gems/rake-0.9.2.2/lib/rake.rb +69 -0
  170. data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/alt_system.rb +109 -0
  171. data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/application.rb +595 -0
  172. data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/classic_namespace.rb +11 -0
  173. data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/clean.rb +32 -0
  174. data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/cloneable.rb +25 -0
  175. data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/contrib/compositepublisher.rb +21 -0
  176. data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/contrib/ftptools.rb +150 -0
  177. data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/contrib/publisher.rb +73 -0
  178. data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/contrib/rubyforgepublisher.rb +16 -0
  179. data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/contrib/sshpublisher.rb +50 -0
  180. data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/contrib/sys.rb +191 -0
  181. data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/default_loader.rb +10 -0
  182. data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/dsl_definition.rb +176 -0
  183. data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/early_time.rb +18 -0
  184. data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/ext/core.rb +27 -0
  185. data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/ext/module.rb +39 -0
  186. data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/ext/string.rb +167 -0
  187. data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/ext/time.rb +14 -0
  188. data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/file_creation_task.rb +24 -0
  189. data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/file_list.rb +403 -0
  190. data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/file_task.rb +47 -0
  191. data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/file_utils.rb +114 -0
  192. data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/file_utils_ext.rb +145 -0
  193. data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/gempackagetask.rb +15 -0
  194. data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/invocation_chain.rb +51 -0
  195. data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/invocation_exception_mixin.rb +16 -0
  196. data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/loaders/makefile.rb +40 -0
  197. data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/multi_task.rb +16 -0
  198. data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/name_space.rb +25 -0
  199. data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/packagetask.rb +185 -0
  200. data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/pathmap.rb +1 -0
  201. data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/pseudo_status.rb +24 -0
  202. data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/rake_module.rb +29 -0
  203. data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/rake_test_loader.rb +22 -0
  204. data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/rdoctask.rb +234 -0
  205. data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/ruby182_test_unit_fix.rb +25 -0
  206. data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/rule_recursion_overflow_error.rb +20 -0
  207. data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/runtest.rb +21 -0
  208. data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/task.rb +327 -0
  209. data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/task_argument_error.rb +7 -0
  210. data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/task_arguments.rb +78 -0
  211. data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/task_manager.rb +307 -0
  212. data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/tasklib.rb +22 -0
  213. data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/testtask.rb +191 -0
  214. data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/version.rb +8 -0
  215. data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/win32.rb +55 -0
  216. data/vendor/bundle/gems/rake-0.9.2.2/test/file_creation.rb +34 -0
  217. data/vendor/bundle/gems/rake-0.9.2.2/test/helper.rb +492 -0
  218. data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake.rb +40 -0
  219. data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_application.rb +489 -0
  220. data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_application_options.rb +335 -0
  221. data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_clean.rb +14 -0
  222. data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_definitions.rb +80 -0
  223. data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_directory_task.rb +46 -0
  224. data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_dsl.rb +77 -0
  225. data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_early_time.rb +31 -0
  226. data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_extension.rb +59 -0
  227. data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_file_creation_task.rb +56 -0
  228. data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_file_list.rb +628 -0
  229. data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_file_list_path_map.rb +8 -0
  230. data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_file_task.rb +102 -0
  231. data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_file_utils.rb +305 -0
  232. data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_ftp_file.rb +59 -0
  233. data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_functional.rb +450 -0
  234. data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_invocation_chain.rb +52 -0
  235. data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_makefile_loader.rb +44 -0
  236. data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_multi_task.rb +51 -0
  237. data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_name_space.rb +43 -0
  238. data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_package_task.rb +79 -0
  239. data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_path_map.rb +157 -0
  240. data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_path_map_explode.rb +34 -0
  241. data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_path_map_partial.rb +18 -0
  242. data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_pseudo_status.rb +21 -0
  243. data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_rake_test_loader.rb +21 -0
  244. data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_rdoc_task.rb +83 -0
  245. data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_require.rb +40 -0
  246. data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_rules.rb +327 -0
  247. data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_task.rb +267 -0
  248. data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_task_argument_parsing.rb +103 -0
  249. data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_task_arguments.rb +88 -0
  250. data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_task_lib.rb +9 -0
  251. data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_task_manager.rb +157 -0
  252. data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_task_manager_argument_resolution.rb +36 -0
  253. data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_task_with_arguments.rb +173 -0
  254. data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_test_task.rb +120 -0
  255. data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_top_level_functions.rb +111 -0
  256. data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_win32.rb +72 -0
  257. data/vendor/bundle/gems/rake-0.9.2.2/test/test_sys.rb +20 -0
  258. data/vendor/bundle/specifications/json-1.6.4.gemspec +39 -0
  259. data/vendor/bundle/specifications/rake-0.9.2.2.gemspec +34 -0
  260. metadata +285 -18
@@ -0,0 +1,964 @@
1
+ /*
2
+ * This code is copyrighted work by Daniel Luz <dev at mernen dot com>.
3
+ *
4
+ * Distributed under the Ruby and GPLv2 licenses; see COPYING and GPL files
5
+ * for details.
6
+ */
7
+ package json.ext;
8
+
9
+ import org.jruby.Ruby;
10
+ import org.jruby.RubyArray;
11
+ import org.jruby.RubyClass;
12
+ import org.jruby.RubyEncoding;
13
+ import org.jruby.RubyFloat;
14
+ import org.jruby.RubyHash;
15
+ import org.jruby.RubyInteger;
16
+ import org.jruby.RubyModule;
17
+ import org.jruby.RubyNumeric;
18
+ import org.jruby.RubyObject;
19
+ import org.jruby.RubyString;
20
+ import org.jruby.anno.JRubyMethod;
21
+ import org.jruby.exceptions.JumpException;
22
+ import org.jruby.exceptions.RaiseException;
23
+ import org.jruby.runtime.Block;
24
+ import org.jruby.runtime.ObjectAllocator;
25
+ import org.jruby.runtime.ThreadContext;
26
+ import org.jruby.runtime.Visibility;
27
+ import org.jruby.runtime.builtin.IRubyObject;
28
+ import org.jruby.util.ByteList;
29
+ import org.jruby.util.ConvertBytes;
30
+ import static org.jruby.util.ConvertDouble.DoubleConverter;
31
+
32
+ /**
33
+ * The <code>JSON::Ext::Parser</code> class.
34
+ *
35
+ * <p>This is the JSON parser implemented as a Java class. To use it as the
36
+ * standard parser, set
37
+ * <pre>JSON.parser = JSON::Ext::Parser</pre>
38
+ * This is performed for you when you <code>include "json/ext"</code>.
39
+ *
40
+ * <p>This class does not perform the actual parsing, just acts as an interface
41
+ * to Ruby code. When the {@link #parse()} method is invoked, a
42
+ * Parser.ParserSession object is instantiated, which handles the process.
43
+ *
44
+ * @author mernen
45
+ */
46
+ public class Parser extends RubyObject {
47
+ private final RuntimeInfo info;
48
+ private RubyString vSource;
49
+ private RubyString createId;
50
+ private boolean createAdditions;
51
+ private int maxNesting;
52
+ private boolean allowNaN;
53
+ private boolean symbolizeNames;
54
+ private boolean quirksMode;
55
+ private RubyClass objectClass;
56
+ private RubyClass arrayClass;
57
+ private RubyHash match_string;
58
+
59
+ private static final int DEFAULT_MAX_NESTING = 19;
60
+
61
+ private static final ByteList JSON_MINUS_INFINITY = new ByteList(ByteList.plain("-Infinity"));
62
+ // constant names in the JSON module containing those values
63
+ private static final String CONST_NAN = "NaN";
64
+ private static final String CONST_INFINITY = "Infinity";
65
+ private static final String CONST_MINUS_INFINITY = "MinusInfinity";
66
+
67
+ static final ObjectAllocator ALLOCATOR = new ObjectAllocator() {
68
+ public IRubyObject allocate(Ruby runtime, RubyClass klazz) {
69
+ return new Parser(runtime, klazz);
70
+ }
71
+ };
72
+
73
+ /**
74
+ * Multiple-value return for internal parser methods.
75
+ *
76
+ * <p>All the <code>parse<var>Stuff</var></code> methods return instances of
77
+ * <code>ParserResult</code> when successful, or <code>null</code> when
78
+ * there's a problem with the input data.
79
+ */
80
+ static final class ParserResult {
81
+ /**
82
+ * The result of the successful parsing. Should never be
83
+ * <code>null</code>.
84
+ */
85
+ IRubyObject result;
86
+ /**
87
+ * The point where the parser returned.
88
+ */
89
+ int p;
90
+
91
+ void update(IRubyObject result, int p) {
92
+ this.result = result;
93
+ this.p = p;
94
+ }
95
+ }
96
+
97
+ public Parser(Ruby runtime, RubyClass metaClass) {
98
+ super(runtime, metaClass);
99
+ info = RuntimeInfo.forRuntime(runtime);
100
+ }
101
+
102
+ /**
103
+ * <code>Parser.new(source, opts = {})</code>
104
+ *
105
+ * <p>Creates a new <code>JSON::Ext::Parser</code> instance for the string
106
+ * <code>source</code>.
107
+ * It will be configured by the <code>opts</code> Hash.
108
+ * <code>opts</code> can have the following keys:
109
+ *
110
+ * <dl>
111
+ * <dt><code>:max_nesting</code>
112
+ * <dd>The maximum depth of nesting allowed in the parsed data
113
+ * structures. Disable depth checking with <code>:max_nesting => false|nil|0</code>,
114
+ * it defaults to 19.
115
+ *
116
+ * <dt><code>:allow_nan</code>
117
+ * <dd>If set to <code>true</code>, allow <code>NaN</code>,
118
+ * <code>Infinity</code> and <code>-Infinity</code> in defiance of RFC 4627
119
+ * to be parsed by the Parser. This option defaults to <code>false</code>.
120
+ *
121
+ * <dt><code>:symbolize_names</code>
122
+ * <dd>If set to <code>true</code>, returns symbols for the names (keys) in
123
+ * a JSON object. Otherwise strings are returned, which is also the default.
124
+ *
125
+ * <dt><code>:quirks_mode?</code>
126
+ * <dd>If set to <code>true</code>, if the parse is in quirks_mode, false
127
+ * otherwise.
128
+ *
129
+ * <dt><code>:create_additions</code>
130
+ * <dd>If set to <code>false</code>, the Parser doesn't create additions
131
+ * even if a matchin class and <code>create_id</code> was found. This option
132
+ * defaults to <code>true</code>.
133
+ *
134
+ * <dt><code>:object_class</code>
135
+ * <dd>Defaults to Hash.
136
+ *
137
+ * <dt><code>:array_class</code>
138
+ * <dd>Defaults to Array.
139
+ *
140
+ * <dt><code>:quirks_mode</code>
141
+ * <dd>Enables quirks_mode for parser, that is for example parsing single
142
+ * JSON values instead of documents is possible.
143
+ * </dl>
144
+ */
145
+ @JRubyMethod(name = "new", required = 1, optional = 1, meta = true)
146
+ public static IRubyObject newInstance(IRubyObject clazz, IRubyObject[] args, Block block) {
147
+ Parser parser = (Parser)((RubyClass)clazz).allocate();
148
+
149
+ parser.callInit(args, block);
150
+
151
+ return parser;
152
+ }
153
+
154
+ @JRubyMethod(required = 1, optional = 1, visibility = Visibility.PRIVATE)
155
+ public IRubyObject initialize(ThreadContext context, IRubyObject[] args) {
156
+ Ruby runtime = context.getRuntime();
157
+ if (this.vSource != null) {
158
+ throw runtime.newTypeError("already initialized instance");
159
+ }
160
+
161
+ OptionsReader opts = new OptionsReader(context, args.length > 1 ? args[1] : null);
162
+ this.maxNesting = opts.getInt("max_nesting", DEFAULT_MAX_NESTING);
163
+ this.allowNaN = opts.getBool("allow_nan", false);
164
+ this.symbolizeNames = opts.getBool("symbolize_names", false);
165
+ this.quirksMode = opts.getBool("quirks_mode", false);
166
+ this.createId = opts.getString("create_id", getCreateId(context));
167
+ this.createAdditions = opts.getBool("create_additions", true);
168
+ this.objectClass = opts.getClass("object_class", runtime.getHash());
169
+ this.arrayClass = opts.getClass("array_class", runtime.getArray());
170
+ this.match_string = opts.getHash("match_string");
171
+
172
+ this.vSource = args[0].convertToString();
173
+ if (!quirksMode) this.vSource = convertEncoding(context, vSource);
174
+
175
+ return this;
176
+ }
177
+
178
+ /**
179
+ * Checks the given string's encoding. If a non-UTF-8 encoding is detected,
180
+ * a converted copy is returned.
181
+ * Returns the source string if no conversion is needed.
182
+ */
183
+ private RubyString convertEncoding(ThreadContext context, RubyString source) {
184
+ ByteList bl = source.getByteList();
185
+ int len = bl.length();
186
+ if (len < 2) {
187
+ throw Utils.newException(context, Utils.M_PARSER_ERROR,
188
+ "A JSON text must at least contain two octets!");
189
+ }
190
+
191
+ if (info.encodingsSupported()) {
192
+ RubyEncoding encoding = (RubyEncoding)source.encoding(context);
193
+ if (encoding != info.ascii8bit.get()) {
194
+ return (RubyString)source.encode(context, info.utf8.get());
195
+ }
196
+
197
+ String sniffedEncoding = sniffByteList(bl);
198
+ if (sniffedEncoding == null) return source; // assume UTF-8
199
+ return reinterpretEncoding(context, source, sniffedEncoding);
200
+ }
201
+
202
+ String sniffedEncoding = sniffByteList(bl);
203
+ if (sniffedEncoding == null) return source; // assume UTF-8
204
+ Ruby runtime = context.getRuntime();
205
+ return (RubyString)info.jsonModule.get().
206
+ callMethod(context, "iconv",
207
+ new IRubyObject[] {
208
+ runtime.newString("utf-8"),
209
+ runtime.newString(sniffedEncoding),
210
+ source});
211
+ }
212
+
213
+ /**
214
+ * Checks the first four bytes of the given ByteList to infer its encoding,
215
+ * using the principle demonstrated on section 3 of RFC 4627 (JSON).
216
+ */
217
+ private static String sniffByteList(ByteList bl) {
218
+ if (bl.length() < 4) return null;
219
+ if (bl.get(0) == 0 && bl.get(2) == 0) {
220
+ return bl.get(1) == 0 ? "utf-32be" : "utf-16be";
221
+ }
222
+ if (bl.get(1) == 0 && bl.get(3) == 0) {
223
+ return bl.get(2) == 0 ? "utf-32le" : "utf-16le";
224
+ }
225
+ return null;
226
+ }
227
+
228
+ /**
229
+ * Assumes the given (binary) RubyString to be in the given encoding, then
230
+ * converts it to UTF-8.
231
+ */
232
+ private RubyString reinterpretEncoding(ThreadContext context,
233
+ RubyString str, String sniffedEncoding) {
234
+ RubyEncoding actualEncoding = info.getEncoding(context, sniffedEncoding);
235
+ RubyEncoding targetEncoding = info.utf8.get();
236
+ RubyString dup = (RubyString)str.dup();
237
+ dup.force_encoding(context, actualEncoding);
238
+ return (RubyString)dup.encode_bang(context, targetEncoding);
239
+ }
240
+
241
+ /**
242
+ * <code>Parser#parse()</code>
243
+ *
244
+ * <p>Parses the current JSON text <code>source</code> and returns the
245
+ * complete data structure as a result.
246
+ */
247
+ @JRubyMethod
248
+ public IRubyObject parse(ThreadContext context) {
249
+ return new ParserSession(this, context).parse();
250
+ }
251
+
252
+ /**
253
+ * <code>Parser#source()</code>
254
+ *
255
+ * <p>Returns a copy of the current <code>source</code> string, that was
256
+ * used to construct this Parser.
257
+ */
258
+ @JRubyMethod(name = "source")
259
+ public IRubyObject source_get() {
260
+ return checkAndGetSource().dup();
261
+ }
262
+
263
+ /**
264
+ * <code>Parser#quirks_mode?()</code>
265
+ *
266
+ * <p>If set to <code>true</code>, if the parse is in quirks_mode, false
267
+ * otherwise.
268
+ */
269
+ @JRubyMethod(name = "quirks_mode?")
270
+ public IRubyObject quirks_mode_p(ThreadContext context) {
271
+ return context.getRuntime().newBoolean(quirksMode);
272
+ }
273
+
274
+ public RubyString checkAndGetSource() {
275
+ if (vSource != null) {
276
+ return vSource;
277
+ } else {
278
+ throw getRuntime().newTypeError("uninitialized instance");
279
+ }
280
+ }
281
+
282
+ /**
283
+ * Queries <code>JSON.create_id</code>. Returns <code>null</code> if it is
284
+ * set to <code>nil</code> or <code>false</code>, and a String if not.
285
+ */
286
+ private RubyString getCreateId(ThreadContext context) {
287
+ IRubyObject v = info.jsonModule.get().callMethod(context, "create_id");
288
+ return v.isTrue() ? v.convertToString() : null;
289
+ }
290
+
291
+ /**
292
+ * A string parsing session.
293
+ *
294
+ * <p>Once a ParserSession is instantiated, the source string should not
295
+ * change until the parsing is complete. The ParserSession object assumes
296
+ * the source {@link RubyString} is still associated to its original
297
+ * {@link ByteList}, which in turn must still be bound to the same
298
+ * <code>byte[]</code> value (and on the same offset).
299
+ */
300
+ // Ragel uses lots of fall-through
301
+ @SuppressWarnings("fallthrough")
302
+ private static class ParserSession {
303
+ private final Parser parser;
304
+ private final ThreadContext context;
305
+ private final ByteList byteList;
306
+ private final ByteList view;
307
+ private final byte[] data;
308
+ private final StringDecoder decoder;
309
+ private int currentNesting = 0;
310
+ private final DoubleConverter dc;
311
+
312
+ // initialization value for all state variables.
313
+ // no idea about the origins of this value, ask Flori ;)
314
+ private static final int EVIL = 0x666;
315
+
316
+ private ParserSession(Parser parser, ThreadContext context) {
317
+ this.parser = parser;
318
+ this.context = context;
319
+ this.byteList = parser.checkAndGetSource().getByteList();
320
+ this.data = byteList.unsafeBytes();
321
+ this.view = new ByteList(data, false);
322
+ this.decoder = new StringDecoder(context);
323
+ this.dc = new DoubleConverter();
324
+ }
325
+
326
+ private RaiseException unexpectedToken(int absStart, int absEnd) {
327
+ RubyString msg = getRuntime().newString("unexpected token at '")
328
+ .cat(data, absStart, absEnd - absStart)
329
+ .cat((byte)'\'');
330
+ return newException(Utils.M_PARSER_ERROR, msg);
331
+ }
332
+
333
+ private Ruby getRuntime() {
334
+ return context.getRuntime();
335
+ }
336
+
337
+ %%{
338
+ machine JSON_common;
339
+
340
+ cr = '\n';
341
+ cr_neg = [^\n];
342
+ ws = [ \t\r\n];
343
+ c_comment = '/*' ( any* - (any* '*/' any* ) ) '*/';
344
+ cpp_comment = '//' cr_neg* cr;
345
+ comment = c_comment | cpp_comment;
346
+ ignore = ws | comment;
347
+ name_separator = ':';
348
+ value_separator = ',';
349
+ Vnull = 'null';
350
+ Vfalse = 'false';
351
+ Vtrue = 'true';
352
+ VNaN = 'NaN';
353
+ VInfinity = 'Infinity';
354
+ VMinusInfinity = '-Infinity';
355
+ begin_value = [nft"\-[{NI] | digit;
356
+ begin_object = '{';
357
+ end_object = '}';
358
+ begin_array = '[';
359
+ end_array = ']';
360
+ begin_string = '"';
361
+ begin_name = begin_string;
362
+ begin_number = digit | '-';
363
+ }%%
364
+
365
+ %%{
366
+ machine JSON_value;
367
+ include JSON_common;
368
+
369
+ write data;
370
+
371
+ action parse_null {
372
+ result = getRuntime().getNil();
373
+ }
374
+ action parse_false {
375
+ result = getRuntime().getFalse();
376
+ }
377
+ action parse_true {
378
+ result = getRuntime().getTrue();
379
+ }
380
+ action parse_nan {
381
+ if (parser.allowNaN) {
382
+ result = getConstant(CONST_NAN);
383
+ } else {
384
+ throw unexpectedToken(p - 2, pe);
385
+ }
386
+ }
387
+ action parse_infinity {
388
+ if (parser.allowNaN) {
389
+ result = getConstant(CONST_INFINITY);
390
+ } else {
391
+ throw unexpectedToken(p - 7, pe);
392
+ }
393
+ }
394
+ action parse_number {
395
+ if (pe > fpc + 9 - (parser.quirksMode ? 1 : 0) &&
396
+ absSubSequence(fpc, fpc + 9).equals(JSON_MINUS_INFINITY)) {
397
+
398
+ if (parser.allowNaN) {
399
+ result = getConstant(CONST_MINUS_INFINITY);
400
+ fexec p + 10;
401
+ fhold;
402
+ fbreak;
403
+ } else {
404
+ throw unexpectedToken(p, pe);
405
+ }
406
+ }
407
+ parseFloat(res, fpc, pe);
408
+ if (res.result != null) {
409
+ result = res.result;
410
+ fexec res.p;
411
+ }
412
+ parseInteger(res, fpc, pe);
413
+ if (res.result != null) {
414
+ result = res.result;
415
+ fexec res.p;
416
+ }
417
+ fhold;
418
+ fbreak;
419
+ }
420
+ action parse_string {
421
+ parseString(res, fpc, pe);
422
+ if (res.result == null) {
423
+ fhold;
424
+ fbreak;
425
+ } else {
426
+ result = res.result;
427
+ fexec res.p;
428
+ }
429
+ }
430
+ action parse_array {
431
+ currentNesting++;
432
+ parseArray(res, fpc, pe);
433
+ currentNesting--;
434
+ if (res.result == null) {
435
+ fhold;
436
+ fbreak;
437
+ } else {
438
+ result = res.result;
439
+ fexec res.p;
440
+ }
441
+ }
442
+ action parse_object {
443
+ currentNesting++;
444
+ parseObject(res, fpc, pe);
445
+ currentNesting--;
446
+ if (res.result == null) {
447
+ fhold;
448
+ fbreak;
449
+ } else {
450
+ result = res.result;
451
+ fexec res.p;
452
+ }
453
+ }
454
+ action exit {
455
+ fhold;
456
+ fbreak;
457
+ }
458
+
459
+ main := ( Vnull @parse_null |
460
+ Vfalse @parse_false |
461
+ Vtrue @parse_true |
462
+ VNaN @parse_nan |
463
+ VInfinity @parse_infinity |
464
+ begin_number >parse_number |
465
+ begin_string >parse_string |
466
+ begin_array >parse_array |
467
+ begin_object >parse_object
468
+ ) %*exit;
469
+ }%%
470
+
471
+ void parseValue(ParserResult res, int p, int pe) {
472
+ int cs = EVIL;
473
+ IRubyObject result = null;
474
+
475
+ %% write init;
476
+ %% write exec;
477
+
478
+ if (cs >= JSON_value_first_final && result != null) {
479
+ res.update(result, p);
480
+ } else {
481
+ res.update(null, p);
482
+ }
483
+ }
484
+
485
+ %%{
486
+ machine JSON_integer;
487
+
488
+ write data;
489
+
490
+ action exit {
491
+ fhold;
492
+ fbreak;
493
+ }
494
+
495
+ main := '-'? ( '0' | [1-9][0-9]* ) ( ^[0-9]? @exit );
496
+ }%%
497
+
498
+ void parseInteger(ParserResult res, int p, int pe) {
499
+ int new_p = parseIntegerInternal(p, pe);
500
+ if (new_p == -1) {
501
+ res.update(null, p);
502
+ return;
503
+ }
504
+ RubyInteger number = createInteger(p, new_p);
505
+ res.update(number, new_p + 1);
506
+ return;
507
+ }
508
+
509
+ int parseIntegerInternal(int p, int pe) {
510
+ int cs = EVIL;
511
+
512
+ %% write init;
513
+ int memo = p;
514
+ %% write exec;
515
+
516
+ if (cs < JSON_integer_first_final) {
517
+ return -1;
518
+ }
519
+
520
+ return p;
521
+ }
522
+
523
+ RubyInteger createInteger(int p, int new_p) {
524
+ Ruby runtime = getRuntime();
525
+ ByteList num = absSubSequence(p, new_p);
526
+ return bytesToInum(runtime, num);
527
+ }
528
+
529
+ RubyInteger bytesToInum(Ruby runtime, ByteList num) {
530
+ return runtime.is1_9() ?
531
+ ConvertBytes.byteListToInum19(runtime, num, 10, true) :
532
+ ConvertBytes.byteListToInum(runtime, num, 10, true);
533
+ }
534
+
535
+ %%{
536
+ machine JSON_float;
537
+ include JSON_common;
538
+
539
+ write data;
540
+
541
+ action exit {
542
+ fhold;
543
+ fbreak;
544
+ }
545
+
546
+ main := '-'?
547
+ ( ( ( '0' | [1-9][0-9]* ) '.' [0-9]+ ( [Ee] [+\-]?[0-9]+ )? )
548
+ | ( ( '0' | [1-9][0-9]* ) ( [Ee] [+\-]? [0-9]+ ) ) )
549
+ ( ^[0-9Ee.\-]? @exit );
550
+ }%%
551
+
552
+ void parseFloat(ParserResult res, int p, int pe) {
553
+ int new_p = parseFloatInternal(p, pe);
554
+ if (new_p == -1) {
555
+ res.update(null, p);
556
+ return;
557
+ }
558
+ RubyFloat number = createFloat(p, new_p);
559
+ res.update(number, new_p + 1);
560
+ return;
561
+ }
562
+
563
+ int parseFloatInternal(int p, int pe) {
564
+ int cs = EVIL;
565
+
566
+ %% write init;
567
+ int memo = p;
568
+ %% write exec;
569
+
570
+ if (cs < JSON_float_first_final) {
571
+ return -1;
572
+ }
573
+
574
+ return p;
575
+ }
576
+
577
+ RubyFloat createFloat(int p, int new_p) {
578
+ Ruby runtime = getRuntime();
579
+ ByteList num = absSubSequence(p, new_p);
580
+ return RubyFloat.newFloat(runtime, dc.parse(num, true, runtime.is1_9()));
581
+ }
582
+
583
+ %%{
584
+ machine JSON_string;
585
+ include JSON_common;
586
+
587
+ write data;
588
+
589
+ action parse_string {
590
+ int offset = byteList.begin();
591
+ ByteList decoded = decoder.decode(byteList, memo + 1 - offset,
592
+ p - offset);
593
+ result = getRuntime().newString(decoded);
594
+ if (result == null) {
595
+ fhold;
596
+ fbreak;
597
+ } else {
598
+ fexec p + 1;
599
+ }
600
+ }
601
+
602
+ action exit {
603
+ fhold;
604
+ fbreak;
605
+ }
606
+
607
+ main := '"'
608
+ ( ( ^(["\\]|0..0x1f)
609
+ | '\\'["\\/bfnrt]
610
+ | '\\u'[0-9a-fA-F]{4}
611
+ | '\\'^(["\\/bfnrtu]|0..0x1f)
612
+ )* %parse_string
613
+ ) '"' @exit;
614
+ }%%
615
+
616
+ void parseString(ParserResult res, int p, int pe) {
617
+ int cs = EVIL;
618
+ IRubyObject result = null;
619
+
620
+ %% write init;
621
+ int memo = p;
622
+ %% write exec;
623
+
624
+ if (parser.createAdditions) {
625
+ RubyHash match_string = parser.match_string;
626
+ if (match_string != null) {
627
+ final IRubyObject[] memoArray = { result, null };
628
+ try {
629
+ match_string.visitAll(new RubyHash.Visitor() {
630
+ @Override
631
+ public void visit(IRubyObject pattern, IRubyObject klass) {
632
+ if (pattern.callMethod(context, "===", memoArray[0]).isTrue()) {
633
+ memoArray[1] = klass;
634
+ throw JumpException.SPECIAL_JUMP;
635
+ }
636
+ }
637
+ });
638
+ } catch (JumpException e) { }
639
+ if (memoArray[1] != null) {
640
+ RubyClass klass = (RubyClass) memoArray[1];
641
+ if (klass.respondsTo("json_creatable?") &&
642
+ klass.callMethod(context, "json_creatable?").isTrue()) {
643
+ result = klass.callMethod(context, "json_create", result);
644
+ }
645
+ }
646
+ }
647
+ }
648
+
649
+ if (cs >= JSON_string_first_final && result != null) {
650
+ res.update(result, p + 1);
651
+ } else {
652
+ res.update(null, p + 1);
653
+ }
654
+ }
655
+
656
+ %%{
657
+ machine JSON_array;
658
+ include JSON_common;
659
+
660
+ write data;
661
+
662
+ action parse_value {
663
+ parseValue(res, fpc, pe);
664
+ if (res.result == null) {
665
+ fhold;
666
+ fbreak;
667
+ } else {
668
+ if (parser.arrayClass == getRuntime().getArray()) {
669
+ ((RubyArray)result).append(res.result);
670
+ } else {
671
+ result.callMethod(context, "<<", res.result);
672
+ }
673
+ fexec res.p;
674
+ }
675
+ }
676
+
677
+ action exit {
678
+ fhold;
679
+ fbreak;
680
+ }
681
+
682
+ next_element = value_separator ignore* begin_value >parse_value;
683
+
684
+ main := begin_array
685
+ ignore*
686
+ ( ( begin_value >parse_value
687
+ ignore* )
688
+ ( ignore*
689
+ next_element
690
+ ignore* )* )?
691
+ ignore*
692
+ end_array @exit;
693
+ }%%
694
+
695
+ void parseArray(ParserResult res, int p, int pe) {
696
+ int cs = EVIL;
697
+
698
+ if (parser.maxNesting > 0 && currentNesting > parser.maxNesting) {
699
+ throw newException(Utils.M_NESTING_ERROR,
700
+ "nesting of " + currentNesting + " is too deep");
701
+ }
702
+
703
+ IRubyObject result;
704
+ if (parser.arrayClass == getRuntime().getArray()) {
705
+ result = RubyArray.newArray(getRuntime());
706
+ } else {
707
+ result = parser.arrayClass.newInstance(context,
708
+ IRubyObject.NULL_ARRAY, Block.NULL_BLOCK);
709
+ }
710
+
711
+ %% write init;
712
+ %% write exec;
713
+
714
+ if (cs >= JSON_array_first_final) {
715
+ res.update(result, p + 1);
716
+ } else {
717
+ throw unexpectedToken(p, pe);
718
+ }
719
+ }
720
+
721
+ %%{
722
+ machine JSON_object;
723
+ include JSON_common;
724
+
725
+ write data;
726
+
727
+ action parse_value {
728
+ parseValue(res, fpc, pe);
729
+ if (res.result == null) {
730
+ fhold;
731
+ fbreak;
732
+ } else {
733
+ if (parser.objectClass == getRuntime().getHash()) {
734
+ ((RubyHash)result).op_aset(context, lastName, res.result);
735
+ } else {
736
+ result.callMethod(context, "[]=", new IRubyObject[] { lastName, res.result });
737
+ }
738
+ fexec res.p;
739
+ }
740
+ }
741
+
742
+ action parse_name {
743
+ parseString(res, fpc, pe);
744
+ if (res.result == null) {
745
+ fhold;
746
+ fbreak;
747
+ } else {
748
+ RubyString name = (RubyString)res.result;
749
+ if (parser.symbolizeNames) {
750
+ lastName = context.getRuntime().is1_9()
751
+ ? name.intern19()
752
+ : name.intern();
753
+ } else {
754
+ lastName = name;
755
+ }
756
+ fexec res.p;
757
+ }
758
+ }
759
+
760
+ action exit {
761
+ fhold;
762
+ fbreak;
763
+ }
764
+
765
+ pair = ignore* begin_name >parse_name ignore* name_separator
766
+ ignore* begin_value >parse_value;
767
+ next_pair = ignore* value_separator pair;
768
+
769
+ main := (
770
+ begin_object (pair (next_pair)*)? ignore* end_object
771
+ ) @exit;
772
+ }%%
773
+
774
+ void parseObject(ParserResult res, int p, int pe) {
775
+ int cs = EVIL;
776
+ IRubyObject lastName = null;
777
+ boolean objectDefault = true;
778
+
779
+ if (parser.maxNesting > 0 && currentNesting > parser.maxNesting) {
780
+ throw newException(Utils.M_NESTING_ERROR,
781
+ "nesting of " + currentNesting + " is too deep");
782
+ }
783
+
784
+ // this is guaranteed to be a RubyHash due to the earlier
785
+ // allocator test at OptionsReader#getClass
786
+ IRubyObject result;
787
+ if (parser.objectClass == getRuntime().getHash()) {
788
+ result = RubyHash.newHash(getRuntime());
789
+ } else {
790
+ objectDefault = false;
791
+ result = parser.objectClass.newInstance(context,
792
+ IRubyObject.NULL_ARRAY, Block.NULL_BLOCK);
793
+ }
794
+
795
+ %% write init;
796
+ %% write exec;
797
+
798
+ if (cs < JSON_object_first_final) {
799
+ res.update(null, p + 1);
800
+ return;
801
+ }
802
+
803
+ IRubyObject returnedResult = result;
804
+
805
+ // attempt to de-serialize object
806
+ if (parser.createAdditions) {
807
+ IRubyObject vKlassName;
808
+ if (objectDefault) {
809
+ vKlassName = ((RubyHash)result).op_aref(context, parser.createId);
810
+ } else {
811
+ vKlassName = result.callMethod(context, "[]", parser.createId);
812
+ }
813
+
814
+ if (!vKlassName.isNil()) {
815
+ // might throw ArgumentError, we let it propagate
816
+ IRubyObject klass = parser.info.jsonModule.get().
817
+ callMethod(context, "deep_const_get", vKlassName);
818
+ if (klass.respondsTo("json_creatable?") &&
819
+ klass.callMethod(context, "json_creatable?").isTrue()) {
820
+
821
+ returnedResult = klass.callMethod(context, "json_create", result);
822
+ }
823
+ }
824
+ }
825
+ res.update(returnedResult, p + 1);
826
+ }
827
+
828
+ %%{
829
+ machine JSON;
830
+ include JSON_common;
831
+
832
+ write data;
833
+
834
+ action parse_object {
835
+ currentNesting = 1;
836
+ parseObject(res, fpc, pe);
837
+ if (res.result == null) {
838
+ fhold;
839
+ fbreak;
840
+ } else {
841
+ result = res.result;
842
+ fexec res.p;
843
+ }
844
+ }
845
+
846
+ action parse_array {
847
+ currentNesting = 1;
848
+ parseArray(res, fpc, pe);
849
+ if (res.result == null) {
850
+ fhold;
851
+ fbreak;
852
+ } else {
853
+ result = res.result;
854
+ fexec res.p;
855
+ }
856
+ }
857
+
858
+ main := ignore*
859
+ ( begin_object >parse_object
860
+ | begin_array >parse_array )
861
+ ignore*;
862
+ }%%
863
+
864
+ public IRubyObject parseStrict() {
865
+ int cs = EVIL;
866
+ int p, pe;
867
+ IRubyObject result = null;
868
+ ParserResult res = new ParserResult();
869
+
870
+ %% write init;
871
+ p = byteList.begin();
872
+ pe = p + byteList.length();
873
+ %% write exec;
874
+
875
+ if (cs >= JSON_first_final && p == pe) {
876
+ return result;
877
+ } else {
878
+ throw unexpectedToken(p, pe);
879
+ }
880
+ }
881
+
882
+ %%{
883
+ machine JSON_quirks_mode;
884
+ include JSON_common;
885
+
886
+ write data;
887
+
888
+ action parse_value {
889
+ parseValue(res, fpc, pe);
890
+ if (res.result == null) {
891
+ fhold;
892
+ fbreak;
893
+ } else {
894
+ result = res.result;
895
+ fexec res.p;
896
+ }
897
+ }
898
+
899
+ main := ignore*
900
+ ( begin_value >parse_value)
901
+ ignore*;
902
+ }%%
903
+
904
+ public IRubyObject parseQuirksMode() {
905
+ int cs = EVIL;
906
+ int p, pe;
907
+ IRubyObject result = null;
908
+ ParserResult res = new ParserResult();
909
+
910
+ %% write init;
911
+ p = byteList.begin();
912
+ pe = p + byteList.length();
913
+ %% write exec;
914
+
915
+ if (cs >= JSON_quirks_mode_first_final && p == pe) {
916
+ return result;
917
+ } else {
918
+ throw unexpectedToken(p, pe);
919
+ }
920
+ }
921
+
922
+ public IRubyObject parse() {
923
+ if (parser.quirksMode) {
924
+ return parseQuirksMode();
925
+ } else {
926
+ return parseStrict();
927
+ }
928
+
929
+ }
930
+
931
+ /**
932
+ * Updates the "view" bytelist with the new offsets and returns it.
933
+ * @param start
934
+ * @param end
935
+ */
936
+ private ByteList absSubSequence(int absStart, int absEnd) {
937
+ view.setBegin(absStart);
938
+ view.setRealSize(absEnd - absStart);
939
+ return view;
940
+ }
941
+
942
+ /**
943
+ * Retrieves a constant directly descended from the <code>JSON</code> module.
944
+ * @param name The constant name
945
+ */
946
+ private IRubyObject getConstant(String name) {
947
+ return parser.info.jsonModule.get().getConstant(name);
948
+ }
949
+
950
+ private RaiseException newException(String className, String message) {
951
+ return Utils.newException(context, className, message);
952
+ }
953
+
954
+ private RaiseException newException(String className, RubyString message) {
955
+ return Utils.newException(context, className, message);
956
+ }
957
+
958
+ private RaiseException newException(String className,
959
+ String messageBegin, ByteList messageEnd) {
960
+ return newException(className,
961
+ getRuntime().newString(messageBegin).cat(messageEnd));
962
+ }
963
+ }
964
+ }