as_colour 0.1.0
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/.gitignore +4 -0
- data/.rspec +4 -0
- data/.rubocop.yml +704 -0
- data/CHANGELOG.md +5 -0
- data/CODE_OF_CONDUCT.md +84 -0
- data/Dockerfile +24 -0
- data/Gemfile +17 -0
- data/Gemfile.lock +134 -0
- data/LICENSE +21 -0
- data/README.md +124 -0
- data/Rakefile +8 -0
- data/as_colour.gemspec +34 -0
- data/as_colour_api.pdf +0 -0
- data/bin/console +15 -0
- data/bin/setup +8 -0
- data/docker-compose.yml +20 -0
- data/examples/catalog_colours.rb +23 -0
- data/examples/catalog_products.rb +54 -0
- data/examples/inventory.rb +23 -0
- data/examples/price_list.rb +25 -0
- data/lib/as_colour/as_colour_error.rb +61 -0
- data/lib/as_colour/client/colours.rb +13 -0
- data/lib/as_colour/client/inventory_items.rb +20 -0
- data/lib/as_colour/client/price_list.rb +13 -0
- data/lib/as_colour/client/product_variants.rb +33 -0
- data/lib/as_colour/client/products.rb +27 -0
- data/lib/as_colour/client.rb +105 -0
- data/lib/as_colour/model/as_colour_model.rb +7 -0
- data/lib/as_colour/model/colour.rb +7 -0
- data/lib/as_colour/model/inventory_item.rb +7 -0
- data/lib/as_colour/model/price_list_item.rb +7 -0
- data/lib/as_colour/model/product.rb +7 -0
- data/lib/as_colour/model/product_image.rb +7 -0
- data/lib/as_colour/model/product_inventory.rb +7 -0
- data/lib/as_colour/model/product_variant.rb +7 -0
- data/lib/as_colour/version.rb +5 -0
- data/lib/as_colour.rb +13 -0
- metadata +154 -0
@@ -0,0 +1,61 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module AsColour
|
4
|
+
class AsColourError < StandardError
|
5
|
+
# attr_reader :error
|
6
|
+
# attr_reader :raw
|
7
|
+
# attr_reader :response_code
|
8
|
+
|
9
|
+
# def initialize(http_response)
|
10
|
+
# @raw = http_response
|
11
|
+
# @response_code = @raw.response_code
|
12
|
+
|
13
|
+
# data = process_response_body
|
14
|
+
# if data.nil?
|
15
|
+
# set_default_error_message
|
16
|
+
# else
|
17
|
+
# @error = data
|
18
|
+
# end
|
19
|
+
# end
|
20
|
+
|
21
|
+
# def error?
|
22
|
+
# true
|
23
|
+
# end
|
24
|
+
|
25
|
+
# def to_s
|
26
|
+
# return remove_extra_quotes(@error) if @error.is_a?(String)
|
27
|
+
|
28
|
+
# retval = @error.each_with_object([]) do |(key, value), str|
|
29
|
+
# str_value = value.is_a?(Array) ? value.join(', ') : value
|
30
|
+
# str_value = remove_extra_quotes(str_value)
|
31
|
+
# str << "#{key}: #{str_value}"
|
32
|
+
# end
|
33
|
+
# retval.join(', ')
|
34
|
+
# end
|
35
|
+
# alias message to_s
|
36
|
+
|
37
|
+
# private
|
38
|
+
|
39
|
+
# def remove_extra_quotes(str)
|
40
|
+
# str.tr('"', '')
|
41
|
+
# end
|
42
|
+
|
43
|
+
# def process_response_body
|
44
|
+
# JSON.parse(@raw.body, symbolize_names: true).to_snake_keys unless @raw.body.empty?
|
45
|
+
# rescue StandardError
|
46
|
+
# @raw.body.strip
|
47
|
+
# end
|
48
|
+
|
49
|
+
# def set_default_error_message
|
50
|
+
# require 'uri'
|
51
|
+
# api_path = URI.parse(@raw.effective_url).path
|
52
|
+
# @error = "ASColour API returned an error for #{api_path}."
|
53
|
+
|
54
|
+
# if @response_code == 401
|
55
|
+
# @error += ' Please check your credentials.'
|
56
|
+
# elsif @response_code == 404
|
57
|
+
# @error += ' Please check your API path.'
|
58
|
+
# end
|
59
|
+
# end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module AsColour
|
2
|
+
class Client
|
3
|
+
module Colours
|
4
|
+
def colours(args = {})
|
5
|
+
results = process_request(:get, 'catalog/colours', params: args)
|
6
|
+
return results if results.is_a?(AsColourError)
|
7
|
+
|
8
|
+
results[:data].map { |row| AsColour::Colour.new(row) }
|
9
|
+
end
|
10
|
+
alias list_colours colours
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module AsColour
|
2
|
+
class Client
|
3
|
+
module InventoryItems
|
4
|
+
def items(args = {})
|
5
|
+
results = process_request(:get, 'inventory/items', params: args)
|
6
|
+
return results if results.is_a?(AsColourError)
|
7
|
+
|
8
|
+
results[:data].map { |row| AsColour::InventoryItem.new(row) }
|
9
|
+
end
|
10
|
+
alias list_items items
|
11
|
+
|
12
|
+
def item(sku)
|
13
|
+
results = process_request(:get, "inventory/items/#{sku}")
|
14
|
+
return results if results.is_a?(AsColourError)
|
15
|
+
|
16
|
+
results[:data].map { |row| AsColour::InventoryItem.new(row) }
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module AsColour
|
2
|
+
class Client
|
3
|
+
module PriceList
|
4
|
+
def price_list(args = {})
|
5
|
+
args.merge!(auth_token_required: true)
|
6
|
+
results = process_request(:get, 'catalog/pricelist', params: args)
|
7
|
+
return results if results.is_a?(AsColourError)
|
8
|
+
|
9
|
+
results[:data].map { |row| AsColour::PriceListItem.new(row) }
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module AsColour
|
2
|
+
class Client
|
3
|
+
module ProductVariants
|
4
|
+
def product_variants(style_code, args = {})
|
5
|
+
results = process_request(:get, "catalog/products/#{style_code}/variants", params: args)
|
6
|
+
return results if results.is_a?(AsColourError)
|
7
|
+
|
8
|
+
results[:data].map { |row| AsColour::Product.new(row) }
|
9
|
+
end
|
10
|
+
|
11
|
+
def product_variant(style_code, variant_id)
|
12
|
+
result = process_request(:get, "catalog/products/#{style_code}/variants/#{variant_id}")
|
13
|
+
return result if result.is_a?(AsColourError)
|
14
|
+
|
15
|
+
AsColour::Product.new(result)
|
16
|
+
end
|
17
|
+
|
18
|
+
def product_variant_inventory(style_code, variant_id)
|
19
|
+
results = process_request(:get, "catalog/products/#{style_code}/variants/#{variant_id}/inventory")
|
20
|
+
return results if results.is_a?(AsColourError)
|
21
|
+
|
22
|
+
results[:data].map { |row| AsColour::ProductInventory.new(row) }
|
23
|
+
end
|
24
|
+
|
25
|
+
def product_variant_inventory_inbound(style_code, variant_id)
|
26
|
+
result = process_request(:get, "catalog/products/#{style_code}/variants/#{variant_id}/inbound")
|
27
|
+
return result if result.is_a?(AsColourError)
|
28
|
+
|
29
|
+
AsColour::Product.new(result)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module AsColour
|
2
|
+
class Client
|
3
|
+
module Products
|
4
|
+
def products(args = {})
|
5
|
+
results = process_request(:get, 'catalog/products', params: args)
|
6
|
+
return results if results.is_a?(AsColourError)
|
7
|
+
|
8
|
+
results[:data].map { |row| AsColour::Product.new(row) }
|
9
|
+
end
|
10
|
+
alias list_products products
|
11
|
+
|
12
|
+
def product(style_code)
|
13
|
+
result = process_request(:get, "catalog/products/#{style_code}")
|
14
|
+
return result if result.is_a?(AsColourError)
|
15
|
+
|
16
|
+
AsColour::Product.new(result)
|
17
|
+
end
|
18
|
+
|
19
|
+
def product_images(style_code)
|
20
|
+
results = process_request(:get, "catalog/products/#{style_code}/images")
|
21
|
+
return results if results.is_a?(AsColourError)
|
22
|
+
|
23
|
+
results[:data].map { |row| AsColour::ProductImage.new(row) }
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,105 @@
|
|
1
|
+
require_relative 'client/colours'
|
2
|
+
require_relative 'client/products'
|
3
|
+
require_relative 'client/product_variants'
|
4
|
+
require_relative 'client/inventory_items'
|
5
|
+
require_relative 'client/price_list'
|
6
|
+
|
7
|
+
require_relative 'model/as_colour_model'
|
8
|
+
require_relative 'model/colour'
|
9
|
+
require_relative 'model/inventory_item'
|
10
|
+
require_relative 'model/price_list_item'
|
11
|
+
require_relative 'model/product'
|
12
|
+
require_relative 'model/product_image'
|
13
|
+
require_relative 'model/product_inventory'
|
14
|
+
require_relative 'model/product_variant'
|
15
|
+
|
16
|
+
module AsColour
|
17
|
+
class Client
|
18
|
+
include AsColour::Client::Colours
|
19
|
+
include AsColour::Client::Products
|
20
|
+
include AsColour::Client::ProductVariants
|
21
|
+
include AsColour::Client::InventoryItems
|
22
|
+
include AsColour::Client::PriceList
|
23
|
+
|
24
|
+
def initialize(auth = nil)
|
25
|
+
@auth = auth || load_from_environment
|
26
|
+
|
27
|
+
if @auth.nil?
|
28
|
+
raise AsColourError, 'API authentication incomplete! You need the subscription key.'
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def as_colour_auth_headers(auth_token_required)
|
35
|
+
retval = {
|
36
|
+
'Content-Type' => 'application/json',
|
37
|
+
'charset' => 'utf-8',
|
38
|
+
'Subscription-Key' => @auth[:subscription_key]
|
39
|
+
}
|
40
|
+
retval['Authorization'] = "Bearer #{process_auth_token_request}" if auth_token_required
|
41
|
+
retval
|
42
|
+
end
|
43
|
+
|
44
|
+
def load_from_environment
|
45
|
+
return if ENV['ASCOLOUR_SUBSCRIPTION_KEY'].nil?
|
46
|
+
|
47
|
+
{
|
48
|
+
subscription_key: ENV['ASCOLOUR_SUBSCRIPTION_KEY'],
|
49
|
+
email: ENV['ASCOLOUR_EMAIL'],
|
50
|
+
password: ENV['ASCOLOUR_PASSWORD']
|
51
|
+
}
|
52
|
+
end
|
53
|
+
|
54
|
+
def process_as_colour_response(response_body)
|
55
|
+
JSON.parse(response_body, symbolize_names: true).to_snake_keys
|
56
|
+
rescue
|
57
|
+
response_body
|
58
|
+
end
|
59
|
+
|
60
|
+
def process_auth_token_request
|
61
|
+
request_params = {
|
62
|
+
method: :post,
|
63
|
+
headers: as_colour_auth_headers(nil),
|
64
|
+
body: {
|
65
|
+
email: @auth[:email],
|
66
|
+
password: @auth[:password]
|
67
|
+
}.to_json
|
68
|
+
}
|
69
|
+
|
70
|
+
proxy = @auth[:proxy] || ENV['PROXY']
|
71
|
+
request_params[:proxy] = proxy unless proxy.nil?
|
72
|
+
|
73
|
+
response = Typhoeus::Request.new(
|
74
|
+
"https://api.ascolour.com/v1/api/authentication",
|
75
|
+
request_params
|
76
|
+
).run
|
77
|
+
return AsColourError.new(response) unless response.success?
|
78
|
+
|
79
|
+
retval = process_as_colour_response(response.body)
|
80
|
+
retval[:token]
|
81
|
+
end
|
82
|
+
|
83
|
+
def process_request(request_type, url_path, options = {})
|
84
|
+
options_params = options[:params] || {}
|
85
|
+
auth_token_required = options_params.delete(:auth_token_required) || false
|
86
|
+
request_params = {
|
87
|
+
method: request_type,
|
88
|
+
params: options_params.to_camelback_keys,
|
89
|
+
headers: as_colour_auth_headers(auth_token_required),
|
90
|
+
body: options[:body]&.to_json
|
91
|
+
}
|
92
|
+
|
93
|
+
proxy = @auth[:proxy] || ENV['PROXY']
|
94
|
+
request_params[:proxy] = proxy unless proxy.nil?
|
95
|
+
|
96
|
+
response = Typhoeus::Request.new(
|
97
|
+
"https://api.ascolour.com/v1/#{url_path}",
|
98
|
+
request_params
|
99
|
+
).run
|
100
|
+
return AsColourError.new(response) unless response.success?
|
101
|
+
|
102
|
+
process_as_colour_response(response.body)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
data/lib/as_colour.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'json'
|
5
|
+
require 'typhoeus'
|
6
|
+
require 'awrence'
|
7
|
+
require 'plissken'
|
8
|
+
require 'base64'
|
9
|
+
require 'ostruct'
|
10
|
+
|
11
|
+
require_relative 'as_colour/version'
|
12
|
+
require_relative 'as_colour/client'
|
13
|
+
require_relative 'as_colour/as_colour_error'
|
metadata
ADDED
@@ -0,0 +1,154 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: as_colour
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Wes Hays
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2025-05-20 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: typhoeus
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.4'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.4'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: json
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '2.12'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '2.12'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: plissken
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: awrence
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '3.0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '3.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: ostruct
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 0.6.1
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 0.6.1
|
83
|
+
description: Ruby API wrapper for the ASColour.com API
|
84
|
+
email:
|
85
|
+
- weshays@gmail.com
|
86
|
+
executables: []
|
87
|
+
extensions: []
|
88
|
+
extra_rdoc_files: []
|
89
|
+
files:
|
90
|
+
- ".gitignore"
|
91
|
+
- ".rspec"
|
92
|
+
- ".rubocop.yml"
|
93
|
+
- CHANGELOG.md
|
94
|
+
- CODE_OF_CONDUCT.md
|
95
|
+
- Dockerfile
|
96
|
+
- Gemfile
|
97
|
+
- Gemfile.lock
|
98
|
+
- LICENSE
|
99
|
+
- README.md
|
100
|
+
- Rakefile
|
101
|
+
- as_colour.gemspec
|
102
|
+
- as_colour_api.pdf
|
103
|
+
- bin/console
|
104
|
+
- bin/setup
|
105
|
+
- docker-compose.yml
|
106
|
+
- examples/catalog_colours.rb
|
107
|
+
- examples/catalog_products.rb
|
108
|
+
- examples/inventory.rb
|
109
|
+
- examples/price_list.rb
|
110
|
+
- lib/as_colour.rb
|
111
|
+
- lib/as_colour/as_colour_error.rb
|
112
|
+
- lib/as_colour/client.rb
|
113
|
+
- lib/as_colour/client/colours.rb
|
114
|
+
- lib/as_colour/client/inventory_items.rb
|
115
|
+
- lib/as_colour/client/price_list.rb
|
116
|
+
- lib/as_colour/client/product_variants.rb
|
117
|
+
- lib/as_colour/client/products.rb
|
118
|
+
- lib/as_colour/model/as_colour_model.rb
|
119
|
+
- lib/as_colour/model/colour.rb
|
120
|
+
- lib/as_colour/model/inventory_item.rb
|
121
|
+
- lib/as_colour/model/price_list_item.rb
|
122
|
+
- lib/as_colour/model/product.rb
|
123
|
+
- lib/as_colour/model/product_image.rb
|
124
|
+
- lib/as_colour/model/product_inventory.rb
|
125
|
+
- lib/as_colour/model/product_variant.rb
|
126
|
+
- lib/as_colour/version.rb
|
127
|
+
homepage: https://github.com/BenefitMany/as_colour
|
128
|
+
licenses:
|
129
|
+
- MIT
|
130
|
+
metadata:
|
131
|
+
source_code_uri: https://github.com/BenefitMany/as_colour
|
132
|
+
bug_tracker_uri: https://github.com/BenefitMany/as_colour/issues
|
133
|
+
changelog_uri: https://github.com/BenefitMany/as_colour/blob/main/CHANGELOG.md
|
134
|
+
documentation_uri: https://github.com/BenefitMany/as_colour/blob/main/as_colour_api.pdf
|
135
|
+
post_install_message:
|
136
|
+
rdoc_options: []
|
137
|
+
require_paths:
|
138
|
+
- lib
|
139
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
140
|
+
requirements:
|
141
|
+
- - ">="
|
142
|
+
- !ruby/object:Gem::Version
|
143
|
+
version: 2.4.0
|
144
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
145
|
+
requirements:
|
146
|
+
- - ">="
|
147
|
+
- !ruby/object:Gem::Version
|
148
|
+
version: '0'
|
149
|
+
requirements: []
|
150
|
+
rubygems_version: 3.5.22
|
151
|
+
signing_key:
|
152
|
+
specification_version: 4
|
153
|
+
summary: Ruby API wrapper for the ASColour.com API
|
154
|
+
test_files: []
|