samanage 2.1.12 → 2.1.13

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: 1ec372d3885f312e767a2ed4f28fb7642fda6f3e
4
- data.tar.gz: 716ebc7f35ce2e54d567b64c20845c2c66d3a41c
3
+ metadata.gz: 0e46107af1beae0b563cc233e9d69c6727feca40
4
+ data.tar.gz: 045c5ebd2cfc9103a696af0e7439a17a795c2eb5
5
5
  SHA512:
6
- metadata.gz: bed2128b2c832f60cb4e66513ed33e39a79e3ebb22d840b4b7da8e6d0365d147dc7ba116806143e8b1181f2eb93528c16b919b7e16838f14a057cf5fc067584d
7
- data.tar.gz: dcb13662ecdd823d296c1070bb1cb3f1c82a03e3d684176ad298879497fa491046fa50db46ee919da3331c7a3b2e9c154757860ad97dcbfc41eb937b26b50c1e
6
+ metadata.gz: 02ad1751605e323200930b5a15e19c6fc1ebea3e863a28234dad15a1ff18b10cba47ca152fbf2e9deb1bed845314ca4c295008839eeb8c2f15d13f03b8b89f89
7
+ data.tar.gz: fe6872d3e228a4f04084786b8ccf9a39e5a3ded0168226d755bd22625bde462c5fffddbe1b052fd065eaf948f34adb727c65c78a1f55f24faa069f5ab9f1bfcf
data/README.md CHANGED
@@ -1,6 +1,5 @@
1
1
  # Samanage Ruby Gem
