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.
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: