ruby-jss 0.9.2 → 0.10.0a1

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.

Potentially problematic release.


This version of ruby-jss might be problematic. Click here for more details.

Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES.md +13 -1
  3. data/README.md +7 -7
  4. data/bin/cgrouper +6 -6
  5. data/bin/netseg-update +1 -1
  6. data/lib/jss.rb +1 -0
  7. data/lib/jss/api_connection.rb +428 -44
  8. data/lib/jss/api_object.rb +119 -68
  9. data/lib/jss/api_object/account.rb +12 -12
  10. data/lib/jss/api_object/advanced_search.rb +12 -12
  11. data/lib/jss/api_object/categorizable.rb +4 -4
  12. data/lib/jss/api_object/category.rb +2 -2
  13. data/lib/jss/api_object/computer.rb +111 -58
  14. data/lib/jss/api_object/computer_invitation.rb +2 -2
  15. data/lib/jss/api_object/creatable.rb +19 -8
  16. data/lib/jss/api_object/criteriable/criteria.rb +8 -8
  17. data/lib/jss/api_object/distribution_point.rb +14 -48
  18. data/lib/jss/api_object/extension_attribute.rb +14 -11
  19. data/lib/jss/api_object/extension_attribute/computer_extension_attribute.rb +18 -18
  20. data/lib/jss/api_object/group.rb +7 -7
  21. data/lib/jss/api_object/ldap_server.rb +51 -60
  22. data/lib/jss/api_object/locatable.rb +2 -2
  23. data/lib/jss/api_object/matchable.rb +8 -9
  24. data/lib/jss/api_object/mobile_device.rb +61 -59
  25. data/lib/jss/api_object/mobile_device_application.rb +3 -3
  26. data/lib/jss/api_object/network_segment.rb +24 -19
  27. data/lib/jss/api_object/package.rb +6 -6
  28. data/lib/jss/api_object/peripheral.rb +5 -5
  29. data/lib/jss/api_object/policy.rb +5 -5
  30. data/lib/jss/api_object/restricted_software.rb +4 -4
  31. data/lib/jss/api_object/scopable/scope.rb +3 -3
  32. data/lib/jss/api_object/script.rb +1 -1
  33. data/lib/jss/api_object/self_servable.rb +3 -3
  34. data/lib/jss/api_object/self_servable/icon.rb +7 -2
  35. data/lib/jss/api_object/updatable.rb +2 -2
  36. data/lib/jss/api_object/uploadable.rb +1 -1
  37. data/lib/jss/api_object/user.rb +2 -2
  38. data/lib/jss/composer.rb +37 -10
  39. data/lib/jss/ruby_extensions/string.rb +51 -42
  40. data/lib/jss/server.rb +27 -6
  41. data/lib/jss/utility.rb +44 -0
  42. data/lib/jss/validate.rb +85 -0
  43. data/lib/jss/version.rb +1 -1
  44. metadata +5 -4
@@ -142,22 +142,29 @@ module JSS
142
142
  # class methods for accessing those other values as mapped Arrays,
143
143
  # e.g. JSS::Computer.all_udids
144
144
  #
145
- # The results of the first query for each subclass is stored in JSS.api.object_list_cache
146
- # and returned at every future call, so as to not requery the server every time.
145
+ # The results of the first query for each subclass is stored in the .object_list_cache
146
+ # of the given JSS::APIConnection and returned at every future call, so as
147
+ # to not requery the server every time.
147
148
  #
148
149
  # To force requerying to get updated data, provided a non-false argument.
149
150
  # I usually use :refresh, so that it's obvious what I'm doing, but true, 1,
150
151
  # or anything besides false or nil will work.
151
152
  #
153
+ # To query an APIConnection other than the currently active one,
154
+ # provide one via the api: named parameter.
155
+ #
152
156
  # @param refresh[Boolean] should the data be re-queried from the API?
153
157
  #
