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.
Files changed (4) hide show
  1. data/lib/quickbase.rb +33 -6
  2. data/lib/table.rb +59 -0
  3. data/lib/user.rb +109 -0
  4. 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
- def initialize( domain, username, password, app_token=nil )
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
- data = {
14
- username: username,
15
- password: password,
16
- apptoken: app_token
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.2
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.000000000 Z
13
+ date: 2014-04-03 00:00:00.000000000Z
13
14
  dependencies: []
14
15
  description: Concise implementation of select Quickbase API functions
15
- email: liquid.ise@gmail.com
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.25
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: