ruby-jss 0.10.0a3 → 0.10.0
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.
- checksums.yaml +4 -4
- data/CHANGES.md +12 -5
- data/lib/jss.rb +3 -0
- data/lib/jss/api_connection.rb +1 -1
- data/lib/jss/api_object.rb +4 -4
- data/lib/jss/api_object/advanced_search/advanced_mobile_device_search.rb +1 -2
- data/lib/jss/api_object/computer.rb +4 -0
- data/lib/jss/api_object/criteriable/criteria.rb +1 -1
- data/lib/jss/api_object/extendable.rb +12 -3
- data/lib/jss/api_object/extension_attribute.rb +7 -2
- data/lib/jss/api_object/group.rb +1 -1
- data/lib/jss/ruby_extensions.rb +1 -1
- data/lib/jss/ruby_extensions/array.rb +52 -0
- data/lib/jss/version.rb +1 -1
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 769cbc0fa921b444480b1c3b588664c3c3937aa7
|
4
|
+
data.tar.gz: 4a4d8ab91135e180d49e52e2be783019cb42e978
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '069697c8db875ece53b7490a7ec095d695d2852dd1c6d20acc4a6d4a0acdcc4a59f7e978b8408f03796b52f9713991c2345f716aef964bf08bcfea364b384887'
|
7
|
+
data.tar.gz: 7de60430c90c5ce3f7f92afdb75307e1a8798d22ba75868dd6702970d829c81143943da96fc759612cf9d477e0fc6535e77bb793865ffe22b94efdf6f95d9ffc
|
data/CHANGES.md
CHANGED
@@ -1,10 +1,6 @@
|
|
1
1
|
# Change History
|
2
2
|
|
3
|
-
## v0.10.
|
4
|
-
|
5
|
-
- Fix: require 'English', rather than require 'english'. Thanks to HIMANSHU-ELIGIBLE @ github for catching & fixing this one.
|
6
|
-
|
7
|
-
## v0.10.0a1 2017-08-15 (pre release)
|
3
|
+
## v0.10.0 2017-10-09
|
8
4
|
|
9
5
|
- Improvement: Working with multiple APIConnections is now far more flexible!
|
10
6
|
|
@@ -16,6 +12,17 @@
|
|
16
12
|
The default/active connection continues to work as always, so your existing code will be fine.
|
17
13
|
See the [documentation for the JSS::APIConnection class](http://www.rubydoc.info/gems/ruby-jss/JSS/APIConnection) for details.
|
18
14
|
- Fix: Specifying port 443, as well as 8443, when connecting an APIConnection will default to using SSL. To force such a connection to NOT use SSL, provide the parameter `use_ssl: false`
|
15
|
+
- Fix: require 'English', rather than require 'english'. Thanks to HIMANSHU-ELIGIBLE @ github for catching & fixing this one.
|
16
|
+
- Fix: Popup extension attributes can always take a blank value.
|
17
|
+
- Fix: UserGroup members have a 'username' value, not 'name'
|
18
|
+
- Add: Two case-insentive string methods added to Array:
|
19
|
+
- Array#jss_ci_include_string? Takes a string, returns true if the Array contains the string without regard to case.
|
20
|
+
E.g. `['ThrAsHer'].jss_ci_include_string? 'thrasher' # => true`
|
21
|
+
- Array#jss_ci_fetch_string Takes a string and fetches it from the array, regardless of case. Nil if not found.
|
22
|
+
E.g. `['thrasher'].jss_ci_fetch_string 'ThrAsHer' # => 'thrasher'`
|
23
|
+
- Fix: APIConnection.map_all_ids wasn't honoring :refresh
|
24
|
+
- Improvement: Extendable module: only push changed EAs when `update` is called.
|
25
|
+
- Add: Computer objects now have a `last_enrolled` attribute
|
19
26
|
|
20
27
|
## v0.9.3 2017-08-08
|
21
28
|
|
data/lib/jss.rb
CHANGED
@@ -77,6 +77,9 @@ module JSS
|
|
77
77
|
### When parsing a date/time data into a Time object, these will return nil
|
78
78
|
NIL_DATES = [0, nil, '', '0'].freeze
|
79
79
|
|
80
|
+
### Empty strings are used in various places
|
81
|
+
BLANK = ''.freeze
|
82
|
+
|
80
83
|
### Module Variables
|
81
84
|
#####################################
|
82
85
|
|
data/lib/jss/api_connection.rb
CHANGED
@@ -658,7 +658,7 @@ module JSS
|
|
658
658
|
def map_all_ids(class_name, refresh = false, to: nil)
|
659
659
|
raise "'to:' value must be provided for mapping ids." unless to
|
660
660
|
the_class = JSS.api_object_class(class_name)
|
661
|
-
the_class.map_all_ids_to to,
|
661
|
+
the_class.map_all_ids_to to, refresh, api: self
|
662
662
|
end
|
663
663
|
|
664
664
|
# Call the 'valid_id' method on a JSS::APIObject subclass
|
data/lib/jss/api_object.rb
CHANGED
@@ -444,7 +444,7 @@ module JSS
|
|
444
444
|
# pass to .new
|
445
445
|
if arg.is_a? Hash
|
446
446
|
raise ArgumentError, 'Use .make to create new JSS objects' if arg[:id] == :new
|
447
|
-
|
447
|
+
arg[:api] ||= api
|
448
448
|
return new arg
|
449
449
|
end
|
450
450
|
|
@@ -452,7 +452,7 @@ module JSS
|
|
452
452
|
# and if it's result includes the desired value,
|
453
453
|
# the pass they key and arg to .new
|
454
454
|
lookup_key_list_methods.each do |key, method_name|
|
455
|
-
return new
|
455
|
+
return new(key => arg, :api => api) if method_name && send(method_name).include?(arg)
|
456
456
|
end # each key
|
457
457
|
|
458
458
|
# if we're here, we couldn't find a matching object
|
@@ -610,10 +610,10 @@ module JSS
|
|
610
610
|
#
|
611
611
|
def save
|
612
612
|
if @in_jss
|
613
|
-
raise JSS::UnsupportedError, 'Updating this object in the JSS is currently not supported' unless updatable?
|
613
|
+
raise JSS::UnsupportedError, 'Updating this object in the JSS is currently not supported by ruby-jss' unless updatable?
|
614
614
|
update
|
615
615
|
else
|
616
|
-
raise JSS::UnsupportedError, 'Creating this object in the JSS is currently not supported' unless creatable?
|
616
|
+
raise JSS::UnsupportedError, 'Creating this object in the JSS is currently not supported by ruby-jss' unless creatable?
|
617
617
|
create
|
618
618
|
end
|
619
619
|
end
|
@@ -53,8 +53,7 @@ module JSS
|
|
53
53
|
RSRC_BASE = 'advancedmobiledevicesearches'.freeze
|
54
54
|
|
55
55
|
# the hash key used for the JSON list output of all objects in the JSS
|
56
|
-
|
57
|
-
RSRC_LIST_KEY = :advanced_computer_searches
|
56
|
+
RSRC_LIST_KEY = :advanced_mobile_device_searches
|
58
57
|
|
59
58
|
# The hash key used for the JSON object output.
|
60
59
|
# It's also used in various error messages
|
@@ -540,6 +540,9 @@ module JSS
|
|
540
540
|
# @return [Time] the last contact time
|
541
541
|
attr_reader :last_contact_time
|
542
542
|
|
543
|
+
# @return [Time] the last time this machine was enrolled
|
544
|
+
attr_reader :last_enrolled
|
545
|
+
|
543
546
|
# @return [String] the primary macaddress
|
544
547
|
attr_reader :mac_address
|
545
548
|
|
@@ -743,6 +746,7 @@ module JSS
|
|
743
746
|
@barcode_2 = @init_data[:general][:barcode_2]
|
744
747
|
@distribution_point = @init_data[:general][:distribution_point]
|
745
748
|
@initial_entry_date = JSS.epoch_to_time @init_data[:general][:initial_entry_date_epoch]
|
749
|
+
@last_enrolled = JSS.epoch_to_time @init_data[:general][:last_enrolled_date_epoch]
|
746
750
|
@ip_address = @init_data[:general][:ip_address]
|
747
751
|
@jamf_version = @init_data[:general][:jamf_version]
|
748
752
|
@last_contact_time = JSS.epoch_to_time @init_data[:general][:last_contact_time_epoch]
|
@@ -94,7 +94,7 @@ module JSS
|
|
94
94
|
### @return [void]
|
95
95
|
###
|
96
96
|
def criteria= (new_criteria)
|
97
|
-
unless new_criteria.is_a?(Array) && new_criteria.reject{ |c| c.is_a?
|
97
|
+
unless new_criteria.is_a?(Array) && new_criteria.reject{ |c| c.is_a?(JSS::Criteriable::Criterion) }.empty?
|
98
98
|
raise JSS::InvalidDataError, "Argument must be an Array of JSS::Criteriable::Criterion instances."
|
99
99
|
end
|
100
100
|
new_criteria.each{ |nc| criterion_ok? nc }
|
@@ -139,6 +139,11 @@ module JSS
|
|
139
139
|
@ext_attrs[ea[:name]] = ea[:value]
|
140
140
|
|
141
141
|
end # each do ea
|
142
|
+
|
143
|
+
# remember changes as they happen so
|
144
|
+
# we only send changes back to the server.
|
145
|
+
@changed_eas = []
|
146
|
+
|
142
147
|
end
|
143
148
|
|
144
149
|
###
|
@@ -159,6 +164,9 @@ module JSS
|
|
159
164
|
###
|
160
165
|
def set_ext_attr(name, value)
|
161
166
|
|
167
|
+
# if we don't currently have any need to update(cuz we have recently), reset the list of changes to push
|
168
|
+
@changed_eas = [] unless @need_to_update
|
169
|
+
|
162
170
|
# this will raise an exception if the name doesn't exist
|
163
171
|
ea_def = self.class::EXT_ATTRIB_CLASS.new :name => name
|
164
172
|
|
@@ -184,8 +192,9 @@ module JSS
|
|
184
192
|
ea[:value] = value if ea[:name] == name
|
185
193
|
end
|
186
194
|
@ext_attrs[name] = value
|
187
|
-
|
195
|
+
@changed_eas << name
|
188
196
|
@need_to_update = true
|
197
|
+
|
189
198
|
end
|
190
199
|
|
191
200
|
###
|
@@ -195,10 +204,10 @@ module JSS
|
|
195
204
|
### included in the rest_xml of objects that mix-in this module.
|
196
205
|
###
|
197
206
|
def ext_attr_xml
|
198
|
-
|
207
|
+
@changed_eas ||= []
|
199
208
|
eaxml = REXML::Element.new('extension_attributes')
|
200
|
-
|
201
209
|
@extension_attributes.each do |ea|
|
210
|
+
next unless @changed_eas.include? ea[:name]
|
202
211
|
ea_el = eaxml.add_element('extension_attribute')
|
203
212
|
ea_el.add_element('name').text = ea[:name]
|
204
213
|
|
@@ -99,6 +99,9 @@ module JSS
|
|
99
99
|
### These input types can be modified, the others cannot.
|
100
100
|
EDITABLE_INPUT_TYPES = ["Text Field", "Pop-up Menu"]
|
101
101
|
|
102
|
+
### Popup choices can, for now, take empty strings
|
103
|
+
BLANK = ''.freeze
|
104
|
+
|
102
105
|
### Where can it be displayed in the WebApp?
|
103
106
|
### subclasses can add to this list
|
104
107
|
WEB_DISPLAY_CHOICES = [
|
@@ -162,6 +165,8 @@ module JSS
|
|
162
165
|
if @init_data[:input_type]
|
163
166
|
@input_type = @init_data[:input_type][:type] || DEFAULT_INPUT_TYPE
|
164
167
|
@popup_choices = @init_data[:input_type][:popup_choices]
|
168
|
+
# popups can always contain blank
|
169
|
+
@popup_choices << JSS::BLANK if @popup_choices
|
165
170
|
else
|
166
171
|
@input_type = DEFAULT_INPUT_TYPE
|
167
172
|
end
|
@@ -391,7 +396,7 @@ module JSS
|
|
391
396
|
|
392
397
|
begin
|
393
398
|
search_class = self.class::TARGET_CLASS::SEARCH_CLASS
|
394
|
-
acs = search_class.
|
399
|
+
acs = search_class.make name: tmp_advsrch, api: @api
|
395
400
|
acs.display_fields = self.class::TARGET_CLASS == JSS::User ? [@name, USERNAME_FIELD] : [@name, USERNAME_FIELD, LAST_RECON_FIELD]
|
396
401
|
|
397
402
|
# search for 'Username like "" ' because all searchable object classes have a "Username" value
|
@@ -416,7 +421,7 @@ module JSS
|
|
416
421
|
|
417
422
|
ensure
|
418
423
|
if defined? acs
|
419
|
-
acs.delete
|
424
|
+
acs.delete if acs
|
420
425
|
else
|
421
426
|
search_class.fetch(:name => tmp_advsrch, api: @api).delete if search_class.all_names(:refresh, api: @api).include? tmp_advsrch
|
422
427
|
end
|
data/lib/jss/api_object/group.rb
CHANGED
@@ -279,7 +279,7 @@ module JSS
|
|
279
279
|
def remove_member(m)
|
280
280
|
raise InvalidDataError, "Smart group members can't be changed." if @is_smart
|
281
281
|
|
282
|
-
if @members.reject!{ |mm| [mm[:id], mm[:name]].include? m }
|
282
|
+
if @members.reject!{ |mm| [mm[:id], mm[:name], mm[:username]].include? m }
|
283
283
|
@need_to_update = true
|
284
284
|
else
|
285
285
|
raise JSS::NoSuchItemError, "No member matches '#{m}'"
|
data/lib/jss/ruby_extensions.rb
CHANGED
@@ -27,7 +27,6 @@
|
|
27
27
|
### if they are type coercions, "to_jss_"
|
28
28
|
###
|
29
29
|
|
30
|
-
###
|
31
30
|
require "jss/ruby_extensions/filetest.rb"
|
32
31
|
require "jss/ruby_extensions/hash.rb"
|
33
32
|
require "jss/ruby_extensions/ipaddr.rb"
|
@@ -35,3 +34,4 @@ require "jss/ruby_extensions/object.rb"
|
|
35
34
|
require "jss/ruby_extensions/pathname.rb"
|
36
35
|
require "jss/ruby_extensions/time.rb"
|
37
36
|
require "jss/ruby_extensions/string.rb"
|
37
|
+
require "jss/ruby_extensions/array.rb"
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# Copyright 2017 Pixar
|
2
|
+
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "Apache License")
|
5
|
+
# with the following modification; you may not use this file except in
|
6
|
+
# compliance with the Apache License and the following modification to it:
|
7
|
+
# Section 6. Trademarks. is deleted and replaced with:
|
8
|
+
#
|
9
|
+
# 6. Trademarks. This License does not grant permission to use the trade
|
10
|
+
# names, trademarks, service marks, or product names of the Licensor
|
11
|
+
# and its affiliates, except as required to comply with Section 4(c) of
|
12
|
+
# the License and to reproduce the content of the NOTICE file.
|
13
|
+
#
|
14
|
+
# You may obtain a copy of the Apache License at
|
15
|
+
#
|
16
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
17
|
+
#
|
18
|
+
# Unless required by applicable law or agreed to in writing, software
|
19
|
+
# distributed under the Apache License with the above modification is
|
20
|
+
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
21
|
+
# KIND, either express or implied. See the Apache License for the specific
|
22
|
+
# language governing permissions and limitations under the Apache License.
|
23
|
+
#
|
24
|
+
#
|
25
|
+
|
26
|
+
#
|
27
|
+
class Array
|
28
|
+
|
29
|
+
# A case-insensitive version of #include? for Arrays of Strings.
|
30
|
+
#
|
31
|
+
# @param somestring [String] the String to search for
|
32
|
+
#
|
33
|
+
# @return [Boolean] Does the Array contain the String, ignoring case?
|
34
|
+
#
|
35
|
+
def jss_ci_include_string?(somestring)
|
36
|
+
any? { |s| s.to_s.casecmp(somestring).zero? }
|
37
|
+
end
|
38
|
+
|
39
|
+
# Fetch a string from an Array of Strings case-insensitively,
|
40
|
+
# e.g. my_array.jss_ci_fetch_string('ThRashEer') will return 'thrasher'
|
41
|
+
# or nil if no match
|
42
|
+
#
|
43
|
+
# @param somestring [String] the String to search for
|
44
|
+
#
|
45
|
+
# @return [String, nil] The matching string as it exists in the Array, nil if it doesn't exist
|
46
|
+
#
|
47
|
+
def jss_ci_fetch_string(somestring)
|
48
|
+
idx = index { |s| s.to_s.casecmp(somestring).zero? }
|
49
|
+
idx ? self[idx] : nil
|
50
|
+
end
|
51
|
+
|
52
|
+
end # class
|
data/lib/jss/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-jss
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.10.
|
4
|
+
version: 0.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Lasell
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-
|
12
|
+
date: 2017-10-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: plist
|
@@ -172,6 +172,7 @@ files:
|
|
172
172
|
- lib/jss/db_connection.rb
|
173
173
|
- lib/jss/exceptions.rb
|
174
174
|
- lib/jss/ruby_extensions.rb
|
175
|
+
- lib/jss/ruby_extensions/array.rb
|
175
176
|
- lib/jss/ruby_extensions/filetest.rb
|
176
177
|
- lib/jss/ruby_extensions/hash.rb
|
177
178
|
- lib/jss/ruby_extensions/ipaddr.rb
|
@@ -204,9 +205,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
204
205
|
version: 1.9.3
|
205
206
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
206
207
|
requirements:
|
207
|
-
- - "
|
208
|
+
- - ">="
|
208
209
|
- !ruby/object:Gem::Version
|
209
|
-
version:
|
210
|
+
version: '0'
|
210
211
|
requirements: []
|
211
212
|
rubyforge_project:
|
212
213
|
rubygems_version: 2.6.8
|