158
+ # @param api[JSS::APIConnection] an API connection to use for the query.
159
+ # Defaults to the corrently active API. See {JSS::APIConnection}
160
+ #
154
161
  # @return [Array<Hash{:name=>String, :id=> Integer}>]
155
162
  #
156
- def self.all(refresh = false)
163
+ def self.all(refresh = false, api: JSS.api)
157
164
  raise JSS::UnsupportedError, '.all can only be called on subclasses of JSS::APIObject' if self == JSS::APIObject
158
- JSS.api.object_list_cache[self::RSRC_LIST_KEY] = nil if refresh
159
- return JSS.api.object_list_cache[self::RSRC_LIST_KEY] if JSS.api.object_list_cache[self::RSRC_LIST_KEY]
160
- JSS.api.object_list_cache[self::RSRC_LIST_KEY] = JSS.api.get_rsrc(self::RSRC_BASE)[self::RSRC_LIST_KEY]
165
+ api.object_list_cache[self::RSRC_LIST_KEY] = nil if refresh
166
+ return api.object_list_cache[self::RSRC_LIST_KEY] if api.object_list_cache[self::RSRC_LIST_KEY]
167
+ api.object_list_cache[self::RSRC_LIST_KEY] = api.get_rsrc(self::RSRC_BASE)[self::RSRC_LIST_KEY]
161
168
  end
162
169
 
163
170
  # Returns an Array of the JSS id numbers of all the members
@@ -168,10 +175,13 @@ module JSS
168
175
  #
169
176
  # @param refresh[Boolean] should the data be re-queried from the API?
170
177
  #
178
+ # @param api[JSS::APIConnection] an API connection to use for the query.
179
+ # Defaults to the corrently active API. See {JSS::APIConnection}
180
+ #
171
181
  # @return [Array<Integer>] the ids of all it1ems of this subclass in the JSS
172
182
  #
173
- def self.all_ids(refresh = false)
174
- all(refresh).map { |i| i[:id] }
183
+ def self.all_ids(refresh = false, api: JSS.api)
184
+ all(refresh, api: api).map { |i| i[:id] }
175
185
  end
176
186
 
177
187
  # Returns an Array of the JSS names of all the members
@@ -182,10 +192,13 @@ module JSS
182
192
  #
183
193
  # @param refresh[Boolean] should the data be re-queried from the API?
184
194
  #
195
+ # @param api[JSS::APIConnection] an API connection to use for the query.
196
+ # Defaults to the corrently active API. See {JSS::APIConnection}
197
+ #
185
198
  # @return [Array<String>] the names of all item of this subclass in the JSS
186
199
  #
187
- def self.all_names(refresh = false)
188
- all(refresh).map { |i| i[:name] }
200
+ def self.all_names(refresh = false, api: JSS.api)
201
+ all(refresh, api: api).map { |i| i[:name] }
189
202
  end
190
203
 
191
204
  # Return a hash of all objects of this subclass
@@ -212,11 +225,14 @@ module JSS
212
225
  #
213
226
  # @param refresh[Boolean] should the data re-queried from the API?
214
227
  #
228
+ # @param api[JSS::APIConnection] an API connection to use for the query.
229
+ # Defaults to the corrently active API. See {JSS::APIConnection}
230
+ #
215
231
  # @return [Hash{Integer => Oject}] the associated ids and data
216
232
  #
217
- def self.map_all_ids_to(other_key, refresh = false)
233
+ def self.map_all_ids_to(other_key, refresh = false, api: JSS.api)
218
234
  h = {}
219
- all(refresh).each { |i| h[i[:id]] = i[other_key] }
235
+ all(refresh, api: api).each { |i| h[i[:id]] = i[other_key] }
220
236
  h
221
237
  end
222
238
 
@@ -229,55 +245,56 @@ module JSS
229
245
  #
230
246
  # @param refresh[Boolean] should the data re-queried from the API?
231
247
  #
248
+ # @param api[JSS::APIConnection] an API connection to use for the query.
249
+ # Defaults to the corrently active API. See {JSS::APIConnection}
250
+ #
232
251
  # @return [Hash{Integer => Object}] the objects requested
233
- def self.all_objects(refresh = false)
252
+ #
253
+ def self.all_objects(refresh = false, api: JSS.api)
234
254
  objects_key = "#{self::RSRC_LIST_KEY}_objects".to_sym
235
- JSS.api.object_list_cache[objects_key] = nil if refresh
236
- return JSS.api.object_list_cache[objects_key] if JSS.api.object_list_cache[objects_key]
237
- JSS.api.object_list_cache[objects_key] = all(refresh).map { |o| new id: o[:id] }
255
+ return api.object_list_cache[objects_key] unless refresh || api.object_list_cache[objects_key].nil?
256
+ api.object_list_cache[objects_key] = all(refresh, api: api).map { |o| fetch id: o[:id], api: api }
238
257
  end
239
258
 
240
259
  # Return true or false if an object of this subclass
241
- # with the given name or id exists on the server
260
+ # with the given Identifier exists on the server
242
261
  #
243
- # @param identfier [String,Integer] The name or id of object to check for
262
+ # @param identfier [String,Integer] An identifier for an object, a value for
263
+ # one of the available lookup_keys
244
264
  #
245
265
  # @param refresh [Boolean] Should the data be re-read from the server
246
266
  #
247
- # @return [Boolean] does an object with the given name or id exist?
267
+ # @param api[JSS::APIConnection] an API connection to use for the query.
268
+ # Defaults to the corrently active API. See {JSS::APIConnection}
248
269
  #
249
- def self.exist?(identfier, refresh = false)
250
- case identfier
251
- when Integer
252
- all_ids(refresh).include? identfier
253
- when String
254
- all_names(refresh).include? identfier
255
- else
256
- raise ArgumentError, 'Identifier must be a name (String) or id (Integer)'
257
- end
270
+ # @return [Boolean] does an object with the given identifier exist?
271
+ #
272
+ def self.exist?(identifier, refresh = false, api: JSS.api)
273
+ !valid_id(identifier, refresh, api: api).nil?
258
274
  end
259
275
 
260
276
  # Return an id or nil if an object of this subclass
261
277
  # with the given name or id exists on the server
262
278
  #
263
- # Subclasses may want to override this method to support more
264
- # identifiers than name and id.
265
- #
266
- # @param identfier [String,Integer] The name or id of object to check for
279
+ # @param identfier [String,Integer] An identifier for an object, a value for
280
+ # one of the available lookup_keys
267
281
  #
268
282
  # @param refresh [Boolean] Should the data be re-read from the server
269
283
  #
284
+ # @param api[JSS::APIConnection] an API connection to use for the query.
285
+ # Defaults to the corrently active API. See {JSS::APIConnection}
286
+ #
270
287
  # @return [Integer, nil] the id of the matching object, or nil if it doesn't exist
271
288
  #
272
- def self.valid_id(identfier, refresh = false)
273
- case identfier
274
- when Integer
275
- return identfier if all_ids(refresh).include? identfier
276
- when String
277
- return map_all_ids_to(:name).invert[identfier] if all_names(refresh).include? identfier
278
- else
279
- raise ArgumentError, 'Identifier must be a name (String) or id (Integer)'
280
- end
289
+ def self.valid_id(identifier, refresh = false, api: JSS.api)
290
+ return identifier if all_ids(refresh, api: api).include? identifier
291
+ id = nil
292
+ all_lookup_keys.keys.each do |key|
293
+ next if key == :id
294
+ id = map_all_ids_to(key).invert[identifier]
295
+ return id if id
296
+ end # do key
297
+ id
281
298
  end
282
299
 
283
300
  # Convert an Array of Hashes of API object data to a
@@ -377,26 +394,32 @@ module JSS
377
394
  #
378
395
  def self.rsrc_keys
379
396
  hash = {}
380
- all_keys = if defined?(self::OTHER_LOOKUP_KEYS)
381
- DEFAULT_LOOKUP_KEYS.merge self::OTHER_LOOKUP_KEYS
382
- else
383
- DEFAULT_LOOKUP_KEYS
384
- end
385
- all_keys.each { |key, deets| hash[key] = deets[:rsrc_key]}
397
+ all_lookup_keys.each { |key, deets| hash[key] = deets[:rsrc_key] }
386
398
  hash
387
399
  end
388
400
 
401
+ # the available list methods for an APIObject sublcass
402
+ #
403
+ # @return [Array<Symbol>] The list methods (e.g. .all_serial_numbers) for
404
+ # this APIObject subclass
405
+ #
406
+
407
+ # The combined DEFAULT_LOOKUP_KEYS and OTHER_LOOKUP_KEYS
408
+ # (which may be defined in subclasses)
409
+ #
410
+ # @return [Hash] See DEFAULT_LOOKUP_KEYS constant
411
+ #
412
+ def self.all_lookup_keys
413
+ return DEFAULT_LOOKUP_KEYS.merge(self::OTHER_LOOKUP_KEYS) if defined? self::OTHER_LOOKUP_KEYS
414
+ DEFAULT_LOOKUP_KEYS
415
+ end
416
+
389
417
  # @return [Hash] the available lookup keys mapped to the appropriate
390
418
  # list class method (e.g. id: :all_ids )
391
419
  #
392
420
  def self.lookup_key_list_methods
393
421
  hash = {}
394
- all_keys = if defined?(self::OTHER_LOOKUP_KEYS)
395
- DEFAULT_LOOKUP_KEYS.merge self::OTHER_LOOKUP_KEYS
396
- else
397
- DEFAULT_LOOKUP_KEYS
398
- end
399
- all_keys.each { |key, deets| hash[key] = deets[:list]}
422
+ all_lookup_keys.each { |key, deets| hash[key] = deets[:list] }
400
423
  hash
401
424
  end
402
425
 
@@ -414,13 +437,14 @@ module JSS
414
437
  #
415
438
  # @return [APIObject] The ruby-instance of a JSS object
416
439
  #
417
- def self.fetch(arg)
440
+ def self.fetch(arg, api: JSS.api)
418
441
  raise JSS::UnsupportedError, 'JSS::APIObject cannot be instantiated' if self.class == JSS::APIObject
419
442
 
420
443
  # if given a hash (or a colletion of named params)
421
444
  # pass to .new
422
445
  if arg.is_a? Hash
423
- raise ArgumentError, 'Use .create to create new JSS objects' if arg[:id] == :new
446
+ raise ArgumentError, 'Use .make to create new JSS objects' if arg[:id] == :new
447
+ api = arg[:api] if arg[:api]
424
448
  return new arg
425
449
  end
426
450
 
@@ -428,7 +452,7 @@ module JSS
428
452
  # and if it's result includes the desired value,
429
453
  # the pass they key and arg to .new
430
454
  lookup_key_list_methods.each do |key, method_name|
431
- return new({key => arg}) if self.send(method_name).include? arg
455
+ return new ({ key => arg, :api => api }) if method_name && send(method_name).include?(arg)
432
456
  end # each key
433
457
 
434
458
  # if we're here, we couldn't find a matching object
@@ -451,7 +475,8 @@ module JSS
451
475
  #
452
476
  # @return [APIObject] The un-created ruby-instance of a JSS object
453
477
  #
454
- def self.make(args = {})
478
+ def self.make(**args)
479
+ args[:api] ||= JSS.api
455
480
  raise JSS::UnsupportedError, 'JSS::APIObject cannot be instantiated' if self.class == JSS::APIObject
456
481
  raise ArgumentError, "Use '#{self.class}.fetch id: xx' to retrieve existing JSS objects" if args[:id]
457
482
  args[:id] = :new
@@ -464,7 +489,7 @@ module JSS
464
489
  # These Symbols are added to VALID_DATA_KEYS for performing the
465
490
  # :data validity test described above.
466
491
  #
467
- REQUIRED_DATA_KEYS = [:id, :name].freeze
492
+ REQUIRED_DATA_KEYS = %i[id name].freeze
468
493
 
469
494
  # All API objects have an id and a name. As such By these keys are available
470
495
  # for object lookups.
@@ -473,6 +498,7 @@ module JSS
473
498
  # which has the same format, described here:
474
499
  #
475
500
  # The merged Hashes DEFAULT_LOOKUP_KEYS and OTHER_LOOKUP_KEYS
501
+ # (as provided by the .all_lookup_keys Class method)
476
502
  # define what unique identifiers can be passed as parameters to the
477
503
  # fetch method for retrieving an object from the API.
478
504
  # They also define the class methods that return a list (Array) of all such
@@ -494,13 +520,21 @@ module JSS
494
520
  # }
495
521
  #
496
522
  DEFAULT_LOOKUP_KEYS = {
497
- id: {rsrc_key: :id, list: :all_ids},
498
- name: {rsrc_key: :name, list: :all_names}
523
+ id: { rsrc_key: :id, list: :all_ids },
524
+ name: { rsrc_key: :name, list: :all_names }
499
525
  }.freeze
500
526
 
501
527
  # Attributes
502
528
  #####################################
503
529
 
530
+ # @return [JSS::APIConnection] the API connection thru which we deal with
531
+ # this object.
532
+ attr_reader :api
533
+
534
+ # @return the parsed JSON data retrieved from the API when this object was
535
+ # fetched
536
+ attr_reader :init_data
537
+
504
538
  # @return [Integer] the JSS id number
505
539
  attr_reader :id
506
540
 
@@ -535,7 +569,8 @@ module JSS
535
569
  #
536
570
  #
537
571
  def initialize(args = {})
538
-
572
+ args[:api] ||= JSS.api
573
+ @api = args[:api]
539
574
  raise JSS::UnsupportedError, 'JSS::APIObject cannot be instantiated' if self.class == JSS::APIObject
540
575
 
541
576
  ####### Previously looked-up JSON data
@@ -559,7 +594,6 @@ module JSS
559
594
  @init_data = look_up_object_data(args)
560
595
  end ## end arg parsing
561
596
 
562
-
563
597
  parse_init_data
564
598
  @need_to_update = false
565
599
  end # init
@@ -652,6 +686,9 @@ module JSS
652
686
 
653
687
  # Delete this item from the JSS.
654
688
  #
689
+ # TODO: Make a class method for mass deletion
690
+ # without instantiating, then call it from this method.
691
+ #
655
692
  # Subclasses may want to redefine this method,
656
693
  # first calling super, then setting other attributes to
657
694
  # nil, false, empty, etc..
@@ -660,7 +697,7 @@ module JSS
660
697
  #
661
698
  def delete
662
699
  return nil unless @in_jss
663
- JSS.api.delete_rsrc @rest_rsrc
700
+ @api.delete_rsrc @rest_rsrc
664
701
  @rest_rsrc = "#{self.class::RSRC_BASE}/name/#{CGI.escape @name}"
665
702
  @id = nil
666
703
  @in_jss = false
@@ -676,6 +713,19 @@ module JSS
676
713
  "#{self.class}, name: #{@name}, id: #{@id}"
677
714
  end
678
715
 
716
+ # Remove the init_data and api object from
717
+ # the instance_variables used to create
718
+ # pretty-print (pp) output.
719
+ #
720
+ # @return [Array] the desired instance_variables
721
+ #
722
+ def pretty_print_instance_variables
723
+ vars = instance_variables.sort
724
+ vars.delete :@api
725
+ vars.delete :@init_data
726
+ vars
727
+ end
728
+
679
729
  # Private Instance Methods
680
730
  #####################################