2
2
  [![Gem Version](https://badge.fury.io/rb/samanage.svg)](https://badge.fury.io/rb/samanage)
3
- [![Build Status](https://semaphoreci.com/api/v1/projects/8e1f8e7f-6e09-4dad-ac10-e9f41fa61b7d/1437435/shields_badge.svg)](https://semaphoreci.com/cw2908/samanage-ruby)
4
3
  ## Requirements
5
4
  - Ruby >= 2.3
6
5
 
@@ -1,3 +1,7 @@
1
+ ### 2.1.13
2
+ - Pass Query params separate from Body
3
+ - Add Release support
4
+
1
5
  ### 2.1.12
2
6
  - Add vendor support
3
7
  - Close opened files
@@ -18,6 +18,7 @@ require 'samanage/api/other_assets'
18
18
  require 'samanage/api/problems'
19
19
  require 'samanage/api/purchase_orders'
20
20
  require 'samanage/api/requester'
21
+ require 'samanage/api/releases'
21
22
  require 'samanage/api/sites'
22
23
  require 'samanage/api/solutions'
23
24
  require 'samanage/api/time_tracks'
@@ -20,6 +20,7 @@ module Samanage
20
20
  other_asset: 'other_assets.json',
21
21
  problem: 'problems.json',
22
22
  purchase_order: 'purchase_orders.json',
23
+ release: 'releases.json',
23
24
  site: 'sites.json',
24
25
  solution: 'solutions.json',
25
26
  user: 'users.json',
@@ -57,7 +58,7 @@ module Samanage
57
58
  end
58
59
 
59
60
  # Calling execute without a method defaults to GET
60
- def execute(http_method: 'get', path: nil, payload: nil, verbose: nil, headers: {})
61
+ def execute(http_method: 'get', path: nil, payload: nil, verbose: nil, headers: {}, options: {})
61
62
  if payload.class == Hash && self.content_type == 'json'
62
63
  begin
63
64
  if path != 'attachments.json'
@@ -74,26 +75,23 @@ module Samanage
74
75
  end
75
76
 
76
77
  headers = headers.merge({
77
- 'Accept' => "application/vnd.samanage.v2.0+#{self.content_type}#{verbose}",
78
- 'Content-type' => "application/#{self.content_type}",
78
+ 'Accept' => "application/vnd.samanage.v2.1+#{self.content_type}#{verbose}",
79
+ 'Content-Type' => "application/#{self.content_type}",
79
80
  'X-Samanage-Authorization' => 'Bearer ' + self.token
80
81
  })
81
- @options = {
82
- headers: headers,
83
- payload: payload
84
- }
82
+ options = options.except(:verbose)
85
83
  full_path = self.base_url + path
86
84
  retries = 0
87
85
  begin
88
86
  case http_method.to_s.downcase
89
87
  when 'get'
90
- api_call = self.class.get(full_path, headers: headers)
88
+ api_call = self.class.get(full_path, headers: headers, query: options)
91
89
  when 'post'
92
- api_call = self.class.post(full_path, body: payload, headers: headers)
90
+ api_call = self.class.post(full_path, body: payload, headers: headers, query: options)
93
91
  when 'put'
94
- api_call = self.class.put(full_path, body: payload, headers: headers)
92
+ api_call = self.class.put(full_path, body: payload, headers: headers, query: options)
95
93
  when 'delete'
96
- api_call = self.class.delete(full_path, body: payload, headers: headers)
94
+ api_call = self.class.delete(full_path, body: payload, headers: headers, query: options)
97
95
  else
98
96
  raise Samanage::Error.new(response: {response: 'Unknown HTTP method'})
99
97
  end
@@ -123,7 +121,9 @@ module Samanage
123
121
  response[:data] = JSON.parse(api_call.body)
124
122
  rescue JSON::ParserError => e
125
123
  response[:data] = api_call.body
126
- puts "[Warning] #{e.class}: #{e}"
124
+ if !path.match('send_activation_email')
125
+ puts "[Warning] #{e.class}: #{e}"
126
+ end
127
127
  end
128
128
  response
129
129
  when 401
@@ -1,9 +1,8 @@
1
1
  module Samanage
2
2
  class Api
3
3
  def get_categories(path: PATHS[:category], options: {})
4
- params = self.set_params(options: options)
5
- path = 'categories.json?' + params
6
- self.execute(path: path)
4
+ path = 'categories.json'
5
+ self.execute(path: path, options: options)
7
6
  end
8
7
 
9
8
 
@@ -3,9 +3,8 @@ module Samanage
3
3
 
4
4
  # Default get change path
5
5
  def get_changes(path: PATHS[:change], options: {})
6
- params = self.set_params(options: options)
7
- path = 'changes.json?' + params
8
- self.execute(path: path)
6
+ path = 'changes.json?'
7
+ self.execute(path: path, options: options)
9
8
  end
10
9
 
11
10
 
@@ -18,10 +17,10 @@ module Samanage
18
17
  total_pages = self.get_changes(options: options)[:total_pages]
19
18
  1.upto(total_pages) do |page|
20
19
  options[:page] = page
21
- params = self.set_params(options: options)
20
+
22
21
  puts "Collecting changes page: #{page}/#{total_pages}" if options[:verbose]
23
- path = "changes.json?" + params
24
- request = self.execute(http_method: 'get', path: path)
22
+ path = "changes.json?"
23
+ request = self.execute(http_method: 'get', path: path, options: options)
25
24
  request[:data].each do |change|
26
25
  if block_given?
27
26
  yield change
@@ -10,9 +10,9 @@ module Samanage
10
10
 
11
11
  # Add a new comment
12
12
  def create_comment(incident_id: , comment: , options: {})
13
- params = self.set_params(options: options)
14
- path = "incidents/#{incident_id}/comments.json?" + params
15
- self.execute(http_method: 'post', path: path, payload: comment)
13
+
14
+ path = "incidents/#{incident_id}/comments.json?"
15
+ self.execute(http_method: 'post', path: path, payload: comment, options: options)
16
16
  end
17
17
 
18
18
 
@@ -3,9 +3,9 @@ module Samanage
3
3
 
4
4
  # Get contract default path
5
5
  def get_contracts(path: PATHS[:contract], options: {})
6
- params = self.set_params(options: options)
7
- path = 'contracts.json?' + params
8
- self.execute(path: path)
6
+
7
+ path = 'contracts.json?'
8
+ self.execute(path: path, options: options)
9
9
  end
10
10
 
11
11
  # Get all contracts
@@ -14,10 +14,10 @@ module Samanage
14
14
  total_pages = self.get_contracts(options: options)[:total_pages]
15
15
  1.upto(total_pages) do |page|
16
16
  options[:page] = page
17
- params = self.set_params(options: options)
17
+
18
18
  puts "Collecting contracts page: #{page}/#{total_pages}" if options[:verbose]
19
- path = "contracts.json?#{params}"
20
- self.execute(path: path)[:data].each do |contract|
19
+ path = "contracts.json?"
20
+ self.execute(path: path, options: options)[:data].each do |contract|
21
21
  if block_given?
22
22
  yield contract
23
23
  end
@@ -3,9 +3,9 @@ module Samanage
3
3
 
4
4
  # Get custom fields default url
5
5
  def get_custom_fields(path: PATHS[:custom_fields], options:{})
6
- params = self.set_params(options: options)
7
- path = 'custom_fields.json?' + params
8
- self.execute(path: path)
6
+
7
+ path = 'custom_fields.json?'
8
+ self.execute(path: path, options: options)
9
9
  end
10
10
 
11
11
  # Gets all custom fields
@@ -14,10 +14,10 @@ module Samanage
14
14
  total_pages = self.get_custom_fields(options: options)[:total_pages] ||= 2
15
15
  1.upto(total_pages) do |page|
16
16
  options[:page] = page
17
- params = self.set_params(options: options)
17
+
18
18
  puts "Collecting Custom Fields page: #{page}/#{total_pages}" if options[:verbose]
19
- path = "custom_fields.json?#{params}"
20
- self.execute(path: path)[:data].each do |custom_field|
19
+ path = "custom_fields.json?"
20
+ self.execute(path: path, options: options)[:data].each do |custom_field|
21
21
  if block_given?
22
22
  yield custom_field
23
23
  end
@@ -2,7 +2,7 @@ module Samanage
2
2
  class Api
3
3
  # Get custom forms path
4
4
  def get_custom_forms(path: PATHS[:custom_forms], options: {})
5
- params = self.set_params(options: options)
5
+
6
6
  self.execute(path: path)
7
7
  end
8
8
 
@@ -12,10 +12,10 @@ module Samanage
12
12
  total_pages = self.get_custom_forms(options: options)[:total_pages]
13
13
  1.upto(total_pages) do |page|
14
14
  options[:page] = page
15
- params = self.set_params(options: options)
15
+
16
16
  puts "Collecting Custom Forms page: #{page}/#{total_pages}" if options[:verbose]
17
- path = "custom_forms.json?#{params}"
18
- self.execute(path: path)[:data].each do |custom_form|
17
+ path = "custom_forms.json?"
18
+ self.execute(path: path, options: options)[:data].each do |custom_form|
19
19
  if block_given?
20
20
  yield custom_form
21
21
  end
@@ -1,9 +1,9 @@
1
1
  module Samanage
2
2
  class Api
3
3
  def get_departments(path: PATHS[:department], options: {})
4
- params = self.set_params(options: options)
5
- path = 'departments.json?' + params
6
- self.execute(path: path)
4
+
5
+ path = 'departments.json?'
6
+ self.execute(path: path, options: options)
7
7
  end
8
8
 
9
9
  def collect_departments(options: {})
@@ -11,10 +11,10 @@ module Samanage
11
11
  total_pages = self.get_departments(options: options)[:total_pages]
12
12
  1.upto(total_pages) do |page|
13
13
  options[:page] = page
14
- params = self.set_params(options: options)
14
+
15
15
  puts "Collecting Departments page: #{page}/#{total_pages}" if options[:verbose]
16
- path = "departments.json?#{params}"
17
- self.execute(path: path)[:data].each do |department|
16
+ path = "departments.json?"
17
+ self.execute(path: path, options: options)[:data].each do |department|
18
18
  if block_given?
19
19
  yield department
20
20
  end
@@ -1,9 +1,9 @@
1
1
  module Samanage
2
2
  class Api
3
3
  def get_groups(path: PATHS[:group], options: {})
4
- params = self.set_params(options: options)
5
- path = 'groups.json?' + params
6
- self.execute(path: path)
4
+
5
+ path = 'groups.json?'
6
+ self.execute(path: path, options: options)
7
7
  end
8
8
 
9
9
  def collect_groups(options: {})
@@ -11,10 +11,10 @@ module Samanage
11
11
  total_pages = self.get_groups(options: options)[:total_pages]
12
12
  1.upto(total_pages) do |page|
13
13
  options[:page] = page
14
- params = self.set_params(options: options)
14
+
15
15
  puts "Collecting Groups page: #{page}/#{total_pages}" if options[:verbose]
16
- path = 'groups.json?' + params
17
- self.execute(path: path)[:data].each do |group|
16
+ path = 'groups.json?'
17
+ self.execute(path: path, options: options)[:data].each do |group|
18
18
  if block_given?
19
19
  yield group
20
20
  end
@@ -30,9 +30,9 @@ module Samanage
30
30
 
31
31
  def find_group_id_by_name(group: '', options: {})
32
32
  options.merge!({name: group}) if group && !options.keys.include?(:name)
33
- params = self.set_params(options: options)
34
- path = "groups.json?" + params
35
- group_api = self.execute(path: path )
33
+
34
+ path = "groups.json?"
35
+ group_api = self.execute(path: path, options: options)
36
36
  # Group names are case sensitive
37
37
  if !group_api[:data].empty? && group == group_api[:data].first['name']
38
38
  return group_api[:data].first['id']
@@ -3,9 +3,9 @@ module Samanage
3
3
 
4
4
  # Get hardware default path
5
5
  def get_hardwares(path: PATHS[:hardware], options: {})
6
- params = self.set_params(options: options)
7
- path = 'hardwares.json?' + params
8
- self.execute(path: path)
6
+
7
+ path = 'hardwares.json?'
8
+ self.execute(path: path, options: options)
9
9
  end
10
10
 
11
11
  # Get all hardwares
@@ -14,10 +14,10 @@ module Samanage
14
14
  total_pages = self.get_hardwares(options: options)[:total_pages]
15
15
  1.upto(total_pages) do |page|
16
16
  options[:page] = page
17
- params = self.set_params(options: options)
17
+
18
18
  puts "Collecting Hardwares page: #{page}/#{total_pages}" if options[:verbose]
19
- path = "hardwares.json?#{params}"
20
- self.execute(path: path)[:data].each do |hardware|
19
+ path = "hardwares.json?"
20
+ self.execute(path: path, options: options)[:data].each do |hardware|
21
21
  if block_given?
22
22
  yield hardware
23
23
  end
@@ -3,9 +3,9 @@ module Samanage
3
3
 
4
4
  # Default get incident path
5
5
  def get_incidents(path: PATHS[:incident], options: {})
6
- params = self.set_params(options: options)
7
- path = 'incidents.json?' + params
8
- self.execute(path: path)
6
+
7
+ path = 'incidents.json?'
8
+ self.execute(path: path,options: options)
9
9
  end
10
10
 
11
11
 
@@ -22,8 +22,8 @@ module Samanage
22
22
  if options[:audit_archives]
23
23
  options[:page] = page
24
24
  params = URI.encode_www_form(options.except(:audit_archives,:audit_archive,:layout)) # layout not needed as audit only on individual record
25
- paginated_path = "incidents.json?" + params
26
- paginated_incidents = self.execute(path: paginated_path)[:data]
25
+ paginated_path = "incidents.json?"
26
+ paginated_incidents = self.execute(path: paginated_path, options: options)[:data]
27
27
  paginated_incidents.map do |incident|
28
28
  params = self.set_params(options: options.except(:audit_archives,:audit_archive,:layout))
29
29
  archive_uri = "incidents/#{incident['id']}.json?layout=long&audit_archive=true"
@@ -35,9 +35,9 @@ module Samanage
35
35
  end
36
36
  else
37
37
  options[:page] = page
38
- params = self.set_params(options: options)
39
- path = "incidents.json?" + params
40
- self.execute(path: path)[:data].each do |incident|
38
+
39
+ path = "incidents.json?"
40
+ self.execute(path: path, options: options)[:data].each do |incident|
41
41
  if block_given?
42
42
  yield incident
43
43
  end
@@ -57,16 +57,16 @@ module Samanage
57
57
  # Find incident by ID
58
58
  def find_incident(id: , options: {})
59
59
 
60
- params = self.set_params(options: options)
61
- path = "incidents/#{id}.json?" + params
62
- self.execute(path: path)
60
+
61
+ path = "incidents/#{id}.json?"
62
+ self.execute(path: path, options: options)
63
63
  end
64
64
 
65
65
  # Update an incident given id and json
66
66
  def update_incident(payload: , id: , options: {})
67
- params = self.set_params(options: options)
68
- path = "incidents/#{id}.json?" + params
69
- self.execute(path: path, http_method: 'put', payload: payload)
67
+
68
+ path = "incidents/#{id}.json?"
69
+ self.execute(path: path, http_method: 'put', payload: payload, options: options)
70
70
  end
71
71
 
72
72
  def delete_incident(id: )
@@ -3,9 +3,9 @@ module Samanage
3
3
 
4
4
  # Get mobile default path
5
5
  def get_mobiles(path: PATHS[:mobile], options: {})
6
- params = self.set_params(options: options)
7
- path = 'mobiles.json?' + params
8
- self.execute(path: path)
6
+
7
+ path = 'mobiles.json?'
8
+ self.execute(path: path, options: options)
9
9
 
10
10
  end
11
11
 
@@ -15,10 +15,10 @@ module Samanage
15
15
  total_pages = self.get_mobiles(options: options)[:total_pages]
16
16
  1.upto(total_pages) do |page|
17
17
  options[:page] = page
18
- params = self.set_params(options: options)
18
+
19
19
  puts "Collecting Mobiles page: #{page}/#{total_pages}" if options[:verbose]
20
- path = "mobiles.json?#{params}"
21
- self.execute(path: path)[:data].each do |mobile|
20
+ path = "mobiles.json?"
21
+ self.execute(path: path, options: options)[:data].each do |mobile|
22
22
  if block_given?
23
23
  yield mobiles
24
24
  end
@@ -3,9 +3,9 @@ module Samanage
3
3
 
4
4
  # Default get other_assets path
5
5
  def get_other_assets(path: PATHS[:other_asset], options: {})
6
- params = self.set_params(options: options)
7
- path = 'other_assets.json?' + params
8
- self.execute(path: path)
6
+
7
+ path = 'other_assets.json?'
8
+ self.execute(path: path, options: options)
9
9
  end
10
10
 
11
11
  # Returns all other assets
@@ -15,10 +15,10 @@ module Samanage
15
15
  other_assets = []
16
16
  1.upto(total_pages) do |page|
17
17
  options[:page] = page
18
- params = self.set_params(options: options)
18
+
19
19
  puts "Collecting Other Assets page: #{page}/#{total_pages}" if options[:verbose]
20
- path = "other_assets.json?#{params}"
21
- self.execute(path: path)[:data].each do |other_asset|
20
+ path = "other_assets.json?"
21
+ self.execute(path: path, options: options)[:data].each do |other_asset|
22
22
  if block_given?
23
23
  yield other_asset
24
24
  end
@@ -3,9 +3,9 @@ module Samanage
3
3
 
4
4
  # Default get problem path
5
5
  def get_problems(path: PATHS[:problem], options: {})
6
- params = self.set_params(options: options)
7
- path = 'problems.json?' + params
8
- self.execute(path: path)
6
+
7
+ path = 'problems.json?'
8
+ self.execute(path: path, options: options)
9
9
  end
10
10
 
11
11
 
@@ -18,10 +18,10 @@ module Samanage
18
18
  total_pages = self.get_problems(options: options)[:total_pages]
19
19
  1.upto(total_pages) do |page|
20
20
  options[:page] = page
21
- params = self.set_params(options: options)
21
+
22
22
  puts "Collecting problems page: #{page}/#{total_pages}" if options[:verbose]
23
- path = "problems.json?" + params
24
- request = self.execute(http_method: 'get', path: path)
23
+ path = "problems.json?"
24
+ request = self.execute(http_method: 'get', path: path, options: options)
25
25
  request[:data].each do |problem|
26
26
  if block_given?
27
27
  yield problem
@@ -3,9 +3,9 @@ module Samanage
3
3
 
4
4
  # Default get purchase_order path
5
5
  def get_purchase_orders(path: PATHS[:purchase_order], options: {})
6
- params = self.set_params(options: options)
7
- path = 'purchase_orders.json?' + params
8
- self.execute(path: path)
6
+
7
+ path = 'purchase_orders.json?'
8
+ self.execute(path: path, options: options)
9
9
  end
10
10
 
11
11
 
@@ -18,10 +18,10 @@ module Samanage
18
18
  total_pages = self.get_purchase_orders(options: options)[:total_pages]
19
19
  1.upto(total_pages) do |page|
20
20
  options[:page] = page
21
- params = self.set_params(options: options)
21
+
22
22
  puts "Collecting purchase_orders page: #{page}/#{total_pages}" if options[:verbose]
23
- path = "purchase_orders.json?" + params
24
- request = self.execute(http_method: 'get', path: path)
23
+ path = "purchase_orders.json?"
24
+ request = self.execute(http_method: 'get', path: path, options: options)
25
25
  request[:data].each do |purchase_order|
26
26
  if block_given?
27
27
  yield purchase_order
@@ -0,0 +1,57 @@
1
+ module Samanage
2
+ class Api
3
+
4
+ # Default get releases path
5
+ def get_releases(path: PATHS[:release], options: {})
6
+
7
+ path = 'releases.json?'
8
+ self.execute(path: path, options: options)
9
+ end
10
+
11
+ # Returns all other assets
12
+ def collect_releases(options: {})
13
+ releases = Array.new
14
+ total_pages = self.get_releases(options: options)[:total_pages]
15
+ releases = []
16
+ 1.upto(total_pages) do |page|
17
+ options[:page] = page
18
+
19
+ puts "Collecting Other Assets page: #{page}/#{total_pages}" if options[:verbose]
20
+ path = "releases.json?"
21
+ self.execute(path: path, options: options)[:data].each do |release|
22
+ if block_given?
23
+ yield release
24
+ end
25
+ releases << release
26
+ end
27
+ end
28
+ releases
29
+ end
30
+
31
+
32
+ # Create an release given json
33
+ def create_release(payload: , options: {})
34
+ self.execute(path: PATHS[:release], http_method: 'post', payload: payload)
35
+ end
36
+
37
+
38
+ # Find release by id
39
+ def find_release(id: )
40
+ path = "releases/#{id}.json"
41
+ self.execute(path: path)
42
+ end
43
+
44
+ # Update release given json and id
45
+ def update_release(payload: , id: , options: {})
46
+ path = "releases/#{id}.json"
47
+ self.execute(path: path, http_method: 'put', payload: payload)
48
+ end
49
+
50
+ def delete_release(id: )
51
+ self.execute(path: "releases/#{id}.json", http_method: 'delete')
52
+ end
53
+
54
+
55
+ alias_method :releases, :collect_releases
56
+ end
57
+ end
@@ -1,9 +1,9 @@
1
1
  module Samanage
2
2
  class Api
3
3
  def get_sites(path: PATHS[:site], options: {})
4
- params = self.set_params(options: options)
5
- path = 'sites.json?' + params
6
- self.execute(path: path)
4
+
5
+ path = 'sites.json?'
6
+ self.execute(path: path, options: options)
7
7
  end
8
8
 
9
9
  def collect_sites(options: {})
@@ -11,10 +11,10 @@ module Samanage
11
11
  total_pages = self.get_sites(options: options)[:total_pages]
12
12
  1.upto(total_pages) do |page|
13
13
  options[:page] = page
14
- params = self.set_params(options: options)
14
+
15
15
  puts "Collecting Sites page: #{page}/#{total_pages}" if options[:verbose]
16
- path = "sites.json?" + params
17
- self.execute(path: path)[:data].each do |site|
16
+ path = "sites.json?"
17
+ self.execute(path: path, options: options)[:data].each do |site|
18
18
  if block_given?
19
19
  yield site
20
20
  end
@@ -1,9 +1,9 @@
1
1
  module Samanage
2
2
  class Api
3
3
  def get_solutions(path: PATHS[:solution], options: {})
4
- params = self.set_params(options: options)
5
- path = 'solutions.json?' + params
6
- self.execute(path: path)
4
+
5
+ path = 'solutions.json?'
6
+ self.execute(path: path, options: options)
7
7
  end
8
8
 
9
9
  def collect_solutions(options: {})
@@ -11,10 +11,10 @@ module Samanage
11
11
  total_pages = self.get_solutions(options: options)[:total_pages]
12
12
  1.upto(total_pages) do |page|
13
13
  options[:page] = page
14
- params = self.set_params(options: options)
14
+
15
15
  puts "Collecting Solutions page: #{page}/#{total_pages}" if options[:verbose]
16
- path = "solutions.json?" + params
17
- self.execute(http_method: 'get', path: path)[:data].each do |solution|
16
+ path = "solutions.json?"
17
+ self.execute(http_method: 'get', path: path, options: options)[:data].each do |solution|
18
18
  if block_given?
19
19
  yield solution
20
20
  end
@@ -3,9 +3,9 @@ module Samanage
3
3
 
4
4
  # Get users, using URL builder
5
5
  def get_users(path: PATHS[:user], options: {})
6
- params = self.set_params(options: options)
7
- path = 'users.json?' + params
8
- self.execute(path: path)
6
+
7
+ path = 'users.json?'
8
+ self.execute(path: path, options: options)
9
9
  end
10
10
 
11
11
  # Returns all users in the account
@@ -14,11 +14,11 @@ module Samanage
14
14
  total_pages = self.get_users(options: options)[:total_pages]
15
15
  1.upto(total_pages) do |page|
16
16
  options[:page] = page
17
- params = self.set_params(options: options)
18
- path = "users.json?" + params
17
+
18
+ path = "users.json?"
19
19
  puts "Collecting Users page: #{page}/#{total_pages}" if options[:verbose]
20
- path = "users.json?#{params}"
21
- self.execute(path: path)[:data].each do |user|
20
+ path = "users.json?"
21
+ self.execute(path: path, options: options)[:data].each do |user|
22
22
  if block_given?
23
23
  yield user
24
24
  end
@@ -1,9 +1,9 @@
1
1
  module Samanage
2
2
  class Api
3
3
  def get_vendors(path: PATHS[:vendor], options: {})
4
- params = self.set_params(options: options)
5
- path = 'vendors.json?' + params
6
- self.execute(path: path)
4
+
5
+ path = 'vendors.json?'
6
+ self.execute(path: path, options: options)
7
7
  end
8
8
 
9
9
  def collect_vendors(options: {})
@@ -11,10 +11,10 @@ module Samanage
11
11
  total_pages = self.get_vendors(options: options)[:total_pages]
12
12
  1.upto(total_pages) do |page|
13
13
  options[:page] = page
14
- params = self.set_params(options: options)
14
+
15
15
  puts "Collecting vendors page: #{page}/#{total_pages}" if options[:verbose]
16
- path = "vendors.json?" + params
17
- self.execute(http_method: 'get', path: path)[:data].each do |vendor|
16
+ path = "vendors.json?"
17
+ self.execute(http_method: 'get', path: path, options: options)[:data].each do |vendor|
18
18
  if block_given?
19
19
  yield vendor
20
20
  end
@@ -1,3 +1,3 @@
1
1
  module Samanage
2
- VERSION = '2.1.12'
2
+ VERSION = '2.1.13'
3
3
  end
@@ -34,7 +34,7 @@ describe Samanage::Api do
34
34
 
35
35
  expect(hardware_create[:data]['id']).to be_an(Integer)
36
36
  expect(hardware_create[:data]['name']).to eq(hardware_name)
37
- expect(hardware_create[:code]).to eq(201).or(200)
37
+ expect(hardware_create[:code]).to eq(200).or(201)
38
38
  end
39
39
  it 'create_hardware: fails if no serial' do
40
40
  hardware_name = "samanage-ruby-#{(rand*10**10).ceil}"
@@ -74,7 +74,6 @@ describe Samanage::Api do
74
74
  it 'update_incident: update_incident by id' do
75
75
  sample_incident = @incidents.reject{|i| ['Closed','Resolved'].include? i['state']}.sample
76
76
  sample_id = sample_incident['id']
77
- name = Faker::Movie.quote
78
77
  description = [Faker::String.random,Faker::Seinfeld.quote,Faker::Lorem.paragraph].sample
79
78
  incident_json = {
80
79
  :incident => {
@@ -106,6 +105,24 @@ describe Samanage::Api do
106
105
  incident_delete = @samanage.delete_incident(id: sample_incident_id)
107
106
  expect(incident_delete[:code]).to eq(200).or(201)
108
107
  end
108
+ it 'Sends an email if add_callbacks=true in params' do
109
+ sample_id = @samanage.get_incidents[:data].sample['id']
110
+ audits_req = @samanage.find_incident(id: sample_id, options: {layout: 'long'})
111
+
112
+ initial_email_audits = audits_req.dig(:data,'audits').select{|audit| audit['message'].match(/was sent./) }.count
113
+ incident_json = {
114
+ :incident => {
115
+ due_at: Date.new(2019,rand(11) + 1, rand(27) + 1), # need to configure email notifications for due date change
116
+ assignee: {email: @users.find{|u| u.dig('role','name') == 'Administrator'}.dig('email')}
117
+ }
118
+ }
119
+
120
+ @samanage.update_incident(payload: incident_json, id: sample_id, options: {add_callbacks: true})
121
+ sleep 5 # Wait for email to send
122
+ final_audits_req = @samanage.find_incident(id: sample_id, options: {layout: 'long'})
123
+ final_email_audits = final_audits_req.dig(:data,'audits').select{|audit| audit['message'].match(/was sent./) }.count
124
+ expect(initial_email_audits).to be < final_email_audits
125
+ end
109
126
  end
110
127
  end
111
128
  end
@@ -8,6 +8,7 @@ describe Samanage::Api do
8
8
  @samanage = Samanage::Api.new(token: TOKEN)
9
9
  @purchase_orders = @samanage.purchase_orders
10
10
  @users = @samanage.get_users[:data]
11
+ @vendors = @samanage.get_vendors[:data]
11
12
  end
12
13
  it 'get_purchase_orders: it returns API call of purchase_orders' do
13
14
  api_call = @samanage.get_purchase_orders
@@ -23,13 +24,13 @@ describe Samanage::Api do
23
24
  expect(@purchase_orders.size).to eq(purchase_order_count)
24
25
  end
25
26
  it 'create_purchase_order(payload: json): creates a purchase_order' do
26
- users_email = @samanage.collect_users.sample['email']
27
+ users_email = @users.find{|u| u['role']['name']=='Administrator'}.to_h['email']
27
28
  purchase_order_name = Faker::Book.title
28
29
  json = {
29
30
  purchase_order: {
30
31
  buyer: {email: users_email},
31
32
  name: purchase_order_name,
32
- vendor: {name: 'Samanage'}
33
+ vendor: {name: @vendors.sample['name']}
33
34
  }
34
35
  }
35
36
  purchase_order_create = @samanage.create_purchase_order(payload: json)
@@ -37,7 +38,7 @@ describe Samanage::Api do
37
38
  expect(purchase_order_create[:data]['name']).to eq(purchase_order_name)
38
39
  expect(purchase_order_create[:code]).to eq(200).or(201)
39
40
  end
40
- it 'create_purchase_order: fails if no name/title' do
41
+ it 'create_purchase_order: fails if no vendor' do
41
42
  users_email = @users.sample['email']
42
43
  json = {
43
44
  :purchase_order => {
@@ -0,0 +1,81 @@
1
+ require 'samanage'
2
+
3
+ describe Samanage::Api do
4
+ context 'Other Assets' do
5
+ describe 'API Functions' do
6
+ before(:all) do
7
+ TOKEN ||= ENV['SAMANAGE_TEST_API_TOKEN']
8
+ @samanage = Samanage::Api.new(token: TOKEN)
9
+ @releases = @samanage.get_releases[:data]
10
+ @users = @samanage.get_users[:data]
11
+
12
+ end
13
+ it 'get_releases: it returns API call of releases' do
14
+ api_call = @samanage.get_releases
15
+ expect(api_call).to be_a(Hash)
16
+ expect(api_call[:total_count]).to be_an(Integer)
17
+ expect(api_call).to have_key(:response)
18
+ expect(api_call).to have_key(:code)
19
+ end
20
+ it 'collect_releases: collects array of releases' do
21
+ expect(@releases).to be_an(Array)
22
+ end
23
+ it 'create_release(payload: json): creates a release' do
24
+ 7.times do |time|
25
+ release_name = "samanage-ruby-#{(rand*10**10).ceil}"
26
+ json = {
27
+ :release => {
28
+ name: release_name,
29
+ requester: {email: @users.sample['email']},
30
+ state: 'Open'
31
+ }
32
+ }
33
+
34
+ release_create = @samanage.create_release(payload: json)
35
+ expect(release_create[:data]['id']).to be_an(Integer)
36
+ expect(release_create[:data]['name']).to eq(release_name)
37
+ expect(release_create[:code]).to eq(200).or(201)
38
+ end
39
+ end
40
+ it 'create_release: fails if wrong fields' do
41
+ release_name = "samanage-ruby-#{(rand*10**10).ceil}"
42
+ json = {
43
+ :release => {
44
+ name: release_name,
45
+ }
46
+ }
47
+ expect{@samanage.create_release(payload: json)}.to raise_error(Samanage::InvalidRequest)
48
+ end
49
+
50
+ it 'find_release: returns an release card by known id' do
51
+ sample_id = @releases.sample['id']
52
+ release = @samanage.find_release(id: sample_id)
53
+
54
+ expect(release[:data]['id']).to eq(sample_id) # id should match found release
55
+ expect(release[:data]).to have_key('name')
56
+ expect(release[:data]).to have_key('id')
57
+ end
58
+ it 'find_release: returns nothing for an invalid id' do
59
+ sample_id = (0..10).entries.sample
60
+ expect{@samanage.find_release(id: sample_id)}.to raise_error(Samanage::NotFound) # id should match found release
61
+ end
62
+ it 'update_release: update_release by id' do
63
+ sample_id = @releases.sample['id']
64
+ new_name = (0...50).map { ('a'..'z').to_a[rand(26)] }.join
65
+ json = {
66
+ :release => {
67
+ :name => new_name
68
+ }
69
+ }
70
+ release_update = @samanage.update_release(payload: json, id: sample_id)
71
+ expect(release_update[:data]["name"]).to eq(new_name)
72
+ expect(release_update[:code]).to eq(200).or(201)
73
+ end
74
+ it 'deletes a valid release' do
75
+ sample_release_id = @releases.sample['id']
76
+ release_delete = @samanage.delete_release(id: sample_release_id)
77
+ expect(release_delete[:code]).to eq(200).or(201)
78
+ end
79
+ end
80
+ end
81
+ end
@@ -8,6 +8,13 @@ describe Samanage::Api do
8
8
  @samanage = Samanage::Api.new(token: TOKEN)
9
9
  @incidents = @samanage.incidents
10
10
  end
11
+ it 'Returns empty when no time tracks for valid incident' do
12
+ incidents_without_time_tracks = @incidents.select{|incident| incident['time_tracks'].to_a.empty?}
13
+ incident_id = incidents_without_time_tracks.sample.dig('id')
14
+ time_tracks = @samanage.time_tracks(incident_id: incident_id)
15
+ expect(time_tracks).to be_an(Array)
16
+ expect(time_tracks).to be_empty
17
+ end
11
18
  it 'creates a time_track' do
12
19
  incident_id = @incidents.sample.dig('id')
13
20
  name = [Faker::NatoPhoneticAlphabet.code_word,Faker::NatoPhoneticAlphabet.code_word,Faker::NatoPhoneticAlphabet.code_word].join(' ')
@@ -43,13 +50,6 @@ describe Samanage::Api do
43
50
  })
44
51
  expect(request[:code]).to eq(200).or(201)
45
52
  end
46
- it 'Returns empty when no time tracks for valid incident' do
47
- incidents_without_time_tracks = @incidents.reject{|incident| !incident['time_tracks'].to_a.empty?}
48
- incident_id = incidents_without_time_tracks.sample.dig('id')
49
- time_tracks = @samanage.time_tracks(incident_id: incident_id)
50
- expect(time_tracks).to be_an(Array)
51
- expect(time_tracks).to be_empty
52
- end
53
53
  it 'fails when invalid incident' do
54
54
  expect { @samanage.time_tracks(incident_id: rand(100)) }.to raise_error(Samanage::NotFound)
55
55
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: samanage
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.12
4
+ version: 2.1.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Walls
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-04-23 00:00:00.000000000 Z
11
+ date: 2019-05-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -68,6 +68,7 @@ files:
68
68
  - lib/samanage/api/other_assets.rb
69
69
  - lib/samanage/api/problems.rb
70
70
  - lib/samanage/api/purchase_orders.rb
71
+ - lib/samanage/api/releases.rb
71
72
  - lib/samanage/api/requester.rb
72
73
  - lib/samanage/api/sites.rb
73
74
  - lib/samanage/api/solutions.rb
@@ -97,6 +98,7 @@ files:
97
98
  - spec/api/samanage_other_asset_spec.rb
98
99
  - spec/api/samanage_problem_spec.rb
99
100
  - spec/api/samanage_purchase_order_spec.rb
101
+ - spec/api/samanage_release_spec.rb
100
102
  - spec/api/samanage_site_spec.rb
101
103
  - spec/api/samanage_solution_spec.rb
102
104
  - spec/api/samanage_time_tracks_spec.rb