mints 0.0.15 → 0.0.19

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 (71) hide show
  1. checksums.yaml +4 -4
  2. data/lib/client.rb +65 -30
  3. data/lib/contact.rb +146 -17
  4. data/lib/generators/mints_assets_controller.rb +3 -0
  5. data/lib/generators/mints_files_generator.rb +2 -0
  6. data/lib/mints/controllers/admin_base_controller.rb +28 -12
  7. data/lib/mints/controllers/base_api_controller.rb +97 -7
  8. data/lib/mints/controllers/base_controller.rb +48 -7
  9. data/lib/mints_helper.rb +47 -0
  10. data/lib/pub.rb +137 -52
  11. data/lib/user/config/api_keys.rb +65 -0
  12. data/lib/user/config/appointments.rb +221 -0
  13. data/lib/user/config/attribute_groups.rb +77 -0
  14. data/lib/user/config/attributes.rb +86 -0
  15. data/lib/user/config/calendars.rb +89 -0
  16. data/lib/user/config/config.rb +65 -0
  17. data/lib/user/config/importers.rb +184 -0
  18. data/lib/user/config/public_folders.rb +108 -0
  19. data/lib/user/config/relationships.rb +138 -0
  20. data/lib/user/config/roles.rb +84 -0
  21. data/lib/user/config/seeds.rb +14 -0
  22. data/lib/user/config/system_settings.rb +53 -0
  23. data/lib/user/config/tags.rb +63 -0
  24. data/lib/user/config/taxonomies.rb +124 -0
  25. data/lib/user/config/teams.rb +70 -0
  26. data/lib/user/config/users.rb +76 -0
  27. data/lib/user/contacts/contacts.rb +21 -0
  28. data/lib/user/content/assets.rb +98 -0
  29. data/lib/user/content/content.rb +235 -0
  30. data/lib/user/content/content_instances.rb +147 -0
  31. data/lib/user/content/content_templates.rb +111 -0
  32. data/lib/user/content/conversations.rb +174 -0
  33. data/lib/user/content/dam.rb +88 -0
  34. data/lib/user/content/forms.rb +168 -0
  35. data/lib/user/content/message_templates.rb +162 -0
  36. data/lib/user/content/messages.rb +90 -0
  37. data/lib/user/content/pages.rb +81 -0
  38. data/lib/user/content/stories.rb +164 -0
  39. data/lib/user/content/story_templates.rb +95 -0
  40. data/lib/user/crm/companies.rb +111 -0
  41. data/lib/user/crm/contacts.rb +312 -0
  42. data/lib/user/crm/crm.rb +21 -0
  43. data/lib/user/crm/deals.rb +111 -0
  44. data/lib/user/crm/favorites.rb +17 -0
  45. data/lib/user/crm/segments.rb +132 -0
  46. data/lib/user/crm/users.rb +22 -0
  47. data/lib/user/crm/workflow_step_objects.rb +89 -0
  48. data/lib/user/crm/workflow_steps.rb +49 -0
  49. data/lib/user/crm/workflows.rb +70 -0
  50. data/lib/user/ecommerce/ecommerce.rb +29 -0
  51. data/lib/user/ecommerce/item_prices.rb +86 -0
  52. data/lib/user/ecommerce/locations.rb +166 -0
  53. data/lib/user/ecommerce/order_items_groups.rb +109 -0
  54. data/lib/user/ecommerce/order_statuses.rb +26 -0
  55. data/lib/user/ecommerce/orders.rb +258 -0
  56. data/lib/user/ecommerce/price_lists.rb +73 -0
  57. data/lib/user/ecommerce/product_templates.rb +104 -0
  58. data/lib/user/ecommerce/product_variations.rb +129 -0
  59. data/lib/user/ecommerce/products.rb +169 -0
  60. data/lib/user/ecommerce/skus.rb +88 -0
  61. data/lib/user/ecommerce/taxes.rb +82 -0
  62. data/lib/user/ecommerce/variant_options.rb +69 -0
  63. data/lib/user/ecommerce/variant_values.rb +72 -0
  64. data/lib/user/helpers/helpers.rb +113 -0
  65. data/lib/user/helpers/object_activities.rb +83 -0
  66. data/lib/user/helpers/object_folders.rb +82 -0
  67. data/lib/user/helpers/user_folders.rb +83 -0
  68. data/lib/user/marketing/marketing.rb +120 -0
  69. data/lib/user/profile/profile.rb +111 -0
  70. data/lib/user.rb +36 -355
  71. metadata +64 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 18200f38cd58f4884a1e3391f28523b15dcad0db6f1a40038d3dd77bbc7b5826
