advantage_quickbase 0.3.2 → 0.3.3
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/quickbase.rb +33 -6
- data/lib/table.rb +59 -0
- data/lib/user.rb +109 -0
- metadata +10 -4
data/lib/quickbase.rb
CHANGED
@@ -3,18 +3,30 @@ require 'nokogiri'
|
|
3
3
|
require 'json'
|
4
4
|
require 'csv'
|
5
5
|
|
6
|
+
Dir['lib/*.rb'].each {|file| require_relative file.gsub!(/lib\//, "")}
|
7
|
+
|
6
8
|
module AdvantageQuickbase
|
7
9
|
class API
|
10
|
+
|
8
11
|
attr_accessor :ticket
|
9
12
|
|
10
|
-
|
13
|
+
include User
|
14
|
+
include Table
|
15
|
+
|
16
|
+
def initialize( domain, username, password, app_token=nil, ticket=nil)
|
11
17
|
@domain = domain
|
12
18
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
19
|
+
if username && password #authenticate with username/password
|
20
|
+
data = {
|
21
|
+
username: username,
|
22
|
+
password: password,
|
23
|
+
apptoken: app_token
|
24
|
+
}
|
25
|
+
else #authenticate with existing ticket
|
26
|
+
@ticket = ticket if ticket
|
27
|
+
data = {}
|
28
|
+
end
|
29
|
+
|
18
30
|
request_xml = build_request_xml( data )
|
19
31
|
|
20
32
|
@http = Net::HTTP.new( base_domain, 443 )
|
@@ -233,6 +245,7 @@ module AdvantageQuickbase
|
|
233
245
|
|
234
246
|
def get_tag_value( xml, tag_name )
|
235
247
|
tag = xml.css( tag_name.to_s )
|
248
|
+
|
236
249
|
tag_value = nil
|
237
250
|
if !tag.empty?
|
238
251
|
tag_value = tag.text
|
@@ -241,6 +254,20 @@ module AdvantageQuickbase
|
|
241
254
|
tag_value
|
242
255
|
end
|
243
256
|
|
257
|
+
def get_attr_value(tag, attr_name)
|
258
|
+
attr_value = tag.attribute(attr_name.to_s).to_s
|
259
|
+
end
|
260
|
+
|
261
|
+
def send_quickbase_ui_action(url)
|
262
|
+
url = URI.parse(url)
|
263
|
+
request = Net::HTTP::Post.new(url.request_uri)
|
264
|
+
request.set_form_data({'ticket' => @ticket })
|
265
|
+
http = Net::HTTP.new(url.host, url.port)
|
266
|
+
http.use_ssl = true
|
267
|
+
|
268
|
+
response = http.request(request)
|
269
|
+
end
|
270
|
+
|
244
271
|
def send_request( api_call, db_id, request_data, request_xml=nil )
|
245
272
|
# Format request data hash into xml
|
246
273
|
if request_data && !request_xml
|
data/lib/table.rb
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
module AdvantageQuickbase
|
2
|
+
class API
|
3
|
+
module Table
|
4
|
+
def find_db_by_name(name)
|
5
|
+
result = send_request( :FindDBByName, "main", { :dbname => name } )
|
6
|
+
get_tag_value(result, :dbid)
|
7
|
+
end
|
8
|
+
|
9
|
+
def get_db_info(db_id)
|
10
|
+
result = send_request( :GetDBInfo, db_id, {})
|
11
|
+
|
12
|
+
{
|
13
|
+
:name => get_tag_value(result, "dbname"),
|
14
|
+
:last_modified_record => get_tag_value(result, "lastrecmodtime"),
|
15
|
+
:last_modified_time => get_tag_value(result, "lastmodifiedtime"),
|
16
|
+
:created_time => get_tag_value(result, "createdtime"),
|
17
|
+
:number_of_records => get_tag_value(result, "numrecords"),
|
18
|
+
:manager => get_tag_value(result, "mgrid"),
|
19
|
+
:manager_name => get_tag_value(result, "mgrname"),
|
20
|
+
:version => get_tag_value(result, "version"),
|
21
|
+
:time_zone => get_tag_value(result, "time_zone"),
|
22
|
+
}
|
23
|
+
end
|
24
|
+
|
25
|
+
def get_role_info(db_id)
|
26
|
+
roles = []
|
27
|
+
result = send_request( :GetRoleInfo, db_id, {})
|
28
|
+
|
29
|
+
result.css( 'role' ).each do |role|
|
30
|
+
roles << {
|
31
|
+
:id => get_attr_value(role, :id),
|
32
|
+
:name => get_tag_value(role, :name),
|
33
|
+
:access => get_tag_value(role, :access)
|
34
|
+
}
|
35
|
+
end
|
36
|
+
|
37
|
+
roles
|
38
|
+
end
|
39
|
+
|
40
|
+
def get_users_access(db_id)
|
41
|
+
users = []
|
42
|
+
result = send_request( :UserRoles, db_id, {})
|
43
|
+
|
44
|
+
result.css( 'user' ).each do |user|
|
45
|
+
puts user
|
46
|
+
users << {
|
47
|
+
:id => get_attr_value(user, :id),
|
48
|
+
:last_access => get_tag_value(user, :lastaccess),
|
49
|
+
:first_name => get_tag_value(user, :firstname),
|
50
|
+
:last_name => get_tag_value(user, :lastname),
|
51
|
+
:roles => { :name => get_tag_value(user.css( 'role' ), :name), :access => get_tag_value(user.css( 'role' ), :access)}
|
52
|
+
}
|
53
|
+
end
|
54
|
+
|
55
|
+
users
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
data/lib/user.rb
ADDED
@@ -0,0 +1,109 @@
|
|
1
|
+
module AdvantageQuickbase
|
2
|
+
class API
|
3
|
+
module User
|
4
|
+
def get_user_info(email)
|
5
|
+
user = send_request( :GetUserInfo, "main", { :email => email })
|
6
|
+
user = {
|
7
|
+
:id => get_attr_value(user.css("user"), :id),
|
8
|
+
:first_name => get_tag_value(user, :firstname),
|
9
|
+
:last_name => get_tag_value(user, :lastname),
|
10
|
+
:login => get_tag_value(user, :login),
|
11
|
+
:email => get_tag_value(user, :email),
|
12
|
+
:screen_name => get_tag_value(user, :screenname),
|
13
|
+
}
|
14
|
+
end
|
15
|
+
|
16
|
+
def get_user_role(db_id, user_id)
|
17
|
+
roles = []
|
18
|
+
result = send_request(:GetUserRole, db_id, { :userid => user_id })
|
19
|
+
|
20
|
+
result.css( 'role' ).each do |role|
|
21
|
+
roles << role = {
|
22
|
+
:id => get_attr_value(role, :id),
|
23
|
+
:name => get_tag_value(role, :name),
|
24
|
+
:type => get_tag_value(role, :access )
|
25
|
+
}
|
26
|
+
end
|
27
|
+
|
28
|
+
roles
|
29
|
+
end
|
30
|
+
|
31
|
+
def add_user_to_role(db_id, user_id, role_id)
|
32
|
+
send_request(:AddUserToRole, db_id, { :userid => user_id, :roleid => role_id })
|
33
|
+
end
|
34
|
+
|
35
|
+
def remove_user_from_role(db_id, user_id, role_id)
|
36
|
+
send_request(:RemoveUserFromRole, db_id, { :userid => user_id, :roleid => role_id })
|
37
|
+
end
|
38
|
+
|
39
|
+
def change_user_role(db_id, user_id, role_id, new_role_id=nil)
|
40
|
+
send_request(:ChangeUserRole, db_id, { :userid => user_id, :roleid => role_id, :newroleid => new_role_id })
|
41
|
+
end
|
42
|
+
|
43
|
+
def provision_user(db_id, email, role_id=nil, first_name=nil, last_name=nil)
|
44
|
+
options = {
|
45
|
+
:email => email,
|
46
|
+
:roleid => role_id,
|
47
|
+
:first_name => first_name,
|
48
|
+
:last_name => last_name
|
49
|
+
}
|
50
|
+
|
51
|
+
send_request(:ProvisionUser, db_id, options)
|
52
|
+
end
|
53
|
+
|
54
|
+
def get_app_access()
|
55
|
+
tables = []
|
56
|
+
result = send_request(:GrantedDBs, "main", {})
|
57
|
+
|
58
|
+
result.css( 'dbinfo' ).each do |database|
|
59
|
+
tables << { :name => get_tag_value(database, "dbname"), :db_id => get_tag_value(database, "dbid") }
|
60
|
+
end
|
61
|
+
|
62
|
+
tables
|
63
|
+
end
|
64
|
+
|
65
|
+
def remove_access(db_id, email)
|
66
|
+
user = self.get_user_info(email)
|
67
|
+
roles = get_user_role(db_id, user[:id])
|
68
|
+
|
69
|
+
roles.each do |role|
|
70
|
+
self.remove_user_from_role(db_id, user[:id], role[:id])
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def deny_users(account_id, emails)
|
75
|
+
user_ids = get_user_ids(emails);
|
76
|
+
|
77
|
+
url = "https://#{base_domain}/db/main?a=QBI_AccountRemoveMultiUserAccess"
|
78
|
+
url += "&accountid=#{account_id}"
|
79
|
+
url += "&removeAction=deny"
|
80
|
+
url += "&uids=" + user_ids.join(",")
|
81
|
+
|
82
|
+
result = send_quickbase_ui_action(url)
|
83
|
+
result = parse_xml( result.body )
|
84
|
+
|
85
|
+
get_tag_value(result, "numchanged")
|
86
|
+
end
|
87
|
+
|
88
|
+
def undeny_users(account_id, emails)
|
89
|
+
user_ids = get_user_ids(emails);
|
90
|
+
|
91
|
+
url = "https://#{base_domain}/db/main?a=QBI_AccountRemoveMultiUserAccess"
|
92
|
+
url += "&accountid=#{account_id}"
|
93
|
+
url += "&removeAction=allow"
|
94
|
+
url += "&uids=" + user_ids.join(",")
|
95
|
+
|
96
|
+
result = send_quickbase_ui_action(url)
|
97
|
+
result = parse_xml( result.body )
|
98
|
+
|
99
|
+
get_tag_value(result, "numchanged")
|
100
|
+
end
|
101
|
+
|
102
|
+
def get_user_ids(emails)
|
103
|
+
user_ids = emails.map do |email|
|
104
|
+
self.get_user_info(email)[:id]
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
metadata
CHANGED
@@ -1,23 +1,28 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: advantage_quickbase
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Ben Roux
|
9
|
+
- Kit Hensel
|
9
10
|
autorequire:
|
10
11
|
bindir: bin
|
11
12
|
cert_chain: []
|
12
|
-
date: 2014-04-03 00:00:00.
|
13
|
+
date: 2014-04-03 00:00:00.000000000Z
|
13
14
|
dependencies: []
|
14
15
|
description: Concise implementation of select Quickbase API functions
|
15
|
-
email:
|
16
|
+
email:
|
17
|
+
- liquid.ise@gmail.com
|
18
|
+
- kithensel@gmail.com
|
16
19
|
executables: []
|
17
20
|
extensions: []
|
18
21
|
extra_rdoc_files: []
|
19
22
|
files:
|
20
23
|
- lib/quickbase.rb
|
24
|
+
- lib/table.rb
|
25
|
+
- lib/user.rb
|
21
26
|
homepage: https://github.com/liquidise/Quickbase-Gem
|
22
27
|
licenses:
|
23
28
|
- MIT
|
@@ -39,8 +44,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
39
44
|
version: '0'
|
40
45
|
requirements: []
|
41
46
|
rubyforge_project:
|
42
|
-
rubygems_version: 1.8.
|
47
|
+
rubygems_version: 1.8.17
|
43
48
|
signing_key:
|
44
49
|
specification_version: 3
|
45
50
|
summary: Quickbase API gem
|
46
51
|
test_files: []
|
52
|
+
has_rdoc:
|