wavefront-sdk 3.3.3 → 3.3.4

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 (118) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +2 -17
  3. data/Gemfile +2 -0
  4. data/HISTORY.md +4 -0
  5. data/Rakefile +2 -0
  6. data/lib/wavefront-sdk/alert.rb +5 -2
  7. data/lib/wavefront-sdk/api_mixins/acl.rb +3 -0
  8. data/lib/wavefront-sdk/api_mixins/tag.rb +2 -0
  9. data/lib/wavefront-sdk/api_mixins/user.rb +4 -0
  10. data/lib/wavefront-sdk/apitoken.rb +2 -0
  11. data/lib/wavefront-sdk/cloudintegration.rb +4 -0
  12. data/lib/wavefront-sdk/core/api.rb +3 -0
  13. data/lib/wavefront-sdk/core/api_caller.rb +16 -10
  14. data/lib/wavefront-sdk/core/exception.rb +2 -0
  15. data/lib/wavefront-sdk/core/logger.rb +6 -3
  16. data/lib/wavefront-sdk/core/response.rb +6 -3
  17. data/lib/wavefront-sdk/credentials.rb +5 -2
  18. data/lib/wavefront-sdk/dashboard.rb +3 -0
  19. data/lib/wavefront-sdk/defs/constants.rb +3 -1
  20. data/lib/wavefront-sdk/defs/version.rb +3 -1
  21. data/lib/wavefront-sdk/derivedmetric.rb +3 -0
  22. data/lib/wavefront-sdk/distribution.rb +36 -16
  23. data/lib/wavefront-sdk/event.rb +16 -12
  24. data/lib/wavefront-sdk/externallink.rb +3 -0
  25. data/lib/wavefront-sdk/integration.rb +2 -0
  26. data/lib/wavefront-sdk/maintenancewindow.rb +4 -1
  27. data/lib/wavefront-sdk/message.rb +2 -0
  28. data/lib/wavefront-sdk/metric.rb +3 -0
  29. data/lib/wavefront-sdk/metric_helper.rb +6 -4
  30. data/lib/wavefront-sdk/notificant.rb +3 -0
  31. data/lib/wavefront-sdk/paginator/base.rb +5 -0
  32. data/lib/wavefront-sdk/paginator/delete.rb +2 -0
  33. data/lib/wavefront-sdk/paginator/get.rb +2 -0
  34. data/lib/wavefront-sdk/paginator/post.rb +2 -0
  35. data/lib/wavefront-sdk/paginator/put.rb +2 -0
  36. data/lib/wavefront-sdk/proxy.rb +2 -0
  37. data/lib/wavefront-sdk/query.rb +6 -3
  38. data/lib/wavefront-sdk/report.rb +2 -0
  39. data/lib/wavefront-sdk/savedsearch.rb +4 -0
  40. data/lib/wavefront-sdk/search.rb +4 -1
  41. data/lib/wavefront-sdk/settings.rb +2 -0
  42. data/lib/wavefront-sdk/source.rb +3 -0
  43. data/lib/wavefront-sdk/stdlib/array.rb +2 -0
  44. data/lib/wavefront-sdk/stdlib/hash.rb +5 -1
  45. data/lib/wavefront-sdk/stdlib/string.rb +2 -0
  46. data/lib/wavefront-sdk/support/mixins.rb +5 -1
  47. data/lib/wavefront-sdk/support/parse_time.rb +3 -0
  48. data/lib/wavefront-sdk/types/status.rb +4 -0
  49. data/lib/wavefront-sdk/user.rb +18 -8
  50. data/lib/wavefront-sdk/usergroup.rb +3 -0
  51. data/lib/wavefront-sdk/validators.rb +28 -0
  52. data/lib/wavefront-sdk/webhook.rb +3 -0
  53. data/lib/wavefront-sdk/write.rb +43 -28
  54. data/lib/wavefront-sdk/writers/api.rb +2 -0
  55. data/lib/wavefront-sdk/writers/core.rb +21 -4
  56. data/lib/wavefront-sdk/writers/http.rb +9 -2
  57. data/lib/wavefront-sdk/writers/socket.rb +11 -9
  58. data/lib/wavefront-sdk/writers/summary.rb +2 -0
  59. data/lib/wavefront-sdk/writers/unix.rb +10 -7
  60. data/lib/wavefront_sdk.rb +3 -1
  61. data/spec/.rubocop.yml +10 -14
  62. data/spec/constants.rb +10 -8
  63. data/spec/spec_helper.rb +2 -0
  64. data/spec/support/bad_mocket.rb +2 -0
  65. data/spec/support/hash.rb +2 -0
  66. data/spec/support/minitest_assertions.rb +2 -0
  67. data/spec/support/mocket.rb +2 -0
  68. data/spec/test_mixins/acl.rb +2 -0
  69. data/spec/test_mixins/general.rb +2 -0
  70. data/spec/test_mixins/tag.rb +2 -0
  71. data/spec/test_mixins/update_keys.rb +2 -0
  72. data/spec/wavefront-sdk/alert_spec.rb +10 -9
  73. data/spec/wavefront-sdk/api_mixins/user_mixins_spec.rb +1 -0
  74. data/spec/wavefront-sdk/apitoken_spec.rb +1 -0
  75. data/spec/wavefront-sdk/cloudintegration_spec.rb +2 -1
  76. data/spec/wavefront-sdk/core/api_caller_spec.rb +1 -0
  77. data/spec/wavefront-sdk/core/api_spec.rb +1 -0
  78. data/spec/wavefront-sdk/core/logger_spec.rb +1 -0
  79. data/spec/wavefront-sdk/core/response_spec.rb +4 -3
  80. data/spec/wavefront-sdk/credentials_spec.rb +1 -0
  81. data/spec/wavefront-sdk/dashboard_spec.rb +1 -0
  82. data/spec/wavefront-sdk/derivedmetric_spec.rb +1 -0
  83. data/spec/wavefront-sdk/distribution_spec.rb +6 -5
  84. data/spec/wavefront-sdk/event_spec.rb +8 -7
  85. data/spec/wavefront-sdk/externallink_spec.rb +5 -4
  86. data/spec/wavefront-sdk/integration_spec.rb +1 -0
  87. data/spec/wavefront-sdk/maintenancewindow_spec.rb +6 -5
  88. data/spec/wavefront-sdk/message_spec.rb +2 -1
  89. data/spec/wavefront-sdk/metric_helper_spec.rb +10 -9
  90. data/spec/wavefront-sdk/metric_spec.rb +1 -0
  91. data/spec/wavefront-sdk/notificant_spec.rb +1 -0
  92. data/spec/wavefront-sdk/paginator/base_spec.rb +1 -0
  93. data/spec/wavefront-sdk/paginator/post_spec.rb +1 -0
  94. data/spec/wavefront-sdk/proxy_spec.rb +1 -0
  95. data/spec/wavefront-sdk/query_spec.rb +1 -0
  96. data/spec/wavefront-sdk/report_spec.rb +1 -0
  97. data/spec/wavefront-sdk/resources/dummy_points.rb +10 -8
  98. data/spec/wavefront-sdk/savedsearch_spec.rb +1 -0
  99. data/spec/wavefront-sdk/search_spec.rb +5 -4
  100. data/spec/wavefront-sdk/settings_spec.rb +1 -0
  101. data/spec/wavefront-sdk/source_spec.rb +3 -2
  102. data/spec/wavefront-sdk/stdlib/array_spec.rb +1 -0
  103. data/spec/wavefront-sdk/stdlib/hash_spec.rb +1 -0
  104. data/spec/wavefront-sdk/stdlib/string_spec.rb +1 -0
  105. data/spec/wavefront-sdk/support/mixins_spec.rb +1 -0
  106. data/spec/wavefront-sdk/support/parse_time_spec.rb +1 -2
  107. data/spec/wavefront-sdk/user_spec.rb +1 -0
  108. data/spec/wavefront-sdk/usergroup_spec.rb +2 -1
  109. data/spec/wavefront-sdk/validators_spec.rb +1 -2
  110. data/spec/wavefront-sdk/webhook_spec.rb +7 -6
  111. data/spec/wavefront-sdk/write_spec.rb +50 -30
  112. data/spec/wavefront-sdk/writers/api_spec.rb +1 -0
  113. data/spec/wavefront-sdk/writers/core_spec.rb +1 -0
  114. data/spec/wavefront-sdk/writers/http_spec.rb +2 -1
  115. data/spec/wavefront-sdk/writers/socket_spec.rb +1 -0
  116. data/spec/wavefront-sdk/writers/summary_spec.rb +1 -0
  117. data/wavefront-sdk.gemspec +4 -2
  118. metadata +6 -6
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'core/api'
2
4
  require_relative 'api_mixins/tag'
