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.
- 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 [![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
|
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']
|