4
- data.tar.gz: 1a80da693aa4121af008dfc9d2816f5d09963e84d61f5274824593910786664e
3
+ metadata.gz: eb39e61077ebde851f278b96e82be85962bdacd093158d179cc5107bf3a4c5b2
4
+ data.tar.gz: f5d84797fc4526b3f8c2164d79062b0035db452c0a3a62d02967e33f1649a78b
5
5
  SHA512:
6
- metadata.gz: aa64a73af10be175c08a0833e6178b654ea8cda3713e49e1533fdc12fa89d3c4be51974ac41c558463d11aa5d0c50e621d774a9b77bd61e554c4dda0a7cb0019
7
- data.tar.gz: 525ef4e71004bc3705f36eb4d1f165044da08dba2af45eff3185e4686206f746dc4d0072ce97cd811ce1489c9de17f7737354d3a437eddbd9d90ffc164e4c6d2
6
+ metadata.gz: 8c902cadde2d3951e9aecf9e6a81f86f7af47224071a14ff0ea9b72fc4f2607f2c60729d2ce4843dbdf0d9e582135fba51cf84b37ed6d6908227e5438a217e4a
7
+ data.tar.gz: faed4589390dbe456f973212e9e2deaa759082f2ed02c6aedfea493147b80d3935261a50ce6d9d41b77a2e5b9fd2e9ef456b19e80914118f8e5c49d9a94b3684
data/lib/client.rb CHANGED
@@ -20,8 +20,8 @@ module Mints
20
20
  self.set_scope(scope)
21
21
  end
22
22
 
23
- def raw(action, url, options = nil, data = nil, base_url = nil)
24
- base_url = @base_url if !base_url
23
+ def raw(action, url, options = nil, data = nil, base_url = nil, compatibility_options = {})
24
+ base_url = @base_url if !base_url
25
25
  uri = ""
26
26
  if (options && options.class == Hash)
27
27
  if (options[:jfilters] && options[:jfilters].class == Hash)
@@ -52,7 +52,7 @@ module Mints
52
52
  response = @redis_server.get(full_url)
53
53
  result_from_cache = true
54
54
  else
55
- response = self.send("#{@scope}_#{action}", "#{full_url}")
55
+ response = self.send("#{@scope}_#{action}", "#{full_url}", compatibility_options)
56
56
  @redis_server.setex(full_url,time,response)
57
57
  end
58
58
  break
@@ -63,15 +63,18 @@ module Mints
63
63
  end
64
64
 
65
65
  if !url_need_cache
66
- response = self.send("#{@scope}_#{action}", "#{full_url}")
66
+ response = self.send("#{@scope}_#{action}", "#{full_url}", compatibility_options)
67
67
  end
68
68
 
69
69
  elsif action === 'create' or action === 'post'
70
70
  action = 'post'
71
- response = self.send("#{@scope}_#{action}", "#{full_url}", data)
71
+ response = self.send("#{@scope}_#{action}", "#{full_url}", data, compatibility_options)
72
72
  elsif action === 'put' or action === 'patch' or action ==='update'
73
73
  action = 'put'
74
- response = self.send("#{@scope}_#{action}", "#{full_url}", data)
74
+ response = self.send("#{@scope}_#{action}", "#{full_url}", data, compatibility_options)
75
+ elsif action === 'delete' or action === 'destroy'
76
+ action = 'delete'
77
+ response = self.send("#{@scope}_#{action}", "#{full_url}", data, compatibility_options)
75
78
  end
76
79
  if result_from_cache
77
80
  return parsed_response = JSON.parse(response)
@@ -93,7 +96,7 @@ module Mints
93
96
  name_len = name_spplited.size
94
97
  # the action always be the first element
95
98
  action = name_spplited.first
96
- raise 'NoActionError' unless ['get', 'create', 'post', 'update', 'put'].include?(action)
99
+ raise 'NoActionError' unless ['get', 'create', 'post', 'update', 'put', 'delete', 'destroy'].include?(action)
97
100
  # the object always be the last element