681
731
  private
@@ -702,7 +752,7 @@ module JSS
702
752
  end
703
753
  # and the id must be in the jss
704
754
  raise NoSuchItemError, "No #{self.class::RSRC_OBJECT_KEY} with JSS id: #{@init_data[:id]}" unless \
705
- self.class.all_ids.include? hash_to_check[:id]
755
+ self.class.all_ids(api: @api).include? hash_to_check[:id]
706
756
  end # validate_init_data
707
757
 
708
758
  # If we're making a new object in the JSS, make sure we were given
@@ -719,9 +769,9 @@ module JSS
719
769
  def validate_init_for_creation(args)
720
770
  raise JSS::UnsupportedError, "Creating #{self.class::RSRC_LIST_KEY} isn't yet supported. Please use other Casper workflows." unless creatable?
721
771
 
722
- raise JSS::MissingDataError, "You must provide a :name to create a #{self.class::RSRC_OBJECT_KEY}." unless args[:name]
772
+ raise JSS::MissingDataError, "You must provide a :name to create a #{self.class::RSRC_OBJECT_KEY}." unless args[:name]
723
773
 
724
- raise JSS::AlreadyExistsError, "A #{self.class::RSRC_OBJECT_KEY} already exists with the name '#{args[:name]}'" if self.class.all_names.include? args[:name]
774
+ raise JSS::AlreadyExistsError, "A #{self.class::RSRC_OBJECT_KEY} already exists with the name '#{args[:name]}'" if self.class.all_names(api: @api).include? args[:name]
725
775
  end
726
776
 
727
777
  # Given initialization args, perform an API lookup for an object.
@@ -743,7 +793,7 @@ module JSS
743
793
  # e.g. User when loookup is by email.
744
794
  rsrc_object_key = args[:rsrc_object_key] ? args[:rsrc_object_key] : self.class::RSRC_OBJECT_KEY
745
795
 
746
- return JSS.api.get_rsrc(rsrc)[rsrc_object_key]
796
+ return @api.get_rsrc(rsrc)[rsrc_object_key]
747
797
  rescue RestClient::ResourceNotFound
748
798
  raise NoSuchItemError, "No #{self.class::RSRC_OBJECT_KEY} found matching: #{rsrc_key}/#{args[lookup_key]}"
749
799
  end
@@ -767,6 +817,7 @@ module JSS
767
817
 
768
818
  # many things have a :site
769
819
  # TODO: Implement a Sitable mixin module
820
+ #
770
821
  @site = JSS::APIObject.get_name(@main_subset[:site]) if @main_subset[:site]
771
822
 
772
823
  ##### Handle Mix-ins
@@ -792,7 +843,7 @@ module JSS
792
843
  def find_main_subset
793
844
  return @init_data if @init_data[:id] && @init_data[:name]
794
845
  return @init_data[:general] if @init_data[:general] && @init_data[:general][:id] && @init_data[:general][:name]
795
- @init_data.each do |key, value|
846
+ @init_data.each do |_key, value|
796
847
  next unless value.is_a? Hash
797
848
  return value if value.keys.include?(:id) && value.keys.include?(:name)
798
849
  end
@@ -72,33 +72,33 @@ module JSS
72
72
  #####################################
73
73
 
74
74
  # @return [Array<Hash>] all JSS account users
75
- def self.all_users(refresh = false)
76
- all(refresh)[:users]
75
+ def self.all_users(refresh = false, api: JSS.api)
76
+ all(refresh, api: api)[:users]
77
77
  end
78
78
 
79
79
  # @return [Array<Hash>] all JSS account user ids
80
- def self.all_user_ids(refresh = false)
81
- all(refresh)[:users].map { |i| i[:id] }
80
+ def self.all_user_ids(refresh = false, api: JSS.api)
81
+ all(refresh, api: api)[:users].map { |i| i[:id] }
82
82
  end
83
83
 
84
84
  # @return [Array<Hash>] all JSS account user names
