depot3 3.0.9 → 3.0.11

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.
@@ -110,7 +110,7 @@ Installation prohibited by process: #{@prohibiting_process or 'None'}
110
110
  Auto installed for groups: #{auto_disp.empty? ? 'None' : auto_disp}
111
111
  Excluded for groups: #{excl_disp.empty? ? 'None' : excl_disp}
112
112
  Expiration period: #{@expiration.to_i} days
113
- Expiration path: #{@expiration_path}
113
+ Expiration path(s): #{D3::Database::ARRAY_OF_PATHNAMES_TO_COMMA_STRING.call @expiration_paths}
114
114
  Released by: #{@released_by or '-'}
115
115
  Release date: #{@release_date ? @release_date.strftime('%Y-%m-%d') : '-'}
116
116
  END_DEETS
@@ -77,7 +77,7 @@ module D3
77
77
  :pre_remove_script_id => @pre_remove_script_id,
78
78
  :post_remove_script_id => @post_remove_script_id,
79
79
  :expiration => @expiration_to_apply.to_i,
80
- :expiration_path => @expiration_path,
80
+ :expiration_paths => @expiration_paths,
81
81
  :custom_expiration => @custom_expiration,
82
82
  :prohibiting_process => @prohibiting_process)
83
83
 
@@ -81,7 +81,7 @@ module D3
81
81
  ### @return [Boolean] Does this pkg expire by default?
82
82
  ###
83
83
  def expires?
84
- @expiration.to_i > 0 && @expiration_path
84
+ @expiration.to_i > 0 && @expiration_paths
85
85
  end
86
86
 
87
87
  ### @return [Boolean] Is this pkg 'indexed' in the jss, so that it can be removable?
@@ -328,7 +328,7 @@ INSERT INTO #{P_TABLE[:table_name]} (
328
328
  #### First the deprecated pkgs
329
329
 
330
330
  # the id's of the deprecated pkgs for this basename, in numerical order
331
- # the last ones are the newest.
331
+ # the last ones are the newest.
332
332
  deprecated_ids = D3::Package.deprecated_data.values.select{|dp| dp[:basename] == @basename}
333
333
  deprecated_ids.map!{|dp| dp[:id] }.sort!
334
334
 
@@ -342,14 +342,14 @@ INSERT INTO #{P_TABLE[:table_name]} (
342
342
  deprecated_ids_to_keep = []
343
343
  number_deprecated_to_keep.times{ deprecated_ids_to_keep << deprecated_ids.pop }
344
344
  deprecated_ids_to_keep.compact!
345
-
345
+
346
346
  # delete them if we should
347
347
  deprecated_ids.each do |id|
348
348
  next if deprecated_ids_to_keep.include? id
349
349
  victim = D3::Package.new(:id => id)
350
350
  victim.delete(
351
351
  admin: admin,
352
- delete_scripts: true,
352
+ keep_scripts: false,
353
353
  keep_in_jss: false,
354
354
  rwpw: D3::Admin::Auth.rw_credentials(:dist)[:password]
355
355
  )
@@ -381,7 +381,7 @@ INSERT INTO #{P_TABLE[:table_name]} (
381
381
  victim = D3::Package.new(:id => id)
382
382
  victim.delete(
383
383
  admin: admin,
384
- delete_scripts: true,
384
+ keep_scripts: false,
385
385
  keep_in_jss: false,
386
386
  rwpw: D3::Admin::Auth.rw_credentials(:dist)[:password]
387
387
  )
@@ -395,7 +395,7 @@ INSERT INTO #{P_TABLE[:table_name]} (
395
395
  ###
396
396
  ### @param keep_in_jss[Boolean] should we keep the JSS package around? defaults to false
397
397
  ###
398
- ### @param delete_scripts[Boolean] should the related scripts also be deleted?
398
+ ### @param keep_scripts[Boolean] should the related scripts be kept in the JSS?
399
399
  ###