98
101
  object = separator == "__" ? name_spplited.last.gsub("_","-") : name_spplited.last
99
102
  # get intermediate url elements
@@ -121,7 +124,7 @@ module Mints
121
124
  uri.query_values = args[1]
122
125
  end
123
126
  url = self.get_url(route, object, uri, slug)
124
- response = self.send("#{@scope}_#{action}", url)
127
+ response = self.send("#{@scope}_#{action}", url, compatibility_options)
125
128
  elsif action == "post" or action == "create"
126
129
  if args[1].class == Hash
127
130
  uri.query_values = args[1]
@@ -129,7 +132,7 @@ module Mints
129
132
  url = self.get_url(route, object, uri, slug)
130
133
  action = 'post'
131
134
  data = args[0]
132
- response = self.send("#{@scope}_#{action}", url, {data: data})
135
+ response = self.send("#{@scope}_#{action}", url, {data: data}, compatibility_options)
133
136
  elsif action == "put" or action == "update"
134
137
  if args.first.class == String or Integer
135
138
  slug = args.first
@@ -139,7 +142,7 @@ module Mints
139
142
  action = 'put'
140
143
  id = args[0]
141
144
  data = args[1]
142
- response = self.send("#{@scope}_#{action}", "#{url}", {data: data})
145
+ response = self.send("#{@scope}_#{action}", "#{url}", {data: data}, compatibility_options)
143
146
  end
144
147
 
145
148
  if response.response.code == "404"
@@ -188,6 +191,7 @@ module Mints
188
191
  puts url
189
192
  puts "Headers:"
190
193
  puts headers
194
+ puts "Method: get"
191
195
  end
192
196
  return headers ? HTTParty.get(url, :headers => headers) : HTTParty.get(url)
193
197
  end
@@ -201,6 +205,7 @@ module Mints
201
205
  puts headers
202
206
  puts "Data:"
203
207
  puts data
208
+ puts "Method: post"
204
209
  end
205
210
  return headers ? HTTParty.post(url, :headers=> headers, :body => data) : HTTParty.post(url, :body => data)
206
211
  end
@@ -214,77 +219,107 @@ module Mints
214
219
  puts headers
215
220
  puts "Data:"
216
221
  puts data
222
+ puts "Method: put"
217
223
  end
218
224
  return headers ? HTTParty.put(url, :headers=> headers, :body => data) : HTTParty.put(url, :body => data)
219
225
  end
220
226
 
227
+ # Simple HTTP DELETE
228
+ def http_delete(url, headers = nil, data = nil)
229
+ if @debug
230
+ puts "Url:"
231
+ puts url
232
+ puts "Headers:"
233
+ puts headers
234
+ puts "Data:"
235
+ puts data
236
+ puts "Method: delete"
237
+ end
238
+ return headers ? HTTParty.delete(url, :headers=> headers, :body => data) : HTTParty.delete(url, :body => data)
239
+ end
240
+
221
241
  # Start contact context
222
- def contact_get(url)
242
+ def contact_get(url, compatibility_options)
223
243
  headers = {
224
244
  "ApiKey" => @api_key,
225
245
  "Accept" => "application/json",
226
246
  "ContactToken" => @contact_token_id
227
247
  }
248
+ headers["Content-Type"] = "application/json" unless compatibility_options['no_content_type']
228
249
  headers["Authorization"] = "Bearer #{@session_token}" if @session_token
229
250
  return self.http_get(url, headers)
230
251
  end
231
252
 
232
- def contact_post(url, data)
253
+ def contact_post(url, data, compatibility_options)
233
254
  headers = {
234
255
  "ApiKey" => @api_key,
235
256
  "Accept" => "application/json",
236
257
  "ContactToken" => @contact_token_id
237
258
  }
259
+ headers["Content-Type"] = "application/json" unless compatibility_options['no_content_type']
238
260
  headers["Authorization"] = "Bearer #{@session_token}" if @session_token
239
261
  return self.http_post(url, headers, data)
240
262
  end
241
263
 
242
- def contact_put(url, data)
264
+ def contact_put(url, data, compatibility_options)
243
265
  headers = {
244
266
  "ApiKey" => @api_key,
245
267
  "Accept" => "application/json",
246
268
  "ContactToken" => @contact_token_id
247
269
  }
