teamdrive_api 0.3.1 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b45c3b25d1dcb7013098b0b29ae3fb9bbde24ea4
4
- data.tar.gz: 75b8a46bdaef8a8ad26d6dcdb0cc1228e561bb85
3
+ metadata.gz: 1d8d46801ef006ccd36dfefe91ee157089896aa6
4
+ data.tar.gz: d121207c9faece16f2ea037a9297dd27d0a5b1d6
5
5
  SHA512:
6
- metadata.gz: 4b32c14ab8a45eb5e507d8d6127cfb056dfdc137331b57d43579dfc0b4303a6d62904ac6a5a5dbc6794801f215197f8ce44ebdc66178c4b81637e2dd118b9999
7
- data.tar.gz: c9288130c22f13fb8a3c421d39933bdc85d4d8c1e87ecd03e1751e3ae106fdfa47f8c18056ba1597677fc3aee4e39ff533abd1a8904d6d10ca875829dc66f256
6
+ metadata.gz: 87e474fd5a313073ceb3968afd8922dfa3eee16de8141fe231dd7af688272317a6fcbf9bfcb43db086681457978d58b05419b57d5d0491051555b6b9d8ee9337
7
+ data.tar.gz: 00dd0e749bb1756e9f1058d6b8c992d24a213066dbd382e54847d68cba10de9b2b830f55b24b85a0f05806326747636fdeb9858212e4f21c48624bcb10d61508
data/.rubocop.yml ADDED
@@ -0,0 +1,3 @@
1
+ Metrics/LineLength:
2
+ Exclude:
3
+ - teamdrive_api.gemspec
data/bin/console CHANGED
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "bundler/setup"
4
- require "teamdrive_api"
3
+ require 'bundler/setup'
4
+ require 'teamdrive_api'
5
5
 
6
6
  # You can add fixtures and/or initialization code here to make experimenting
7
7
  # with your gem easier. You can also use a different console, if you like.
8
8
 
9
- require "pry"
9
+ require 'pry'
10
10
  Pry.start
@@ -4,28 +4,24 @@ require 'uri'
4
4
 
5
5
  module TeamdriveApi
6
6
  # API-Baseclass for all XML RPC APIs
7
- class Base # :nodoc:
7
+ class Base
8
8
  include ::HTTParty
9
9
  attr_reader :uri
10
10
  format :xml
11
11
 
12
12
  def initialize(host, api_checksum_salt, api_version)
13
- @api_checksum_salt, @api_version = api_checksum_salt, api_version
13
+ @api_checksum_salt = api_checksum_salt
14
+ @api_version = api_version
14
15
  @host = host.start_with?('http') ? host : 'https://' + host
15
16
  end
16
17
 
17
18
  # Generates the XML payload for the RPC
18
19
  def payload_for(command, query = {})
19
- out = ''
20
- out << "<?xml version='1.0' encoding='UTF-8' ?>"
21
- out << '<teamdrive>'
22
- out << "<apiversion>#{@api_version}</apiversion>"
23
- out << "<command>#{command}</command>"
24
- out << "<requesttime>#{Time.now.to_i}</requesttime>"
20
+ out = header_for(command)
25
21
  query.each do |k, v|
26
22
  next if v.nil?
27
23
  v = v.to_s
28
- v = %w(true false).include?(v) ? '$' + v : v
24
+ v = '$' + v if %w(true false).include?(v)
29
25
  out << "<#{k}>#{v}</#{k}>"
30
26
  end
31
27
  out << '</teamdrive>'
@@ -33,6 +29,15 @@ module TeamdriveApi
33
29
 
34
30
  private
35
31
 
32
+ # Generates the XML header for the RPC
33
+ def header_for(command)
34
+ out = "<?xml version='1.0' encoding='UTF-8' ?>"
35
+ out << '<teamdrive>'
36
+ out << "<apiversion>#{@api_version}</apiversion>"
37
+ out << "<command>#{command}</command>"
38
+ out << "<requesttime>#{Time.now.to_i}</requesttime>"
39
+ end
40
+
36
41
  def check_for(method, hash, params, message)
