centry 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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/centry.rb +179 -77
  3. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 87f8671d93dc3b07b8e4d35eefbe65ffe5c22693878e34225a8e8609c618602e
4
- data.tar.gz: 82e1d0b7a88009a4f88ccbd2fa010c705874f8175b1aa9e7f7ebc2dff6c6e7d7
3
+ metadata.gz: 771b07f137fb1ca37be0c33cb2c7ea76a730e57cf0c8c6686343119b202d2066
4
+ data.tar.gz: '02428f4930c3beee56e063413d2169a302129da22479e25817706732f3f53eb1'
5
5
  SHA512:
6
- metadata.gz: 41f5be1335c98e2a0d53e0dd45e99079c9eb47c9213c88c90b73b5b1c339b53aaa509b8c8afb7be5a89196fc233b63c5487cc2bb9aa1cc8d63858a34c4252023
7
- data.tar.gz: 70792211dd5767d8de4aee93c012626b74fb24b0c4eb7fec0c4eec06d8d2ad4a22e29e8c1e13fe9158b2492e163ce7c07b492eef708e397bf0ba28341ad9e2d6
6
+ metadata.gz: f1fd2efe967b3b80378f08fdd822c66140389c66adecc23f03a4fddf8a8b2f36f94e84a13377c154d0e8b0701b0b436e14eef2f194a66178d0b32e4bbd696b1e
7
+ data.tar.gz: 9e0c95f3a5f7866167a0664a1e2df350409bb67f7dcf08d0fcbbf1876e347113b41592c590a6b431798b4d96b1b433c2aa63ad78b8e1eff92bf6e19747d46bbd
data/lib/centry.rb CHANGED
@@ -1,27 +1,44 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'net/http'
2
4
  require 'net/https'
3
5
  require 'json'
4
6
 
7
+ # Centry es un sencillo SDK sin dependencias con el cual se pueden hacer todo
8
+ # tipo de request a la API de Centry.
9
+ #
10
+ # https://centrycl.github.io/centry-rest-api-docs/
11
+ # https://github.com/CentryCL/ruby-sdk
5
12
  class Centry
6
- PUBLIC_ENDPOINTS = [
7
- "oauth/token"
8
- ]
9
13
 
10
14
  attr_reader :client_id, :client_secret, :redirect_uri
11
15
  attr_accessor :access_token, :refresh_token, :token_type, :scope, :created_at, :expires_in
12
16
 
13
- ##
14
17
  # Constructor de la clase SDK.
15
- # @var client_id Identificador de la aplicación. Es generado por Centry.
16
- # @var client_secret Clave secreta de la aplicación. Es generado por Centry, debe ser conocido sólo por la aplicación y
17
- # Centry. Los usuarios no tienen que tener acceso a este dato.
18
- # @var redirect_uri URL a la que Centry enviará el código de autorización como parámetro GET cada vez que un usuario
19
- # autorice a ésta a acceder a sus datos. Si se usa la URI `urn:ietf:wg:oauth:2.0:oob`, entonces el
20
- # código de autorización se mostrará en pantalla y el usuario deberá copiarlo y pegarlo donde la
21
- # aplicación pueda leerlo.
22
- # @var access_token (opcional) Último access_token del que se tiene registro. Si se entrega, entonces no es necesario que el usuario tenga que volver a autorizar la aplicacción.
23
- # @var refresh_token (opcional) Último refresh_token del que se tiene registro.
24
- def initialize(client_id, client_secret, redirect_uri, access_token = nil, refresh_token = nil)
18
+ #
19
+ # @param [String] client_id Identificador de la aplicación. Es generado por
20
+ # Centry.
21
+ # @param [String] client_secret Clave secreta de la aplicación. Es generado
22
+ # por Centry, debe ser conocido sólo por la aplicación y Centry. Los usuarios
23
+ # no tienen que tener acceso a este dato.
24
+ # @param [String] redirect_uri URL a la que Centry enviará el código de
25
+ # autorización como parámetro GET cada vez que un usuario autorice a ésta a
26
+ # acceder a sus datos. Si se usa la URI `urn:ietf:wg:oauth:2.0:oob`, entonces
27
+ # el código de autorización se mostrará en pantalla y el usuario deberá
28
+ # copiarlo y pegarlo donde la aplicación pueda leerlo.
29
+ # @param [String] access_token (opcional) Último access_token del que se tiene
30
+ # registro. Si se entrega, entonces no es necesario que el usuario tenga que
31
+ # volver a autorizar la aplicacción.
32
+ # @param [String] refresh_token (opcional) Último refresh_token del que se
33
+ # tiene registro.
34
+ # @return [Centry] una nueva instancia del SDK.
35
+ def initialize(
36
+ client_id,
37
+ client_secret,
38
+ redirect_uri,
39
+ access_token = nil,
40
+ refresh_token = nil
41
+ )
25
42
  @client_id = client_id
