Class: Centry
- Inherits:
-
Object
- Object
- Centry
- Defined in:
- lib/centry.rb
Overview
Centry es un sencillo SDK sin dependencias con el cual se pueden hacer todo tipo de request a la API de Centry.
centrycl.github.io/centry-rest-api-docs/ github.com/CentryCL/ruby-sdk
Instance Attribute Summary collapse
-
#access_token ⇒ Object
Returns the value of attribute access_token.
-
#client_id ⇒ Object
readonly
Returns the value of attribute client_id.
-
#client_secret ⇒ Object
readonly
Returns the value of attribute client_secret.
-
#created_at ⇒ Object
Returns the value of attribute created_at.
-
#expires_in ⇒ Object
Returns the value of attribute expires_in.
-
#redirect_uri ⇒ Object
readonly
Returns the value of attribute redirect_uri.
-
#refresh_token ⇒ Object
Returns the value of attribute refresh_token.
-
#scope ⇒ Object
Returns the value of attribute scope.
-
#token_type ⇒ Object
Returns the value of attribute token_type.
Instance Method Summary collapse
-
#authorization_url(scope) ⇒ String
Genera la URL con la que le pediremos a un usuario que nos entregue los permisos de lectura y/o escritura a los recursos que se indican en el parámetro
scope. -
#authorize(code) ⇒ Object
Una vez que un usuario ha autorizado nuestra aplicación para que accceda a su información, Centry genera un código de autorización con el cual podremos solicitar el primer access_token y refresh_token.
-
#client_credentials(scope = nil) ⇒ Object
Este mecanismo de autorización es utilizado en aplicaciones que requieren acceso a sus propios recursos.
-
#delete(endpoint, params = {}) ⇒ Object
Atajo para generar requests DELETE.
-
#get(endpoint, params = {}) ⇒ Hash
Atajo para generar requests GET.
-
#initialize(client_id, client_secret, redirect_uri, access_token = nil, refresh_token = nil) ⇒ Centry
constructor
Constructor de la clase SDK.
-
#post(endpoint, params = {}, payload = {}) ⇒ Object
Atajo para generar requests POST.
-
#put(endpoint, params = {}, payload = {}) ⇒ Object
Atajo para generar requests PUT.
-
#refresh ⇒ Object
Un access_token tiene una vigencia de 7200 segudos (2 horas) por lo que una vez cumplido ese plazo es necesario solicitar un nuevo token usando como llave el refresh_token que teníamos registrado.
-
#request(endpoint, method, params = {}, payload = {}) ⇒ Net::HTTPResponse
Método encargado de hacer todo tipo de solicitudes a Centry, desde autorizaciones hasta manipulación de inventario.
Constructor Details
#initialize(client_id, client_secret, redirect_uri, access_token = nil, refresh_token = nil) ⇒ Centry
Constructor de la clase SDK.
Centry. por Centry, debe ser conocido sólo por la aplicación y Centry. Los usuarios no tienen que tener acceso a este dato. autorización como parámetro GET cada vez que un usuario autorice a ésta a acceder a sus datos. Si se usa la URI urn:ietf:wg:oauth:2.0:oob, entonces el código de autorización se mostrará en pantalla y el usuario deberá copiarlo y pegarlo donde la aplicación pueda leerlo. registro. Si se entrega, entonces no es necesario que el usuario tenga que volver a autorizar la aplicacción. tiene registro.
35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/centry.rb', line 35 def initialize( client_id, client_secret, redirect_uri, access_token = nil, refresh_token = nil ) @client_id = client_id @client_secret = client_secret @redirect_uri = redirect_uri @access_token = access_token @refresh_token = refresh_token end |
Instance Attribute Details
#access_token ⇒ Object
Returns the value of attribute access_token.
15 16 17 |
# File 'lib/centry.rb', line 15 def access_token @access_token end |
#client_id ⇒ Object (readonly)
Returns the value of attribute client_id.
14 15 16 |
# File 'lib/centry.rb', line 14 def client_id @client_id end |
#client_secret ⇒ Object (readonly)
Returns the value of attribute client_secret.
14 15 16 |
# File 'lib/centry.rb', line 14 def client_secret @client_secret end |
#created_at ⇒ Object
Returns the value of attribute created_at.
15 16 17 |
# File 'lib/centry.rb', line 15 def created_at @created_at end |
#expires_in ⇒ Object
Returns the value of attribute expires_in.
15 16 17 |
# File 'lib/centry.rb', line 15 def expires_in @expires_in end |
#redirect_uri ⇒ Object (readonly)
Returns the value of attribute redirect_uri.
14 15 16 |
# File 'lib/centry.rb', line 14 def redirect_uri @redirect_uri end |
#refresh_token ⇒ Object
Returns the value of attribute refresh_token.
15 16 17 |
# File 'lib/centry.rb', line 15 def refresh_token @refresh_token end |
#scope ⇒ Object
Returns the value of attribute scope.
15 16 17 |
# File 'lib/centry.rb', line 15 def scope @scope end |
#token_type ⇒ Object
Returns the value of attribute token_type.
15 16 17 |
# File 'lib/centry.rb', line 15 def token_type @token_type end |
Instance Method Details
#authorization_url(scope) ⇒ String
Genera la URL con la que le pediremos a un usuario que nos entregue los permisos de lectura y/o escritura a los recursos que se indican en el parámetro scope.
de todos los ámbitos a los que se solicita permiso. Estos pueden ser:
-
public Para acceder a la información publica de Centry como marcas, categorías, colores, tallas, etc.
-
read_orders Para leer información de pedidos
-
write_orders Para manipular o eliminar pedidos
-
read_products Para leer información de productos y variantes
-
write_products Para manipular o eliminar productos y variantes
-
read_integration_config Para leer información de configuraciones de integraciones
-
write_integration_config Para manipular o eliminar configuraciones de integraciones
-
read_user Para leer información de usuarios de la empresa
-
write_user Para manilupar o eliminar usuarios de la empresa
-
read_webhook Para leer información de webhooks
-
write_webhook Para manilupar o eliminar webhooks
autorización de acceso.
69 70 71 72 73 74 75 76 77 |
# File 'lib/centry.rb', line 69 def (scope) params = { client_id: @client_id, redirect_uri: @redirect_uri, response_type: 'code', scope: scope } "https://www.centry.cl/oauth/authorize?#{URI.encode_www_form(params)}" end |
#authorize(code) ⇒ Object
Una vez que un usuario ha autorizado nuestra aplicación para que accceda a su información, Centry genera un código de autorización con el cual podremos solicitar el primer access_token y refresh_token. Éste método se encarga de esta tarea por lo que se le debe entrecar el código de autorización como parámetro.
Se recomienda registrar estos tokens con algún mecanismo de persistencia como una base de datos.
que el usuario autorizó la aplicación.
169 170 171 |
# File 'lib/centry.rb', line 169 def (code) grant('authorization_code', code: code) end |
#client_credentials(scope = nil) ⇒ Object
Este mecanismo de autorización es utilizado en aplicaciones que requieren acceso a sus propios recursos.
los que se solicita permiso. Estos pueden ser:
-
public Para acceder a la información publica de Centry como marcas, categorías, colores, tallas, etc.
-
read_orders Para leer información de pedidos
-
write_orders Para manipular o eliminar pedidos
-
read_products Para leer información de productos y variantes
-
write_products Para manipular o eliminar productos y variantes
-
read_integration_config Para leer información de configuraciones de integraciones
-
write_integration_config Para manipular o eliminar configuraciones de integraciones
-
read_user Para leer información de usuarios de la empresa
-
write_user Para manilupar o eliminar usuarios de la empresa
-
read_webhook Para leer información de webhooks
-
write_webhook Para manilupar o eliminar webhooks
205 206 207 208 209 210 |
# File 'lib/centry.rb', line 205 def client_credentials(scope = nil) grant( 'client_credentials', scope.nil? || scope.strip == '' ? {} : { scope: scope } ) end |
#delete(endpoint, params = {}) ⇒ Object
Atajo para generar requests DELETE
parámetros GET
152 153 154 |
# File 'lib/centry.rb', line 152 def delete(endpoint, params = {}) request(endpoint, :delete, params, payload) end |
#get(endpoint, params = {}) ⇒ Hash
Atajo para generar requests GET
parámetros GET
121 122 123 |
# File 'lib/centry.rb', line 121 def get(endpoint, params = {}) request(endpoint, :get, params) end |
#post(endpoint, params = {}, payload = {}) ⇒ Object
Atajo para generar requests POST
parámetros GET encargará de transformarlo en un JSON.
132 133 134 |
# File 'lib/centry.rb', line 132 def post(endpoint, params = {}, payload = {}) request(endpoint, :post, params, payload) end |
#put(endpoint, params = {}, payload = {}) ⇒ Object
Atajo para generar requests PUT
parámetros GET encargará de transformarlo en un JSON.
143 144 145 |
# File 'lib/centry.rb', line 143 def put(endpoint, params = {}, payload = {}) request(endpoint, :put, params, payload) end |
#refresh ⇒ Object
Un access_token tiene una vigencia de 7200 segudos (2 horas) por lo que una vez cumplido ese plazo es necesario solicitar un nuevo token usando como llave el refresh_token que teníamos registrado. Este método se encarga de hacer esta renovacion de tokens.
Se recomienda registrar estos nuevos tokens con algún mecanismo de persistencia como una base de datos.
182 183 184 |
# File 'lib/centry.rb', line 182 def refresh grant('refresh_token', refresh_token: @refresh_token) end |
#request(endpoint, method, params = {}, payload = {}) ⇒ Net::HTTPResponse
Método encargado de hacer todo tipo de solicitudes a Centry, desde autorizaciones hasta manipulación de inventario.
-
:get -
:post -
:put -
:delete
Como es una API REST, estos métodos suelen estar asociados a la lectura, creación, edición y eliminacion de recursos. parámetros GET encargará de transformarlo en un JSON.
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
# File 'lib/centry.rb', line 96 def request(endpoint, method, params = {}, payload = {}) query = params ? URI.encode_www_form(params) : '' uri = URI("https://www.centry.cl/#{endpoint}?#{query}") header = { 'Content-Type': 'application/json', 'Accept': 'application/json' } req = case method when :get then Net::HTTP::Get.new(uri, header) when :post then Net::HTTP::Post.new(uri, header) when :put then Net::HTTP::Put.new(uri, header) when :delete then Net::HTTP::Delete.new(uri, header) end req.add_field('Authorization', "Bearer #{@access_token}") unless PUBLIC_ENDPOINTS.include?(endpoint) req.body = JSON.generate(payload) if payload && payload != {} Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| return http.request(req) } end |