knuverse-knufactor 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +11 -0
- data/.rspec +2 -0
- data/.rubocop.yml +14 -0
- data/.travis.yml +14 -0
- data/CONTRIBUTING.md +16 -0
- data/Gemfile +4 -0
- data/LICENSE +22 -0
- data/README.md +125 -0
- data/Rakefile +10 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/knuverse-knufactor.gemspec +42 -0
- data/lib/core_extensions/string/transformations.rb +28 -0
- data/lib/knuverse/knufactor.rb +42 -0
- data/lib/knuverse/knufactor/api_client.rb +30 -0
- data/lib/knuverse/knufactor/api_client_base.rb +112 -0
- data/lib/knuverse/knufactor/api_exception.rb +7 -0
- data/lib/knuverse/knufactor/exceptions/api_client_not_configured.rb +9 -0
- data/lib/knuverse/knufactor/exceptions/immutable_modification.rb +9 -0
- data/lib/knuverse/knufactor/exceptions/invalid_arguments.rb +9 -0
- data/lib/knuverse/knufactor/exceptions/invalid_options.rb +9 -0
- data/lib/knuverse/knufactor/exceptions/invalid_property.rb +9 -0
- data/lib/knuverse/knufactor/exceptions/invalid_where_query.rb +9 -0
- data/lib/knuverse/knufactor/exceptions/missing_path.rb +9 -0
- data/lib/knuverse/knufactor/exceptions/new_instance_with_id.rb +9 -0
- data/lib/knuverse/knufactor/helpers/api_client.rb +36 -0
- data/lib/knuverse/knufactor/helpers/resource.rb +112 -0
- data/lib/knuverse/knufactor/helpers/resource_class.rb +49 -0
- data/lib/knuverse/knufactor/resource.rb +207 -0
- data/lib/knuverse/knufactor/resource_collection.rb +189 -0
- data/lib/knuverse/knufactor/resources/client.rb +44 -0
- data/lib/knuverse/knufactor/simple_api_client.rb +20 -0
- data/lib/knuverse/knufactor/validations/api_client.rb +42 -0
- data/lib/knuverse/knufactor/validations/resource.rb +17 -0
- data/lib/knuverse/knufactor/version.rb +10 -0
- metadata +220 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 224e08737aef33c81546244ee7b5c61ee4dee62d
|
4
|
+
data.tar.gz: abd0db60daee18081303470062a4f120b5300e0c
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: bbc6a2bdc236889d73413e8ebc55b0de64404c457eb522c028f217000f7de000d82088af673bf998a2fe08569864002d7cc43f81838cfcec234fee366bf260a2
|
7
|
+
data.tar.gz: 5c7d09db089ebf5517c98a3c97a145e134c627f8ca551954318cbb231d6e78cb2358330835c28b66c09d51a508180c370ae448443ebc3851183380f5cb14d76f
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.rubocop.yml
ADDED
data/.travis.yml
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
sudo: false
|
2
|
+
language: ruby
|
3
|
+
rvm:
|
4
|
+
- 2.1.10
|
5
|
+
- 2.2.5
|
6
|
+
- 2.3.1
|
7
|
+
cache: bundler
|
8
|
+
deploy:
|
9
|
+
provider: rubygems
|
10
|
+
api_key:
|
11
|
+
secure: A9iVmtSsR9iJsjGMXfKHNVuZn13QVdnnRAmAwXQvCSXmDaZQyHLejYnAGQ3WjZc2XbLxSn/787MUTJC2yxG9pJy+Nnyr6L9ZtoBD3F5/q+iqklJXIXtuVV/wOcknG+m71kEIIntZv+g2hVjHo/CfAbm10ycqlJDw/MMoPGxkwXHkj9qGEft6jXygzGEDGxnmqyBRAHZ/BI0vjojdTLM8yO/0RFF1X2cs55YRGyicmE8V/ZYwL5cOVfwCqYNtVp4Pce4GxWfX+Dp1PceI4jnX9hq/kMa+0mTkLWPdMQLYVjyIaZ7eso8RQb9yVPdIGZKp2vQqN1t+s/EHgmiriv/tHluvLnIWjHIwYFuX0Bd9wttp7Sb1K7HhqP0T/Ymny41KLr4Nnx3PqIcm9dz57x6zvq1bIykVlG3sZNthVPKAwbX6lj6X/HCyYaDr65EwFPDWsOxt78zJdbZuV0pdg4rEJaF8MHKy3lOfwm52AfIC4iMsnshhSylDETjwG7P556ZHzutODB3JPSKwmJriGihVBiG5V5TpdrPD9oZPs6rg8XWZs9bdhroIk9FcfE5MZJ0UDUdcV3dpcdJI109G3SR2rxSHaozfeaggsBa4QMD9gPP+Tx2DiD4eOntxo3zhoylISeKIJptLEOqz+vPEWcj/J25+iXbotvlFB1khibVWn0c=
|
12
|
+
gem: knuverse-knufactor
|
13
|
+
on:
|
14
|
+
tags: true
|
data/CONTRIBUTING.md
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
## Welcome!
|
2
|
+
|
3
|
+
We're so glad you're thinking about contributing to a KnuEdge open source project! If you're unsure about anything, just ask -- or submit the issue or pull request anyway. The worst that can happen is you'll be politely asked to change something. We love all friendly contributions.
|
4
|
+
|
5
|
+
We want to ensure a welcoming environment for all of our projects. Our IT staff encourage ethical contribution to our open source projects and all contributors should do the same.
|
6
|
+
|
7
|
+
We encourage you to read this project's CONTRIBUTING policy (you are here), its [LICENSE](LICENSE), and its [README](README.md).
|
8
|
+
|
9
|
+
If you have any questions just [shoot us an email](mailto:opensource@knuedge.com).
|
10
|
+
|
11
|
+
## Licensing
|
12
|
+
|
13
|
+
This project and all code contained within it are released under the [MIT License](https://opensource.org/licenses/MIT).
|
14
|
+
|
15
|
+
All contributions to this project will be released under the [MIT License](https://opensource.org/licenses/MIT). By submitting a pull request, you are agreeing to comply
|
16
|
+
with this license and for any contributions to be released under it.
|
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2016 KnuEdge
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person
|
4
|
+
obtaining a copy of this software and associated documentation
|
5
|
+
files (the "Software"), to deal in the Software without
|
6
|
+
restriction, including without limitation the rights to use,
|
7
|
+
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
8
|
+
copies of the Software, and to permit persons to whom the
|
9
|
+
Software is furnished to do so, subject to the following
|
10
|
+
conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be
|
13
|
+
included in all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
17
|
+
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
19
|
+
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
20
|
+
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
21
|
+
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
22
|
+
OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,125 @@
|
|
1
|
+
The KnuVerse Knufactor SDK for Ruby
|
2
|
+
====================
|
3
|
+
|
4
|
+
About
|
5
|
+
----
|
6
|
+
This project is a Ruby SDK that allows developers to create apps that use Knuverse's Knufactor Cloud APIs.
|
7
|
+
|
8
|
+
Documentation for the API can be found [here](https://cloud.knuverse.com/docs/)
|
9
|
+
|
10
|
+
Note that this SDK isn't a direct port of the [Python SDK](https://github.com/KnuVerse/knuverse-sdk-python), though it is based heavily on the work done there. This SDK uses a Object-Oriented pattern, which is likely more familiar to Ruby developers than a collection of functions may be.
|
11
|
+
|
12
|
+
Building and Installing
|
13
|
+
----
|
14
|
+
Building the gem requires a modern Ruby:
|
15
|
+
|
16
|
+
# highly recommend using RVM here, and Ruby 2.x or above
|
17
|
+
gem build knuverse-knufactor.gemspec
|
18
|
+
# install what you just built
|
19
|
+
gem install knuverse-knufactor-*.gem
|
20
|
+
|
21
|
+
That said, recent releases should be available on [rubygems.org](https://rubygems.org/) so building is probably not necessary.
|
22
|
+
|
23
|
+
Just add the following to your Gemfile:
|
24
|
+
|
25
|
+
gem 'knuverse/knufactor'
|
26
|
+
|
27
|
+
Then run:
|
28
|
+
|
29
|
+
bundle install
|
30
|
+
|
31
|
+
If you're not using [bundler](http://bundler.io/) for some reason (shame on you!), you can manually install like so:
|
32
|
+
|
33
|
+
gem install knuverse-knufactor
|
34
|
+
|
35
|
+
If you see a message like this:
|
36
|
+
|
37
|
+
Thanks for installing the KnuVerse Knufactor Ruby SDK!
|
38
|
+
|
39
|
+
You should be all set!
|
40
|
+
|
41
|
+
Usage
|
42
|
+
------
|
43
|
+
Check back, because this file will be updated with a lot more usage examples.
|
44
|
+
|
45
|
+
For a typical custom ruby application, you'll need to do something like the following to get started:
|
46
|
+
|
47
|
+
```ruby
|
48
|
+
require 'knuverse/knufactor'
|
49
|
+
|
50
|
+
# configure the API client singleton
|
51
|
+
KnuVerse::Knufactor::APIClient.configure(
|
52
|
+
apikey: 'b1b71d68cffea1d43257fff9deadbeef',
|
53
|
+
secret: '34d04e5f05a194444e9c26358a94eaf2'
|
54
|
+
)
|
55
|
+
```
|
56
|
+
|
57
|
+
From here, the SDK will automatically rely on this configuration singleton unless you tell it otherwise. Here are some examples of interacting with the API:
|
58
|
+
|
59
|
+
```ruby
|
60
|
+
# pull some data
|
61
|
+
KnuVerse::Knufactor::APIClient.about_service
|
62
|
+
# => {"company"=>"KnuVerse", "version"=>"1.4.0", "multi_tenant"=>true, "service"=>"audiopin", "name"=>"KnuVerse"}
|
63
|
+
|
64
|
+
# Make working with resources easier
|
65
|
+
include KnuVerse::Knufactor::Resources
|
66
|
+
|
67
|
+
# Find some clients
|
68
|
+
clients = Client.all
|
69
|
+
|
70
|
+
# Take a look at the last client
|
71
|
+
client = clients.last
|
72
|
+
client.name
|
73
|
+
# => "user75"
|
74
|
+
|
75
|
+
# Make a change
|
76
|
+
client.bypass_limit = 10
|
77
|
+
|
78
|
+
# Now persist it
|
79
|
+
client.save
|
80
|
+
|
81
|
+
# Verify the change worked
|
82
|
+
client.reload
|
83
|
+
client.bypass_limit
|
84
|
+
# => 10
|
85
|
+
|
86
|
+
# Find some specific clients... all locked out clients
|
87
|
+
locked_clients = Client.where(:password_lock?, true)
|
88
|
+
# => #<KnuVerse::Knufactor::ResourceCollection:...
|
89
|
+
|
90
|
+
# Find clients that are either enrolled or installed
|
91
|
+
happy_clients = Client.where(:state, 'enrolled').or(:state, 'installed')
|
92
|
+
|
93
|
+
# Find clients with a name that starts with "z"
|
94
|
+
z_clients = Client.where(:name, /^z/i)
|
95
|
+
```
|
96
|
+
|
97
|
+
For some more complex situations, you may want a specialized API Client (interact with it as an instance, or have a thread-local or context-specific client):
|
98
|
+
|
99
|
+
```ruby
|
100
|
+
# interact with the singleton as a client instance for simplicity
|
101
|
+
api_client = KnuVerse::Knufactor::APIClient.instance
|
102
|
+
|
103
|
+
# In complex, multi-user systems, using a singleton class might not work.
|
104
|
+
# For this reason, there is a regular class version of the API client that is not tied to the singleton
|
105
|
+
local_api_client1 = KnuVerse::Knufactor::SimpleAPIClient.new(
|
106
|
+
apikey: 'b1b71d68cffea1d43257fff9deadbeef', secret: '57838344acf7f5876226ede247c5881a'
|
107
|
+
)
|
108
|
+
local_api_client2 = KnuVerse::Knufactor::SimpleAPIClient.new(
|
109
|
+
apikey: '33371d68cffea1d43257fff9deadf00d', secret: 'e7d1c88825dc96a05bc38c39cca4a1ca'
|
110
|
+
)
|
111
|
+
local_api_client1 == local_api_client2
|
112
|
+
# => false
|
113
|
+
|
114
|
+
# Perform an operation with a specific instance of the API Client
|
115
|
+
Client.all(api_client: local_api_client1)
|
116
|
+
# All finder methods work this way, allowing the 'api_client' option to be passed
|
117
|
+
Client.where(:name, 'bobby', api_client: local_api_client2)
|
118
|
+
|
119
|
+
```
|
120
|
+
|
121
|
+
License
|
122
|
+
-------
|
123
|
+
This project and all code contained within it are released under the [MIT License](https://opensource.org/licenses/MIT). As stated in [CONTRIBUTING](CONTRIBUTING.md):
|
124
|
+
|
125
|
+
> All contributions to this project will be released under the [MIT License](https://opensource.org/licenses/MIT). By submitting a pull request, you are agreeing to comply with this license and for any contributions to be released under it.
|
data/Rakefile
ADDED
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'bundler/setup'
|
4
|
+
require 'knuverse/knufactor'
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require 'irb'
|
14
|
+
IRB.start
|
data/bin/setup
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'knuverse/knufactor/version'
|
5
|
+
|
6
|
+
# rubocop:disable Metrics/BlockLength
|
7
|
+
Gem::Specification.new do |spec|
|
8
|
+
spec.name = 'knuverse-knufactor'
|
9
|
+
spec.version = KnuVerse::Knufactor::VERSION
|
10
|
+
spec.date = Time.now.strftime('%Y-%m-%d')
|
11
|
+
spec.authors = ['Jonathan Gnagy']
|
12
|
+
spec.email = ['jgnagy@knuedge.com']
|
13
|
+
|
14
|
+
spec.summary = 'KnuVerse Knufactor Ruby SDK'
|
15
|
+
spec.homepage = 'https://github.com/KnuVerse/knuverse-knufactor-sdk-ruby'
|
16
|
+
spec.license = 'MIT'
|
17
|
+
|
18
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
19
|
+
f.match(%r{^(test|spec|features)/})
|
20
|
+
end
|
21
|
+
spec.bindir = 'exe'
|
22
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
23
|
+
spec.require_paths = ['lib']
|
24
|
+
|
25
|
+
spec.metadata['yard.run'] = 'yri'
|
26
|
+
|
27
|
+
spec.required_ruby_version = '~> 2.0'
|
28
|
+
spec.post_install_message = 'Thanks for installing the KnuVerse Knufactor Ruby SDK!'
|
29
|
+
spec.platform = Gem::Platform::RUBY
|
30
|
+
|
31
|
+
spec.add_runtime_dependency 'linguistics', '~> 2.1'
|
32
|
+
spec.add_runtime_dependency 'rest-client', '~> 2.0'
|
33
|
+
spec.add_runtime_dependency 'will_paginate', '~> 3.1'
|
34
|
+
|
35
|
+
spec.add_development_dependency 'bundler', '~> 1.12'
|
36
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
37
|
+
spec.add_development_dependency 'rspec', '~> 3.1'
|
38
|
+
spec.add_development_dependency 'rubocop', '~> 0.35'
|
39
|
+
spec.add_development_dependency 'yard', '~> 0.8'
|
40
|
+
spec.add_development_dependency 'simplecov'
|
41
|
+
spec.add_development_dependency 'travis', '~> 1.8'
|
42
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module CoreExtensions
|
2
|
+
module String
|
3
|
+
# Monkey-patches for String to add some simple missing transformations
|
4
|
+
module Transformations
|
5
|
+
# Convert CamelCase to underscored_text
|
6
|
+
# @return [String]
|
7
|
+
def to_underscore
|
8
|
+
gsub(/::/, '/')
|
9
|
+
.gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
|
10
|
+
.gsub(/([a-z\d])([A-Z])/, '\1_\2')
|
11
|
+
.tr('-', '_')
|
12
|
+
.downcase
|
13
|
+
end
|
14
|
+
|
15
|
+
# Convert underscored_text to CamelCase
|
16
|
+
# @return [String]
|
17
|
+
def to_camel
|
18
|
+
split('_').map(&:capitalize).join
|
19
|
+
end
|
20
|
+
|
21
|
+
# Attempt to guess a more human-like view of a string
|
22
|
+
# @return [String]
|
23
|
+
def humanize
|
24
|
+
gsub(/_id$/, '').tr('_', ' ').capitalize
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# Standard Library Requirements
|
2
|
+
require 'json'
|
3
|
+
require 'singleton'
|
4
|
+
|
5
|
+
# External Library Requirements
|
6
|
+
require 'linguistics'
|
7
|
+
Linguistics.use(:en)
|
8
|
+
require 'rest-client'
|
9
|
+
require 'will_paginate'
|
10
|
+
require 'will_paginate/array'
|
11
|
+
|
12
|
+
# Internal Requirements
|
13
|
+
require 'core_extensions/string/transformations'
|
14
|
+
String.include CoreExtensions::String::Transformations
|
15
|
+
|
16
|
+
require 'knuverse/knufactor/version'
|
17
|
+
require 'knuverse/knufactor/api_exception'
|
18
|
+
require 'knuverse/knufactor/exceptions/api_client_not_configured'
|
19
|
+
require 'knuverse/knufactor/exceptions/immutable_modification'
|
20
|
+
require 'knuverse/knufactor/exceptions/invalid_arguments'
|
21
|
+
require 'knuverse/knufactor/exceptions/invalid_options'
|
22
|
+
require 'knuverse/knufactor/exceptions/invalid_property'
|
23
|
+
require 'knuverse/knufactor/exceptions/invalid_where_query'
|
24
|
+
require 'knuverse/knufactor/exceptions/missing_path'
|
25
|
+
require 'knuverse/knufactor/exceptions/new_instance_with_id'
|
26
|
+
require 'knuverse/knufactor/helpers/api_client'
|
27
|
+
require 'knuverse/knufactor/validations/api_client'
|
28
|
+
require 'knuverse/knufactor/api_client_base'
|
29
|
+
require 'knuverse/knufactor/api_client'
|
30
|
+
require 'knuverse/knufactor/simple_api_client'
|
31
|
+
require 'knuverse/knufactor/resource_collection'
|
32
|
+
require 'knuverse/knufactor/helpers/resource'
|
33
|
+
require 'knuverse/knufactor/helpers/resource_class'
|
34
|
+
require 'knuverse/knufactor/validations/resource'
|
35
|
+
require 'knuverse/knufactor/resource'
|
36
|
+
require 'knuverse/knufactor/resources/client'
|
37
|
+
|
38
|
+
module KnuVerse
|
39
|
+
# The SDK for interacting with the KnuVerse Knufactor Cloud API
|
40
|
+
module Knufactor
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module KnuVerse
|
2
|
+
module Knufactor
|
3
|
+
# The API Client Singleton class
|
4
|
+
class APIClient < APIClientBase
|
5
|
+
include Singleton
|
6
|
+
|
7
|
+
def self.configure(opts = {})
|
8
|
+
instance.configure(opts)
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.about_service
|
12
|
+
instance.about_service
|
13
|
+
end
|
14
|
+
|
15
|
+
def configure(opts = {})
|
16
|
+
# validations
|
17
|
+
validate_opts(opts)
|
18
|
+
|
19
|
+
# Set up the client's state
|
20
|
+
@server = opts[:server] || 'https://cloud.knuverse.com'
|
21
|
+
@apikey = opts[:apikey]
|
22
|
+
@secret = opts[:secret]
|
23
|
+
@base_uri = opts[:base_uri] || '/api/v1/'
|
24
|
+
@last_auth = nil
|
25
|
+
@auth_token = nil
|
26
|
+
@configured = true
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,112 @@
|
|
1
|
+
module KnuVerse
|
2
|
+
module Knufactor
|
3
|
+
# The API Client Base class
|
4
|
+
class APIClientBase
|
5
|
+
attr_reader :server, :base_uri
|
6
|
+
attr_accessor :apikey, :secret, :account
|
7
|
+
|
8
|
+
include Validations::APIClient
|
9
|
+
include Helpers::APIClient
|
10
|
+
|
11
|
+
def about_service
|
12
|
+
get 'about'
|
13
|
+
end
|
14
|
+
|
15
|
+
def api_uri
|
16
|
+
@api_uri ||= URI.parse(server)
|
17
|
+
@api_uri.path = base_uri
|
18
|
+
@api_uri
|
19
|
+
end
|
20
|
+
|
21
|
+
def authenticated?
|
22
|
+
raise Exceptions::APIClientNotConfigured unless configured?
|
23
|
+
@auth_token && @last_auth && ((Time.now.utc - @last_auth) < (60 * 14)) ? true : false
|
24
|
+
end
|
25
|
+
|
26
|
+
def configured?
|
27
|
+
@configured ? true : false
|
28
|
+
end
|
29
|
+
|
30
|
+
def json_headers
|
31
|
+
base = { content_type: :json, accept: :json }
|
32
|
+
authenticated? ? base.merge(authorization: auth_header) : base
|
33
|
+
end
|
34
|
+
|
35
|
+
def refresh_auth_bearer
|
36
|
+
auth_data = {
|
37
|
+
key_id: @apikey,
|
38
|
+
secret: @secret
|
39
|
+
}
|
40
|
+
resp = post('auth', auth_data)
|
41
|
+
resp['jwt']
|
42
|
+
end
|
43
|
+
|
44
|
+
def refresh_auth
|
45
|
+
@auth_token = refresh_auth_bearer
|
46
|
+
@last_auth = Time.now.utc
|
47
|
+
true
|
48
|
+
end
|
49
|
+
|
50
|
+
def get(uri, data = nil)
|
51
|
+
refresh_auth unless authenticated?
|
52
|
+
|
53
|
+
client_action do |client|
|
54
|
+
if data
|
55
|
+
JSON.parse client[uri].get(json_headers.merge(params: data))
|
56
|
+
else
|
57
|
+
JSON.parse client[uri].get(json_headers)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def post(uri, data = nil)
|
63
|
+
refresh_auth unless authenticated? || uri == 'auth'
|
64
|
+
|
65
|
+
client_action do |client|
|
66
|
+
if data
|
67
|
+
JSON.parse client[uri].post(json_escape(data.to_json), json_headers)
|
68
|
+
else
|
69
|
+
JSON.parse client[uri].post(nil, json_headers)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def patch(uri, data)
|
75
|
+
refresh_auth unless authenticated?
|
76
|
+
|
77
|
+
client_action do |client|
|
78
|
+
response = client[uri].patch(json_escape(data.to_json), json_headers)
|
79
|
+
if response && !response.empty?
|
80
|
+
JSON.parse(response)
|
81
|
+
else
|
82
|
+
true
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def put(uri, data)
|
88
|
+
refresh_auth unless authenticated?
|
89
|
+
|
90
|
+
client_action do |client|
|
91
|
+
client[uri].put(json_escape(data.to_json), json_headers)
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
private
|
96
|
+
|
97
|
+
def auth_header
|
98
|
+
authenticated? ? "Bearer #{@auth_token}" : nil
|
99
|
+
end
|
100
|
+
|
101
|
+
def client_action
|
102
|
+
raise Exceptions::APIClientNotConfigured unless configured?
|
103
|
+
yield connection
|
104
|
+
end
|
105
|
+
|
106
|
+
# Don't bother creating a connection until we need one
|
107
|
+
def connection
|
108
|
+
@connection ||= RestClient::Resource.new(api_uri.to_s)
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|