26
43
  @client_secret = client_secret
27
44
  @redirect_uri = redirect_uri
@@ -30,91 +47,176 @@ class Centry
30
47
  end
31
48
 
32
49
  ##
33
- # Genera la URL con la que le pediremos a un usuario que nos entregue los permisos
34
- # de lecturo y/o escritura a los recursos que se indican en el parámetro <code>scope</code>
35
- # @var code Es la concatenación con un espacio de separación (" ") de todos los ámbitos a
36
- # los que se solicita permiso. Estos pueden ser:
37
- # <ul>
38
- # <li><b>public</b> Para acceder a la información publica de Centry como marcas, categorías, colores, tallas, etc.</li>
39
- # <li><b>read_orders</b> Para leer información de pedidos</li>
40
- # <li><b>write_orders</b> Para manulupar o eliminar pedidos</li>
41
- # <li><b>read_products</b>Para leer información de productos y variantes</li>
42
- # <li><b>write_products</b>Para manulupar o eliminar productos y variantes</li>
43
- # <li><b>read_integration_config</b>Para leer información de configuraciones de integraciones</li>
44
- # <li><b>write_integration_config</b>Para manulupar o eliminar configuraciones de integraciones</li>
45
- # <li><b>read_user</b>Para leer información de usuarios de la empresa</li>
46
- # <li><b>write_user</b>Para manulupar o eliminar usuarios de la empresa</li>
47
- # <li><b>read_webhook</b>Para leer información de webhooks</li>
48
- # <li><b>write_webhook</b>Para manulupar o eliminar webhooks</li>
49
- # </ul>
50
+ # Genera la URL con la que le pediremos a un usuario que nos entregue los
51
+ # permisos de lectura y/o escritura a los recursos que se indican en el
52
+ # parámetro <code>scope</code>.
53
+ #
54
+ # @param [String] scope Es la concatenación con un espacio de separación (" ")
55
+ # de todos los ámbitos a los que se solicita permiso. Estos pueden ser:
56
+ # * *public* Para acceder a la información publica de Centry como marcas, categorías, colores, tallas, etc.
57
+ # * *read_orders* Para leer información de pedidos
58
+ # * *write_orders* Para manipular o eliminar pedidos
59
+ # * *read_products* Para leer información de productos y variantes
60
+ # * *write_products* Para manipular o eliminar productos y variantes
61
+ # * *read_integration_config* Para leer información de configuraciones de integraciones
62
+ # * *write_integration_config* Para manipular o eliminar configuraciones de integraciones
63
+ # * *read_user* Para leer información de usuarios de la empresa
64
+ # * *write_user* Para manilupar o eliminar usuarios de la empresa
65
+ # * *read_webhook* Para leer información de webhooks
66
+ # * *write_webhook* Para manilupar o eliminar webhooks
67
+ # @return [String] URL para redirigir a los usuarios y solicitarles la
68
+ # autorización de acceso.
50
69
  def authorization_url(scope)
51
70
  params = {
52
- "client_id" => @client_id,
53
- "redirect_uri" => @redirect_uri,
54
- "response_type" => "code",
55
- "scope" => scope
71
+ client_id: @client_id,
72
+ redirect_uri: @redirect_uri,
73
+ response_type: 'code',
74
+ scope: scope
56
75
  }
57
- return "https://www.centry.cl/oauth/authorize?#{URI.encode_www_form(params)}"
76
+ "https://www.centry.cl/oauth/authorize?#{URI.encode_www_form(params)}"
58
77
  end
59
78
 
60
79
  ##
61
- # Método encargado de hacer todo tipo de solicitudes a Centry, desde autorizaciones hasta manipulación de inventario.
62
- # @var endpoint
63
- # @var method String indicado el método HTTP a usar. Las opciones son "GET", "POST", "PUT", "DELETE". Como es una API REST,
64
- # estos métodos suelen estar asociados a la lectura, creación, edición y eliminacion de recursos.
65
- # @var params (opcional) Parámetros
66
- # @var payload (opcional) Body del request puede ser un objeto PHP o un arreglo (diccionario), internamente es transformado a JSON.
80
+ # Método encargado de hacer todo tipo de solicitudes a Centry, desde
81
+ # autorizaciones hasta manipulación de inventario.
82
+ #
83
+ # @param [String] endpoint Ruta o recurso de la API.
84
+ # @param [symbol] method Indica el método HTTP a usar. Las opciones son:
85
+ # * +:get+
86
+ # * +:post+
87
+ # * +:put+
88
+ # * +:delete+
89
+ # Como es una API REST, estos métodos suelen estar asociados a la lectura,
90
+ # creación, edición y eliminacion de recursos.
91
+ # @param [Hash] params (opcional) Llaves y valores que irán en la URL como
92
+ # parámetros GET
93
+ # @param [Hash] payload (opcional) Body del request. El SDK se
94
+ # encargará de transformarlo en un JSON.
95
+ # @return [Net::HTTPResponse] resultado del request.
67
96
  def request(endpoint, method, params = {}, payload = {})