400
400
  ### @param admin[String] who's doing this?
401
401
  ###
@@ -403,9 +403,9 @@ INSERT INTO #{P_TABLE[:table_name]} (
403
403
  ###
404
404
  ### @return [Array<String>] a textual list of scripts delted and not
405
405
  ### deleted because they're in use by other d3 pkgs or casper policies
406
- ### (empty if delete_scripts is false)
406
+ ### (empty if keep_scripts is true)
407
407
  ###
408
- def delete (keep_in_jss: false, delete_scripts: false, admin: @admin, rwpw: nil)
408
+ def delete (keep_in_jss: false, keep_scripts: false, admin: @admin, rwpw: nil)
409
409
 
410
410
  unless keep_in_jss
411
411
  # raise an exception if any polcies are using this pkg.
@@ -419,8 +419,8 @@ INSERT INTO #{P_TABLE[:table_name]} (
419
419
  # use @ admin if its defined and needed
420
420
  admin ||= @admin
421
421
 
422
- # if delete_scripts
423
- script_actions = delete_scripts ? delete_pkg_scripts : []
422
+ # delete scripts or not? the result is an array of what happened.
423
+ script_actions = keep_scripts ? [] : delete_pkg_scripts
424
424
 
425
425
  # delete it from the pakcages table
426
426
  stmt = JSS::DB_CNX.db.prepare "DELETE FROM #{P_TABLE[:table_name]} WHERE #{P_FIELDS[:id][:field_name]} = '#{@id}'"
@@ -93,7 +93,7 @@ module D3
93
93
 
94
94
  ### Set the expiration period for all installs of this pkg.
95
95
  ### Once installed, if this many days go by without
96
- ### the @expiration_path being launched, as noted by casper's the pkg
96
+ ### the @expiration_paths being launched, as noted by d3repoman, the pkg
97
97
  ### will be silently uninstalled.
98
98
  ###
99
99
  ### Use nil, false, or 0 (the default) to prevent expiration.
@@ -115,24 +115,51 @@ module D3
115
115
  @need_to_update_d3 = true unless @initializing
116
116
  end # expiration =
117
117
 
118
- ### Set the expiration path for this pkg.
119
- ### This is the path to the app that must be launched
120
- ### at least once every @expiration days to prevent
118
+ ### Set the expiration paths for this pkg.
119
+ ### These are abosulute paths to executables one of which must be brought to the
120
+ ### foreground at least once every @expiration days to prevent
121
121
  ### silent un-installing of this package.
122
122
  ###
123
- ### This is the path as recorded in Casper's application usage logs.
124
- ### @example "/Applications/FileMaker Pro 11/FileMaker Pro.app"
123
+ ### The paths are those recorded in d3RepoMan's timestamp plists.
124
+ ### @example "/Applications/FileMaker Pro 11/FileMaker Pro.app/Contents/MacOS/Filemaker Pro"
125
125
  ###
126
- ### @param new_val[String] The path to the application
126
+ ### @param new_val[String,Pathname,Array<String,Pathname>] The expiration paths.
127
+ ### A Pathname for a single path, a String for single, or multiple
128
+ ### (comma-separated) or an Array of Strings or Pathnames for single paths.
129
+ ### Each path must be an absolute path starting with a /
127
130
  ###
128
131
  ### @return [void]
129
132
  ###
130
- def expiration_path= (new_val = @expiration_path)
131
- return @expiration_path if new_val == @expiration_path
132
- @expiration_path = validate_expiration_path (new_val)
133
+ def expiration_paths= (new_val = @expiration_paths)
134
+ return @expiration_paths if new_val == @expiration_paths
135
+ @expiration_paths = validate_expiration_paths (new_val)
133
136
  @need_to_update_d3 = true unless @initializing
134
137
  end # expiration =
135
138
 