37
42
  keys = [params].flatten
38
43
  return if keys.send(method) { |k| hash.key?(k) }
@@ -52,20 +57,26 @@ module TeamdriveApi
52
57
  check_for(:all?, in_hash, of, 'all')
53
58
  end
54
59
 
60
+ # actually send a HTTP request
55
61
  def send_request(command, data = {})
56
62
  body = payload_for(command, data)
57
- res = self.class.post @uri,
63
+ res = self.class.post(
64
+ @uri,
58
65
  headers: { 'User-Agent' => "TeamdriveApi v#{TeamdriveApi::VERSION}" },
59
66
  body: body,
60
67
  query: { checksum: Digest::MD5.hexdigest(body + @api_checksum_salt) }
68
+ )
61
69
 
62
- res = res['teamdrive'].symbolize_keys
63
- unless res[:exception].nil?
64
- fail TeamdriveApi::Error.new res[:exception][:primarycode],
65
- res[:exception][:secondarycode],
66
- res[:exception][:message]
67
- end
68
- res
70
+ return_or_fail(res['teamdrive'].symbolize_keys)
71
+ end
72
+
73
+ # raise TeamdriveApi::Error if +response+ contains an exception, return
74
+ # +response+ otherwise
75
+ def return_or_fail(response)
76
+ return response if response[:exception].nil?
77
+ fail TeamdriveApi::Error.new response[:exception][:primarycode],
78
+ response[:exception][:secondarycode],
79
+ response[:exception][:message]
69
80
  end
70
81
  end
71
82
  end
@@ -1,15 +1,15 @@
1
- class Array
1
+ class Array # :nodoc:
2
2
  # Returns an Array with all elements' keys converted to symbols, as long as
3
3
  # they respond to +symbolize_keys+.
4
4
  def symbolize_keys
5
- self.map { |e| e.symbolize_keys rescue e }
5
+ map { |e| e.respond_to?(:symbolize_keys) ? e.symbolize_keys : e }
6
6
  end
7
7
 
8
8
  # Converts the keys of all elements to symbols, as long as the elements
9
9
  # respond to +symbolize_keys!+
10
10
  def symbolize_keys!
11
- self.each do |e|
12
- e.symbolize_keys! rescue nil
11
+ each do |e|
12
+ e.symbolize_keys! if e.respond_to?(:symbolize_keys!)
13
13
  end
14
14
  end
15
15
  end
@@ -1,4 +1,4 @@
1
- class Hash
1
+ class Hash # :nodoc:
2
2
  # Returns a new hash with all keys converted to symbols, as long as
3
3
  # they respond to +to_sym+.
4
4
  #
@@ -10,9 +10,9 @@ class Hash
10
10
  # Borrowed from ActiveSupport.
11
11
  def symbolize_keys
12
12
  result = self.class.new
13
- each_key do |key|
14
- new_key = key.to_sym rescue key
15
- new_value = self[key].symbolize_keys rescue self[key]
13
+ each do |key, val|
14
+ new_key = key.respond_to?(:to_sym) ? key.to_sym : key
15
+ new_value = val.respond_to?(:symbolize_keys) ? val.symbolize_keys : val
16
16
  result[new_key] = new_value
17
17
  end
18
18
  result
@@ -23,10 +23,11 @@ class Hash
23
23
  #
24
24
  # Borrowed from ActiveSupport.
25
25
  def symbolize_keys!
26
+ # we have to use `keys.each` because we can't modify a Hash during `each`
26
27
  keys.each do |key|
27
- new_key = key.to_sym rescue key
28
- old_value = delete(key)
29
- new_value = old_value.symbolize_keys! rescue old_value
28
+ new_key = key.respond_to?(:to_sym) ? key.to_sym : key
29
+ val = delete(key)
30
+ new_value = val.respond_to?(:symbolize_keys!) ? val.symbolize_keys! : val
30
31
  self[new_key] = new_value
31
32
  end
32
33
  self
@@ -4,7 +4,9 @@ module TeamdriveApi
4
4
  attr_reader :code, :secondarycode, :message
5
5
  def initialize(code, secondarycode, message)
