gbro_teemill 0.0.3 → 0.0.4
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 +4 -4
- data/lib/config.rb +6 -1
- data/lib/debug.rb +13 -0
- data/lib/errors/documented_error.rb +35 -0
- data/lib/errors/errors.rb +5 -0
- data/lib/errors/invalid_request_error.rb +4 -0
- data/lib/errors/invalid_response_error.rb +5 -0
- data/lib/errors/missing_credentials_error.rb +13 -0
- data/lib/errors/missing_legacy_credentials_error.rb +13 -0
- data/lib/gbro_teemill.rb +11 -1
- data/lib/resources/base_resource.rb +34 -0
- data/lib/resources/custom_product.rb +12 -7
- data/lib/resources/request/authenticated_request_handler.rb +72 -0
- data/lib/resources/request/legacy_authenticated_request_handler.rb +18 -0
- data/lib/resources/request/requests.rb +2 -0
- data/lib/resources/resources.rb +1 -0
- metadata +16 -6
- data/lib/resources/base/base_resource.rb +0 -53
- data/lib/resources/base/bearer_token_authenticated_resource.rb +0 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7dfbca27199726f1815775c8a98e6b333c8dfe7466b7fb3e84743e6f2f03ddd5
|
4
|
+
data.tar.gz: 84985619da844d97160235b03b53aefe689a3737b5cae9af7aa476f9f8499686
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6abd81aeda658e30bf3895d0f3726be4063c9bde988c155f7fa65304fe80c5a40b6def7e4b00c4954c21598945f65878bf687d951bb3c87322220ebb8957fd4f
|
7
|
+
data.tar.gz: d4cfda12dad2efcede45b0a5f5af8bc3a3ddd9a31432469edd6ee56f6216376c4adbf0afcf9f5367e5c7e3d7f3e49898d95b56c2c64e5159bf8421102a080bb9
|
data/lib/config.rb
CHANGED
@@ -1,10 +1,15 @@
|
|
1
1
|
module Teemill
|
2
2
|
class Config
|
3
|
-
attr_accessor :api_key,
|
3
|
+
attr_accessor :api_key,
|
4
|
+
:api_base,
|
5
|
+
:api_version,
|
6
|
+
:legacy_api_key,
|
7
|
+
:legacy_api_base
|
4
8
|
|
5
9
|
def initialize
|
6
10
|
@api_version = 1
|
7
11
|
@api_base = 'https://api.teemill.com'
|
12
|
+
@legacy_api_base = 'https://teemill.com'
|
8
13
|
end
|
9
14
|
end
|
10
15
|
end
|
data/lib/debug.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'colorize'
|
2
|
+
|
3
|
+
module Teemill
|
4
|
+
class DocumentedError < StandardError
|
5
|
+
def initialize
|
6
|
+
STDERR.puts message.red
|
7
|
+
STDERR.puts "See: #{docs_reference}".yellow
|
8
|
+
super(message)
|
9
|
+
end
|
10
|
+
|
11
|
+
def message
|
12
|
+
"Unknown error occurred"
|
13
|
+
end
|
14
|
+
|
15
|
+
def docs_reference
|
16
|
+
"#{docs_domain}#{docs_path}#{docs_query_params}#{docs_hash_mark}"
|
17
|
+
end
|
18
|
+
|
19
|
+
def docs_domain
|
20
|
+
"https://teemill.com"
|
21
|
+
end
|
22
|
+
|
23
|
+
def docs_path
|
24
|
+
"/api-docs"
|
25
|
+
end
|
26
|
+
|
27
|
+
def docs_query_params
|
28
|
+
"?lang=ruby"
|
29
|
+
end
|
30
|
+
|
31
|
+
def docs_hash_mark
|
32
|
+
"#"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/lib/gbro_teemill.rb
CHANGED
@@ -1,9 +1,17 @@
|
|
1
|
+
|
2
|
+
require_relative './errors/errors'
|
3
|
+
require_relative './resources/request/requests'
|
1
4
|
require_relative './resources/resources'
|
2
5
|
require_relative './config'
|
6
|
+
require_relative './debug'
|
3
7
|
require 'forwardable'
|
4
8
|
|
9
|
+
#
|
10
|
+
# An SDK for the Teemill API
|
11
|
+
#
|
5
12
|
module Teemill
|
6
13
|
@config = Config.new
|
14
|
+
@debug = Debug.new
|
7
15
|
|
8
16
|
class << self
|
9
17
|
extend Forwardable
|
@@ -11,8 +19,10 @@ module Teemill
|
|
11
19
|
attr_reader :config
|
12
20
|
|
13
21
|
def_delegators :@config, :api_key, :api_key=
|
14
|
-
def_delegators :@config, :
|
22
|
+
def_delegators :@config, :legacy_api_key, :legacy_api_key=
|
15
23
|
def_delegators :@config, :api_version, :api_version=
|
16
24
|
def_delegators :@config, :api_base, :api_base=
|
25
|
+
def_delegators :@config, :legacy_api_base, :legacy_api_base=
|
26
|
+
def_delegators :@debug, :debug_mode, :debug_mode=
|
17
27
|
end
|
18
28
|
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
|
3
|
+
module Teemill
|
4
|
+
class BaseResource
|
5
|
+
include Teemill::AuthenticatedRequestHandler
|
6
|
+
|
7
|
+
def self.create(options)
|
8
|
+
obj = new
|
9
|
+
|
10
|
+
Teemill::Debug.log("Creating: #{obj.class.name}", 'cyan')
|
11
|
+
|
12
|
+
raise Teemill::InvalidRequestError, 'No create request exists for this resource' unless obj.create_resource_url
|
13
|
+
|
14
|
+
response = obj.send_post_request(
|
15
|
+
obj.create_resource_url,
|
16
|
+
options
|
17
|
+
)
|
18
|
+
|
19
|
+
obj.assign_properties(response)
|
20
|
+
|
21
|
+
obj
|
22
|
+
end
|
23
|
+
|
24
|
+
def assign_properties(props)
|
25
|
+
props.each_key do |key|
|
26
|
+
value = props[key]
|
27
|
+
|
28
|
+
value = OpenStruct.new(value) if value.instance_of?(Hash)
|
29
|
+
|
30
|
+
send("#{key}=", value)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -1,12 +1,17 @@
|
|
1
|
-
require_relative './
|
1
|
+
# require_relative './request/bearer_token_authenticated_request_handler'
|
2
|
+
|
2
3
|
|
3
4
|
module Teemill
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
5
|
+
#
|
6
|
+
# Used to create Custom Products
|
7
|
+
#
|
8
|
+
class CustomProduct < Teemill::BaseResource
|
9
|
+
include Teemill::LegacyAuthenticatedRequestHandler
|
10
|
+
|
11
|
+
attr_accessor :id, :url, :image, :colours, :name, :price
|
12
|
+
|
13
|
+
def create_resource_url
|
14
|
+
'/product/create'
|
10
15
|
end
|
11
16
|
end
|
12
17
|
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'uri'
|
3
|
+
require 'net/http'
|
4
|
+
require 'openssl'
|
5
|
+
|
6
|
+
module Teemill
|
7
|
+
module AuthenticatedRequestHandler
|
8
|
+
def base_url
|
9
|
+
"#{Teemill.api_base}/v#{Teemill.api_version}"
|
10
|
+
end
|
11
|
+
|
12
|
+
def authenticated_request_headers
|
13
|
+
{ Authorization: Teemill.api_key }
|
14
|
+
end
|
15
|
+
|
16
|
+
def send_request(request_url, data, method = 'GET')
|
17
|
+
check_credentials
|
18
|
+
Teemill::Debug.log("Dispatching: #{method} #{base_url}", 'yellow')
|
19
|
+
url = URI("#{base_url}#{request_url}")
|
20
|
+
|
21
|
+
http = create_http(url)
|
22
|
+
|
23
|
+
request = create_request_object(url, data, method)
|
24
|
+
|
25
|
+
response = http.request(request)
|
26
|
+
Teemill::Debug.log("Received: #{response.code} #{response.msg}", 'yellow')
|
27
|
+
raise Teemill::InvalidResponseError, "Error #{response.code}: #{response.msg}" unless response.code == "200"
|
28
|
+
|
29
|
+
JSON.parse(response.read_body)
|
30
|
+
end
|
31
|
+
|
32
|
+
def send_post_request(request_url, data)
|
33
|
+
send_request(request_url, data, 'POST')
|
34
|
+
end
|
35
|
+
|
36
|
+
def send_get_request(request_url, data)
|
37
|
+
send_request(request_url, data, 'GET')
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def check_credentials
|
43
|
+
raise Teemill::MissingCredentialsError unless Teemill.api_key
|
44
|
+
end
|
45
|
+
|
46
|
+
def create_http(url)
|
47
|
+
http = Net::HTTP.new(url.host, url.port)
|
48
|
+
http.use_ssl = true
|
49
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
50
|
+
http
|
51
|
+
end
|
52
|
+
|
53
|
+
def create_request_object(url, data, method)
|
54
|
+
request = Net::HTTP::Post.new(url) if method == 'POST'
|
55
|
+
request = Net::HTTP::Get.new(url) if method == 'GET'
|
56
|
+
|
57
|
+
request['Content-Type'] = 'application/json'
|
58
|
+
|
59
|
+
add_authentication_headers(request)
|
60
|
+
|
61
|
+
request.body = JSON.generate(data) if method == 'POST'
|
62
|
+
|
63
|
+
request
|
64
|
+
end
|
65
|
+
|
66
|
+
def add_authentication_headers(request)
|
67
|
+
authenticated_request_headers.each_key do |header|
|
68
|
+
request[header] = authenticated_request_headers[header]
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Teemill
|
2
|
+
module LegacyAuthenticatedRequestHandler
|
3
|
+
include Teemill::AuthenticatedRequestHandler
|
4
|
+
def authenticated_request_headers
|
5
|
+
{ Authorization: "Bearer #{Teemill.legacy_api_key}" }
|
6
|
+
end
|
7
|
+
|
8
|
+
def base_url
|
9
|
+
"#{Teemill.legacy_api_base}/omnis/v3"
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def check_credentials
|
15
|
+
raise Teemill::MissingLegacyCredentialsError unless Teemill.legacy_api_key
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/lib/resources/resources.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gbro_teemill
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- G-Bro
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-11-
|
11
|
+
date: 2022-11-05 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description:
|
14
14
|
email:
|
@@ -17,15 +17,25 @@ extensions: []
|
|
17
17
|
extra_rdoc_files: []
|
18
18
|
files:
|
19
19
|
- lib/config.rb
|
20
|
+
- lib/debug.rb
|
21
|
+
- lib/errors/documented_error.rb
|
22
|
+
- lib/errors/errors.rb
|
23
|
+
- lib/errors/invalid_request_error.rb
|
24
|
+
- lib/errors/invalid_response_error.rb
|
25
|
+
- lib/errors/missing_credentials_error.rb
|
26
|
+
- lib/errors/missing_legacy_credentials_error.rb
|
20
27
|
- lib/gbro_teemill.rb
|
21
|
-
- lib/resources/
|
22
|
-
- lib/resources/base/bearer_token_authenticated_resource.rb
|
28
|
+
- lib/resources/base_resource.rb
|
23
29
|
- lib/resources/custom_product.rb
|
30
|
+
- lib/resources/request/authenticated_request_handler.rb
|
31
|
+
- lib/resources/request/legacy_authenticated_request_handler.rb
|
32
|
+
- lib/resources/request/requests.rb
|
24
33
|
- lib/resources/resources.rb
|
25
34
|
homepage: https://teemill.com/api-docs/
|
26
35
|
licenses:
|
27
36
|
- MIT
|
28
|
-
metadata:
|
37
|
+
metadata:
|
38
|
+
source_code_uri: https://github.com/G-Bro/teemill-ruby-sdk
|
29
39
|
post_install_message:
|
30
40
|
rdoc_options: []
|
31
41
|
require_paths:
|
@@ -41,7 +51,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
41
51
|
- !ruby/object:Gem::Version
|
42
52
|
version: '0'
|
43
53
|
requirements: []
|
44
|
-
rubygems_version: 3.1.
|
54
|
+
rubygems_version: 3.1.6
|
45
55
|
signing_key:
|
46
56
|
specification_version: 4
|
47
57
|
summary: An SDK for the Teemill API
|
@@ -1,53 +0,0 @@
|
|
1
|
-
require 'json'
|
2
|
-
require 'uri'
|
3
|
-
require 'net/http'
|
4
|
-
require 'openssl'
|
5
|
-
|
6
|
-
class BaseResource
|
7
|
-
def base_url
|
8
|
-
"#{Teemill.api_base}/v#{Teemill.api_version}"
|
9
|
-
end
|
10
|
-
|
11
|
-
def authenticated_request_headers
|
12
|
-
{ Authorization: Teemill.api_key }
|
13
|
-
end
|
14
|
-
|
15
|
-
def add_authentication_headers(request)
|
16
|
-
authenticated_request_headers.each_key do |header|
|
17
|
-
request[header] = authenticated_request_headers[header]
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def send_request(request_url, data, method = 'GET')
|
22
|
-
url = URI("#{base_url}#{request_url}")
|
23
|
-
|
24
|
-
http = create_http(url)
|
25
|
-
|
26
|
-
request = Net::HTTP::Post.new(url) if method == 'POST'
|
27
|
-
request = Net::HTTP::Get.new(url) if method == 'GET'
|
28
|
-
|
29
|
-
request['Content-Type'] = 'application/json'
|
30
|
-
|
31
|
-
add_authentication_headers(request)
|
32
|
-
|
33
|
-
request.body = JSON.generate(data) if method == 'POST'
|
34
|
-
|
35
|
-
response = http.request(request)
|
36
|
-
JSON.parse(response.read_body)
|
37
|
-
end
|
38
|
-
|
39
|
-
def create_http(url)
|
40
|
-
http = Net::HTTP.new(url.host, url.port)
|
41
|
-
http.use_ssl = true
|
42
|
-
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
43
|
-
http
|
44
|
-
end
|
45
|
-
|
46
|
-
def send_post_request(request_url, data)
|
47
|
-
send_request(request_url, data, 'POST')
|
48
|
-
end
|
49
|
-
|
50
|
-
def send_get_request(request_url, data)
|
51
|
-
send_request(request_url, data, 'GET')
|
52
|
-
end
|
53
|
-
end
|