advantage_quickbase 0.3.2 → 0.3.3
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.
- 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:
|