gbro_teemill 0.0.2 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 286a14ea843e38f76c80e9778d78fd58620cecc361fc72943cf305ec8a64d844
4
- data.tar.gz: bfa25ab16491c0b5b595040bbf987cd60b34c2b7208e0b7909b4c0f6512aba91
3
+ metadata.gz: 7dfbca27199726f1815775c8a98e6b333c8dfe7466b7fb3e84743e6f2f03ddd5
4
+ data.tar.gz: 84985619da844d97160235b03b53aefe689a3737b5cae9af7aa476f9f8499686
5
5
  SHA512:
6
- metadata.gz: 9ea8a683a4b9b8063ae3bf3afde9633821d89c2447a33345a28f551be847230180b7db5bc02ec61251cdeef67187b9938bed95834937131b5e94a7d80c8b0387
7
- data.tar.gz: 07d425a9c5a7c68a0e4855612f7634b21b9bdf6c1cf91e27535555565ec7bbf230059ce423b63ff9e4d6808ce493e4afba00f8d8f69b74f6f0e9fcc494c5a495
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, :api_base, :api_version, :bearer_token
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,13 @@
1
+ require 'colorize'
2
+
3
+ module Teemill
4
+ class Debug
5
+ attr_accessor :debug_mode
6
+
7
+ def self.log(string, color)
8
+ return unless Teemill.debug_mode
9
+
10
+ STDERR.puts string.public_send(color)
11
+ end
12
+ end
13
+ end
@@ -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
@@ -0,0 +1,5 @@
1
+ require_relative './documented_error'
2
+ require_relative './invalid_request_error'
3
+ require_relative './invalid_response_error'
4
+ require_relative './missing_credentials_error'
5
+ require_relative './missing_legacy_credentials_error'
@@ -0,0 +1,4 @@
1
+ module Teemill
2
+ class InvalidRequestError < StandardError
3
+ end
4
+ end
@@ -0,0 +1,5 @@
1
+ module Teemill
2
+ class InvalidResponseError < StandardError
3
+
4
+ end
5
+ end
@@ -0,0 +1,13 @@
1
+ require 'colorize'
2
+
3
+ module Teemill
4
+ class MissingCredentialsError < Teemill::DocumentedError
5
+ def message
6
+ "No API key has been provided"
7
+ end
8
+
9
+ def docs_hash_mark
10
+ "#authentication"
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ require 'colorize'
2
+
3
+ module Teemill
4
+ class MissingLegacyCredentialsError < Teemill::MissingCredentialsError
5
+ def message
6
+ "No legacy API key has been provided"
7
+ end
8
+
9
+ def docs_hash_mark
10
+ "#legacy_authentication"
11
+ end
12
+ end
13
+ end
@@ -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, :bearer_token, :bearer_token=
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 './base/bearer_token_authenticated_resource'
1
+ # require_relative './request/bearer_token_authenticated_request_handler'
2
+
2
3
 
3
4
  module Teemill
4
- class CustomProduct < BearerTokenAuthenticatedResource
5
- def self.create(options)
6
- self.new.send_post_request(
7
- '/product/create',
8
- options
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
@@ -0,0 +1,2 @@
1
+ require_relative './authenticated_request_handler'
2
+ require_relative './legacy_authenticated_request_handler'
@@ -1 +1,2 @@
1
+ require_relative './base_resource'
1
2
  require_relative './custom_product'
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.2
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-02 00:00:00.000000000 Z
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/resources/base/base_resource.rb
21
- - lib/resources/base/bearer_token_authenticated_resource.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
27
+ - lib/gbro_teemill.rb
28
+ - lib/resources/base_resource.rb
22
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
23
33
  - lib/resources/resources.rb
24
- - lib/teemill.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.2
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
@@ -1,11 +0,0 @@
1
- require_relative './base_resource'
2
-
3
- class BearerTokenAuthenticatedResource < BaseResource
4
- def authenticated_request_headers
5
- { Authorization: "Bearer #{Teemill.bearer_token}" }
6
- end
7
-
8
- def base_url
9
- "#{Teemill.api_base}/omnis/v3"
10
- end
11
- end