270
+ headers["Content-Type"] = "application/json" unless compatibility_options['no_content_type']
248
271
  headers["Authorization"] = "Bearer #{@session_token}" if @session_token
249
- return self.http_post(url, headers, data)
272
+ return self.http_put(url, headers, data)
250
273
  end
251
274
 
252
275
  # Start User context
253
- def user_get(url)
276
+ def user_get(url, compatibility_options)
254
277
  headers = {
255
- "ApiKey" => @api_key,
256
- "Accept" => "application/json"
278
+ "Accept" => "application/json",
279
+ "ApiKey" => @api_key
257
280
  }
281
+ headers["Content-Type"] = "application/json" unless compatibility_options['no_content_type']
258
282
  headers["Authorization"] = "Bearer #{@session_token}" if @session_token
259
283
  return self.http_get(url, headers)
260
284
  end
261
285
 
262
- def user_post(url, data)
286
+ def user_post(url, data, compatibility_options)
263
287
  headers = {
264
- "ApiKey" => @api_key,
265
- "Accept" => "application/json"
288
+ "Accept" => "application/json",
289
+ "ApiKey" => @api_key
266
290
  }
291
+ headers["Content-Type"] = "application/json" unless compatibility_options['no_content_type']
267
292
  headers["Authorization"] = "Bearer #{@session_token}" if @session_token
268
293
  return self.http_post(url, headers, data)
269
294
  end
270
295
 
271
- def user_put(url, data)
296
+ def user_put(url, data, compatibility_options)
272
297
  headers = {
273
- "ApiKey" => @api_key,
274
298
  "Accept" => "application/json",
275
- "Content-Type" => "application/json"
299
+ "ApiKey" => @api_key
276
300
  }
301
+ headers["Content-Type"] = "application/json" unless compatibility_options['no_content_type']
277
302
  headers["Authorization"] = "Bearer #{@session_token}" if @session_token
278
303
  return self.http_put(url, headers, data)
279
304
  end
305
+
306
+ def user_delete(url, data, compatibility_options)
307
+ headers = {
308
+ "Accept" => "application/json",
309
+ "ApiKey" => @api_key
310
+ }
311
+ headers["Content-Type"] = "application/json" unless compatibility_options['no_content_type']
312
+ headers["Authorization"] = "Bearer #{@session_token}" if @session_token
313
+ return self.http_delete(url, headers, data)
314
+ end
280
315
  # End User Context
281
316
 
282
- def public_get(url, headers = nil)
317
+ def public_get(url, headers = nil, compatibility_options)
283
318
  h = {
284
319
  "Accept" => "application/json",
285
- "Content-Type" => "application/json",
286
320
  "ApiKey" => @api_key
287
321
  }
322
+ h["Content-Type"] = "application/json" unless compatibility_options['no_content_type']
288
323
  h["ContactToken"] = @contact_token_id if @contact_token_id
289
324
  if headers
290
325
  headers.each do |k,v|
@@ -294,12 +329,12 @@ module Mints
294
329
  self.http_get(url, h)
295
330
  end
296
331
 
297
- def public_post(url, headers = nil, data)
332
+ def public_post(url, headers = nil, data, compatibility_options)
298
333
  h = {
299
334
  "Accept" => "application/json",
300
- "Content-Type" => "application/json",
301
335
  "ApiKey" => @api_key
302
336
  }
337
+ h["Content-Type"] = "application/json" unless compatibility_options['no_content_type']
303
338
  h["ContactToken"] = @session_token if @session_token
304
339
  if headers
305
340
  headers.each do |k,v|
@@ -309,12 +344,12 @@ module Mints
309
344
  self.http_post(url, h, data)
310
345
  end
311
346
 
312
- def public_put(url, headers = nil, data)
347
+ def public_put(url, headers = nil, data, compatibility_options)
313
348
  h = {
314
- "Accept" => "application/json",
315
- "Content-Type" => "application/json",
349
+ "Accept" => "application/json",
316
350
  "ApiKey" => @api_key
317
351
  }
352
+ h["Content-Type"] = "application/json" unless compatibility_options['no_content_type']
318
353
  h["ContactToken"] = @contact_token_id if @contact_token_id
319
354
  if headers
320
355
  headers.each do |k,v|
data/lib/contact.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require_relative "./client.rb"
2
+ require_relative "./mints_helper.rb"
2
3
  include ActionController::Cookies