68
- query = params ? URI.encode_www_form(params) : ""
97
+ query = params ? URI.encode_www_form(params) : ''
69
98
  uri = URI("https://www.centry.cl/#{endpoint}?#{query}")
70
99
  header = {
71
- "Content-Type" => "application/json",
72
- "Accept" => "application/json"
100
+ 'Content-Type': 'application/json',
101
+ 'Accept': 'application/json'
73
102
  }
74
103
  req = case method
75
- when :get then Net::HTTP::Get.new(uri, header)
76
- when :post then Net::HTTP::Post.new(uri, header)
77
- when :put then Net::HTTP::Put.new(uri, header)
78
- when :delete then Net::HTTP::Delete.new(uri, header)
104
+ when :get then Net::HTTP::Get.new(uri, header)
105
+ when :post then Net::HTTP::Post.new(uri, header)
106
+ when :put then Net::HTTP::Put.new(uri, header)
107
+ when :delete then Net::HTTP::Delete.new(uri, header)
79
108
  end
80
- req.add_field("Authorization", "Bearer #{@access_token}") if !PUBLIC_ENDPOINTS.include?(endpoint)
109
+ req.add_field('Authorization', "Bearer #{@access_token}") unless PUBLIC_ENDPOINTS.include?(endpoint)
81
110
 
82
111
  req.body = JSON.generate(payload) if payload && payload != {}
83
- return Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
84
- http.request(req)
85
- end
112
+ Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| return http.request(req) }
86
113
  end
87
114
 
88
- ##
89
- # Una vez que un usuario ha autorizado nuestra aplicación para que accceda a su información, Centry genera un código
90
- # de autorización con el cual podremos solicitar el primer access_token y refresh_token. Éste método se encarga de
91
- # esta tarea por lo que se le debe entrecar el código de autorización como parámetro.
92
- # Se recomienda registrar estos tokens con algún mecanismo de persistencia como una base de datos.
93
- # @var code Código de autorización generado por Centry depués de que el usuario autorizó la aplicación.
115
+ # Atajo para generar requests GET
116
+ #
117
+ # @param [String] endpoint Ruta o recurso de la API.
118
+ # @param [Hash] params (opcional) Llaves y valores que irán en la URL como
119
+ # parámetros GET
120
+ # @return [Hash]
121
+ def get(endpoint, params = {})
122
+ request(endpoint, :get, params)
123
+ end
124
+
125
+ # Atajo para generar requests POST
126
+ #
127
+ # @param [String] endpoint Ruta o recurso de la API.
128
+ # @param [Hash] params (opcional) Llaves y valores que irán en la URL como
129
+ # parámetros GET
130
+ # @param [Hash] payload (opcional) Body del request. El SDK se
131
+ # encargará de transformarlo en un JSON.
132
+ def post(endpoint, params = {}, payload = {})
133
+ request(endpoint, :post, params, payload)
134
+ end
135
+
136
+ # Atajo para generar requests PUT
137
+ #
138
+ # @param [String] endpoint Ruta o recurso de la API.
139
+ # @param [Hash] params (opcional) Llaves y valores que irán en la URL como
140
+ # parámetros GET
141
+ # @param [Hash] payload (opcional) Body del request. El SDK se
142
+ # encargará de transformarlo en un JSON.
143
+ def put(endpoint, params = {}, payload = {})
144
+ request(endpoint, :put, params, payload)
145
+ end
146
+
147
+ # Atajo para generar requests DELETE
148
+ #
149
+ # @param [String] endpoint Ruta o recurso de la API.
150
+ # @param [Hash] params (opcional) Llaves y valores que irán en la URL como
151
+ # parámetros GET
152
+ def delete(endpoint, params = {})
153
+ request(endpoint, :delete, params, payload)
154
+ end
155
+
156
+ # Una vez que un usuario ha autorizado nuestra aplicación para que accceda a
157
+ # su información, Centry genera un código de autorización con el cual podremos
158
+ # solicitar el primer access_token y refresh_token. Éste método se encarga de
159
+ # esta tarea por lo que se le debe entrecar el código de autorización como
160
+ # parámetro.
161
+ #
162
+ # Se recomienda registrar estos tokens con algún mecanismo de persistencia
163
+ # como una base de datos.
164
+ #
165
+ # @param [String] code Código de autorización generado por Centry depués de
166
+ # que el usuario autorizó la aplicación.
167
+ #
94
168
  # @see https://www.oauth.com/oauth2-servers/access-tokens/authorization-code-request/
