kinetic_sdk 0.1.1
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.
- checksums.yaml +7 -0
- data/GettingStarted.md +64 -0
- data/README.md +383 -0
- data/bin/console +12 -0
- data/bin/setup +8 -0
- data/gems/kontena-websocket-client-0.1.1/Gemfile +4 -0
- data/gems/kontena-websocket-client-0.1.1/LICENSE +190 -0
- data/gems/kontena-websocket-client-0.1.1/README.md +138 -0
- data/gems/kontena-websocket-client-0.1.1/Rakefile +6 -0
- data/gems/kontena-websocket-client-0.1.1/benchmark/benchmark-client.rb +45 -0
- data/gems/kontena-websocket-client-0.1.1/benchmark/benchmark-em.rb +66 -0
- data/gems/kontena-websocket-client-0.1.1/benchmark/benchmark.rb +161 -0
- data/gems/kontena-websocket-client-0.1.1/benchmark/benchmark.sh +17 -0
- data/gems/kontena-websocket-client-0.1.1/benchmark/websocket-echo-server.go +207 -0
- data/gems/kontena-websocket-client-0.1.1/examples/websocket-echo-client.rb +80 -0
- data/gems/kontena-websocket-client-0.1.1/kontena-websocket-client.gemspec +24 -0
- data/gems/kontena-websocket-client-0.1.1/lib/kontena/websocket/client/connection.rb +119 -0
- data/gems/kontena-websocket-client-0.1.1/lib/kontena/websocket/client/version.rb +13 -0
- data/gems/kontena-websocket-client-0.1.1/lib/kontena/websocket/client.rb +848 -0
- data/gems/kontena-websocket-client-0.1.1/lib/kontena/websocket/error.rb +81 -0
- data/gems/kontena-websocket-client-0.1.1/lib/kontena/websocket/logging.rb +55 -0
- data/gems/kontena-websocket-client-0.1.1/lib/kontena/websocket/openssl_patch.rb +10 -0
- data/gems/kontena-websocket-client-0.1.1/lib/kontena-websocket-client.rb +15 -0
- data/gems/mime-types-3.1/Code-of-Conduct.rdoc +74 -0
- data/gems/mime-types-3.1/Contributing.rdoc +130 -0
- data/gems/mime-types-3.1/History.rdoc +658 -0
- data/gems/mime-types-3.1/Licence.rdoc +25 -0
- data/gems/mime-types-3.1/Manifest.txt +31 -0
- data/gems/mime-types-3.1/README.rdoc +202 -0
- data/gems/mime-types-3.1/Rakefile +254 -0
- data/gems/mime-types-3.1/lib/mime/type/columnar.rb +55 -0
- data/gems/mime-types-3.1/lib/mime/type.rb +573 -0
- data/gems/mime-types-3.1/lib/mime/types/_columnar.rb +135 -0
- data/gems/mime-types-3.1/lib/mime/types/cache.rb +56 -0
- data/gems/mime-types-3.1/lib/mime/types/columnar.rb +1 -0
- data/gems/mime-types-3.1/lib/mime/types/container.rb +30 -0
- data/gems/mime-types-3.1/lib/mime/types/deprecations.rb +32 -0
- data/gems/mime-types-3.1/lib/mime/types/full.rb +17 -0
- data/gems/mime-types-3.1/lib/mime/types/loader.rb +148 -0
- data/gems/mime-types-3.1/lib/mime/types/logger.rb +37 -0
- data/gems/mime-types-3.1/lib/mime/types/registry.rb +81 -0
- data/gems/mime-types-3.1/lib/mime/types.rb +228 -0
- data/gems/mime-types-3.1/lib/mime-types.rb +1 -0
- data/gems/mime-types-3.1/test/bad-fixtures/malformed +9 -0
- data/gems/mime-types-3.1/test/fixture/json.json +1 -0
- data/gems/mime-types-3.1/test/fixture/old-data +9 -0
- data/gems/mime-types-3.1/test/fixture/yaml.yaml +55 -0
- data/gems/mime-types-3.1/test/minitest_helper.rb +13 -0
- data/gems/mime-types-3.1/test/test_mime_type.rb +603 -0
- data/gems/mime-types-3.1/test/test_mime_types.rb +161 -0
- data/gems/mime-types-3.1/test/test_mime_types_cache.rb +109 -0
- data/gems/mime-types-3.1/test/test_mime_types_class.rb +155 -0
- data/gems/mime-types-3.1/test/test_mime_types_lazy.rb +43 -0
- data/gems/mime-types-3.1/test/test_mime_types_loader.rb +32 -0
- data/gems/mime-types-data-3.2016.0521/Code-of-Conduct.md +75 -0
- data/gems/mime-types-data-3.2016.0521/Contributing.md +157 -0
- data/gems/mime-types-data-3.2016.0521/History.md +351 -0
- data/gems/mime-types-data-3.2016.0521/Licence.md +25 -0
- data/gems/mime-types-data-3.2016.0521/Manifest.txt +18 -0
- data/gems/mime-types-data-3.2016.0521/README.md +61 -0
- data/gems/mime-types-data-3.2016.0521/Rakefile +80 -0
- data/gems/mime-types-data-3.2016.0521/data/mime-types.json +1 -0
- data/gems/mime-types-data-3.2016.0521/data/mime.content_type.column +1964 -0
- data/gems/mime-types-data-3.2016.0521/data/mime.docs.column +1964 -0
- data/gems/mime-types-data-3.2016.0521/data/mime.encoding.column +1964 -0
- data/gems/mime-types-data-3.2016.0521/data/mime.flags.column +1964 -0
- data/gems/mime-types-data-3.2016.0521/data/mime.friendly.column +1964 -0
- data/gems/mime-types-data-3.2016.0521/data/mime.pext.column +1964 -0
- data/gems/mime-types-data-3.2016.0521/data/mime.use_instead.column +1964 -0
- data/gems/mime-types-data-3.2016.0521/data/mime.xrefs.column +1964 -0
- data/gems/mime-types-data-3.2016.0521/lib/mime/types/data.rb +21 -0
- data/gems/mime-types-data-3.2016.0521/lib/mime-types-data.rb +3 -0
- data/gems/multipart-post-2.0.0/Gemfile +14 -0
- data/gems/multipart-post-2.0.0/History.txt +60 -0
- data/gems/multipart-post-2.0.0/Manifest.txt +9 -0
- data/gems/multipart-post-2.0.0/README.md +77 -0
- data/gems/multipart-post-2.0.0/Rakefile +9 -0
- data/gems/multipart-post-2.0.0/lib/composite_io.rb +108 -0
- data/gems/multipart-post-2.0.0/lib/multipart_post.rb +9 -0
- data/gems/multipart-post-2.0.0/lib/multipartable.rb +29 -0
- data/gems/multipart-post-2.0.0/lib/net/http/post/multipart.rb +27 -0
- data/gems/multipart-post-2.0.0/lib/parts.rb +96 -0
- data/gems/multipart-post-2.0.0/multipart-post.gemspec +22 -0
- data/gems/multipart-post-2.0.0/test/multibyte.txt +1 -0
- data/gems/multipart-post-2.0.0/test/net/http/post/test_multipart.rb +110 -0
- data/gems/multipart-post-2.0.0/test/test_composite_io.rb +115 -0
- data/gems/multipart-post-2.0.0/test/test_parts.rb +86 -0
- data/gems/parallel-1.12.1/MIT-LICENSE.txt +20 -0
- data/gems/parallel-1.12.1/lib/parallel/processor_count.rb +93 -0
- data/gems/parallel-1.12.1/lib/parallel/version.rb +3 -0
- data/gems/parallel-1.12.1/lib/parallel.rb +500 -0
- data/gems/ruby-progressbar-1.9.0/LICENSE.txt +19 -0
- data/gems/ruby-progressbar-1.9.0/README.md +38 -0
- data/gems/ruby-progressbar-1.9.0/Rakefile +2 -0
- data/gems/ruby-progressbar-1.9.0/lib/ruby-progressbar/base.rb +183 -0
- data/gems/ruby-progressbar-1.9.0/lib/ruby-progressbar/calculators/length.rb +99 -0
- data/gems/ruby-progressbar-1.9.0/lib/ruby-progressbar/calculators/running_average.rb +9 -0
- data/gems/ruby-progressbar-1.9.0/lib/ruby-progressbar/components/bar.rb +96 -0
- data/gems/ruby-progressbar-1.9.0/lib/ruby-progressbar/components/percentage.rb +29 -0
- data/gems/ruby-progressbar-1.9.0/lib/ruby-progressbar/components/rate.rb +43 -0
- data/gems/ruby-progressbar-1.9.0/lib/ruby-progressbar/components/time.rb +107 -0
- data/gems/ruby-progressbar-1.9.0/lib/ruby-progressbar/components/title.rb +13 -0
- data/gems/ruby-progressbar-1.9.0/lib/ruby-progressbar/components.rb +5 -0
- data/gems/ruby-progressbar-1.9.0/lib/ruby-progressbar/errors/invalid_progress_error.rb +4 -0
- data/gems/ruby-progressbar-1.9.0/lib/ruby-progressbar/format/formatter.rb +27 -0
- data/gems/ruby-progressbar-1.9.0/lib/ruby-progressbar/format/molecule.rb +59 -0
- data/gems/ruby-progressbar-1.9.0/lib/ruby-progressbar/format/string.rb +36 -0
- data/gems/ruby-progressbar-1.9.0/lib/ruby-progressbar/format.rb +3 -0
- data/gems/ruby-progressbar-1.9.0/lib/ruby-progressbar/output.rb +68 -0
- data/gems/ruby-progressbar-1.9.0/lib/ruby-progressbar/outputs/non_tty.rb +47 -0
- data/gems/ruby-progressbar-1.9.0/lib/ruby-progressbar/outputs/null.rb +33 -0
- data/gems/ruby-progressbar-1.9.0/lib/ruby-progressbar/outputs/tty.rb +32 -0
- data/gems/ruby-progressbar-1.9.0/lib/ruby-progressbar/progress.rb +118 -0
- data/gems/ruby-progressbar-1.9.0/lib/ruby-progressbar/refinements/enumerator.rb +25 -0
- data/gems/ruby-progressbar-1.9.0/lib/ruby-progressbar/refinements.rb +1 -0
- data/gems/ruby-progressbar-1.9.0/lib/ruby-progressbar/throttle.rb +25 -0
- data/gems/ruby-progressbar-1.9.0/lib/ruby-progressbar/time.rb +30 -0
- data/gems/ruby-progressbar-1.9.0/lib/ruby-progressbar/timer.rb +72 -0
- data/gems/ruby-progressbar-1.9.0/lib/ruby-progressbar/version.rb +3 -0
- data/gems/ruby-progressbar-1.9.0/lib/ruby-progressbar.rb +18 -0
- data/gems/slugify-1.0.7/README +18 -0
- data/gems/slugify-1.0.7/lib/slugify.rb +1012 -0
- data/gems/slugify-1.0.7/lib/slugify_string.rb +11 -0
- data/gems/slugify-1.0.7/tests/slugify_test.rb +116 -0
- data/gems/slugify-1.0.7/tests/string_slugify_test.rb +23 -0
- data/gems/websocket-driver-0.6.5/CHANGELOG.md +123 -0
- data/gems/websocket-driver-0.6.5/LICENSE.md +22 -0
- data/gems/websocket-driver-0.6.5/README.md +369 -0
- data/gems/websocket-driver-0.6.5/examples/tcp_server.rb +28 -0
- data/gems/websocket-driver-0.6.5/ext/websocket-driver/Makefile +264 -0
- data/gems/websocket-driver-0.6.5/ext/websocket-driver/WebsocketMaskService.java +55 -0
- data/gems/websocket-driver-0.6.5/ext/websocket-driver/extconf.rb +4 -0
- data/gems/websocket-driver-0.6.5/ext/websocket-driver/websocket_mask.bundle +0 -0
- data/gems/websocket-driver-0.6.5/ext/websocket-driver/websocket_mask.c +41 -0
- data/gems/websocket-driver-0.6.5/ext/websocket-driver/websocket_mask.o +0 -0
- data/gems/websocket-driver-0.6.5/lib/websocket/driver/client.rb +140 -0
- data/gems/websocket-driver-0.6.5/lib/websocket/driver/draft75.rb +102 -0
- data/gems/websocket-driver-0.6.5/lib/websocket/driver/draft76.rb +96 -0
- data/gems/websocket-driver-0.6.5/lib/websocket/driver/event_emitter.rb +54 -0
- data/gems/websocket-driver-0.6.5/lib/websocket/driver/headers.rb +45 -0
- data/gems/websocket-driver-0.6.5/lib/websocket/driver/hybi/frame.rb +20 -0
- data/gems/websocket-driver-0.6.5/lib/websocket/driver/hybi/message.rb +31 -0
- data/gems/websocket-driver-0.6.5/lib/websocket/driver/hybi.rb +406 -0
- data/gems/websocket-driver-0.6.5/lib/websocket/driver/proxy.rb +68 -0
- data/gems/websocket-driver-0.6.5/lib/websocket/driver/server.rb +80 -0
- data/gems/websocket-driver-0.6.5/lib/websocket/driver/stream_reader.rb +55 -0
- data/gems/websocket-driver-0.6.5/lib/websocket/driver.rb +199 -0
- data/gems/websocket-driver-0.6.5/lib/websocket/http/headers.rb +112 -0
- data/gems/websocket-driver-0.6.5/lib/websocket/http/request.rb +45 -0
- data/gems/websocket-driver-0.6.5/lib/websocket/http/response.rb +29 -0
- data/gems/websocket-driver-0.6.5/lib/websocket/http.rb +15 -0
- data/gems/websocket-driver-0.6.5/lib/websocket/mask.rb +14 -0
- data/gems/websocket-driver-0.6.5/lib/websocket/websocket_mask.rb +2 -0
- data/gems/websocket-driver-0.6.5/lib/websocket_mask.bundle +0 -0
- data/gems/websocket-driver-0.6.5-java/CHANGELOG.md +123 -0
- data/gems/websocket-driver-0.6.5-java/LICENSE.md +22 -0
- data/gems/websocket-driver-0.6.5-java/README.md +369 -0
- data/gems/websocket-driver-0.6.5-java/examples/tcp_server.rb +28 -0
- data/gems/websocket-driver-0.6.5-java/ext/websocket-driver/WebsocketMaskService.java +55 -0
- data/gems/websocket-driver-0.6.5-java/ext/websocket-driver/extconf.rb +4 -0
- data/gems/websocket-driver-0.6.5-java/ext/websocket-driver/websocket_mask.c +41 -0
- data/gems/websocket-driver-0.6.5-java/lib/websocket/driver/client.rb +140 -0
- data/gems/websocket-driver-0.6.5-java/lib/websocket/driver/draft75.rb +102 -0
- data/gems/websocket-driver-0.6.5-java/lib/websocket/driver/draft76.rb +96 -0
- data/gems/websocket-driver-0.6.5-java/lib/websocket/driver/event_emitter.rb +54 -0
- data/gems/websocket-driver-0.6.5-java/lib/websocket/driver/headers.rb +45 -0
- data/gems/websocket-driver-0.6.5-java/lib/websocket/driver/hybi/frame.rb +20 -0
- data/gems/websocket-driver-0.6.5-java/lib/websocket/driver/hybi/message.rb +31 -0
- data/gems/websocket-driver-0.6.5-java/lib/websocket/driver/hybi.rb +406 -0
- data/gems/websocket-driver-0.6.5-java/lib/websocket/driver/proxy.rb +68 -0
- data/gems/websocket-driver-0.6.5-java/lib/websocket/driver/server.rb +80 -0
- data/gems/websocket-driver-0.6.5-java/lib/websocket/driver/stream_reader.rb +55 -0
- data/gems/websocket-driver-0.6.5-java/lib/websocket/driver.rb +199 -0
- data/gems/websocket-driver-0.6.5-java/lib/websocket/http/headers.rb +112 -0
- data/gems/websocket-driver-0.6.5-java/lib/websocket/http/request.rb +45 -0
- data/gems/websocket-driver-0.6.5-java/lib/websocket/http/response.rb +29 -0
- data/gems/websocket-driver-0.6.5-java/lib/websocket/http.rb +15 -0
- data/gems/websocket-driver-0.6.5-java/lib/websocket/mask.rb +14 -0
- data/gems/websocket-driver-0.6.5-java/lib/websocket/websocket_mask.rb +2 -0
- data/gems/websocket-driver-0.6.5-java/lib/websocket_mask.jar +0 -0
- data/gems/websocket-extensions-0.1.3/CHANGELOG.md +15 -0
- data/gems/websocket-extensions-0.1.3/LICENSE.md +20 -0
- data/gems/websocket-extensions-0.1.3/README.md +313 -0
- data/gems/websocket-extensions-0.1.3/lib/websocket/extensions/parser.rb +111 -0
- data/gems/websocket-extensions-0.1.3/lib/websocket/extensions.rb +181 -0
- data/lib/kinetic-sdk.rb +1 -0
- data/lib/kinetic_sdk/bridgehub/bridgehub-sdk.rb +80 -0
- data/lib/kinetic_sdk/bridgehub/lib/access_keys.rb +67 -0
- data/lib/kinetic_sdk/bridgehub/lib/bridge.rb +69 -0
- data/lib/kinetic_sdk/discussions/discussions-sdk.rb +165 -0
- data/lib/kinetic_sdk/discussions/lib/discussions.rb +107 -0
- data/lib/kinetic_sdk/discussions/lib/invitations.rb +120 -0
- data/lib/kinetic_sdk/discussions/lib/messages.rb +190 -0
- data/lib/kinetic_sdk/discussions/lib/meta.rb +14 -0
- data/lib/kinetic_sdk/discussions/lib/participants.rb +64 -0
- data/lib/kinetic_sdk/discussions/lib/related_items.rb +54 -0
- data/lib/kinetic_sdk/discussions/lib/websockets.rb +96 -0
- data/lib/kinetic_sdk/filehub/filehub-sdk.rb +80 -0
- data/lib/kinetic_sdk/filehub/lib/access_keys.rb +67 -0
- data/lib/kinetic_sdk/filehub/lib/filestores.rb +67 -0
- data/lib/kinetic_sdk/request_ce/lib/attribute_definitions.rb +153 -0
- data/lib/kinetic_sdk/request_ce/lib/bridges.rb +66 -0
- data/lib/kinetic_sdk/request_ce/lib/categories.rb +34 -0
- data/lib/kinetic_sdk/request_ce/lib/datastore_form.rb +110 -0
- data/lib/kinetic_sdk/request_ce/lib/datastore_submissions.rb +157 -0
- data/lib/kinetic_sdk/request_ce/lib/form.rb +99 -0
- data/lib/kinetic_sdk/request_ce/lib/form_types.rb +51 -0
- data/lib/kinetic_sdk/request_ce/lib/jwt.rb +55 -0
- data/lib/kinetic_sdk/request_ce/lib/kapp.rb +93 -0
- data/lib/kinetic_sdk/request_ce/lib/meta.rb +14 -0
- data/lib/kinetic_sdk/request_ce/lib/oauth.rb +37 -0
- data/lib/kinetic_sdk/request_ce/lib/security_policy_definitions.rb +157 -0
- data/lib/kinetic_sdk/request_ce/lib/space.rb +89 -0
- data/lib/kinetic_sdk/request_ce/lib/submissions.rb +215 -0
- data/lib/kinetic_sdk/request_ce/lib/system_api.rb +69 -0
- data/lib/kinetic_sdk/request_ce/lib/teams.rb +113 -0
- data/lib/kinetic_sdk/request_ce/lib/users.rb +245 -0
- data/lib/kinetic_sdk/request_ce/lib/webhook_jobs.rb +142 -0
- data/lib/kinetic_sdk/request_ce/lib/webhooks.rb +192 -0
- data/lib/kinetic_sdk/request_ce/request-ce-sdk.rb +153 -0
- data/lib/kinetic_sdk/task/lib/access_keys.rb +94 -0
- data/lib/kinetic_sdk/task/lib/categories.rb +190 -0
- data/lib/kinetic_sdk/task/lib/config.rb +202 -0
- data/lib/kinetic_sdk/task/lib/engine.rb +42 -0
- data/lib/kinetic_sdk/task/lib/environment.rb +14 -0
- data/lib/kinetic_sdk/task/lib/errors.rb +165 -0
- data/lib/kinetic_sdk/task/lib/groups.rb +112 -0
- data/lib/kinetic_sdk/task/lib/handlers.rb +105 -0
- data/lib/kinetic_sdk/task/lib/health.rb +28 -0
- data/lib/kinetic_sdk/task/lib/license.rb +52 -0
- data/lib/kinetic_sdk/task/lib/policy_rules.rb +166 -0
- data/lib/kinetic_sdk/task/lib/setup.rb +56 -0
- data/lib/kinetic_sdk/task/lib/sources.rb +134 -0
- data/lib/kinetic_sdk/task/lib/tasks.rb +17 -0
- data/lib/kinetic_sdk/task/lib/trees.rb +274 -0
- data/lib/kinetic_sdk/task/lib/users.rb +75 -0
- data/lib/kinetic_sdk/task/task-sdk.rb +92 -0
- data/lib/kinetic_sdk/utils/kinetic-http-headers.rb +150 -0
- data/lib/kinetic_sdk/utils/kinetic-http-response.rb +75 -0
- data/lib/kinetic_sdk/utils/kinetic-http.rb +552 -0
- data/lib/kinetic_sdk/utils/logger.rb +70 -0
- data/lib/kinetic_sdk/utils/random.rb +30 -0
- data/lib/kinetic_sdk/version.rb +7 -0
- data/lib/kinetic_sdk.rb +57 -0
- metadata +414 -0
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
module KineticSdk
|
|
2
|
+
class Task
|
|
3
|
+
|
|
4
|
+
# Delete a tree.
|
|
5
|
+
#
|
|
6
|
+
# @param tree [String|Hash] either the tree title, or a hash consisting of component names
|
|
7
|
+
# @param headers [Hash] hash of headers to send, default is basic authentication
|
|
8
|
+
# @return [KineticSdk::Utils::KineticHttpResponse] object, with +code+, +message+, +content_string+, and +content+ properties
|
|
9
|
+
#
|
|
10
|
+
# Example
|
|
11
|
+
#
|
|
12
|
+
# delete_tree("Kinetic Request CE :: Win a Car :: Complete")
|
|
13
|
+
#
|
|
14
|
+
# Example
|
|
15
|
+
#
|
|
16
|
+
# delete_tree({
|
|
17
|
+
# "source_name" => "Kinetic Request CE",
|
|
18
|
+
# "group_name" => "Win a Car",
|
|
19
|
+
# "tree_name" => "Complete"
|
|
20
|
+
# })
|
|
21
|
+
#
|
|
22
|
+
def delete_tree(tree, headers=header_basic_auth)
|
|
23
|
+
if tree.is_a? Hash
|
|
24
|
+
title = "#{tree['source_name']} :: #{tree['group_name']} :: #{tree['tree_name']}"
|
|
25
|
+
else
|
|
26
|
+
title = "#{tree.to_s}"
|
|
27
|
+
end
|
|
28
|
+
info("Deleting Tree \"#{title}\"")
|
|
29
|
+
delete("#{@api_url}/trees/#{encode(title)}", headers)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Delete trees.
|
|
33
|
+
#
|
|
34
|
+
# If the source_name is provided, only trees that belong to the source
|
|
35
|
+
# will be deleted, otherwise all trees will be deleted.
|
|
36
|
+
#
|
|
37
|
+
# @param source_name [String] the name of the source, or nil to delete all trees
|
|
38
|
+
# @param headers [Hash] hash of headers to send, default is basic authentication
|
|
39
|
+
# @return [KineticSdk::Utils::KineticHttpResponse] object, with +code+, +message+, +content_string+, and +content+ properties
|
|
40
|
+
#
|
|
41
|
+
# Example
|
|
42
|
+
#
|
|
43
|
+
# delete_trees("Kinetic Request CE")
|
|
44
|
+
#
|
|
45
|
+
def delete_trees(source_name=nil, headers=header_basic_auth)
|
|
46
|
+
if source_name.nil?
|
|
47
|
+
info("Deleting all trees")
|
|
48
|
+
params = {}
|
|
49
|
+
else
|
|
50
|
+
info("Deleting trees for Source \"#{source_name}\"")
|
|
51
|
+
params = { "source" => source_name }
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
(find_trees(params, headers).content['trees'] || []).each do |tree|
|
|
55
|
+
info("Deleting tree \"#{tree['title']}\"")
|
|
56
|
+
delete("#{@api_url}/trees/#{encode(tree['title'])}", headers)
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
# Find trees.
|
|
62
|
+
#
|
|
63
|
+
# @param params [Hash] Query parameters that are added to the URL, such as +include+
|
|
64
|
+
# @param headers [Hash] hash of headers to send, default is basic authentication
|
|
65
|
+
# @return [KineticSdk::Utils::KineticHttpResponse] object, with +code+, +message+, +content_string+, and +content+ properties
|
|
66
|
+
#
|
|
67
|
+
# Example
|
|
68
|
+
#
|
|
69
|
+
# find_trees({ "source" => "Kinetic Request CE" })
|
|
70
|
+
#
|
|
71
|
+
# Example
|
|
72
|
+
#
|
|
73
|
+
# find_trees({ "include" => "details" })
|
|
74
|
+
#
|
|
75
|
+
# Example
|
|
76
|
+
#
|
|
77
|
+
# find_trees({ "source" => "Kinetic Request CE", "include" => "details" })
|
|
78
|
+
#
|
|
79
|
+
def find_trees(params={}, headers=header_basic_auth)
|
|
80
|
+
info("Finding Trees")
|
|
81
|
+
get("#{@api_url}/trees", params, headers)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
# Find routines.
|
|
85
|
+
#
|
|
86
|
+
# @param params [Hash] Query parameters that are added to the URL, such as +include+
|
|
87
|
+
# @param headers [Hash] hash of headers to send, default is basic authentication
|
|
88
|
+
# @return [KineticSdk::Utils::KineticHttpResponse] object, with +code+, +message+, +content_string+, and +content+ properties
|
|
89
|
+
#
|
|
90
|
+
# Example
|
|
91
|
+
#
|
|
92
|
+
# find_routines({ "source" => "Kinetic Request CE" })
|
|
93
|
+
#
|
|
94
|
+
# Example
|
|
95
|
+
#
|
|
96
|
+
# find_routines({ "include" => "details" })
|
|
97
|
+
#
|
|
98
|
+
# Example
|
|
99
|
+
#
|
|
100
|
+
# find_routines({ "source" => "Kinetic Request CE", "include" => "details" })
|
|
101
|
+
#
|
|
102
|
+
def find_routines(params={}, headers=header_basic_auth)
|
|
103
|
+
info("Finding Routines")
|
|
104
|
+
response = get("#{@api_url}/trees", params, headers)
|
|
105
|
+
|
|
106
|
+
routines = []
|
|
107
|
+
(response.content["trees"] || []).each do |tree|
|
|
108
|
+
routines.push(tree) unless tree['definitionId'].nil?
|
|
109
|
+
end
|
|
110
|
+
final_content = { "trees" => routines }
|
|
111
|
+
response.content= final_content
|
|
112
|
+
response.content_string= final_content.to_json
|
|
113
|
+
response
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
# Import a tree
|
|
117
|
+
#
|
|
118
|
+
# If the tree already exists on the server, this will fail unless forced
|
|
119
|
+
# to overwrite.
|
|
120
|
+
#
|
|
121
|
+
# The source named in the tree content must also exist on the server, or
|
|
122
|
+
# the import will fail.
|
|
123
|
+
#
|
|
124
|
+
# @param tree [String] content from tree file
|
|
125
|
+
# @param force_overwrite [Boolean] whether to overwrite a tree if it exists, default is false
|
|
126
|
+
# @param headers [Hash] hash of headers to send, default is basic authentication
|
|
127
|
+
# @return [KineticSdk::Utils::KineticHttpResponse] object, with +code+, +message+, +content_string+, and +content+ properties
|
|
128
|
+
def import_tree(tree, force_overwrite=false, headers=header_basic_auth)
|
|
129
|
+
body = { "content" => tree }
|
|
130
|
+
info("Importing Tree #{File.basename(tree)}")
|
|
131
|
+
post_multipart("#{@api_url}/trees?force=#{force_overwrite}", body, headers)
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
# Import a routine
|
|
135
|
+
#
|
|
136
|
+
# If the routine already exists on the server, this will fail unless
|
|
137
|
+
# forced to overwrite.
|
|
138
|
+
#
|
|
139
|
+
# @param routine [String] content from routine file
|
|
140
|
+
# @param force_overwrite [Boolean] whether to overwrite a routine if it exists, default is false
|
|
141
|
+
# @param headers [Hash] hash of headers to send, default is basic authentication
|
|
142
|
+
# @return [KineticSdk::Utils::KineticHttpResponse] object, with +code+, +message+, +content_string+, and +content+ properties
|
|
143
|
+
def import_routine(routine, force_overwrite=false, headers=header_basic_auth)
|
|
144
|
+
body = { "content" => routine }
|
|
145
|
+
info("Importing Routine #{File.basename(routine)}")
|
|
146
|
+
post_multipart("#{@api_url}/trees?force=#{force_overwrite}", body, headers)
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
# Find a single tree by title (Source Name :: Group Name :: Tree Name)
|
|
150
|
+
#
|
|
151
|
+
# @param title [String] The tree title
|
|
152
|
+
# @param params [Hash] Query parameters that are added to the URL, such as +include+
|
|
153
|
+
# @param headers [Hash] hash of headers to send, default is basic authentication
|
|
154
|
+
# @return [KineticSdk::Utils::KineticHttpResponse] object, with +code+, +message+, +content_string+, and +content+ properties
|
|
155
|
+
#
|
|
156
|
+
# Example
|
|
157
|
+
#
|
|
158
|
+
# find_tree(
|
|
159
|
+
# "Kinetic Request CE :: Win a Car :: Complete",
|
|
160
|
+
# { "include" => "details" }
|
|
161
|
+
# )
|
|
162
|
+
#
|
|
163
|
+
def find_tree(title, params={}, headers=header_basic_auth)
|
|
164
|
+
info("Finding the \"#{title}\" Tree")
|
|
165
|
+
get("#{@api_url}/trees/#{encode(title)}", params, headers)
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
# Export a single tree or routine
|
|
169
|
+
#
|
|
170
|
+
# @param title [String] the title of the tree or routine
|
|
171
|
+
# @param headers [Hash] hash of headers to send, default is basic authentication
|
|
172
|
+
# @return [KineticSdk::Utils::KineticHttpResponse] object, with +code+, +message+, +content_string+, and +content+ properties
|
|
173
|
+
#
|
|
174
|
+
def export_tree(title, headers=header_basic_auth)
|
|
175
|
+
raise StandardError.new "An export directory must be defined to export a tree." if @options[:export_directory].nil?
|
|
176
|
+
info("Exporting tree \"#{title}\" to #{@options[:export_directory]}.")
|
|
177
|
+
# Get the tree
|
|
178
|
+
response = find_tree(title, { "include" => "export" })
|
|
179
|
+
# Parse the response and export the tree
|
|
180
|
+
tree = response.content
|
|
181
|
+
|
|
182
|
+
# determine which directory to write the file to
|
|
183
|
+
if tree['sourceGroup'] == "-"
|
|
184
|
+
# Create the directory if it doesn't yet exist
|
|
185
|
+
routine_dir = FileUtils::mkdir_p(File.join(@options[:export_directory], "routines"))
|
|
186
|
+
tree_file = File.join(routine_dir, "#{tree['name'].slugify}.xml")
|
|
187
|
+
else
|
|
188
|
+
# Create the directory if it doesn't yet exist
|
|
189
|
+
tree_dir = FileUtils::mkdir_p(File.join(@options[:export_directory], "trees", tree['sourceName'].slugify))
|
|
190
|
+
tree_file = File.join(tree_dir, "#{tree['sourceName'].slugify}.#{tree['sourceGroup'].slugify}.#{tree['name'].slugify}.xml")
|
|
191
|
+
end
|
|
192
|
+
# write the file
|
|
193
|
+
File.write(tree_file, tree['export'])
|
|
194
|
+
info("Exported #{tree['type']}: #{tree['title']} to #{tree_file}")
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
# Export all trees and local routines for a source, and global routines
|
|
198
|
+
#
|
|
199
|
+
# @param source_name [String] Name of the source to export trees and local routines
|
|
200
|
+
# - Leave blank or pass nil to export all trees and global routines
|
|
201
|
+
# - Pass "-" to export only global routines
|
|
202
|
+
# @param headers [Hash] hash of headers to send, default is basic authentication
|
|
203
|
+
# @return [KineticSdk::Utils::KineticHttpResponse] object, with +code+, +message+, +content_string+, and +content+ properties
|
|
204
|
+
def export_trees(source_name=nil, headers=header_basic_auth)
|
|
205
|
+
raise StandardError.new "An export directory must be defined to export trees." if @options[:export_directory].nil?
|
|
206
|
+
if source_name.nil?
|
|
207
|
+
info("Exporting all trees and routines to #{@options[:export_directory]}.")
|
|
208
|
+
(find_sources.content["sourceRoots"] || []).each do |sourceRoot|
|
|
209
|
+
export_trees(sourceRoot['name'])
|
|
210
|
+
end
|
|
211
|
+
return
|
|
212
|
+
elsif source_name == "-"
|
|
213
|
+
info("Exporting global routines to #{@options[:export_directory]}.")
|
|
214
|
+
else
|
|
215
|
+
info("Exporting trees and routines for source \"#{source_name}\" to #{@options[:export_directory]}.")
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
# Get all the trees and routines for the source
|
|
219
|
+
response = find_trees({ "source" => source_name, "include" => "export" })
|
|
220
|
+
# Parse the response and export each tree
|
|
221
|
+
(response.content["trees"] || []).each do |tree|
|
|
222
|
+
# determine which directory to write the file to
|
|
223
|
+
if tree['sourceGroup'] == "-"
|
|
224
|
+
# create the directory if it doesn't yet exist
|
|
225
|
+
routine_dir = FileUtils::mkdir_p(File.join(@options[:export_directory], "routines"))
|
|
226
|
+
tree_file = File.join(routine_dir, "#{tree['name'].slugify}.xml")
|
|
227
|
+
else
|
|
228
|
+
# create the directory if it doesn't yet exist
|
|
229
|
+
tree_dir = FileUtils::mkdir_p(File.join(@options[:export_directory], "trees", source_name.slugify))
|
|
230
|
+
tree_file = File.join(tree_dir, "#{source_name.slugify}.#{tree['sourceGroup'].slugify}.#{tree['name'].slugify}.xml")
|
|
231
|
+
end
|
|
232
|
+
# write the file
|
|
233
|
+
File.write(tree_file, tree['export'])
|
|
234
|
+
info("Exported #{tree['type']}: #{tree['title']} to #{tree_file}")
|
|
235
|
+
end
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
# Export all global routines
|
|
240
|
+
#
|
|
241
|
+
# @param headers [Hash] hash of headers to send, default is basic authentication
|
|
242
|
+
# @return [KineticSdk::Utils::KineticHttpResponse] object, with +code+, +message+, +content_string+, and +content+ properties
|
|
243
|
+
def export_routines(headers=header_basic_auth)
|
|
244
|
+
export_trees("-", headers)
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
# Create a new run of a tree
|
|
248
|
+
#
|
|
249
|
+
# @param title [String] title of the tree: Source Name, Group Name, Tree Name
|
|
250
|
+
# @param body [Hash] properties to pass to the tree, what can be used/accepted
|
|
251
|
+
# depends on the source.
|
|
252
|
+
# @param headers [Hash] hash of headers to send, default is basic authentication and accept JSON content type
|
|
253
|
+
# @return [KineticSdk::Utils::KineticHttpResponse] object, with +code+, +message+, +content_string+, and +content+ properties
|
|
254
|
+
def run_tree(title, body={}, headers=default_headers)
|
|
255
|
+
info("Running tree #{title}")
|
|
256
|
+
parts = title.split(" :: ")
|
|
257
|
+
raise StandardError.new "Title is invalid: #{title}" if parts.size != 3
|
|
258
|
+
url = "#{@api_v1_url}/run-tree/#{encode(parts[0])}/#{encode(parts[1])}/#{encode(parts[2])}"
|
|
259
|
+
post(url, body, headers)
|
|
260
|
+
end
|
|
261
|
+
|
|
262
|
+
# Update a tree
|
|
263
|
+
#
|
|
264
|
+
# @param title [String] title of the tree: Source Name, Group Name, Tree Name
|
|
265
|
+
# @param body [Hash] properties to pass to the tree
|
|
266
|
+
# @param headers [Hash] hash of headers to send, default is basic authentication and accept JSON content type
|
|
267
|
+
# @return [KineticSdk::Utils::KineticHttpResponse] object, with +code+, +message+, +content_string+, and +content+ properties
|
|
268
|
+
def update_tree(title, body={}, headers=default_headers)
|
|
269
|
+
info("Updating the \"#{title}\" Tree")
|
|
270
|
+
put("#{@api_url}/trees/#{encode(title)}", body, headers)
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
end
|
|
274
|
+
end
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
module KineticSdk
|
|
2
|
+
class Task
|
|
3
|
+
|
|
4
|
+
# Add a user
|
|
5
|
+
#
|
|
6
|
+
# @param user [Hash] user properties
|
|
7
|
+
# @param headers [Hash] hash of headers to send, default is basic authentication and accept JSON content type
|
|
8
|
+
# @return [KineticSdk::Utils::KineticHttpResponse] object, with +code+, +message+, +content_string+, and +content+ properties
|
|
9
|
+
#
|
|
10
|
+
# Example
|
|
11
|
+
#
|
|
12
|
+
# add_user({
|
|
13
|
+
# "loginId" => "foo",
|
|
14
|
+
# "password" => "bar",
|
|
15
|
+
# "email" => "foo@bar.com"
|
|
16
|
+
# })
|
|
17
|
+
#
|
|
18
|
+
def add_user(user, headers=default_headers)
|
|
19
|
+
info("Add user \"#{user['loginId']}\"")
|
|
20
|
+
post("#{@api_url}/users", user, headers)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Delete a User
|
|
24
|
+
#
|
|
25
|
+
# @param login_id [String] login id of the user
|
|
26
|
+
# @param headers [Hash] hash of headers to send, default is basic authentication
|
|
27
|
+
# @return [KineticSdk::Utils::KineticHttpResponse] object, with +code+, +message+, +content_string+, and +content+ properties
|
|
28
|
+
def delete_user(login_id, headers=header_basic_auth)
|
|
29
|
+
info("Deleting User \"#{login_id}\"")
|
|
30
|
+
delete("#{@api_url}/users/#{encode(login_id)}", headers)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Delete all Users
|
|
34
|
+
#
|
|
35
|
+
# @param headers [Hash] hash of headers to send, default is basic authentication
|
|
36
|
+
# @return [KineticSdk::Utils::KineticHttpResponse] object, with +code+, +message+, +content_string+, and +content+ properties
|
|
37
|
+
def delete_users(headers=header_basic_auth)
|
|
38
|
+
info("Deleting all users")
|
|
39
|
+
(find_users(headers).content["users"] || []).each do |user|
|
|
40
|
+
delete("#{@api_url}/users/#{encode(user['login_id'])}", headers)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Find all users
|
|
45
|
+
#
|
|
46
|
+
# @param params [Hash] Query parameters that are added to the URL, such as +include+
|
|
47
|
+
# @param headers [Hash] hash of headers to send, default is basic authentication
|
|
48
|
+
# @return [KineticSdk::Utils::KineticHttpResponse] object, with +code+, +message+, +content_string+, and +content+ properties
|
|
49
|
+
def find_users(params={}, headers=header_basic_auth)
|
|
50
|
+
info("Finding all users")
|
|
51
|
+
get("#{@api_url}/users", params, headers)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Update a user
|
|
55
|
+
#
|
|
56
|
+
# @param login_id [String] Login Id for the user
|
|
57
|
+
# @param user [Hash] updated properties of the user
|
|
58
|
+
# @param headers [Hash] hash of headers to send, default is basic authentication and accept JSON content type
|
|
59
|
+
# @return [KineticSdk::Utils::KineticHttpResponse] object, with +code+, +message+, +content_string+, and +content+ properties
|
|
60
|
+
#
|
|
61
|
+
# Example
|
|
62
|
+
#
|
|
63
|
+
# update_user({
|
|
64
|
+
# "loginId" => "foo",
|
|
65
|
+
# "password" => "bar",
|
|
66
|
+
# "email" => "foo@bar.com"
|
|
67
|
+
# })
|
|
68
|
+
#
|
|
69
|
+
def update_user(login_id, user, headers=default_headers)
|
|
70
|
+
info("Updating user \"#{login_id}\"")
|
|
71
|
+
put("#{@api_url}/users/#{encode(login_id)}", user, headers)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
end
|
|
75
|
+
end
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
Dir[File.join(File.dirname(File.expand_path(__FILE__)), "lib", "**", "*.rb")].each {|file| require file }
|
|
2
|
+
|
|
3
|
+
module KineticSdk
|
|
4
|
+
|
|
5
|
+
# Task is a Ruby class that acts as a wrapper for the Kinetic Task REST API
|
|
6
|
+
# without having to make explicit HTTP requests.
|
|
7
|
+
#
|
|
8
|
+
class Task
|
|
9
|
+
|
|
10
|
+
# Include the KineticHttpUtils module
|
|
11
|
+
include KineticSdk::Utils::KineticHttpUtils
|
|
12
|
+
|
|
13
|
+
attr_reader :api_url, :api_v1_url, :config_user, :options, :server, :version, :username, :password
|
|
14
|
+
|
|
15
|
+
# Initalize the Task SDK with the web server URL and user credentials,
|
|
16
|
+
# along with any custom option values.
|
|
17
|
+
#
|
|
18
|
+
# @param [Hash] opts Kinetic Task properties
|
|
19
|
+
# @option opts [String] :config_file optional - path to the YAML configuration file
|
|
20
|
+
#
|
|
21
|
+
# * Ex: /opt/config/task-configuration1.yaml
|
|
22
|
+
#
|
|
23
|
+
# @option opts [String] :app_server_url the URL to the Kinetic Task web application.
|
|
24
|
+
#
|
|
25
|
+
# * Ex: <http://192.168.0.1:8080/kinetic-task>
|
|
26
|
+
#
|
|
27
|
+
# @option opts [String] :username the username for the user
|
|
28
|
+
# @option opts [String] :password the password for the user
|
|
29
|
+
# @option opts [Hash<Symbol, Object>] :options ({}) optional settings
|
|
30
|
+
#
|
|
31
|
+
# * :export_directory (String) (_example: /opt/exports/kinetic-task) directory to write files when exporting,
|
|
32
|
+
# * :log_level (String) (_defaults to: off_) level of logging - off | info | debug | trace
|
|
33
|
+
# * :max_redirects (Fixnum) (_defaults to: 10_) maximum number of redirects to follow
|
|
34
|
+
# * :ssl_ca_file (String) full path to PEM certificate used to verify the server
|
|
35
|
+
# * :ssl_verify_mode (String) (_defaults to: none_) - none | peer
|
|
36
|
+
#
|
|
37
|
+
# Example: using a configuration file
|
|
38
|
+
#
|
|
39
|
+
# KineticSdk::Task.new({
|
|
40
|
+
# config_file: "/opt/config1.yaml"
|
|
41
|
+
# })
|
|
42
|
+
#
|
|
43
|
+
# Example: using a properties hash
|
|
44
|
+
#
|
|
45
|
+
# KineticSdk::Task.new({
|
|
46
|
+
# app_server_url: "http://localhost:8080/kinetic-task",
|
|
47
|
+
# username: "admin",
|
|
48
|
+
# password: "admin",
|
|
49
|
+
# options: {
|
|
50
|
+
# log_level: "debug",
|
|
51
|
+
# export_directory: "/opt/exports/task-server-a",
|
|
52
|
+
# ssl_verify_mode: "peer",
|
|
53
|
+
# ssl_ca_file: "/usr/local/self_signing_ca.pem"
|
|
54
|
+
# }
|
|
55
|
+
# })
|
|
56
|
+
#
|
|
57
|
+
# If the +config_file+ option is present, it will be loaded first, and any additional
|
|
58
|
+
# options will overwrite any values in the config file
|
|
59
|
+
#
|
|
60
|
+
def initialize(opts)
|
|
61
|
+
# initialize any variables
|
|
62
|
+
options = {}
|
|
63
|
+
@config_user = {}
|
|
64
|
+
@server = nil
|
|
65
|
+
|
|
66
|
+
# process the configuration file if it was provided
|
|
67
|
+
unless opts[:config_file].nil?
|
|
68
|
+
options.merge!(YAML::load_file opts[:config_file])
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# process the configuration hash if it was provided
|
|
72
|
+
options.merge!(opts)
|
|
73
|
+
|
|
74
|
+
# process any individual options
|
|
75
|
+
@options = options.delete(:options) || {}
|
|
76
|
+
@config_user[:username] = options[:username]
|
|
77
|
+
@config_user[:password] = options[:password]
|
|
78
|
+
@server = options[:app_server_url].chomp('/')
|
|
79
|
+
@username = @config_user[:username]
|
|
80
|
+
@password = @config_user[:password]
|
|
81
|
+
|
|
82
|
+
# TODO: Better separation of APIv1 and APIv2
|
|
83
|
+
@api_v1_url = "#{@server}/app/api/v1"
|
|
84
|
+
@api_v2_url = "#{@server}/app/api/v2"
|
|
85
|
+
|
|
86
|
+
# set any constants or calculated values
|
|
87
|
+
@api_url = @api_v2_url
|
|
88
|
+
@version = 2
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
end
|
|
92
|
+
end
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
module KineticSdk
|
|
2
|
+
module Utils
|
|
3
|
+
module KineticHttpUtils
|
|
4
|
+
|
|
5
|
+
#-------------------------------------------------------------------------
|
|
6
|
+
# Instance methods that are duplicated as module/class methods
|
|
7
|
+
#-------------------------------------------------------------------------
|
|
8
|
+
|
|
9
|
+
# Provides an Accept header set to application/json
|
|
10
|
+
#
|
|
11
|
+
# @return [Hash] Accept header set to application/json
|
|
12
|
+
def header_accept_json
|
|
13
|
+
{ "Accept" => "application/json" }
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Provides a basic authentication header
|
|
17
|
+
#
|
|
18
|
+
# @param username [String] username to authenticate
|
|
19
|
+
# @param password [String] password associated to the username
|
|
20
|
+
# @return [Hash] Authorization: Basic base64 hash of username and password
|
|
21
|
+
def header_basic_auth(username=@username, password=@password)
|
|
22
|
+
{ "Authorization" => "Basic #{Base64.encode64(username.to_s + ":" + password.to_s).gsub("\n", "")}" }
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Provides a Bearer authentication header
|
|
26
|
+
#
|
|
27
|
+
# @param token [String] JSON Web Token (jwt)
|
|
28
|
+
# @return [Hash] Authorization: Bearer jwt
|
|
29
|
+
def header_bearer_auth(token=@jwt)
|
|
30
|
+
{ "Authorization" => "Bearer #{token}" }
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Provides a content-type header set to application/json
|
|
34
|
+
#
|
|
35
|
+
# @return [Hash] Content-Type header set to application/json
|
|
36
|
+
def header_content_json
|
|
37
|
+
{ "Content-Type" => "application/json" }
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Provides a user-agent header set to Kinetic Ruby SDK
|
|
41
|
+
#
|
|
42
|
+
# @return [Hash] User-Agent header set to Kinetic Reuby SDK
|
|
43
|
+
def header_user_agent
|
|
44
|
+
{ "User-Agent" => "Kinetic Ruby SDK #{KineticSdk::VERSION}" }
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Provides a hash of default headers
|
|
48
|
+
#
|
|
49
|
+
# @param username [String] username to authenticate
|
|
50
|
+
# @param password [String] password associated to the username
|
|
51
|
+
# @return [Hash] Hash of headers
|
|
52
|
+
# - Accepts: application/json
|
|
53
|
+
# - Authorization: Basic base64 hash of username and password if username is provided
|
|
54
|
+
# - Content-Type: application/json
|
|
55
|
+
# - User-Agent: Kinetic Ruby SDK {KineticSdk::VERSION}
|
|
56
|
+
def default_headers(username=@username, password=@password)
|
|
57
|
+
headers = header_accept_json.merge(header_content_json).merge(header_user_agent)
|
|
58
|
+
headers.merge!(header_basic_auth(username, password)) unless username.nil?
|
|
59
|
+
headers
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# Provides a hash of default headers with bearer auth instead of basic auth
|
|
63
|
+
#
|
|
64
|
+
# @param token [String] JSON Web Token (jwt)
|
|
65
|
+
# @return [Hash] Hash of headers
|
|
66
|
+
# - Accepts: application/json
|
|
67
|
+
# - Authorization: Bearer jwt
|
|
68
|
+
# - Content-Type: application/json
|
|
69
|
+
# - User-Agent: Kinetic Ruby SDK {KineticSdk::VERSION}
|
|
70
|
+
def default_jwt_headers(token=@jwt)
|
|
71
|
+
headers = header_accept_json.merge(header_content_json).merge(header_user_agent)
|
|
72
|
+
headers.merge!(header_bearer_auth(token)) unless token.nil?
|
|
73
|
+
headers
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
#------------------------------------------
|
|
78
|
+
# Class methods
|
|
79
|
+
#------------------------------------------
|
|
80
|
+
|
|
81
|
+
# Provides a accepts header set to application/json
|
|
82
|
+
#
|
|
83
|
+
# @return [Hash] Accepts header set to application/json
|
|
84
|
+
def self.header_accept_json
|
|
85
|
+
{ "Accepts" => "application/json" }
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
# Provides a basic authentication header
|
|
89
|
+
#
|
|
90
|
+
# @param username [String] username to authenticate
|
|
91
|
+
# @param password [String] password associated to the username
|
|
92
|
+
# @return [Hash] Authorization: Basic base64 hash of username and password
|
|
93
|
+
def self.header_basic_auth(username=@username, password=@password)
|
|
94
|
+
{ "Authorization" => "Basic #{Base64.encode64(username.to_s + ":" + password.to_s).gsub("\n", "")}" }
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
# Provides a Bearer authentication header
|
|
98
|
+
#
|
|
99
|
+
# @param token [String] JSON Web Token (jwt)
|
|
100
|
+
# @return [Hash] Authorization: Bearer jwt
|
|
101
|
+
def self.header_bearer_auth(token=@jwt)
|
|
102
|
+
{ "Authorization" => "Bearer #{token}" }
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
# Provides a content-type header set to application/json
|
|
106
|
+
#
|
|
107
|
+
# @return [Hash] Content-Type header set to application/json
|
|
108
|
+
def self.header_content_json
|
|
109
|
+
{ "Content-Type" => "application/json" }
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
# Provides a user-agent header set to Kinetic Ruby SDK
|
|
113
|
+
#
|
|
114
|
+
# @return [Hash] User-Agent header set to Kinetic Reuby SDK
|
|
115
|
+
def self.header_user_agent
|
|
116
|
+
{ "User-Agent" => "Kinetic Ruby SDK #{KineticSdk::VERSION}" }
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
# Provides a hash of default headers
|
|
120
|
+
#
|
|
121
|
+
# @param username [String] username to authenticate
|
|
122
|
+
# @param password [String] password associated to the username
|
|
123
|
+
# @return [Hash] Hash of headers
|
|
124
|
+
# - Accept: application/json
|
|
125
|
+
# - Authorization: Basic base64 hash of username and password if username is provided
|
|
126
|
+
# - Content-Type: application/json
|
|
127
|
+
# - User-Agent: Kinetic Ruby SDK {KineticSdk::VERSION}
|
|
128
|
+
def self.default_headers(username=@username, password=@password)
|
|
129
|
+
headers = self.header_accept_json.merge(self.header_content_json).merge(self.header_user_agent)
|
|
130
|
+
headers.merge!(self.header_basic_auth(username, password)) unless username.nil?
|
|
131
|
+
headers
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
# Provides a hash of default headers with bearer auth instead of basic auth
|
|
135
|
+
#
|
|
136
|
+
# @param token [String] JSON Web Token (jwt)
|
|
137
|
+
# @return [Hash] Hash of headers
|
|
138
|
+
# - Accepts: application/json
|
|
139
|
+
# - Authorization: Bearer jwt
|
|
140
|
+
# - Content-Type: application/json
|
|
141
|
+
# - User-Agent: Kinetic Ruby SDK {KineticSdk::VERSION}
|
|
142
|
+
def self.default_jwt_headers(token=@jwt)
|
|
143
|
+
headers = self.header_accept_json.merge(self.header_content_json).merge(self.header_user_agent)
|
|
144
|
+
headers.merge!(self.header_bearer_auth(token)) unless token.nil?
|
|
145
|
+
headers
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
end
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
module KineticSdk
|
|
2
|
+
module Utils
|
|
3
|
+
|
|
4
|
+
# The KineticHttpResponse object normalizes the Net::HTTPResponse object
|
|
5
|
+
# properties so they are always consistent.
|
|
6
|
+
#
|
|
7
|
+
# If the object passed in the constructor is a StandardError, the status code is
|
|
8
|
+
# set to 0, and the {#exception} and {#backtrace} methods can be used to get the
|
|
9
|
+
# details.
|
|
10
|
+
#
|
|
11
|
+
# Regardless of whether a Net::HTTPResponse object or a StandardError object was
|
|
12
|
+
# passed in the constructor, the {#code} and {#message} methods will give information
|
|
13
|
+
# about the response.
|
|
14
|
+
class KineticHttpResponse
|
|
15
|
+
# response code [String] - always '0' if constructor object is a StandardError
|
|
16
|
+
attr_reader :code
|
|
17
|
+
# the parsed JSON response body if content-type is application/json
|
|
18
|
+
attr_accessor :content
|
|
19
|
+
# the raw response body string
|
|
20
|
+
attr_accessor :content_string
|
|
21
|
+
# the response content-type
|
|
22
|
+
attr_reader :content_type
|
|
23
|
+
# the resonse headers
|
|
24
|
+
attr_reader :headers
|
|
25
|
+
# response status message
|
|
26
|
+
attr_reader :message
|
|
27
|
+
# the raw response object
|
|
28
|
+
attr_reader :response
|
|
29
|
+
# response code [Fixnum] - always 0 if constructor object is a StandardError
|
|
30
|
+
attr_reader :status
|
|
31
|
+
|
|
32
|
+
# the StandardError backtrace if constructor object is a StandardError
|
|
33
|
+
attr_reader :backtrace
|
|
34
|
+
# the raw StandardError if constructor object is a StandardError
|
|
35
|
+
attr_reader :exception
|
|
36
|
+
|
|
37
|
+
# Constructor
|
|
38
|
+
#
|
|
39
|
+
# @param object [Net::HTTPResponse | StandardError] either a Net::HTTPResponse or a StandardError
|
|
40
|
+
def initialize(object)
|
|
41
|
+
case object
|
|
42
|
+
when Net::HTTPResponse then
|
|
43
|
+
@code = object.code
|
|
44
|
+
@content_string = object.body
|
|
45
|
+
@content_type = object.content_type
|
|
46
|
+
@headers = object.each_header.inject({}) { |h,(k,v)| h[k] = v; h }
|
|
47
|
+
@message = object.message
|
|
48
|
+
@response = object
|
|
49
|
+
@status = @code.to_i
|
|
50
|
+
|
|
51
|
+
# if content type is json, try to parse the content string
|
|
52
|
+
@content = case @content_type
|
|
53
|
+
when "application/json" then
|
|
54
|
+
# will raise an exception if content_string is not valid json
|
|
55
|
+
JSON.parse(@content_string)
|
|
56
|
+
else
|
|
57
|
+
{}
|
|
58
|
+
end
|
|
59
|
+
when StandardError then
|
|
60
|
+
@code = "0"
|
|
61
|
+
@content = {}
|
|
62
|
+
@content_string = nil
|
|
63
|
+
@content_type = nil
|
|
64
|
+
@backtrace = object.backtrace
|
|
65
|
+
@exception = object.exception
|
|
66
|
+
@message = object.message
|
|
67
|
+
@status = @code.to_i
|
|
68
|
+
else
|
|
69
|
+
raise StandardError.new("Invalid response object: #{object.class}")
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
end
|
|
75
|
+
end
|