3
4
  module Mints
4
5
  class Contact
@@ -7,30 +8,93 @@ module Mints
7
8
  # === Initialize.
8
9
  # Class constructor
9
10
  #
11
+ # ==== Parameters
12
+ # host:: (String) -- It's the visitor IP.
13
+ # api_key:: (String) -- Mints instance api key.
14
+ # contact_token_id:: (Integer) -- Cookie 'mints_contact_id' value (mints_contact_token).
15
+ #
16
+ # ==== Return
17
+ # Returns a Contact object
10
18
  def initialize(host, api_key, session_token = nil, contact_token_id = nil, debug = false)
11
19
  @client = Mints::Client.new(host, api_key, "contact", session_token, contact_token_id, debug)
12
20
  end
13
21
 
14
22
  ##
15
23
  # === Login.
16
- # Starts a contact session
24
+ # Starts a contact session.
25
+ #
26
+ # ==== Parameters:
27
+ # email:: (String) -- The email that will be logged.
28
+ # password:: (String) -- The password of the email.
17
29
  #
30
+ # ==== Example
31
+ # @mints_contact.login("email@example.com", "password")
18
32
  def login(email, password)
19
33
  data = {
20
34
  email: email,
21
35
  password: password
22
36
  }
23
- response = @client.raw("post", "/contacts/login", nil, {data: data})
37
+ response = @client.raw("post", "/contacts/login", nil, {data: data}.to_json)
24
38
  if response.key? "session_token"
25
39
  @client.session_token = response["session_token"]
26
40
  end
27
41
  return response
28
42
  end
29
43
 
44
+ ##
45
+ # === Magic Link Login.
46
+ # Starts a contact session with a token received in the contact email. The token will be received by send_magic_link method.
47
+ #
48
+ # ==== Parameters:
49
+ # token:: (String) -- The email token that will be used to log in.
50
+ #
51
+ # ==== Example
52
+ # @mints_contact.magic_link_login(
53
+ # "d8618c6d-a165-41cb-b3ec-d053cbf30059:zm54HtRdfHED8dpILZpjyqjPIceiaXNLfOklqM92fveBS0nDtyPYBlI4CPlPe3zq"
54
+ # )
55
+ def magic_link_login(token)
56
+ response = @client.raw("get", "/contacts/magic-link-login/#{token}", nil, '/api/v1')
57
+ if response.key? "session_token"
58
+ @client.session_token = response["session_token"]
59
+ end
60
+ return response
61
+ end
62
+
63
+ ##
64
+ # === Send Magic Link
65
+ # Send magic link to contact by email. That magic link will be used in magic_link_login method.
66
+ #
67
+ # ==== Parameters:
68
+ # email:: (String) -- Contact's email.
69
+ # template_slug:: (String) -- Email template's slug to be used in the email.
70
+ # redirectUrl:: (String) -- Url to be redirected in the implemented page.
71
+ # lifeTime:: (Integer) -- Maximum time of use in minutes.
72
+ # maxVisits:: (Integer) -- The maximum number of uses of a token.
73
+ #
74
+ # ==== First Example
75
+ # @mints_contact.send_magic_link("email@example.com", "template_slug")
76
+ #
77
+ # ==== Second Example
78
+ # @mints_contact.send_magic_link("email@example.com", "template_slug", "", 1440, 3)
79
+ def send_magic_link(email, template_slug, redirectUrl = '', lifeTime = 1440, maxVisits = nil)
80
+ data = {
81
+ email: email,
82
+ lifeTime: lifeTime,
83
+ maxVisits: maxVisits,
84
+ redirectUrl: redirectUrl,
85
+ templateId: template_slug
86
+ }
87
+ response = @client.raw("post", "/contacts/magic-link", nil, { data: data }.to_json, '/api/v1')
88
+ return response
89
+ end
90
+
30
91
  ##
31
92
  # === Logout.
32
- # Ends a contact session
93
+ # Ends a contact session previously logged.
33
94
  #
95
+ # ==== Example
96
+ # @mints_contact.login("email@example.com", "password")
97
+ # @mints_contact.logout
34
98
  def logout
35
99
  response = @client.raw("post", "/contacts/logout") if session_token?
36
100
  if response["success"]