139
+ ### Add a path to expiration_paths
140
+ ### @param new_val[String,Pathname]
141
+ ###
142
+ ### The paths are those recorded in d3RepoMan's timestamp plists.
143
+ ### @example "/Applications/FileMaker Pro 11/FileMaker Pro.app/Contents/MacOS/Filemaker Pro"
144
+ ###
145
+ def add_expiration_path (path)
146
+ path = validate_expiration_path(path)
147
+ @expiration_paths << path
148
+ @need_to_update_d3 = true unless @initializing
149
+ end # add_expiration_path
150
+
151
+ ### Remove a path from expiration_paths
152
+ ### @param new_val[String,Pathname]
153
+ ###
154
+ ### The paths are those recorded in d3RepoMan's timestamp plists.
155
+ ### @example "/Applications/FileMaker Pro 11/FileMaker Pro.app/Contents/MacOS/Filemaker Pro"
156
+ ###
157
+ def remove_expiration_path (path)
158
+ @expiration_paths.delete Pathname.new(path)
159
+ @need_to_update_d3 = true unless @initializing
160
+ end # remove_expiration_path
161
+
162
+
136
163
  ### Set the prohibiting process for this installer.
137
164
  ###
138
165
  ### The value of this attribute is compared at install time to the lines output
@@ -346,7 +346,7 @@ module D3
346
346
  ### @return [Symbol] the valid CPU type
347
347
  ###
348
348
  def validate_cpu_type (type)
349
- type = JSS::Package::DEFAULT_CPU_TYPE if type.to_s.empty?
349
+ type = JSS::Package::DEFAULT_PROCESSOR if type.to_s.empty?
350
350
  type = "None" if type =~ /^n(one)?$/i
351
351
  type = "x86" if type.casecmp('intel') == 0
352
352
  type = "ppc" if type.casecmp('ppc') == 0
@@ -428,21 +428,40 @@ module D3
428
428
  exp.to_i
429
429
  end
430
430
 
431
+ ### Confirm the validity of one or more expiration paths.
432
+ ### Any string that starts with a / is valid.
433
+ ### The strings "n" or "none" returns an empty array.
434
+ ###
435
+ ### @param paths[Pathname, String, Array<String,Pathname>] the path(s) to check
436
+ ###
437
+ ### @return [Array<Pathname>] the valid path
438
+ ###
439
+ def validate_expiration_paths (paths)
440
+ return [] if paths.to_s.empty? or paths.to_s =~ /^n(one)?$/i
441
+
442
+ paths = paths.chomp.split(/\s*,\s*/) if paths.is_a? String
443
+
444
+ if paths.is_a? Array
445
+ return paths.map!{|p| validate_expiration_path p}
446
+ else
447
+ return [validate_expiration_path(paths)]
448
+ end
449
+ end
450
+
431
451
  ### Confirm the validity of an expiration path.
432
- ### any string that starts with a / is valid.
452
+ ### Any string that starts with a / is valid, d3 can't confirm
453
+ ### the paths existing on client machines.
433
454
  ###
434
- ### @param path[Pathname, String] the path to check
455
+ ### @param paths[Pathname, String] the path to check
435
456
  ###
436
- ### @return [Pathname, nil] the valid path
457
+ ### @return [Pathname] the valid path
437
458
  ###
438
459
  def validate_expiration_path (path)
439
460
  path = path.to_s
440
- return nil if path.empty?
441
461
  raise JSS::InvalidDataError, "Expiration Path must be a full path starting with /." unless path.start_with? "/"
442
462
  Pathname.new path
443
463
  end
444
464
 
445
-
446
465
  end # module Validate
447
466
 
448
467
  end # class package
data/lib/d3/version.rb CHANGED
@@ -25,5 +25,5 @@
25
25
 
26
26
  ###
27
27
  module D3
28
- VERSION = '3.0.9'
28
+ VERSION = '3.0.11'
29
29
  end # module
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: depot3
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.9
4
+ version: 3.0.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Lasell
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-04-12 00:00:00.000000000 Z
11
+ date: 2016-08-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ruby-keychain