mints 0.0.1 → 0.0.6
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 +4 -4
- data/Gemfile +2 -1
- data/Readme.md +54 -2
- data/lib/client.rb +94 -33
- data/lib/contact.rb +60 -16
- data/lib/generators/mints_config.yml +6 -0
- data/lib/generators/mints_contact_controller.rb +2 -0
- data/lib/generators/mints_files_generator.rb +20 -0
- data/lib/generators/mints_public_controller.rb +2 -0
- data/lib/generators/mints_user_controller.rb +2 -0
- data/lib/mints.rb +5 -0
- data/lib/mints/controllers/admin_base_controller.rb +56 -0
- data/lib/mints/controllers/base_controller.rb +86 -0
- data/lib/mints/controllers/contact_api_controller.rb +39 -0
- data/lib/mints/controllers/public_api_controller.rb +33 -0
- data/lib/mints/controllers/user_api_controller.rb +39 -0
- data/lib/pub.rb +293 -23
- data/lib/user.rb +318 -86
- metadata +34 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2df25d921d402fcd499d478e74ff9aabcd88c6bd80570eb02dff24db03bfc10d
|
4
|
+
data.tar.gz: 85d5e0a2bec7138f2c9f878e3a4f7399581113071a83387615957f58a7c79486
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2835d608df2fd2156b7b58c7930ffc359b4dddb9994a32a3e77bd84eeab1425ee7224afa936f7758d684aba2a6920f2b4aa93e1237da50c415bf950971d74273
|
7
|
+
data.tar.gz: 1b3e7fe4d5a7611b21a9f86970a774ab1935395f3efa61b442bb0d56cf34c7f7408ce405d19b9846693102cc49faca4d50232b954bcd3d9bc01936b4ec671809
|
data/Gemfile
CHANGED
data/Readme.md
CHANGED
@@ -6,8 +6,7 @@ This is a library to connect apps built on ruby to Mints.Cloud
|
|
6
6
|
|
7
7
|
Add gem to the Gemfile
|
8
8
|
```bash
|
9
|
-
gem 'mints'
|
10
|
-
bundle install
|
9
|
+
gem 'mints'
|
11
10
|
```
|
12
11
|
|
13
12
|
## Usage
|
@@ -30,3 +29,56 @@ con = Mints::User.new(mints_url, api_key)
|
|
30
29
|
con.login(email, password)
|
31
30
|
con.get_contacts
|
32
31
|
```
|
32
|
+
## Generate mints files
|
33
|
+
This command will generate the mints_config.yml file, API controlles and routes to have available the mints endpoints
|
34
|
+
```bash
|
35
|
+
rails generate mints_files
|
36
|
+
```
|
37
|
+
## Contact tracking usage
|
38
|
+
Your app controller needs to be inherited from Mints::BaseController
|
39
|
+
```ruby
|
40
|
+
# application_controller.rb
|
41
|
+
|
42
|
+
class ApplicationController < Mints::BaseController
|
43
|
+
end
|
44
|
+
```
|
45
|
+
This heritance will make the following class variables available:
|
46
|
+
|
47
|
+
| Variable | Description |
|
48
|
+
| --- | :---: |
|
49
|
+
| @host | Host defined in mints_config.yml file |
|
50
|
+
| @api_key | API key defined in mints_config.yml file |
|
51
|
+
| @mints_pub | An already instanced public client |
|
52
|
+
| @contact_token | A token used by mints to identify the contact |
|
53
|
+
| @visit_id | An identifier of the visit registered |
|
54
|
+
| @mints_contact | An already instanced contact client (not usable until call the contact login method) |
|
55
|
+
|
56
|
+
And the following controller methods:
|
57
|
+
| Method | Parameters | Return value | Description |
|
58
|
+
| --- | :---: | :---: | :---: |
|
59
|
+
| mints_contact_signed_in? | none | boolean | Indicates if the contact has an active session |
|
60
|
+
| mints_contact_login | email, password| void | Starts a contact session |
|
61
|
+
| mints_contact_logout | none | void | Ends a contact session |
|
62
|
+
|
63
|
+
## Admin controller usage
|
64
|
+
If want to have a private section where only a mints user can acces and use the private user api is needed to inherit from the AdminBaseController.
|
65
|
+
|
66
|
+
```ruby
|
67
|
+
# admin_controller.rb
|
68
|
+
|
69
|
+
class AdminController < Mints::AdminBaseController
|
70
|
+
end
|
71
|
+
```
|
72
|
+
|
73
|
+
This heritance will make the following class variables available:
|
74
|
+
| Variable | Description |
|
75
|
+
| --- | :---: |
|
76
|
+
| @host | Host defined in mints_config.yml file |
|
77
|
+
| @api_key | API key defined in mints_config.yml file |
|
78
|
+
| @mints_user | An already instanced user client (not usable until call the user login method) |
|
79
|
+
|
80
|
+
And the following controller methods:
|
81
|
+
| Method | Parameters | Return value | Description |
|
82
|
+
| --- | :---: | :---: | :---: |
|
83
|
+
| mints_user_login | email, password| void | Starts a user session |
|
84
|
+
| mints_user_logout | none | void | Ends a user session |
|
data/lib/client.rb
CHANGED
@@ -9,25 +9,31 @@ module Mints
|
|
9
9
|
attr_reader :base_url
|
10
10
|
attr_accessor :session_token
|
11
11
|
|
12
|
-
def initialize(host, api_key, scope = nil, session_token = nil)
|
12
|
+
def initialize(host, api_key, scope = nil, session_token = nil, debug = false)
|
13
13
|
@host = host
|
14
14
|
@api_key = api_key
|
15
15
|
@session_token = session_token
|
16
|
+
@debug = debug
|
16
17
|
self.set_scope(scope)
|
17
18
|
end
|
18
19
|
|
19
|
-
def raw(action, url, data = nil, base_url = nil)
|
20
|
-
base_url = @base_url if !base_url
|
21
|
-
|
22
|
-
|
20
|
+
def raw(action, url, options = nil, data = nil, base_url = nil)
|
21
|
+
base_url = @base_url if !base_url
|
22
|
+
uri = ""
|
23
|
+
if (options && options.class == Hash)
|
24
|
+
uri = Addressable::URI.new
|
25
|
+
uri.query_values = options
|
26
|
+
end
|
27
|
+
|
28
|
+
full_url = "#{@host}#{base_url}#{url}#{uri}"
|
23
29
|
if action === 'get'
|
24
|
-
response = self.send("#{@scope}_#{action}", full_url)
|
30
|
+
response = self.send("#{@scope}_#{action}", "#{full_url}")
|
25
31
|
elsif action === 'create' or action === 'post'
|
26
32
|
action = 'post'
|
27
|
-
response = self.send("#{@scope}_#{action}", full_url, data)
|
33
|
+
response = self.send("#{@scope}_#{action}", "#{full_url}", data)
|
28
34
|
elsif action === 'put' or action === 'patch' or action ==='update'
|
29
35
|
action = 'put'
|
30
|
-
response = self.send("#{@scope}_#{action}", full_url, data)
|
36
|
+
response = self.send("#{@scope}_#{action}", "#{full_url}", data)
|
31
37
|
end
|
32
38
|
if (response.response.code == "404")
|
33
39
|
raise 'NotFoundError'
|
@@ -39,7 +45,8 @@ module Mints
|
|
39
45
|
return parsed_response
|
40
46
|
end
|
41
47
|
|
42
|
-
def method_missing(name, *args, &block)
|
48
|
+
def method_missing(name, *args, &block)
|
49
|
+
puts name
|
43
50
|
name.to_s.include?("__") ? separator = "__" : separator = "_"
|
44
51
|
# split the name to identify their elements
|
45
52
|
name_spplited = name.to_s.split(separator)
|
@@ -63,37 +70,54 @@ module Mints
|
|
63
70
|
route_array.push n
|
64
71
|
end
|
65
72
|
route = route_array.join("/")
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
url =
|
78
|
-
end
|
79
|
-
if action === 'get'
|
73
|
+
|
74
|
+
|
75
|
+
slug = nil
|
76
|
+
uri = Addressable::URI.new
|
77
|
+
if action == "get"
|
78
|
+
if args.first.class == Hash
|
79
|
+
uri.query_values = args.first
|
80
|
+
elsif args.first.class == String or Integer
|
81
|
+
slug = args.first
|
82
|
+
uri.query_values = args[1]
|
83
|
+
end
|
84
|
+
url = self.get_url(route, object, uri, slug)
|
80
85
|
response = self.send("#{@scope}_#{action}", url)
|
81
|
-
elsif action
|
86
|
+
elsif action == "post" or action == "create"
|
87
|
+
if args[1].class == Hash
|
88
|
+
uri.query_values = args[1]
|
89
|
+
end
|
90
|
+
url = self.get_url(route, object, uri, slug)
|
82
91
|
action = 'post'
|
83
92
|
data = args[0]
|
84
93
|
response = self.send("#{@scope}_#{action}", url, {data: data})
|
85
|
-
elsif action
|
94
|
+
elsif action == "put" or action == "update"
|
95
|
+
if args.first.class == String or Integer
|
96
|
+
slug = args.first
|
97
|
+
uri.query_values = args[2]
|
98
|
+
end
|
99
|
+
url = self.get_url(route, object, uri, slug)
|
86
100
|
action = 'put'
|
87
101
|
id = args[0]
|
88
102
|
data = args[1]
|
89
|
-
response = self.send("#{@scope}_#{action}", "#{url}", data)
|
103
|
+
response = self.send("#{@scope}_#{action}", "#{url}", {data: data})
|
90
104
|
end
|
91
|
-
|
92
|
-
if
|
93
|
-
|
105
|
+
|
106
|
+
if response.response.code == "404"
|
107
|
+
raise 'NotFoundError'
|
108
|
+
elsif response.response.code == "500"
|
109
|
+
raise 'InternalServerError'
|
94
110
|
end
|
95
111
|
return JSON.parse(response.body)
|
96
112
|
end
|
113
|
+
|
114
|
+
def get_url(route, object, uri, slug = nil)
|
115
|
+
if (slug)
|
116
|
+
return "#{@host}#{@base_url}/#{route}/#{object}/#{slug}#{uri}"
|
117
|
+
else
|
118
|
+
return "#{@host}#{@base_url}/#{route}/#{object}#{uri}"
|
119
|
+
end
|
120
|
+
end
|
97
121
|
|
98
122
|
def replacements
|
99
123
|
return [
|
@@ -120,16 +144,38 @@ module Mints
|
|
120
144
|
##### HTTTP CLIENTS ######
|
121
145
|
# Simple HTTP GET
|
122
146
|
def http_get(url, headers = nil)
|
147
|
+
if @debug
|
148
|
+
puts "Url:"
|
149
|
+
puts url
|
150
|
+
puts "Headers:"
|
151
|
+
puts headers
|
152
|
+
end
|
123
153
|
return headers ? HTTParty.get(url, :headers => headers) : HTTParty.get(url)
|
124
154
|
end
|
125
155
|
|
126
156
|
# Simple HTTP POST
|
127
157
|
def http_post(url, headers = nil, data = nil)
|
158
|
+
if @debug
|
159
|
+
puts "Url:"
|
160
|
+
puts url
|
161
|
+
puts "Headers:"
|
162
|
+
puts headers
|
163
|
+
puts "Data:"
|
164
|
+
puts data
|
165
|
+
end
|
128
166
|
return headers ? HTTParty.post(url, :headers=> headers, :body => data) : HTTParty.post(url, :body => data)
|
129
167
|
end
|
130
168
|
|
131
169
|
# Simple HTTP PUT
|
132
170
|
def http_put(url, headers = nil, data = nil)
|
171
|
+
if @debug
|
172
|
+
puts "Url:"
|
173
|
+
puts url
|
174
|
+
puts "Headers:"
|
175
|
+
puts headers
|
176
|
+
puts "Data:"
|
177
|
+
puts data
|
178
|
+
end
|
133
179
|
return headers ? HTTParty.put(url, :headers=> headers, :body => data) : HTTParty.put(url, :body => data)
|
134
180
|
end
|
135
181
|
|
@@ -184,7 +230,7 @@ module Mints
|
|
184
230
|
headers = {
|
185
231
|
"ApiKey" => @api_key,
|
186
232
|
"Accept" => "application/json",
|
187
|
-
"
|
233
|
+
"Content-Type" => "application/json"
|
188
234
|
}
|
189
235
|
headers["Authorization"] = "Bearer #{@session_token}" if @session_token
|
190
236
|
return self.http_put(url, headers, data)
|
@@ -192,7 +238,12 @@ module Mints
|
|
192
238
|
# End User Context
|
193
239
|
|
194
240
|
def public_get(url, headers = nil)
|
195
|
-
h = {
|
241
|
+
h = {
|
242
|
+
"Accept" => "application/json",
|
243
|
+
"Content-Type" => "application/json",
|
244
|
+
"ApiKey" => @api_key,
|
245
|
+
"ContactToken" => @session_token
|
246
|
+
}
|
196
247
|
if headers
|
197
248
|
headers.each do |k,v|
|
198
249
|
h[k] = v
|
@@ -202,7 +253,12 @@ module Mints
|
|
202
253
|
end
|
203
254
|
|
204
255
|
def public_post(url, headers = nil, data)
|
205
|
-
h = {
|
256
|
+
h = {
|
257
|
+
"Accept" => "application/json",
|
258
|
+
"Content-Type" => "application/json",
|
259
|
+
"ApiKey" => @api_key,
|
260
|
+
"ContactToken" => @session_token
|
261
|
+
}
|
206
262
|
if headers
|
207
263
|
headers.each do |k,v|
|
208
264
|
h[k] = v
|
@@ -212,7 +268,12 @@ module Mints
|
|
212
268
|
end
|
213
269
|
|
214
270
|
def public_put(url, headers = nil, data)
|
215
|
-
h = {
|
271
|
+
h = {
|
272
|
+
"Accept" => "application/json",
|
273
|
+
"Content-Type" => "application/json",
|
274
|
+
"ApiKey" => @api_key,
|
275
|
+
"ContactToken" => @session_token
|
276
|
+
}
|
216
277
|
if headers
|
217
278
|
headers.each do |k,v|
|
218
279
|
h[k] = v
|
data/lib/contact.rb
CHANGED
@@ -2,10 +2,18 @@ require_relative "./client.rb"
|
|
2
2
|
module Mints
|
3
3
|
class Contact
|
4
4
|
attr_reader :client
|
5
|
-
|
6
|
-
|
5
|
+
##
|
6
|
+
# === Initialize.
|
7
|
+
# Class constructor
|
8
|
+
#
|
9
|
+
def initialize(host, api_key, session_token = nil, debug = false)
|
10
|
+
@client = Mints::Client.new(host, api_key, "contact", session_token, debug)
|
7
11
|
end
|
8
12
|
|
13
|
+
##
|
14
|
+
# === Register.
|
15
|
+
# Register a new contact
|
16
|
+
#
|
9
17
|
def register(given_name, last_name, email, password)
|
10
18
|
data = {
|
11
19
|
given_name: given_name,
|
@@ -13,55 +21,91 @@ module Mints
|
|
13
21
|
email: email,
|
14
22
|
password: password
|
15
23
|
}
|
16
|
-
return @client.raw("post", "/contacts/register", {data: data})
|
24
|
+
return @client.raw("post", "/contacts/register", nil, {data: data})
|
17
25
|
end
|
18
26
|
|
27
|
+
##
|
28
|
+
# === Login.
|
29
|
+
# Starts a contact session
|
30
|
+
#
|
19
31
|
def login(email, password)
|
20
32
|
data = {
|
21
33
|
email: email,
|
22
34
|
password: password
|
23
35
|
}
|
24
|
-
response = @client.raw("post", "/contacts/login", {data: data})
|
36
|
+
response = @client.raw("post", "/contacts/login", nil, {data: data})
|
25
37
|
if response.key? "session_token"
|
26
38
|
@client.session_token = response["session_token"]
|
27
39
|
end
|
28
40
|
return response
|
29
41
|
end
|
30
42
|
|
43
|
+
##
|
44
|
+
# === Logout.
|
45
|
+
# Ends a contact session
|
46
|
+
#
|
31
47
|
def logout
|
32
|
-
response = @client.raw("post", "/contacts/logout"
|
48
|
+
response = @client.raw("post", "/contacts/logout") if session_token?
|
33
49
|
if response["success"]
|
34
50
|
@client.session_token = nil
|
35
|
-
end
|
51
|
+
end
|
36
52
|
return response
|
37
53
|
end
|
38
54
|
|
39
|
-
|
40
|
-
|
55
|
+
##
|
56
|
+
# === Change Password.
|
57
|
+
# Change password
|
58
|
+
#
|
59
|
+
def change_password(data)
|
60
|
+
return @client.raw("post", "/contacts/change-password", nil, data)
|
41
61
|
end
|
42
62
|
|
43
|
-
|
44
|
-
|
63
|
+
##
|
64
|
+
# === Recover Password.
|
65
|
+
# Recover password
|
66
|
+
#
|
67
|
+
def recover_password(data)
|
68
|
+
return @client.raw("post", "/contacts/recover-password", nil, data)
|
45
69
|
end
|
46
70
|
|
47
|
-
|
48
|
-
|
71
|
+
##
|
72
|
+
# === Reset Password.
|
73
|
+
# Reset password
|
74
|
+
#
|
75
|
+
def reset_password(data)
|
76
|
+
return @client.raw("post", "/contacts/reset-password", nil, data)
|
49
77
|
end
|
50
78
|
|
51
|
-
|
52
|
-
|
79
|
+
##
|
80
|
+
# === OAuth Login.
|
81
|
+
# Login a contact using oauth
|
82
|
+
#
|
83
|
+
def oauth_login(data)
|
84
|
+
return @client.raw("post", "/contacts/oauth-login", nil, data)
|
53
85
|
end
|
54
86
|
|
87
|
+
##
|
88
|
+
# === Me.
|
89
|
+
# Get contact logged info
|
90
|
+
#
|
55
91
|
def me
|
56
92
|
return @client.raw("get", "/contacts/me")
|
57
93
|
end
|
58
94
|
|
95
|
+
##
|
96
|
+
# === Status.
|
97
|
+
# Get contact logged status
|
98
|
+
#
|
59
99
|
def status
|
60
100
|
return @client.raw("get", "/contacts/status")
|
61
101
|
end
|
62
102
|
|
63
|
-
|
64
|
-
|
103
|
+
##
|
104
|
+
# === Update.
|
105
|
+
# Update logged contact attributes
|
106
|
+
#
|
107
|
+
def update(data)
|
108
|
+
return @client.raw("put", "/contacts/update", nil, data)
|
65
109
|
end
|
66
110
|
|
67
111
|
private
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class MintsFilesGenerator < Rails::Generators::Base
|
2
|
+
source_root(File.expand_path(File.dirname(__FILE__)))
|
3
|
+
include Rails::Generators::Actions
|
4
|
+
def create_mints_files
|
5
|
+
copy_file 'mints_config.yml', 'mints_config.yml'
|
6
|
+
copy_file 'mints_user_controller.rb', './app/controllers/api/mints_user_controller.rb'
|
7
|
+
copy_file 'mints_contact_controller.rb', './app/controllers/api/v1/mints_contact_controller.rb'
|
8
|
+
copy_file 'mints_public_controller.rb', './app/controllers/api/v1/mints_public_controller.rb'
|
9
|
+
route <<-eos
|
10
|
+
# Mints auto-generated routes (proxy to send request to mints.cloud)
|
11
|
+
namespace :api, defaults: { format: :json } do
|
12
|
+
match '/user/v1/*path' => 'mints_user#index', via: [:get, :post, :put, :patch, :delete]
|
13
|
+
namespace :v1 do
|
14
|
+
match '/contacts/*path' => 'mints_contact#index', via: [:get, :post, :put, :patch, :delete]
|
15
|
+
match '/*path' => 'mints_public#index', via: [:get, :post, :put, :patch, :delete]
|
16
|
+
end
|
17
|
+
end
|
18
|
+
eos
|
19
|
+
end
|
20
|
+
end
|