@@ -41,62 +105,127 @@ module Mints
41
105
 
42
106
  ##
43
107
  # === Change Password.
44
- # Change password
108
+ # Change password without email. To change the password a contact must be logged.
45
109
  #
110
+ # ==== Parameters:
111
+ # data:: (Hash) -- A new password allocated in a data key.
112
+ #
113
+ # ==== Example
114
+ # @mints_contact.login("email@example.com", "password")
115
+ # data = { "password": "123456" }
116
+ # @data = @mints_contact.change_password(data)
46
117
  def change_password(data)
47
- return @client.raw("post", "/contacts/change-password", nil, data)
118
+ return @client.raw("post", "/contacts/change-password", nil, data_transform(data))
48
119
  end
49
120
 
50
121
  ##
51
122
  # === Recover Password.
52
- # Recover password
123
+ # Send a email that contains a token to a contact. That token will be used in reset_password to establish a new password.
124
+ #
125
+ # ==== Parameters:
126
+ # data:: (Hash) -- It's a data key where will be hosted the destination email.
53
127
  #
128
+ # ==== Example
129
+ # data = { "email": "email@example.com" }
130
+ # @mints_contact.recover_password(data)
54
131
  def recover_password(data)
55
- return @client.raw("post", "/contacts/recover-password", nil, data)
132
+ return @client.raw("post", "/contacts/recover-password", nil, data_transform(data))
56
133
  end
57
134
 
58
135
  ##
59
136
  # === Reset Password.
60
- # Reset password
137
+ # Reset password using a token. The token is obtained by recover_password method.
61
138
  #
139
+ # ==== Parameters:
140
+ # data:: (Hash) -- It's a set of data which contains all the information to reset a contact password.
141
+ #
142
+ # ==== Example
143
+ # data = {
144
+ # "email": "email@example.com",
145
+ # "password": "password",
146
+ # "password_confirmation": "password",
147
+ # "token": "644aa3aa0831d782cc42e42b11aedea9a2234389af4f429a8d96651295ecfa09"
148
+ # }
149
+ # @mints_contact.reset_password(data)
62
150
  def reset_password(data)
63
- return @client.raw("post", "/contacts/reset-password", nil, data)
151
+ return @client.raw("post", "/contacts/reset-password", nil, data_transform(data))
64
152
  end
65
153
 
66
154
  ##
67
155
  # === OAuth Login.
68
- # Login a contact using oauth
69
- #
156
+ # Login a contact using oauth.
70
157
  def oauth_login(data)
71
158
  return @client.raw("post", "/contacts/oauth-login", nil, data)
72
159
  end
73
160
 
74
161
  ##
75
162
  # === Me.
76
- # Get contact logged info
163
+ # Get contact logged info.
77
164
  #
78
- def me
79
- return @client.raw("get", "/contacts/me")
165
+ # ==== First Example
166
+ # @mints_contact.me
167
+ #
168
+ # ==== Second Example
169
+ # options = {
170
+ # "attributes": true,
171
+ # "taxonomies": true
172
+ # }
173
+ # @data = @mints_contact.me(options)
174
+ def me(options = nil)
175
+ return @client.raw("get", "/contacts/me", options)
80
176
  end
81
177
 
82
178
  ##
83
179
  # === Status.
84
- # Get contact logged status
180
+ # Get contact logged status.
85
181
  #
182
+ # ==== Example
183
+ # @mints_contact.status
86
184
  def status
87
185
  return @client.raw("get", "/contacts/status")
88
186
  end
89
187
 
90
188
  ##
91
189
  # === Update.
92
- # Update logged contact attributes
190
+ # Update logged contact attributes.
191
+ #
192
+ # ==== Parameters:
193
+ # data:: (Hash) -- It's the data to update with a session active.
93
194
  #
195
+ # ==== Example
196
+ # @mints_contact.login("email@example.com", "password")
197
+ # data = {
198
+ # "given_name": "Given Name",
199
+ # "last_name": "Last Name"
200
+ # }
201
+ # @mints_contact.update(data)
94
202
  def update(data)