6
6
  super message
7
- @code, @secondarycode, @message = code, secondarycode, message
7
+ @code = code
8
+ @secondarycode = secondarycode
9
+ @message = message
8
10
  end
9
11
  end
10
12
  end
@@ -1,10 +1,12 @@
1
1
  module TeamdriveApi
2
- # API Client for the TeamDrive Register Server. See the TeamDrive Register docs for more informations on specific commands.
2
+ # API Client for the TeamDrive Register Server. See the TeamDrive Register
3
+ # docs for more informations on specific commands.
3
4
  class Register < Base
4
5
  # Create a new Register API Client.
5
6
  #
6
7
  # @param [String] host the API Server
7
- # @param [String] api_checksum_salt the +APIChecksumSalt+ system setting ("Edit Settings -> RegServer").
8
+ # @param [String] api_checksum_salt the +APIChecksumSalt+ system setting
9
+ # ("Edit Settings -> RegServer").
8
10
  # @param [String] api_version optionally overwrite the api_version
9
11
  def initialize(host, api_checksum_salt, api_version = '1.0.005')
10
12
  super
@@ -15,11 +17,16 @@ module TeamdriveApi
15
17
  #
16
18
  # @param [String] username
17
19
  # @param [String] number License Number
18
- # @param [Array] devices optional list of devices the user posses. If empty, all of the user’s devices will be used
20
+ # @param [Array] devices optional list of devices the user posses. If
21
+ # empty, all of the user's devices will be used
19
22
  # @return [Boolean] success?
20
23
  def assign_license_to_client(username, number, devices = [])
21
- res = send_request :assignlicensetoclient, username: username, number: number, devices: devices
22
- res[:intresult].eql?(0)
24
+ res = send_request :assignlicensetoclient,
25
+ username: username,
26
+ number: number,
27
+ devices: devices
28
+
29
+ res[:intresult].eql?('0')
23
30
  end
24
31
 
25
32
  # Assign user to license (added in RegServ API v1.0.003)
@@ -28,37 +35,57 @@ module TeamdriveApi
28
35
  # @param [String] number License Number
29
36
  # @return [Boolean] success?
30
37
  def assign_user_to_license(username, number)
31
- res = send_request :assignusertolicense, username: username, number: number
38
+ res = send_request :assignusertolicense,
39
+ username: username,
40
+ number: number
41
+
32
42
  res[:intresult].eql?('0')
33
43
  end
34
44
 
35
- # Create license without user (added in RegServ API v1.0.003)
45
+ # Create a license and assign it to a user.
36
46
  #
37
47
  # @param [Hash] opts license options
48
+ # @option opts [String] :username User to assign license to
38
49
  # @option opts [String] :productname +server+, +client+
39
50
  # @option opts [String] :type +monthly+ / +yearly+ / +permanent+
40
- # @option opts [String] :featurevalue one of +webdavs+, +personal+, +professional+, +enterprise+
41
- # @option opts [String] :limit Amount (for a client license)
42
- # @option opts [String] :licensereference An optional external reference. Added with v1.0.004
43
- # @option opts [String] :contactnumber An optional contact number. Added with v1.0.004
44
- # @option opts [String] :validuntil An optional valid-until date. Format must be +DD.MM.YYYY+. Added with v1.0.004
45
- # @option opts [String] :changeid An optional change id for license changes. Added with v1.0.004
46
- # @return [Hash] The created license?
51
+ # @option opts [String] :featurevalue one of +webdavs+, +personal+,
52
+ # +professional+, +enterprise+
53
+ # @option opts [String] :limit Amount, only for client licenses
54
+ # @option opts [String] :licensereference An _optional_ external reference.
55
+ # Added with v1.0.004
56
+ # @option opts [String] :contactnumber An optional contact number. Added
57
+ # with v1.0.004
58
+ # @option opts [String] :validuntil An optional valid-until date. Format
59
+ # must be +DD.MM.YYYY+. Added with v1.0.004
60
+ # @option opts [String] :changeid An optional change id for license changes.
61
+ # Added with v1.0.004
62
+ # @return [String] The license number of the created license
63
+ def create_license(opts = {})
64
+ require_all of: [:username, :productname, :type, :featurevalue],
65
+ in_hash: opts
66
+ res = send_request :createlicense, opts
67
+ res[:licensedata][:number]
68
+ end
69
+
70
+ # Create license without user (added in RegServ API v1.0.003)
71
+ #
72
+ # @see #create_license
47
73
  def create_license_without_user(opts = {})
