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.
- data/.rbenv-version +1 -0
- data/.travis.yml +8 -0
- data/CHANGELOG.md +5 -0
- data/README.md +37 -0
- data/Rakefile +14 -3
- data/lib/nutshell-crm.rb +92 -5
- data/lib/nutshell-crm/version.rb +1 -1
- data/nutshell-crm.gemspec +1 -0
- data/spec/nutshell-crm_spec.rb +17 -8
- data/vendor/bundle/bin/rake +19 -0
- data/vendor/bundle/gems/json-1.6.4/.gitignore +8 -0
- data/vendor/bundle/gems/json-1.6.4/.travis.yml +15 -0
- data/vendor/bundle/gems/json-1.6.4/CHANGES +227 -0
- data/vendor/bundle/gems/json-1.6.4/COPYING +58 -0
- data/vendor/bundle/gems/json-1.6.4/COPYING-json-jruby +57 -0
- data/vendor/bundle/gems/json-1.6.4/GPL +340 -0
- data/vendor/bundle/gems/json-1.6.4/Gemfile +11 -0
- data/vendor/bundle/gems/json-1.6.4/README-json-jruby.markdown +33 -0
- data/vendor/bundle/gems/json-1.6.4/README.rdoc +358 -0
- data/vendor/bundle/gems/json-1.6.4/Rakefile +408 -0
- data/vendor/bundle/gems/json-1.6.4/TODO +1 -0
- data/vendor/bundle/gems/json-1.6.4/VERSION +1 -0
- data/{README → vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/.keep} +0 -0
- data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkComparison.log +52 -0
- data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast-autocorrelation.dat +1000 -0
- data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast.dat +1001 -0
- data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty-autocorrelation.dat +900 -0
- data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty.dat +901 -0
- data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe-autocorrelation.dat +1000 -0
- data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe.dat +1001 -0
- data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt.log +261 -0
- data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast-autocorrelation.dat +1000 -0
- data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast.dat +1001 -0
- data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty-autocorrelation.dat +1000 -0
- data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty.dat +1001 -0
- data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe-autocorrelation.dat +1000 -0
- data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe.dat +1001 -0
- data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure.log +262 -0
- data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator-autocorrelation.dat +1000 -0
- data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator.dat +1001 -0
- data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails.log +82 -0
- data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkComparison.log +34 -0
- data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser-autocorrelation.dat +900 -0
- data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser.dat +901 -0
- data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt.log +81 -0
- data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser-autocorrelation.dat +1000 -0
- data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser.dat +1001 -0
- data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure.log +82 -0
- data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser-autocorrelation.dat +1000 -0
- data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser.dat +1001 -0
- data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails.log +82 -0
- data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser-autocorrelation.dat +1000 -0
- data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser.dat +1001 -0
- data/vendor/bundle/gems/json-1.6.4/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML.log +82 -0
- data/vendor/bundle/gems/json-1.6.4/benchmarks/data/.keep +0 -0
- data/vendor/bundle/gems/json-1.6.4/benchmarks/generator2_benchmark.rb +222 -0
- data/vendor/bundle/gems/json-1.6.4/benchmarks/generator_benchmark.rb +224 -0
- data/vendor/bundle/gems/json-1.6.4/benchmarks/ohai.json +1216 -0
- data/vendor/bundle/gems/json-1.6.4/benchmarks/ohai.ruby +1 -0
- data/vendor/bundle/gems/json-1.6.4/benchmarks/parser2_benchmark.rb +251 -0
- data/vendor/bundle/gems/json-1.6.4/benchmarks/parser_benchmark.rb +259 -0
- data/vendor/bundle/gems/json-1.6.4/data/example.json +1 -0
- data/vendor/bundle/gems/json-1.6.4/data/index.html +38 -0
- data/vendor/bundle/gems/json-1.6.4/data/prototype.js +4184 -0
- data/vendor/bundle/gems/json-1.6.4/diagrams/.keep +0 -0
- data/vendor/bundle/gems/json-1.6.4/ext/json/ext/fbuffer/fbuffer.h +156 -0
- data/vendor/bundle/gems/json-1.6.4/ext/json/ext/generator/Makefile +187 -0
- data/vendor/bundle/gems/json-1.6.4/ext/json/ext/generator/extconf.rb +13 -0
- data/vendor/bundle/gems/json-1.6.4/ext/json/ext/generator/generator.bundle +0 -0
- data/vendor/bundle/gems/json-1.6.4/ext/json/ext/generator/generator.c +1384 -0
- data/vendor/bundle/gems/json-1.6.4/ext/json/ext/generator/generator.h +161 -0
- data/vendor/bundle/gems/json-1.6.4/ext/json/ext/generator/generator.o +0 -0
- data/vendor/bundle/gems/json-1.6.4/ext/json/ext/json/ext/generator.bundle +0 -0
- data/vendor/bundle/gems/json-1.6.4/ext/json/ext/json/ext/parser.bundle +0 -0
- data/vendor/bundle/gems/json-1.6.4/ext/json/ext/parser/Makefile +187 -0
- data/vendor/bundle/gems/json-1.6.4/ext/json/ext/parser/extconf.rb +13 -0
- data/vendor/bundle/gems/json-1.6.4/ext/json/ext/parser/parser.bundle +0 -0
- data/vendor/bundle/gems/json-1.6.4/ext/json/ext/parser/parser.c +2203 -0
- data/vendor/bundle/gems/json-1.6.4/ext/json/ext/parser/parser.h +77 -0
- data/vendor/bundle/gems/json-1.6.4/ext/json/ext/parser/parser.o +0 -0
- data/vendor/bundle/gems/json-1.6.4/ext/json/ext/parser/parser.rl +926 -0
- data/vendor/bundle/gems/json-1.6.4/install.rb +19 -0
- data/vendor/bundle/gems/json-1.6.4/java/src/json/ext/ByteListTranscoder.java +167 -0
- data/vendor/bundle/gems/json-1.6.4/java/src/json/ext/Generator.java +437 -0
- data/vendor/bundle/gems/json-1.6.4/java/src/json/ext/GeneratorMethods.java +232 -0
- data/vendor/bundle/gems/json-1.6.4/java/src/json/ext/GeneratorService.java +43 -0
- data/vendor/bundle/gems/json-1.6.4/java/src/json/ext/GeneratorState.java +522 -0
- data/vendor/bundle/gems/json-1.6.4/java/src/json/ext/OptionsReader.java +113 -0
- data/vendor/bundle/gems/json-1.6.4/java/src/json/ext/Parser.java +2640 -0
- data/vendor/bundle/gems/json-1.6.4/java/src/json/ext/Parser.rl +964 -0
- data/vendor/bundle/gems/json-1.6.4/java/src/json/ext/ParserService.java +35 -0
- data/vendor/bundle/gems/json-1.6.4/java/src/json/ext/RuntimeInfo.java +121 -0
- data/vendor/bundle/gems/json-1.6.4/java/src/json/ext/StringDecoder.java +166 -0
- data/vendor/bundle/gems/json-1.6.4/java/src/json/ext/StringEncoder.java +106 -0
- data/vendor/bundle/gems/json-1.6.4/java/src/json/ext/Utils.java +89 -0
- data/vendor/bundle/gems/json-1.6.4/json-java.gemspec +22 -0
- data/vendor/bundle/gems/json-1.6.4/json.gemspec +40 -0
- data/vendor/bundle/gems/json-1.6.4/json_pure.gemspec +42 -0
- data/vendor/bundle/gems/json-1.6.4/lib/json.rb +62 -0
- data/vendor/bundle/gems/json-1.6.4/lib/json/add/bigdecimal.rb +21 -0
- data/vendor/bundle/gems/json-1.6.4/lib/json/add/complex.rb +22 -0
- data/vendor/bundle/gems/json-1.6.4/lib/json/add/core.rb +11 -0
- data/vendor/bundle/gems/json-1.6.4/lib/json/add/date.rb +34 -0
- data/vendor/bundle/gems/json-1.6.4/lib/json/add/date_time.rb +50 -0
- data/vendor/bundle/gems/json-1.6.4/lib/json/add/exception.rb +31 -0
- data/vendor/bundle/gems/json-1.6.4/lib/json/add/ostruct.rb +31 -0
- data/vendor/bundle/gems/json-1.6.4/lib/json/add/range.rb +29 -0
- data/vendor/bundle/gems/json-1.6.4/lib/json/add/rational.rb +22 -0
- data/vendor/bundle/gems/json-1.6.4/lib/json/add/regexp.rb +30 -0
- data/vendor/bundle/gems/json-1.6.4/lib/json/add/struct.rb +30 -0
- data/vendor/bundle/gems/json-1.6.4/lib/json/add/symbol.rb +25 -0
- data/vendor/bundle/gems/json-1.6.4/lib/json/add/time.rb +35 -0
- data/vendor/bundle/gems/json-1.6.4/lib/json/common.rb +470 -0
- data/vendor/bundle/gems/json-1.6.4/lib/json/ext.rb +21 -0
- data/vendor/bundle/gems/json-1.6.4/lib/json/ext/.keep +0 -0
- data/vendor/bundle/gems/json-1.6.4/lib/json/pure.rb +21 -0
- data/vendor/bundle/gems/json-1.6.4/lib/json/pure/generator.rb +468 -0
- data/vendor/bundle/gems/json-1.6.4/lib/json/pure/parser.rb +359 -0
- data/vendor/bundle/gems/json-1.6.4/lib/json/version.rb +8 -0
- data/vendor/bundle/gems/json-1.6.4/tests/fixtures/fail1.json +1 -0
- data/vendor/bundle/gems/json-1.6.4/tests/fixtures/fail10.json +1 -0
- data/vendor/bundle/gems/json-1.6.4/tests/fixtures/fail11.json +1 -0
- data/vendor/bundle/gems/json-1.6.4/tests/fixtures/fail12.json +1 -0
- data/vendor/bundle/gems/json-1.6.4/tests/fixtures/fail13.json +1 -0
- data/vendor/bundle/gems/json-1.6.4/tests/fixtures/fail14.json +1 -0
- data/vendor/bundle/gems/json-1.6.4/tests/fixtures/fail18.json +1 -0
- data/vendor/bundle/gems/json-1.6.4/tests/fixtures/fail19.json +1 -0
- data/vendor/bundle/gems/json-1.6.4/tests/fixtures/fail2.json +1 -0
- data/vendor/bundle/gems/json-1.6.4/tests/fixtures/fail20.json +1 -0
- data/vendor/bundle/gems/json-1.6.4/tests/fixtures/fail21.json +1 -0
- data/vendor/bundle/gems/json-1.6.4/tests/fixtures/fail22.json +1 -0
- data/vendor/bundle/gems/json-1.6.4/tests/fixtures/fail23.json +1 -0
- data/vendor/bundle/gems/json-1.6.4/tests/fixtures/fail24.json +1 -0
- data/vendor/bundle/gems/json-1.6.4/tests/fixtures/fail25.json +1 -0
- data/vendor/bundle/gems/json-1.6.4/tests/fixtures/fail27.json +2 -0
- data/vendor/bundle/gems/json-1.6.4/tests/fixtures/fail28.json +2 -0
- data/vendor/bundle/gems/json-1.6.4/tests/fixtures/fail3.json +1 -0
- data/vendor/bundle/gems/json-1.6.4/tests/fixtures/fail4.json +1 -0
- data/vendor/bundle/gems/json-1.6.4/tests/fixtures/fail5.json +1 -0
- data/vendor/bundle/gems/json-1.6.4/tests/fixtures/fail6.json +1 -0
- data/vendor/bundle/gems/json-1.6.4/tests/fixtures/fail7.json +1 -0
- data/vendor/bundle/gems/json-1.6.4/tests/fixtures/fail8.json +1 -0
- data/vendor/bundle/gems/json-1.6.4/tests/fixtures/fail9.json +1 -0
- data/vendor/bundle/gems/json-1.6.4/tests/fixtures/pass1.json +56 -0
- data/vendor/bundle/gems/json-1.6.4/tests/fixtures/pass15.json +1 -0
- data/vendor/bundle/gems/json-1.6.4/tests/fixtures/pass16.json +1 -0
- data/vendor/bundle/gems/json-1.6.4/tests/fixtures/pass17.json +1 -0
- data/vendor/bundle/gems/json-1.6.4/tests/fixtures/pass2.json +1 -0
- data/vendor/bundle/gems/json-1.6.4/tests/fixtures/pass26.json +1 -0
- data/vendor/bundle/gems/json-1.6.4/tests/fixtures/pass3.json +6 -0
- data/vendor/bundle/gems/json-1.6.4/tests/setup_variant.rb +11 -0
- data/vendor/bundle/gems/json-1.6.4/tests/test_json.rb +527 -0
- data/vendor/bundle/gems/json-1.6.4/tests/test_json_addition.rb +188 -0
- data/vendor/bundle/gems/json-1.6.4/tests/test_json_encoding.rb +65 -0
- data/vendor/bundle/gems/json-1.6.4/tests/test_json_fixtures.rb +35 -0
- data/vendor/bundle/gems/json-1.6.4/tests/test_json_generate.rb +249 -0
- data/vendor/bundle/gems/json-1.6.4/tests/test_json_string_matching.rb +40 -0
- data/vendor/bundle/gems/json-1.6.4/tests/test_json_unicode.rb +72 -0
- data/vendor/bundle/gems/json-1.6.4/tools/fuzz.rb +139 -0
- data/vendor/bundle/gems/json-1.6.4/tools/server.rb +62 -0
- data/vendor/bundle/gems/rake-0.9.2.2/.gemtest +0 -0
- data/vendor/bundle/gems/rake-0.9.2.2/CHANGES +522 -0
- data/vendor/bundle/gems/rake-0.9.2.2/MIT-LICENSE +21 -0
- data/vendor/bundle/gems/rake-0.9.2.2/README.rdoc +197 -0
- data/vendor/bundle/gems/rake-0.9.2.2/Rakefile +369 -0
- data/vendor/bundle/gems/rake-0.9.2.2/TODO +20 -0
- data/vendor/bundle/gems/rake-0.9.2.2/bin/rake +33 -0
- data/vendor/bundle/gems/rake-0.9.2.2/install.rb +90 -0
- data/vendor/bundle/gems/rake-0.9.2.2/lib/rake.rb +69 -0
- data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/alt_system.rb +109 -0
- data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/application.rb +595 -0
- data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/classic_namespace.rb +11 -0
- data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/clean.rb +32 -0
- data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/cloneable.rb +25 -0
- data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/contrib/compositepublisher.rb +21 -0
- data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/contrib/ftptools.rb +150 -0
- data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/contrib/publisher.rb +73 -0
- data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/contrib/rubyforgepublisher.rb +16 -0
- data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/contrib/sshpublisher.rb +50 -0
- data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/contrib/sys.rb +191 -0
- data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/default_loader.rb +10 -0
- data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/dsl_definition.rb +176 -0
- data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/early_time.rb +18 -0
- data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/ext/core.rb +27 -0
- data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/ext/module.rb +39 -0
- data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/ext/string.rb +167 -0
- data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/ext/time.rb +14 -0
- data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/file_creation_task.rb +24 -0
- data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/file_list.rb +403 -0
- data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/file_task.rb +47 -0
- data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/file_utils.rb +114 -0
- data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/file_utils_ext.rb +145 -0
- data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/gempackagetask.rb +15 -0
- data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/invocation_chain.rb +51 -0
- data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/invocation_exception_mixin.rb +16 -0
- data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/loaders/makefile.rb +40 -0
- data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/multi_task.rb +16 -0
- data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/name_space.rb +25 -0
- data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/packagetask.rb +185 -0
- data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/pathmap.rb +1 -0
- data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/pseudo_status.rb +24 -0
- data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/rake_module.rb +29 -0
- data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/rake_test_loader.rb +22 -0
- data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/rdoctask.rb +234 -0
- data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/ruby182_test_unit_fix.rb +25 -0
- data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/rule_recursion_overflow_error.rb +20 -0
- data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/runtest.rb +21 -0
- data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/task.rb +327 -0
- data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/task_argument_error.rb +7 -0
- data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/task_arguments.rb +78 -0
- data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/task_manager.rb +307 -0
- data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/tasklib.rb +22 -0
- data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/testtask.rb +191 -0
- data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/version.rb +8 -0
- data/vendor/bundle/gems/rake-0.9.2.2/lib/rake/win32.rb +55 -0
- data/vendor/bundle/gems/rake-0.9.2.2/test/file_creation.rb +34 -0
- data/vendor/bundle/gems/rake-0.9.2.2/test/helper.rb +492 -0
- data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake.rb +40 -0
- data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_application.rb +489 -0
- data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_application_options.rb +335 -0
- data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_clean.rb +14 -0
- data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_definitions.rb +80 -0
- data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_directory_task.rb +46 -0
- data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_dsl.rb +77 -0
- data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_early_time.rb +31 -0
- data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_extension.rb +59 -0
- data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_file_creation_task.rb +56 -0
- data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_file_list.rb +628 -0
- data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_file_list_path_map.rb +8 -0
- data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_file_task.rb +102 -0
- data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_file_utils.rb +305 -0
- data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_ftp_file.rb +59 -0
- data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_functional.rb +450 -0
- data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_invocation_chain.rb +52 -0
- data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_makefile_loader.rb +44 -0
- data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_multi_task.rb +51 -0
- data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_name_space.rb +43 -0
- data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_package_task.rb +79 -0
- data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_path_map.rb +157 -0
- data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_path_map_explode.rb +34 -0
- data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_path_map_partial.rb +18 -0
- data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_pseudo_status.rb +21 -0
- data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_rake_test_loader.rb +21 -0
- data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_rdoc_task.rb +83 -0
- data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_require.rb +40 -0
- data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_rules.rb +327 -0
- data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_task.rb +267 -0
- data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_task_argument_parsing.rb +103 -0
- data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_task_arguments.rb +88 -0
- data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_task_lib.rb +9 -0
- data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_task_manager.rb +157 -0
- data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_task_manager_argument_resolution.rb +36 -0
- data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_task_with_arguments.rb +173 -0
- data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_test_task.rb +120 -0
- data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_top_level_functions.rb +111 -0
- data/vendor/bundle/gems/rake-0.9.2.2/test/test_rake_win32.rb +72 -0
- data/vendor/bundle/gems/rake-0.9.2.2/test/test_sys.rb +20 -0
- data/vendor/bundle/specifications/json-1.6.4.gemspec +39 -0
- data/vendor/bundle/specifications/rake-0.9.2.2.gemspec +34 -0
- metadata +285 -18
data/.rbenv-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
1.9.2-p290
|
data/.travis.yml
ADDED
data/CHANGELOG.md
ADDED
data/README.md
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
# Nutshell CRM [](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
|
1
|
+
require 'bundler/gem_tasks'
|
2
|
+
require 'rake'
|
3
|
+
require 'rake/task'
|
4
|
+
require 'rake/testtask'
|
2
5
|
|
3
|
-
task :
|
4
|
-
exec
|
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
|
data/lib/nutshell-crm.rb
CHANGED
@@ -6,10 +6,21 @@ require 'httparty'
|
|
6
6
|
# @author Michael Shafrir
|
7
7
|
module NutshellCrm
|
8
8
|
class Client
|
9
|
-
|
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 [
|
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
|
-
|
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(
|
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']
|