95
- return @client.raw("put", "/contacts/update", nil, data)
203
+ return @client.raw("put", "/contacts/update", nil, data_transform(data))
204
+ end
205
+
206
+ ##
207
+ # === Register.
208
+ # Register a contact.
209
+ #
210
+ # ==== Parameters:
211
+ # data:: (Hash) -- It's the register data.
212
+ #
213
+ # ==== Example
214
+ # data = {
215
+ # "email": "email@example.com",
216
+ # "given_name": "Given Name",
217
+ # "last_name": "Last Name",
218
+ # "password": "password"
219
+ # }
220
+ # @mints_contact.register(data);
221
+ def register(data)
222
+ return @client.raw("post", "/contacts/register", nil, data_transform(data))
96
223
  end
97
224
 
98
225
  private
99
226
 
227
+ include MintsHelper
228
+
100
229
  def session_token?
101
230
  if @client.session_token
102
231
  return true
@@ -0,0 +1,3 @@
1
+ require 'reverse_proxy/client'
2
+ class MintsAssetsController < Mints::PublicAPIController
3
+ end
@@ -6,8 +6,10 @@ class MintsFilesGenerator < Rails::Generators::Base
6
6
  copy_file 'mints_user_controller.rb', './app/controllers/api/mints_user_controller.rb'
7
7
  copy_file 'mints_contact_controller.rb', './app/controllers/api/v1/mints_contact_controller.rb'
8
8
  copy_file 'mints_public_controller.rb', './app/controllers/api/v1/mints_public_controller.rb'
9
+ copy_file 'mints_assets_controller.rb', './app/controllers/mints_assets_controller.rb'
9
10
  route <<-eos
10
11
  # Mints auto-generated routes (proxy to send request to mints.cloud)
12
+ match '/public-assets/*path' => 'mints_assets#index', via: [:get, :post, :put, :patch, :delete]
11
13
  namespace :api, defaults: { format: :json } do
12
14
  match '/user/v1/*path' => 'mints_user#index', via: [:get, :post, :put, :patch, :delete]
13
15
  match '/contact/v1/*path' => 'mints_contact#index', via: [:get, :post, :put, :patch, :delete]
@@ -2,16 +2,16 @@ module Mints
2
2
  class AdminBaseController < ActionController::Base
3
3
  before_action :set_mints_user_client
4
4
 
5
- # def mints_user_signed_in?
6
- # # Check status in mints
7
- # response = @mints_user.status
8
- # status = response['success'] ? response['success'] : false
9
- # unless status
10
- # # if mints response is negative delete the session cookie
11
- # cookies.delete(:mints_user_session_token)
12
- # end
13
- # return status
14
- # end
5
+ def mints_user_signed_in?
6
+ # Check status in mints
7
+ response = @mints_user.me
8
+ status = response['data'] ? true : false
9
+ unless status
10
+ # if mints response is negative delete the session cookie
11
+ #cookies.delete(:mints_user_session_token)
12
+ end
13
+ return status
14
+ end
15
15
 
16
16
  ##
17
17
  # === Mints user Login.
@@ -22,7 +22,22 @@ module Mints
22
22
  # Get session token from response
23
23
  session_token = response['api_token']
24
24
  # Set a permanent cookie with the session token
25
- cookies.permanent[:mints_user_session_token] = session_token
25
+ cookies[:mints_user_session_token] = { value: session_token, secure: true, httponly: true, expires: 1.day }
26
+ end
27
+
28
+ ##
29
+ # === Mints user Login.
30
+ # Starts a user session in mints.cloud and set a session cookie
31
+ def mints_user_magic_link_login(hash)
32
+ # Login in mints
33
+ response = @mints_user.magic_link_login(hash)
34
+ if response['data'] && response['data']['redirect_url']
35
+ # Set a cookie with the session token
36
+ cookies[:mints_user_session_token] = { value: response['data']['api_token'], expires: 1.day, secure: true, httponly: true }
37
+ redirect_to response['data']['redirect_url']
38
+ else
39
+ redirect_to '/'
40
+ end
26
41
  end
27
42
 
28
43
  ##
@@ -51,7 +66,8 @@ module Mints
51
66
  raise 'MintsBadCredentialsError'
52
67
  end
53
68
  # Initialize mints user client
54
- @mints_user = Mints::User.new(@host, @api_key, nil, @debug)
69
+ session_token = cookies[:mints_user_session_token] ? cookies[:mints_user_session_token] : nil
70
+ @mints_user = Mints::User.new(@host, @api_key, session_token, @debug)
55
71
  end
56
72
  end
57
73
  end