3
5
 
@@ -28,19 +30,11 @@ module Wavefront
28
30
  #
29
31
  def list(from = nil, to = Time.now, limit = 100, cursor = nil)
30
32
  raise ArgumentError unless from && to
31
- wf_event_id?(cursor) if cursor
32
-
33
- from = parse_time(from, true)
34
- to = parse_time(to, true)
35
-
36
- wf_ms_ts?(from)
37
- wf_ms_ts?(to)
38
-
39
- body = { earliestStartTimeEpochMillis: from,
40
- latestStartTimeEpochMillis: to,
41
- cursor: cursor,
42
- limit: limit }
43
33
 
34
+ body = list_body(from, to, limit, cursor)
35
+ wf_event_id?(cursor) if cursor
36
+ wf_ms_ts?(body[:earliestStartTimeEpochMillis])
37
+ wf_ms_ts?(body[:latestStartTimeEpochMillis])
44
38
  api.get('', body.cleanse)
45
39
  end
46
40
 
@@ -56,6 +50,7 @@ module Wavefront
56
50
  #
57
51
  def create(body)
58
52
  raise ArgumentError unless body.is_a?(Hash)
53
+
59
54
  api.post('', body, 'application/json')
60
55
  end
61
56
 
@@ -121,5 +116,14 @@ module Wavefront
121
116
  def valid_id?(id)
122
117
  wf_event_id?(id)
123
118
  end
119
+
120
+ private
121
+
122
+ def list_body(t_start, t_end, limit, cursor)
123
+ { earliestStartTimeEpochMillis: parse_time(t_start, true),
124
+ latestStartTimeEpochMillis: parse_time(t_end, true),
125
+ cursor: cursor,
126
+ limit: limit }
127
+ end
124
128
  end
125
129
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'core/api'
2
4
 
3
5
  module Wavefront
@@ -32,6 +34,7 @@ module Wavefront
32
34
  #
33
35
  def create(body)
34
36
  raise ArgumentError unless body.is_a?(Hash)
37
+
35
38
  api.post('', body, 'application/json')
36
39
  end
37
40
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'core/api'
2
4
 
3
5
  module Wavefront
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'core/api'
2
4
 
3
5
  module Wavefront
@@ -32,6 +34,7 @@ module Wavefront
32
34
  #
33
35
  def create(body)
34
36
  raise ArgumentError unless body.is_a?(Hash)
37
+
35
38
  api.post('', body, 'application/json')
36
39
  end
37
40
 
@@ -110,7 +113,7 @@ module Wavefront
110
113
  ret = pending
111
114
 
112
115
  items = { UPCOMING: ret.response.items,
113
- CURRENT: ongoing.response.items }
116
+ CURRENT: ongoing.response.items }
114
117
 
115
118
  ret.response.items = items
116
119
  ret
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'core/api'
2
4
 
3
5
  module Wavefront
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'core/api'
2
4
 
3
5
  module Wavefront
@@ -24,6 +26,7 @@ module Wavefront
24
26
 
25
27
  if cursor
26
28
  raise ArgumentError unless cursor.is_a?(String)
29
+
27
30
  query.<< [:c, cursor]
28
31
  end
29
32
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'write'
2
4
 
3
5
  module Wavefront
@@ -18,7 +20,7 @@ module Wavefront
18
20
  #
19
21
  def initialize(creds, opts = {})
20
22
  @opts = opts
21
- @buf = { gauges: empty_gauges,
23
+ @buf = { gauges: empty_gauges,
22
24
  counters: empty_counters }
23
25
  @writer = setup_writer(creds, opts)
24
26
  @dist_writer = setup_dist_writer(creds, opts) if opts[:dist_port]
@@ -139,9 +141,9 @@ module Wavefront
139
141
  def dists_to_wf(dists)
140
142
  dists.map do |k, v|
141
143
  path, interval, tags = k
142
- dist = { path: path,
143
- value: dist_writer.mk_distribution(v),
144
- ts: Time.now.utc.to_i,
144
+ dist = { path: path,
145
+ value: dist_writer.mk_distribution(v),
146
+ ts: Time.now.utc.to_i,
145
147
  interval: interval }
146
148
  dist[:tags] = tags unless tags.nil?
147
149
  dist
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'core/api'
2
4
 
3
5
  module Wavefront
@@ -23,6 +25,7 @@ module Wavefront
23
25
  #
24
26
  def create(body)
25
27
  raise ArgumentError unless body.is_a?(Hash)
28
+
26
29
  api.post('', body, 'application/json')
27
30
  end
28
31
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative '../defs/constants'
2
4
 
3
5
  module Wavefront
@@ -71,6 +73,7 @@ module Wavefront
71
73
  def user_page_size(args)
72
74
  arg_val = limit_and_offset(args)[:offset].to_i
73
75
  return arg_val if arg_val&.positive?
76
+
74
77
  PAGE_SIZE
75
78
  end
76
79
 
@@ -114,6 +117,7 @@ module Wavefront
114
117
  api_caller.verbosity(conn, method, *p_args)
115
118
  resp = api_caller.respond(conn.public_send(method, *p_args))
116
119
  raise StopIteration unless resp.ok?
120
+
117
121
  ret.response.items += resp.response.items
118
122
  return finalize_response(ret) unless resp.more_items?
119
123
  end
@@ -154,6 +158,7 @@ module Wavefront
154
158
  unless resp.ok?
155
159
  raise(Wavefront::Exception::EnumerableError, resp.status)
156
160
  end
161
+
157
162
  p_args = set_pagination(offset, page_size, p_args)
158
163
  resp.response.items.map { |i| y.<< i }
159
164
  raise StopIteration unless resp.more_items?
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'base'
2
4
 
3
5
  module Wavefront
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'base'
2
4
 
3
5
  module Wavefront
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'json'
2
4
  require_relative 'base'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'base'
2
4
 
3
5
  module Wavefront
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'core/api'
2
4
 
3
5
  module Wavefront
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'core/api'
2
4
 
3
5
  module Wavefront
@@ -32,6 +34,7 @@ module Wavefront
32
34
  options = {})
33
35
 
34
36
  raise ArgumentError unless query.is_a?(String)
37
+
35
38
  wf_granularity?(granularity)
36
39
  raise Wavefront::Exception::InvalidTimestamp if t_start.nil?
37
40
 
@@ -87,9 +90,9 @@ module Wavefront
87
90
  status = 400 if status == 200 && !err_msg.empty?
88
91
 
89
92
  { response: resp,
90
- status: { result: status == 200 ? 'OK' : 'ERROR',
91
- message: err_msg,
92
- code: status } }.to_json
93
+ status: { result: status == 200 ? 'OK' : 'ERROR',
94
+ message: err_msg,
95
+ code: status } }.to_json
93
96
  end
94
97
 
95
98
  # A bad query doesn't send back a JSON object. It sends back a
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'write'
2
4
 
3
5
  module Wavefront
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'core/api'
2
4
 
3
5
  module Wavefront
@@ -26,6 +28,7 @@ module Wavefront
26
28
  #
27
29
  def create(body)
28
30
  raise ArgumentError unless body.is_a?(Hash)
31
+
29
32
  api.post('', body, 'application/json')
30
33
  end
31
34
 
@@ -60,6 +63,7 @@ module Wavefront
60
63
  def update(id, body)
61
64
  wf_savedsearch_id?(id)
62
65
  raise ArgumentError unless body.is_a?(Hash)
66
+
63
67
  api.put(id, body)
64
68
  end
65
69
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'core/api'
2
4
 
3
5
  module Wavefront
@@ -39,6 +41,7 @@ module Wavefront
39
41
  #
40
42
  def search(entity, query, options = {})
41
43
  raise ArgumentError unless options.is_a?(Hash)
44
+
42
45
  raw_search(entity, body(query, options), options[:deleted] || false)
43
46
  end
44
47
 
@@ -71,7 +74,7 @@ module Wavefront
71
74
  def sort_field(options, query)
72
75
  field = options[:sort_field] || [query].flatten.first[:key]
73
76
 
74
- { field: field,
77
+ { field: field,
75
78
  ascending: !options[:desc] || true }
76
79
  end
77
80
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'core/api'
2
4
 
3
5
  module Wavefront
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'core/api'
2
4
  require_relative 'api_mixins/tag'
3
5
 
@@ -37,6 +39,7 @@ module Wavefront
37
39
  #
38
40
  def create(body)
39
41
  raise ArgumentError unless body.is_a?(Hash)
42
+
40
43
  api.post('', body, 'application/json')
41
44
  end
42
45
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Extensions to stdlib Array
2
4
  #
3
5
  class Array
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'string'
2
4
 
3
5
  # Extensions to stdlib Hash
@@ -7,7 +9,9 @@ class Hash
7
9
  # the WF wire-format guide. No validation is performed here.
8
10
  #
9
11
  def to_wf_tag
10
- map { |k, v| format('%s="%s"', k, v.tagescape) }.join(' ')
12
+ map do |k, v|
13
+ format('%<key>s="%<value>s"', key: k, value: v.tagescape)
14
+ end.join(' ')
11
15
  end
12
16
 
13
17
  # Drop any key-value pairs where the value is not truthy
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Extensions to stdlib String
2
4
  #
3
5
  class String
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'date'
2
4
  require_relative 'parse_time'
3
5
  require_relative '../core/exception'
@@ -22,6 +24,7 @@ module Wavefront
22
24
  #
23
25
  def parse_time(time, in_ms = false)
24
26
  return relative_time(time, in_ms) if time =~ /^[\-+]/
27
+
25
28
  ParseTime.new(time, in_ms).parse!
26
29
  end
27
30
 
@@ -57,7 +60,7 @@ module Wavefront
57
60
  end
58
61
 
59
62
  m = in_ms ? 1000 : 1
60
- time.delete!('+')
63
+ time = time.delete('+')
61
64
  match = time.match(/^(-?\d*\.?\d*)([smhdwy])$/)
62
65
  (match[1].to_f * time_multiplier(match[2]) * m).to_i
63
66
  end
@@ -85,6 +88,7 @@ module Wavefront
85
88
  u = { s: 1, m: 60, h: 3600, d: 86_400, w: 604_800, y: 31_536_000 }
86
89
 
87
90
  return u[suffix.to_sym] if u.key?(suffix.to_sym)
91
+
88
92
  raise Wavefront::Exception::InvalidTimeUnit
89
93
  end
90
94
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'time'
2
4
 
3
5
  module Wavefront
@@ -33,6 +35,7 @@ module Wavefront
33
35
  #
34
36
  def parse_time_string
35
37
  return t.to_i if t =~ /^\d+$/
38
+
36
39
  @t = Time.parse("#{t} #{Time.now.getlocal.zone}")
37
40
  parse_time_time
38
41
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Wavefront
2
4
  #
3
5
  # Status types are used by the Wavefront::Response class. They
@@ -37,6 +39,7 @@ module Wavefront
37
39
  def message
38
40
  return obj[:message] if obj[:message]
39
41
  return obj[:error] if obj[:error]
42
+
40
43
  nil
41
44
  end
42
45
 
@@ -47,6 +50,7 @@ module Wavefront
47
50
  def result
48
51
  return obj[:result] if obj[:result]
49
52
  return 'OK' if status.between?(200, 299)
53
+
50
54
  'ERROR'
51
55
  end
52
56
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'core/api'
2
4
  require_relative 'api_mixins/user'
3
5
 
@@ -25,6 +27,7 @@ module Wavefront
25
27
  #
26
28
  def create(body, send_email = false)
27
29
  raise ArgumentError unless body.is_a?(Hash)
30
+
28
31
  api.post("?sendEmail=#{send_email}", body, 'application/json')
29
32
  end
30
33
 
@@ -115,6 +118,7 @@ module Wavefront
115
118
  def grant(id, pgroup)
116
119
  wf_user_id?(id)
117
120
  raise ArgumentError unless pgroup.is_a?(String)
121
+
118
122
  api.post([id, 'grant'].uri_concat, "group=#{pgroup}",
119
123
  'application/x-www-form-urlencoded')
120
124
  end
@@ -131,6 +135,7 @@ module Wavefront
131
135
  def revoke(id, pgroup)
132
136
  wf_user_id?(id)
133
137
  raise ArgumentError unless pgroup.is_a?(String)
138
+
134
139
  api.post([id, 'revoke'].uri_concat, "group=#{pgroup}",
135
140
  'application/x-www-form-urlencoded')
136
141
  end
@@ -145,6 +150,7 @@ module Wavefront
145
150
  #
146
151
  def delete_users(user_list)
147
152
  raise ArgumentError unless user_list.is_a?(Array)
153
+
148
154
  validate_user_list(user_list)
149
155
  api.post('deleteUsers', user_list, 'application/json')
150
156
  end
@@ -160,6 +166,7 @@ module Wavefront
160
166
  #
161
167
  def grant_permission(permission, user_list)
162
168
  raise ArgumentError unless user_list.is_a?(Array)
169
+
163
170
  validate_user_list(user_list)
164
171
  api.post(['grant', permission].uri_concat, user_list,
165
172
  'application/json')
@@ -176,6 +183,7 @@ module Wavefront
176
183
  #
177
184
  def revoke_permission(permission, user_list)
178
185
  raise ArgumentError unless user_list.is_a?(Array)
186
+
179
187
  validate_user_list(user_list)
180
188
  api.post(['revoke', permission].uri_concat, user_list,
181
189
  'application/json')
@@ -190,6 +198,7 @@ module Wavefront
190
198
  def invite(body)
191
199
  raise ArgumentError unless body.is_a?(Array)
192
200
  raise ArgumentError unless body.first.is_a?(Hash)
201
+
193
202
  api.post('invite', body, 'application/json')
194
203
  end
195
204
 
@@ -213,21 +222,21 @@ module Wavefront
213
222
  end
214
223
 
215
224
  def itemize_response(body_obj)
216
- { status: body_obj[:status],
225
+ { status: body_obj[:status],
217
226
  response: { items: [body_obj[:response]].flatten } }.to_json
218
227
  end
219
228
 
220
229
  # Construct a response almost from scratch. Used for 'list', among others.
221
230
  #
222
231
  def construct_response(body_obj, status)
223
- { status: { result: status.to_s.start_with?('2') ? 'OK' : 'ERROR',
224
- message: extract_api_message(status, body_obj),
225
- code: status },
226
- response: { items: [body_obj].flatten,
227
- offset: 0,
228
- limit: body_obj.size,
232
+ { status: { result: status.to_s.start_with?('2') ? 'OK' : 'ERROR',
233
+ message: extract_api_message(status, body_obj),
234
+ code: status },
235
+ response: { items: [body_obj].flatten,
236
+ offset: 0,
237
+ limit: body_obj.size,
229
238
  totalItems: body_obj.size,
230
- moreItems: false } }.to_json
239
+ moreItems: false } }.to_json
231
240
  end
232
241
 
233
242
  # the user API class does not support pagination. Be up-front
@@ -248,6 +257,7 @@ module Wavefront
248
257
 
249
258
  def extract_api_message(status, items)
250
259
  return '' if status < 300
260
+
251
261
  items.fetch(:message, 'no message from API')
252
262
  end
253
263