48
74
  require_all of: [:productname, :type, :featurevalue], in_hash: opts
49
- send_request :createlicensewithoutuser, opts
75
+ res = send_request :createlicensewithoutuser, opts
76
+ res[:licensedata][:number]
50
77
  end
51
78
 
52
79
  # Get default-license for a user
53
80
  #
54
81
  # @param [String] username
55
- # @param [String] distributor (optional)
82
+ # @param [String] distributor _optional_
56
83
  # @return [Hash] the license data
57
84
  def get_default_license_for_user(username, distributor = nil)
58
- res = send_request(:getdefaultlicense, {
59
- username: username,
60
- distributor: distributor
61
- })
85
+ res = send_request :getdefaultlicense,
86
+ username: username,
87
+ distributor: distributor
88
+
62
89
  res[:licensedata]
63
90
  end
64
91
 
@@ -68,10 +95,10 @@ module TeamdriveApi
68
95
  # @param [String] distributor (optional)
69
96
  # @return [Hash] the license data
70
97
  def get_license_data_for_user(username, distributor = nil)
71
- res = send_request(:getlicensedata, {
72
- username: username,
73
- distributor: distributor
74
- })
98
+ res = send_request :getlicensedata,
99
+ username: username,
100
+ distributor: distributor
101
+
75
102
  res[:licensedata]
76
103
  end
77
104
 
@@ -81,10 +108,9 @@ module TeamdriveApi
81
108
  # @param [String] distributor (optional, added in RegServ API v1.0.003)
82
109
  # @return [Hash] the user data
83
110
  def get_user_data(username, distributor = nil)
84
- send_request(:getuserdata, {
85
- username: username,
86
- distributor: distributor
87
- })
111
+ send_request :getuserdata,
112
+ username: username,
113
+ distributor: distributor
88
114
  end
89
115
 
90
116
  # Create a new Account
@@ -96,34 +122,34 @@ module TeamdriveApi
96
122
  # when creating a new account, they will not be checked when a user
97
123
  # attempts to log in.
98
124
  #
99
- # @param [Hash] Data for the new user.
125
+ # @param [Hash] opts Data for the new user.
100
126
  # @option opts [String] :username
101
127
  # @option opts [String] :useremail
102
128
  # @option opts [String] :password
103
- # @option opts [String] :language (optional)
104
- # @option opts [String] :reference (optional)
105
- # @option opts [String] :department (optional)
106
- # @option opts [String] :distributor (optional)
129
+ # @option opts [String] :language _optional_
130
+ # @option opts [String] :reference _optional_
131
+ # @option opts [String] :department _optional_
132
+ # @option opts [String] :distributor _optional_
107
133
  # @return [Boolean] +true+ if the User has been created
108
134
  def register_user(opts = {})
109
135
  require_all of: [:username, :useremail, :password], in_hash: opts
110
- send_request(:registeruser, opts)
136
+ res = send_request(:registeruser, opts)
111
137
  res[:intresult].eql?('0')
112
138
  end
113
139
  alias_method :create_account, :register_user
114
140
 
115
141
  # Remove user (added in RegServ API v1.0.003)
116
142
  #
117
- # @param [String] username to be deleted
118
- # @param [Boolean] delete the user's license aswell
119
- # @param [String] distributor will only be used if allowed by the API (see
143
+ # @param [String] username User to be deleted
144
+ # @param [Boolean] delete_license delete the user's license aswell
145
+ # @param [String] distributor Distributor. Will only be used if allowed by the API (see
120
146
  # +APIAllowSettingDistributor+ in the Teamdrive Register docs).
121
147
  # @return [Boolean] success?
