class Shoptet
Constants
- ADDON_NOT_INSTALLED
- EXPIRED_TOKEN_CODE
- INVALID_TOKEN_CODE
- ON_TOKEN_ERROR
Attributes
api_token[RW]
Public Class Methods
ar_on_token_error(model)
click to toggle source
# File lib/shoptet.rb, line 31 def self.ar_on_token_error(model) -> (api) do model.with_lock do model.reload if model.api_token != api.api_token api.api_token = model.api_token else new_token = api.new_api_token api.api_token = new_token model.api_token = new_token model.save! end end end end
basic_eshop(url, access_token)
click to toggle source
# File lib/shoptet.rb, line 74 def self.basic_eshop url, access_token Shoptet::Request.get(url, { 'Authorization' => "Bearer #{access_token}" }) end
install(url, redirect_url, client_id, client_secret, code)
click to toggle source
# File lib/shoptet.rb, line 48 def self.install url, redirect_url, client_id, client_secret, code data = { 'redirect_uri' => redirect_url, 'client_id' => client_id, 'client_secret' => client_secret, 'code' => code, 'grant_type' => 'authorization_code', 'scope' => 'api' } Shoptet::Request.post(url, data) end
login_token(url, code, client_id, client_secret, redirect_url)
click to toggle source
# File lib/shoptet.rb, line 61 def self.login_token url, code, client_id, client_secret, redirect_url data = { code: code, grant_type: 'authorization_code', client_id: client_id, client_secret: client_secret, redirect_uri: redirect_url, scope: 'basic_eshop' } Shoptet::Request.post(url, data) end
new(oauth_url:, oauth_token:, shop_url:, client_id:, api_token: nil, on_token_error: nil)
click to toggle source
# File lib/shoptet.rb, line 80 def initialize oauth_url:, oauth_token:, shop_url:, client_id:, api_token: nil, on_token_error: nil @oauth_url = oauth_url @oauth_token = oauth_token @shop_url = shop_url @client_id = client_id @api_token = api_token @on_token_error = on_token_error || ON_TOKEN_ERROR end
version()
click to toggle source
# File lib/shoptet.rb, line 27 def self.version '0.0.35' end
Public Instance Methods
delete(url, retry_on_token_error = true)
click to toggle source
# File lib/shoptet.rb, line 247 def delete(url, retry_on_token_error = true) url = URI(url) headers = { 'Shoptet-Access-Token' => @api_token, 'Content-Type' => 'application/vnd.shoptet.v1.0' } result = Shoptet::Request.delete(url, headers) token_errors = handle_errors(result) if token_errors.any? if retry_on_token_error @on_token_error.call(self) delete(url, false) else raise Error.new(result) end else result end end
delete_template(location)
click to toggle source
# File lib/shoptet.rb, line 192 def delete_template(location) result = delete("https://api.myshoptet.com/api/template-include/#{location}") result['data'] end
design_info(api_params = {})
click to toggle source
# File lib/shoptet.rb, line 120 def design_info api_params = {} result = get('https://api.myshoptet.com/api/eshop/design', api_params) result['data'] end
endpoint_approved?(endpoint)
click to toggle source
# File lib/shoptet.rb, line 93 def endpoint_approved? endpoint @approved_endpoints ||= endpoints @approved_endpoints.any? { _1['endpoint'] == endpoint } end
endpoints(api_params = {})
click to toggle source
# File lib/shoptet.rb, line 89 def endpoints api_params = {} enumerize('https://api.myshoptet.com/api/system/endpoints', api_params) end
endpoints_approved?(*endpoints_to_check)
click to toggle source
# File lib/shoptet.rb, line 99 def endpoints_approved? *endpoints_to_check endpoints_to_check.all? { endpoint_approved? _1 } end
get(url, api_params = {})
click to toggle source
# File lib/shoptet.rb, line 206 def get url, api_params = {}, retry_on_token_error = true url = URI(url) url.query = URI.encode_www_form(api_params) if api_params.any? headers = { 'Shoptet-Access-Token' => @api_token, 'Content-Type' => 'application/vnd.shoptet.v1.0' } result = Shoptet::Request.get(url, headers) token_errors = handle_errors(result) if token_errors.any? if retry_on_token_error @on_token_error.call(self) get(url, api_params, false) else raise Error.new(result) end else result end end
new_api_token()
click to toggle source
# File lib/shoptet.rb, line 197 def new_api_token headers = { 'Authorization' => "Bearer #{@oauth_token}" } result = Shoptet::Request.get(URI(@oauth_url), headers) handle_errors(result) result.fetch('access_token') end
order(code, api_params = {})
click to toggle source
# File lib/shoptet.rb, line 167 def order code, api_params = {} result = get("https://api.myshoptet.com/api/orders/#{code}", api_params) result.dig('data', 'order') end
orders(api_params = {})
click to toggle source
# File lib/shoptet.rb, line 158 def orders api_params = {} enumerize('https://api.myshoptet.com/api/orders', api_params) end
orders_changes(from: api_params = { from: from.iso8601 })
click to toggle source
# File lib/shoptet.rb, line 162 def orders_changes from: api_params = { from: from.iso8601 } enumerize('https://api.myshoptet.com/api/orders/changes', api_params) end
post_binary(url, data, retry_on_token_error = true)
click to toggle source
# File lib/shoptet.rb, line 228 def post_binary(url, data, retry_on_token_error = true) url = URI(url) headers = { 'Shoptet-Access-Token' => @api_token, 'Content-Type' => 'application/vnd.shoptet.v1.0' } result = Shoptet::Request.post_binary(url, data, headers) token_errors = handle_errors(result) if token_errors.any? if retry_on_token_error @on_token_error.call(self) post_binary(url, data, false) else raise Error.new(result) end else result end end
price_lists(api_params = {})
click to toggle source
# File lib/shoptet.rb, line 150 def price_lists api_params = {} enumerize('https://api.myshoptet.com/api/pricelists', api_params) end
prices(price_list_id, api_params = {})
click to toggle source
# File lib/shoptet.rb, line 154 def prices price_list_id, api_params = {} enumerize("https://api.myshoptet.com/api/pricelists/#{price_list_id}", api_params, 'pricelist') end
product(guid, api_params = {})
click to toggle source
# File lib/shoptet.rb, line 172 def product guid, api_params = {} result = get("https://api.myshoptet.com/api/products/#{guid}", api_params) result['data'] end
product_by_code(code, api_params = {})
click to toggle source
# File lib/shoptet.rb, line 177 def product_by_code code, api_params = {} result = get("https://api.myshoptet.com/api/products/code/#{code}", api_params) result['data'] end
product_categories(api_params = {})
click to toggle source
# File lib/shoptet.rb, line 142 def product_categories api_params = {} enumerize('https://api.myshoptet.com/api/categories', api_params) end
products(api_params = {})
click to toggle source
# File lib/shoptet.rb, line 130 def products api_params = {} enumerize("https://api.myshoptet.com/api/products", api_params) end
products_changes(api_params = {})
click to toggle source
# File lib/shoptet.rb, line 146 def products_changes api_params = {} enumerize('https://api.myshoptet.com/api/products/changes', api_params) end
set_templates(data)
click to toggle source
# File lib/shoptet.rb, line 187 def set_templates(data) result = post_binary('https://api.myshoptet.com/api/template-include', data) result['data'] end
shop_info(api_params = {})
click to toggle source
# File lib/shoptet.rb, line 115 def shop_info api_params = {} result = get('https://api.myshoptet.com/api/eshop', api_params) result['data'] end
stocks(api_params = {})
click to toggle source
# File lib/shoptet.rb, line 126 def stocks api_params = {} enumerize('https://api.myshoptet.com/api/stocks', api_params) end
stocks_movements(warehouse_id, api_params = {})
click to toggle source
# File lib/shoptet.rb, line 138 def stocks_movements warehouse_id, api_params = {} enumerize("https://api.myshoptet.com/api/stocks/#{warehouse_id}/movements", api_params) end
supplies(warehouse_id, api_params = {})
click to toggle source
# File lib/shoptet.rb, line 134 def supplies warehouse_id, api_params = {} enumerize("https://api.myshoptet.com/api/stocks/#{warehouse_id}/supplies", api_params) end
suspended?()
click to toggle source
# File lib/shoptet.rb, line 266 def suspended? false if shop_info rescue Shoptet::AddonSuspended true end
template_includes()
click to toggle source
# File lib/shoptet.rb, line 182 def template_includes result = get('https://api.myshoptet.com/api/template-include') result['data'] end
Private Instance Methods
enumerize(base_url, filters = {})
click to toggle source
# File lib/shoptet.rb, line 274 def enumerize base_url, filters = {}, data_key = nil ApiEnumerator.new(base_url, filters, data_key, self) end
handle_errors(result)
click to toggle source
# File lib/shoptet.rb, line 278 def handle_errors result error = result['error'] errors = result['errors'] || [] token_errors, non_token_errors = errors.partition do |err| code = err['errorCode'] message = err['message'] code == EXPIRED_TOKEN_CODE || code == INVALID_TOKEN_CODE && (message.include?('Invalid access token') || message.include?('Missing access token')) end if error || non_token_errors.any? if error == 'addon_suspended' || errors.any? { |e| e["errorCode"] == INVALID_TOKEN_CODE && e['message'] == ADDON_NOT_INSTALLED } raise AddonSuspended elsif (error == 'addon_not_installed') raise AddonNotInstalled elsif errors.any? { |err| err["errorCode"] == 'invalid-token-no-rights' } raise InvalidTokenNoRights elsif errors.any? { |err| err["errorCode"] == 'stock-not-found' } raise StockNotFound elsif errors.any? { |err| err["errorCode"] == 'product-not-found' } raise ProductNotFound elsif errors.any? { |err| err["errorCode"] == 'system-maintenance' } raise SystemMaintenance elsif errors.any? { |err| err["errorCode"] == 'unknown-error' } raise UnknownError elsif errors.any? { |err| err["errorCode"] == 'page-not-found' && err['message'].include?('max page is') } raise MaxPageReached else raise Error.new result end end token_errors end