85
- def self.all_user_names(refresh = false)
86
- all(refresh)[:users].map { |i| i[:name] }
85
+ def self.all_user_names(refresh = false, api: JSS.api)
86
+ all(refresh, api: api)[:users].map { |i| i[:name] }
87
87
  end
88
88
 
89
89
  # @return [Array<Hash>] all JSS account groups
90
- def self.all_groups(refresh = false)
91
- all(refresh)[:groups]
90
+ def self.all_groups(refresh = false, api: JSS.api)
91
+ all(refresh, api: api)[:groups]
92
92
  end
93
93
 
94
94
  # @return [Array<Hash>] all JSS account group ids
95
- def self.all_group_ids(refresh = false)
96
- all(refresh)[:groups].map { |i| i[:id] }
95
+ def self.all_group_ids(refresh = false, api: JSS.api)
96
+ all(refresh, api: api)[:groups].map { |i| i[:id] }
97
97
  end
98
98
 
99
99
  # @return [Array<Hash>] all JSS account group names
100
- def self.all_group_names(refresh = false)
101
- all(refresh)[:groups].map { |i| i[:name] }
100
+ def self.all_group_names(refresh = false, api: JSS.api)
101
+ all(refresh, api: api)[:groups].map { |i| i[:name] }
102
102
  end
103
103
 
104
104
  # Attributes
@@ -167,11 +167,11 @@ module JSS
167
167
  raise JSS::InvalidDataError, 'JSS::Criteriable::Criteria instance required' unless @criteria.is_a? JSS::Criteriable::Criteria
168
168
  raise JSS::InvalidDataError, 'display_fields must be an Array.' unless @display_fields.is_a? Array
169
169
 
170
- orig_timeout = JSS.api_connection.cnx.options[:timeout]
171
- JSS.api_connection.timeout = 1800
170
+ orig_timeout = @api.cnx.options[:timeout]
171
+ @api.timeout = 1800
172
172
  super()
173
173
  requery_search_results if get_results
174
- JSS.api_connection.timeout = orig_timeout
174
+ @api.timeout = orig_timeout
175
175
 
176
176
  @id # remember to return the id
177
177
  end
@@ -185,11 +185,11 @@ module JSS
185
185
  # @return [Integer] the id of the updated search
186
186
  #
187
187
  def update(get_results = false)
188
- orig_timeout = JSS.api_connection.cnx.options[:timeout]
189
- JSS.api_connection.timeout = 1800
188
+ orig_timeout = @api.cnx.options[:timeout]
189
+ @api.timeout = 1800
190
190
  super()
191
191
  requery_search_results if get_results
192
- JSS.api_connection.timeout = orig_timeout
192
+ @api.timeout = orig_timeout
193
193
 
194
194
  @id # remember to return the id
195
195
  end
@@ -201,17 +201,17 @@ module JSS
201
201
  # @return [Array<Hash>] the new search results
202
202
  #
203
203
  def requery_search_results
204
- orig_open_timeout = JSS.api_connection.cnx.options[:open_timeout]
205
- orig_timeout = JSS.api_connection.cnx.options[:timeout]
206
- JSS.api_connection.timeout = 1800
207
- JSS.api_connection.open_timeout = 1800
204
+ orig_open_timeout = @api.cnx.options[:open_timeout]
205
+ orig_timeout = @api.cnx.options[:timeout]
206
+ @api.timeout = 1800
207
+ @api.open_timeout = 1800
208
208
  begin
209
209
  requery = self.class.new(id: @id)
210
210
  @search_results = requery.search_results
211
211
  @result_display_keys = requery.result_display_keys
212
212
  ensure
213
- JSS.api_connection.timeout = orig_timeout
214
- JSS.api_connection.open_timeout = orig_open_timeout
213
+ @api.timeout = orig_timeout
214
+ @api.open_timeout = orig_open_timeout
215
215
  end
216
216
  end
217
217