122
148
  def remove_user(username, delete_license = false, distributor = nil)
123
149
  res = send_request :removeuser,
124
- username: username,
125
- delete_license: delete_license,
126
- distributor: distributor
150
+ username: username,
151
+ delete_license: delete_license,
152
+ distributor: distributor
127
153
 
128
154
  res[:intresult].eql?('0')
129
155
  end
@@ -1,3 +1,4 @@
1
+ # :nodoc:
1
2
  module TeamdriveApi
2
- VERSION = '0.3.1'
3
+ VERSION = '0.3.2'
3
4
  end
data/lib/teamdrive_api.rb CHANGED
@@ -5,5 +5,6 @@ require 'teamdrive_api/error'
5
5
  require 'teamdrive_api/base'
6
6
  require 'teamdrive_api/register'
7
7
 
8
+ # TeamDrive API Client
8
9
  module TeamdriveApi
9
10
  end
@@ -4,31 +4,31 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'teamdrive_api/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
- spec.name = "teamdrive_api"
7
+ spec.name = 'teamdrive_api'
8
8
  spec.version = TeamdriveApi::VERSION
9
- spec.authors = ["Manuel Hutter"]
10
- spec.email = ["git@mhutter.net"]
9
+ spec.authors = ['Manuel Hutter']
10
+ spec.email = ['git@mhutter.net']
11
11
 
12
12
  if spec.respond_to?(:metadata)
13
- # spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com' to prevent pushes to rubygems.org, or delete to allow pushes to any server."
13
+ # spec.metadata['allowed_push_host'] = 'TODO: Set to 'http://mygemserver.com' to prevent pushes to rubygems.org, or delete to allow pushes to any server.'
14
14
  end
15
15
 
16
- spec.summary = %q{TeamDrive API Client}
17
- spec.description = %q{Client library for the TeamDrive XML API. Currently only supports the RegServer API}
18
- spec.homepage = "https://github.com/mhutter/teamdrive_api"
19
- spec.license = "MIT"
16
+ spec.summary = 'TeamDrive API Client'
17
+ spec.description = 'Client library for the TeamDrive XML API. Currently only supports the RegServer API'
18
+ spec.homepage = 'https://github.com/mhutter/teamdrive_api'
19
+ spec.license = 'MIT'
20
20
 
21
21
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
22
- spec.bindir = "exe"
22
+ spec.bindir = 'exe'
23
23
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
24
- spec.require_paths = ["lib"]
24
+ spec.require_paths = ['lib']
25
25
 
26
- spec.add_runtime_dependency "httparty", "~> 0.13"
26
+ spec.add_runtime_dependency 'httparty', '~> 0.13'
27
27
 
28
- spec.add_development_dependency "bundler", "~> 1.8"
29
- spec.add_development_dependency "codeclimate-test-reporter"
30
- spec.add_development_dependency "minitest", "~> 5.5"
31
- spec.add_development_dependency "pry", "~> 0.10"
32
- spec.add_development_dependency "rake", "~> 10.0"
33
- spec.add_development_dependency "webmock", "~> 1.20"
28
+ spec.add_development_dependency 'bundler', '~> 1.8'
29
+ spec.add_development_dependency 'codeclimate-test-reporter'
30
+ spec.add_development_dependency 'minitest', '~> 5.5'
31
+ spec.add_development_dependency 'pry', '~> 0.10'
32
+ spec.add_development_dependency 'rake', '~> 10.0'
33
+ spec.add_development_dependency 'webmock', '~> 1.20'
34
34
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: teamdrive_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Manuel Hutter
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-05-15 00:00:00.000000000 Z
11
+ date: 2015-05-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -117,6 +117,7 @@ extensions: []
117
117
  extra_rdoc_files: []
118
118
  files:
119
119
  - ".gitignore"
120
+ - ".rubocop.yml"
120
121
  - ".travis.yml"
121
122
  - Gemfile
122
123
  - LICENSE.txt
@@ -157,3 +158,4 @@ signing_key:
157
158
  specification_version: 4
158
159
  summary: TeamDrive API Client
159
160
  test_files: []
161
+ has_rdoc: