wavefront-sdk 3.3.3 → 3.3.4

Sign up to get free protection for your applications and to get access to all the features.
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