nutshell-crm 0.0.5 → 0.0.6.alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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 @@
1
+ 1.9.2-p290
@@ -0,0 +1,8 @@
1
+ language: ruby
2
+
3
+ rvm:
4
+ - 1.9.3
5
+ - 1.9.2
6
+ - 1.8.7
7
+
8
+ env: NUTSHELL_USERNAME=mshafrir@gmail.com NUTSHELL_APIKEY=1d58ccb0eeba08916ed379bc3607c6999e343412
@@ -0,0 +1,5 @@
1
+ ## v0.0.5
2
+ ## v0.0.4
3
+ ## v0.0.3
4
+ ## v0.0.2
5
+ ## v0.0.1
@@ -0,0 +1,37 @@
1
+ # Nutshell CRM [![Build Status](https://secure.travis-ci.org/mshafrir/nutshell-crm.png)](http://travis-ci.org/mshafrir/nutshell-crm)
2
+
3
+ Author: [mshafrir@gmail.com](mailto:mshafrir@gmail.com)
4
+
5
+ ## Description ##
6
+
7
+ Nutshell Crm is a Ruby wrapper for the Nutshell Crm API.
8
+
9
+ [Nutshell API Reference](http://www.nutshell.com/api/)
10
+
11
+ ## Reference ##
12
+
13
+ - {NutshellCrm::Client}
14
+
15
+ ## Example Usage ##
16
+
17
+ require "nutshell-crm"
18
+
19
+ # Instantiate the Nutshell client.
20
+ nutshell = NutshellCrm::Client.new "user@example.com", "MY_API_KEY"
21
+
22
+ # Get the first open lead with stub data (default).
23
+ nutshell.find_leads({status: 0}).first
24
+ #=> {"stub"=>true, "id"=>1001, "entityType"=>"Leads", "name"=>"Lead\u20131001", "status"=>0, "primaryAccountName"=>nil}
25
+
26
+ # Enable non-stub responses.
27
+ nutshell.stub_responses = false
28
+
29
+ # Get the first open lead with full data.
30
+ nutshell.find_leads({status: 0}).first
31
+ #=> {"id"=>1001, "entityType"=>"Leads", "name"=>"Lead\u20131001", "status"=>0, "primaryAccountName"=>nil, "creator"=>{}}
32
+
33
+
34
+
35
+ ## Install ##
36
+
37
+ gem install nutshell-crm
data/Rakefile CHANGED
@@ -1,5 +1,16 @@
1
- require "bundler/gem_tasks"
1
+ require 'bundler/gem_tasks'
2
+ require 'rake'
3
+ require 'rake/task'
4
+ require 'rake/testtask'
2
5
 
3
- task :test do
4
- exec "bundle exec rspec spec/nutshell-crm_spec.rb"
6
+ task :local_test do
7
+ exec 'rbenv local 1.9.2-p290 && bundle exec rspec spec/nutshell-crm_spec.rb && rbenv local 1.9.3'
8
+ end
9
+
10
+ task :doc do
11
+ exec 'yardoc && cp -vR doc/ ../nutshell-crm-docs && cd ../nutshell-crm-docs && git add . && git commit -am "Update documentation." && git push origin gh-pages'
12
+ end
13
+
14
+ task :default do
15
+ exec 'bundle exec rspec'
5
16
  end
@@ -6,10 +6,21 @@ require 'httparty'
6
6
  # @author Michael Shafrir
7
7
  module NutshellCrm
8
8
  class Client
9
- attr_accessor :api_url, :stub_responses
9
+
10
+ attr_accessor :api_url
11
+
12
+ # Global setting for stubResponses parameter.
13
+ attr_accessor :stub_responses
14
+
10
15
  include HTTParty
11
16
  format :json
12
17
 
18
+ # A new instance of the NutshellCrm client.
19
+ # Configure at https://app01.nutshell.com/setup/api-key
20
+ #
21
+ # @param [String] username
22
+ # @param [String] api_key
23
+ # API key
13
24
  def initialize(username, api_key)
14
25
  @username = username
15
26
  @api_key = api_key
@@ -20,270 +31,335 @@ module NutshellCrm
20
31
  @api_url = "https://#{api_host}/api/v1/json"
21
32
  end
22
33
 
34
+ # Saves the given e-mail message.
35
+ #
36
+ # @param [String] e-mail in RFC 822 format
23
37
  def add_email(email_string)
24
38
  exec_request build_payload({:emailString => email_string})
25
39
  end
26
40
 
27
41
  # Gets all of the custom fields available for Leads, Accounts and Contacts, including appropriate meta-information.
28
42
  #
29
- # @return [json] the custom fields available for Leads, Accounts and Contacts, including appropriate meta-information
43
+ # @return [Object] the custom fields available for Leads, Accounts and Contacts, including appropriate meta-information
30
44
  def describe_custom_fields
31
45
  exec_request build_payload
32
46
  end
33
47
 
48
+ # Edit an account.
49
+ #
50
+ # @param [Integer] account_id
51
+ # account ID to edit
52
+ # @param [String] rev
53
+ # the revision
54
+ # @param [Hash] account
55
+ # updated account information
34
56
  def edit_account(account_id, rev, account)
35
57
  exec_request build_payload({:accountId => account_id, :rev => rev, :account => account})
36
58
  end
37
59
 
60
+ # Edit an activity.
38
61
  def edit_activity(activity_id, rev, activity)
39
62
  exec_request build_payload({:activityId => activity_id, :rev => rev, :activity => activity})
40
63
  end
41
64
 
65
+ # Edit a contact.
42
66
  def edit_contact(contact_id, rev, contact)
43
67
  exec_request build_payload({:contactId => contact_id, :rev => rev, :contact => contact})
44
68
  end
45
69
 
70
+ # Edit a lead.
46
71
  def edit_lead(lead_id, rev, lead)
47
72
  exec_request build_payload({:leadId => lead_id, :rev => rev, :lead => lead})
48
73
  end
49
74
 
75
+ # Update a process step.
50
76
  def edit_step(step_id, rev, step)
51
77
  exec_request build_payload({:stepId => step_id, :rev => rev, :step => step})
52
78
  end
53
79
 
80
+ # Find accounts matching a specified query.
54
81
  def find_accounts(query, order_by = nil, order_direction = nil, limit = nil, page = nil, stub_responses = nil)
55
82
  params = {:query => query, :orderBy => order_by, :orderDirection => order_direction, :limit => limit, :page => page, :stubResponses => stub_responses}
56
83
  payload = build_payload params
57
84
  exec_request(payload)
58
85
  end
59
86
 
87
+ # Get all active account types (to be applied to an account).
60
88
  def find_account_types(order_by = nil, order_direction = nil, limit = nil, page = nil)
61
89
  params = {:orderBy => order_by, :orderDirection => order_direction, :limit => limit, :page => page}
62
90
  payload = build_payload params
63
91
  exec_request(payload)
64
92
  end
65
93
 
94
+ # Find activities matching a specified query.
66
95
  def find_activities(query, order_by = nil, order_direction = nil, limit = nil, page = nil, stub_responses = nil)
67
96
  params = {:query => query, :orderBy => order_by, :orderDirection => order_direction, :limit => limit, :page => page, :stubResponses => stub_responses}
68
97
  payload = build_payload params
69
98
  exec_request(payload)
70
99
  end
71
100
 
101
+ # Get all active activity types.
72
102
  def find_activity_types(order_by = nil, order_direction = nil, limit = nil, page = nil)
73
103
  params = {:orderBy => order_by, :orderDirection => order_direction, :limit => limit, :page => page}
74
104
  payload = build_payload params
75
105
  exec_request(payload)
76
106
  end
77
107
 
108
+ # Get all active Competitors.
78
109
  def find_competitors(order_by = nil, order_direction = nil, limit = nil, page = nil)
79
110
  params = {:orderBy => order_by, :orderDirection => order_direction, :limit => limit, :page => page}
80
111
  payload = build_payload params
81
112
  exec_request(payload)
82
113
  end
83
114
 
115
+ # Find contacts associated with a specified account or lead.
84
116
  def find_contacts(query, order_by = nil, order_direction = nil, limit = nil, page = nil, stub_responses = nil)
85
117
  params = {:query => query, :orderBy => order_by, :orderDirection => order_direction, :limit => limit, :page => page, :stubResponses => stub_responses}
86
118
  payload = build_payload params
87
119
  exec_request(payload)
88
120
  end
89
121
 
122
+ # Get all active Delays (seen in Step responses in availableDelayIds).
90
123
  def find_delays(order_by = nil, order_direction = nil, limit = nil, page = nil)
91
124
  params = {:orderBy => order_by, :orderDirection => order_direction, :limit => limit, :page => page}
92
125
  payload = build_payload params
93
126
  exec_request(payload)
94
127
  end
95
128
 
129
+ # Get all active Industries (to be applied to an account)
96
130
  def find_industries(order_by = nil, order_direction = nil, limit = nil, page = nil)
97
131
  params = {:orderBy => order_by, :orderDirection => order_direction, :limit => limit, :page => page}
98
132
  payload = build_payload params
99
133
  exec_request(payload)
100
134
  end
101
135
 
136
+ # Get all possible outcomes for a closed lead.
102
137
  def find_lead_outcomes(order_by = nil, order_direction = nil, limit = nil, page = nil)
103
138
  params = {:orderBy => order_by, :orderDirection => order_direction, :limit => limit, :page => page}
104
139
  payload = build_payload params, 'findLead_Outcomes'
105
140
  exec_request(payload)
106
141
  end
107
142
 
143
+ # Find leads matching a specified query.
108
144
  def find_leads(query, order_by = nil, order_direction = nil, limit = nil, page = nil, stub_responses = nil)
109
145
  params = {:query => query, :orderBy => order_by, :orderDirection => order_direction, :limit => limit, :page => page, :stubResponses => stub_responses}
110
146
  payload = build_payload params
111
147
  exec_request(payload)
112
148
  end
113
149
 
150
+ # Get all active markets.
114
151
  def find_markets(order_by = nil, order_direction = nil, limit = nil, page = nil)
115
152
  params = {:orderBy => order_by, :orderDirection => order_direction, :limit => limit, :page => page}
116
153
  payload = build_payload params
117
154
  exec_request(payload)
118
155
  end
119
156
 
157
+ # Get all active milestones.
120
158
  def find_milestones(order_by = nil, order_direction = nil, limit = nil, page = nil)
121
159
  params = {:orderBy => order_by, :orderDirection => order_direction, :limit => limit, :page => page}
122
160
  payload = build_payload params
123
161
  exec_request(payload)
124
162
  end
125
163
 
164
+ # Get all active Origins.
126
165
  def find_origins(order_by = nil, order_direction = nil, limit = nil, page = nil)
127
166
  params = {:orderBy => order_by, :orderDirection => order_direction, :limit => limit, :page => page}
128
167
  payload = build_payload params
129
168
  exec_request(payload)
130
169
  end
131
170
 
171
+ # Get all active products.
132
172
  def find_products(order_by = nil, order_direction = nil, limit = nil, page = nil, stub_responses = nil)
133
173
  params = {:orderBy => order_by, :orderDirection => order_direction, :limit => limit, :page => page, :stubResponses => stub_responses}
134
174
  payload = build_payload params
135
175
  exec_request(payload)
136
176
  end
137
177
 
178
+ # Return all publicly-visible settings.
138
179
  def find_settings(order_by = nil, order_direction = nil, limit = nil, page = nil)
139
180
  params = {:orderBy => order_by, :orderDirection => order_direction, :limit => limit, :page => page}
140
181
  payload = build_payload params
141
182
  exec_request(payload)
142
183
  end
143
184
 
185
+ # Get all active Sources.
144
186
  def find_sources(order_by = nil, order_direction = nil, limit = nil, page = nil)
145
187
  params = {:orderBy => order_by, :orderDirection => order_direction, :limit => limit, :page => page}
146
188
  payload = build_payload params
147
189
  exec_request(payload)
148
190
  end
149
191
 
192
+ # Get all active tags.
150
193
  def find_tags
151
194
  exec_request build_payload
152
195
  end
153
196
 
197
+ # Get all active Teams.
154
198
  def find_teams(order_by = nil, order_direction = nil, limit = nil, page = nil)
155
199
  params = {:orderBy => order_by, :orderDirection => order_direction, :limit => limit, :page => page}
156
200
  payload = build_payload params
157
201
  exec_request(payload)
158
202
  end
159
203
 
204
+ # Get all territories.
160
205
  def find_territories(order_by = nil, order_direction = nil, limit = nil, page = nil)
161
206
  params = {:orderBy => order_by, :orderDirection => order_direction, :limit => limit, :page => page}
162
207
  payload = build_payload params
163
208
  exec_request(payload)
164
209
  end
165
210
 
211
+ # Find timeline events (Activities, Emails and Notes) for an Entity.
166
212
  def find_timeline(query, order_by = nil, order_direction = nil, limit = nil, page = nil, stub_responses = nil)
167
213
  params = {:query => query, :orderBy => order_by, :orderDirection => order_direction, :limit => limit, :page => page, :stubResponses => stub_responses}
168
214
  payload = build_payload params
169
215
  exec_request(payload)
170
216
  end
171
217
 
218
+ # Get all active Users.
172
219
  def find_users(order_by = nil, order_direction = nil, limit = nil, page = nil)
173
220
  params = {:orderBy => order_by, :orderDirection => order_direction, :limit => limit, :page => page}
174
221
  payload = build_payload params
175
222
  exec_request(payload)
176
223
  end
177
224
 
225
+ # Get the specified Account.
178
226
  def get_account(account_id, rev = nil)
179
227
  params = {:accountId => account_id, :rev => rev}
180
228
  exec_request build_payload(params)
181
229
  end
182
230
 
231
+ # Get the specified Activity.
183
232
  def get_activity(activity_id, rev = nil)
184
233
  params = {:activityId => activity_id, :rev => rev}
185
234
  exec_request build_payload(params)
186
235
  end
187
236
 
237
+ # Returns graph data and overview information for various sales analytics reports.
188
238
  def getAnalyticsReport(report_type, period, filter_entity = nil, options = nil)
189
239
  params = {:reportType => report_type, :period => period, :filter => filter_entity, :options => options}
190
240
  exec_request build_payload(params)
191
241
  end
192
242
 
243
+ # Get the specified Contact.
193
244
  def get_contact(contact_id, rev = nil)
194
245
  params = {:contactId => contact_id, :rev => rev}
195
246
  exec_request build_payload(params)
196
247
  end
197
248
 
249
+ # Get the specified Email.
198
250
  def get_email(email_id, rev = nil)
199
251
  params = {:emailId => email_id, :rev => rev}
200
252
  exec_request build_payload(params)
201
253
  end
202
254
 
255
+ # Get the specified lead.
203
256
  def get_lead(lead_id, rev = nil)
204
257
  params = {:leadId => lead_id, :rev => rev}
205
258
  exec_request build_payload(params)
206
259
  end
207
260
 
261
+ # Return all mobile-related settings in a simple key-value array.
208
262
  def get_mobile_settings
209
263
  exec_request build_payload
210
264
  end
211
265
 
266
+ # Get the specified Note.
212
267
  def get_note(note_id, rev = nil)
213
268
  params = {:noteId => note_id, :rev => rev}
214
269
  exec_request build_payload(params)
215
270
  end
216
271
 
272
+ # Get all information for a product (including full price list).
217
273
  def get_product(product_id, rev = nil)
218
274
  params = {:productId => product_id, :rev => rev}
219
275
  exec_request build_payload(params)
220
276
  end
221
277
 
278
+ # Gets the last-updated times of each of the provisioning bins.
222
279
  def get_update_times
223
280
  exec_request build_payload
224
281
  end
225
282
 
283
+ # Get all info about a user.
226
284
  def get_user(user_id = nil, rev = nil)
227
285
  params = {:userId => user_id, :rev => rev}
228
286
  exec_request build_payload(params)
229
287
  end
230
288
 
289
+ # Create a new account.
231
290
  def new_account(account)
232
291
  exec_request build_payload({:account => account})
233
292
  end
234
293
 
294
+ # Create a new activity.
235
295
  def new_activity(activity)
236
296
  exec_request build_payload({:activity => activity})
237
297
  end
238
298
 
299
+ # Create a new contact.
239
300
  def new_contact(contact)
240
301
  exec_request build_payload({:contact => contact})
241
302
  end
242
303
 
304
+ # Create a new Lead.
243
305
  def new_lead(lead)
244
306
  exec_request build_payload({:lead => lead})
245
307
  end
246
308
 
309
+ # Create a new tag.
310
+ #
311
+ # @param [Hash] tag
312
+ # See {Nut_Api_Render_Model_Tag}[http://www.nutshell.com/api/detail/class_nut___api___render___model___tag.html]
247
313
  def new_tag(tag)
248
314
  exec_request build_payload({:tag => tag})
249
315
  end
250
316
 
317
+ # Return a list of Account stubs matching a given search string.
251
318
  def search_accounts(query, limit = nil)
252
319
  exec_request build_payload({:string => query, :limit => limit})
253
320
  end
254
321
 
322
+ # Works just like searchUniversal, but only searches by email address.
255
323
  def search_by_email(email_address)
256
324
  exec_request build_payload({:emailAddressString => email_address})
257
325
  end
258
326
 
327
+ # Return a list of Competitor stubs matching a given search string.
259
328
  def search_competitors(query, limit = nil)
260
329
  exec_request build_payload({:string => query, :limit => limit})
261
330
  end
262
331
 
332
+ # Return a list of Contact stubs matching a given search string.
263
333
  def search_contacts(query, limit = nil)
264
334
  exec_request build_payload({:string => query, :limit => limit})
265
335
  end
266
336
 
337
+ # Return a list of Contact and User stubs matching a given search string.
267
338
  def search_contacts_and_users(query, limit = nil)
268
339
  exec_request build_payload({:string => query, :limit => limit})
269
340
  end
270
341
 
342
+ # Return a list of Lead stubs matching a given search string.
271
343
  def search_leads(query, limit = nil)
272
344
  exec_request build_payload({:string => query, :limit => limit})
273
345
  end
274
346
 
347
+ # Return a list of Product stubs matching a given search string.
275
348
  def search_products(query, limit = nil)
276
349
  exec_request build_payload({:string => query, :limit => limit})
277
350
  end
278
351
 
352
+ # Return a list of Source stubs matching a given search string.
279
353
  def search_sources(query, limit = nil)
280
354
  exec_request build_payload({:string => query, :limit => limit})
281
355
  end
282
356
 
357
+ # Return a list of Contact, Lead, and Account stubs matching a given search string.
283
358
  def search_universal(query)
284
359
  exec_request build_payload({:string => query})
285
360
  end
286
361
 
362
+ # Return a list of User and Team stubs matching a given search string.
287
363
  def search_users_and_teams(query, limit = nil)
288
364
  exec_request build_payload({:string => query, :limit => limit})
289
365
  end
@@ -293,6 +369,12 @@ module NutshellCrm
293
369
 
294
370
  private
295
371
 
372
+ # Builds the payload for a request.
373
+ #
374
+ # @param [Hash] params
375
+ # @param [String] override_method
376
+ # needed if the Nutshell API method cannot be determined from the class method name
377
+ # @return [String] the payload in JSON format
296
378
  def build_payload(params = nil, override_method = nil)
297
379
  # Calculate the Nutshell API method name based on the Ruby method name (with a few exceptions)
298
380
  if override_method.nil?
@@ -302,7 +384,9 @@ module NutshellCrm
302
384
  method = override_method
303
385
  end
304
386
 
305
- params[:stubResponses] = @stub_responses if not(params.nil?) && params.has_key?(:stubResponses) && not(@stub_responses.nil?)
387
+ if (not params.nil?) && params.has_key?(:stubResponses) && (not @stub_responses.nil?)
388
+ params[:stubResponses] = @stub_responses
389
+ end
306
390
 
307
391
  # Create the payload
308
392
  payload = {:method => camelcase(method), :id => generate_request_id}
@@ -316,10 +400,13 @@ module NutshellCrm
316
400
 
317
401
 
318
402
  # All Nutshell API requests need a request id.
403
+ #
404
+ # @return [String] request id
319
405
  def generate_request_id
320
- Digest::MD5.hexdigest(Time.now.to_i.to_s).slice(0..8)
406
+ Digest::MD5.hexdigest(rand.to_s).slice(0..8)
321
407
  end
322
408
 
409
+ # Executes an arbitrary request.
323
410
  def exec_request(payload, override_url = nil)
324
411
  response = HTTParty.post(override_url.nil? ? @api_url : override_url,
325
412
  :basic_auth => {:username => @username, :password => @api_key},
@@ -331,7 +418,7 @@ module NutshellCrm
331
418
  error = response['error']
332
419
  error_code = error['code']
333
420
  error_msg = error['message']
334
- raise "#{error_msg} (#{error_code})"
421
+ raise "Nutshell API Error: #{error_msg} (#{error_code})"
335
422
  end
336
423
 
337
424
  response['result']