95
169
  def authorize(code)
96
- grant("authorization_code", {code: code})
170
+ grant('authorization_code', code: code)
97
171
  end
98
172
 
99
- ##
100
- # Un access_token tiene una vigencia de 7200 segudos (2 horas) por lo que una vez cumplido ese plazo es necesario
101
- # solicitar un nuevo token usando como llave el refresh_token que teníamos registrado. Este método se encarga de hacer
102
- # esta renovacion de tokens.
103
- # Se recomienda registrar estos nuevos tokens con algún mecanismo de persistencia como una base de datos.
173
+ # Un access_token tiene una vigencia de 7200 segudos (2 horas) por lo que una
174
+ # vez cumplido ese plazo es necesario solicitar un nuevo token usando como
175
+ # llave el refresh_token que teníamos registrado. Este método se encarga de
176
+ # hacer esta renovacion de tokens.
177
+ #
178
+ # Se recomienda registrar estos nuevos tokens con algún mecanismo de
179
+ # persistencia como una base de datos.
180
+ #
104
181
  # @see https://www.oauth.com/oauth2-servers/access-tokens/authorization-code-request/
105
182
  def refresh
106
- grant("refresh_token", {refresh_token: @refresh_token})
183
+ grant('refresh_token', refresh_token: @refresh_token)
107
184
  end
108
185
 
186
+
187
+ # Este mecanismo de autorización es utilizado en aplicaciones que requieren
188
+ # acceso a sus propios recursos.
189
+ #
190
+ # @param [String] scope Es la concatenación con un espacio de separación (" ") de todos los ámbitos a
191
+ # los que se solicita permiso. Estos pueden ser:
192
+ # * *public* Para acceder a la información publica de Centry como marcas, categorías, colores, tallas, etc.
193
+ # * *read_orders* Para leer información de pedidos
194
+ # * *write_orders* Para manipular o eliminar pedidos
195
+ # * *read_products* Para leer información de productos y variantes
196
+ # * *write_products* Para manipular o eliminar productos y variantes
197
+ # * *read_integration_config* Para leer información de configuraciones de integraciones
198
+ # * *write_integration_config* Para manipular o eliminar configuraciones de integraciones
199
+ # * *read_user* Para leer información de usuarios de la empresa
200
+ # * *write_user* Para manilupar o eliminar usuarios de la empresa
201
+ # * *read_webhook* Para leer información de webhooks
202
+ # * *write_webhook* Para manilupar o eliminar webhooks
203
+ #
204
+ # @see https://www.oauth.com/oauth2-servers/access-tokens/client-credentials/
109
205
  def client_credentials(scope = nil)
110
- grant("client_credentials", scope != nil && scope.strip != "" ? {scope: scope} : {})
206
+ grant(
207
+ 'client_credentials',
208
+ scope.nil? || scope.strip == '' ? {} : { scope: scope }
209
+ )
111
210
  end
112
211
 
113
212
  private
213
+
214
+ # Endpoints de la API de Centry que no requieren de un access_token.
215
+ PUBLIC_ENDPOINTS = [
216
+ 'oauth/token'
217
+ ].freeze
218
+
114
219
  def grant(grant_type, extras)
115
- endpoint = "oauth/token"
116
- method = :post
117
- params = nil
118
220
  payload = {
119
221
  client_id: @client_id,
120
222
  client_secret: @client_secret,
@@ -122,14 +224,14 @@ class Centry
122
224
  grant_type: grant_type
123
225
  }.merge(extras)
124
226
 
125
- response = JSON.parse request(endpoint, method, params, payload).body
227
+ response = JSON.parse post('oauth/token', nil, payload).body
126
228
 
127
- @access_token = response["access_token"]
128
- @refresh_token = response["refresh_token"]
129
- @tokenType = response["token_type"]
130
- @scope = response["scope"]
131
- @createdAt = response["created_at"]
132
- @expiresIn = response["expires_in"]
229
+ @access_token = response['access_token']
230
+ @refresh_token = response['refresh_token']
231
+ @token_type = response['token_type']
232
+ @scope = response['scope']
233
+ @created_at = response['created_at']
234
+ @expires_in = response['expires_in']
133
235
  end
134
236
 
135
237
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: centry
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Elías Lama L.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-02-06 00:00:00.000000000 Z
11
+ date: 2019-06-14 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Centry's Ruby SDK
14
14
  email: elias.lama@centry.cl
@@ -37,7 +37,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
37
37
  version: '0'
38
38
  requirements: []
39
39
  rubyforge_project:
40
- rubygems_version: 2.7.8
40
+ rubygems_version: 2.7.9
41
41
  signing_key:
42
42
  specification_version: 4
43
43
  summary: Centry SDK