depot3 0.0.0a1 → 3.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (112) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +55 -1
  3. data/bin/d3 +323 -0
  4. data/bin/d3admin +1011 -0
  5. data/bin/d3helper +354 -0
  6. data/bin/puppytime +334 -0
  7. data/data/d3/com.pixar.d3.RepoMan.plist +23 -0
  8. data/data/d3/d3.conf.example +507 -0
  9. data/data/d3/d3RepoMan.app/Contents/Frameworks/libswiftAppKit.dylib +0 -0
  10. data/data/d3/d3RepoMan.app/Contents/Frameworks/libswiftCore.dylib +0 -0
  11. data/data/d3/d3RepoMan.app/Contents/Frameworks/libswiftCoreData.dylib +0 -0
  12. data/data/d3/d3RepoMan.app/Contents/Frameworks/libswiftCoreGraphics.dylib +0 -0
  13. data/data/d3/d3RepoMan.app/Contents/Frameworks/libswiftCoreImage.dylib +0 -0
  14. data/data/d3/d3RepoMan.app/Contents/Frameworks/libswiftDarwin.dylib +0 -0
  15. data/data/d3/d3RepoMan.app/Contents/Frameworks/libswiftDispatch.dylib +0 -0
  16. data/data/d3/d3RepoMan.app/Contents/Frameworks/libswiftFoundation.dylib +0 -0
  17. data/data/d3/d3RepoMan.app/Contents/Frameworks/libswiftObjectiveC.dylib +0 -0
  18. data/data/d3/d3RepoMan.app/Contents/Info.plist +56 -0
  19. data/data/d3/d3RepoMan.app/Contents/MacOS/d3RepoMan +0 -0
  20. data/data/d3/d3RepoMan.app/Contents/PkgInfo +1 -0
  21. data/data/d3/d3RepoMan.app/Contents/Resources/Base.lproj/MainMenu.nib +0 -0
  22. data/data/d3/d3RepoMan.app/Contents/Resources/last-foreground-times-template.plist +5 -0
  23. data/data/d3/d3RepoMan.app/Contents/_CodeSignature/CodeResources +214 -0
  24. data/data/d3/puppytime/ImageLicenses.txt +165 -0
  25. data/data/d3/puppytime/notification_image +1 -0
  26. data/data/d3/puppytime/opt_out_image +1 -0
  27. data/data/d3/puppytime/slideshow/2008-07-11_White_German_Shepherd_pup_chilling_at_the_Coker_Arboretum.jpg +0 -0
  28. data/data/d3/puppytime/slideshow/2009-04-21_APBT_pup_on_deck.jpg +0 -0
  29. data/data/d3/puppytime/slideshow/A_puppy_Yorkie.jpg +0 -0
  30. data/data/d3/puppytime/slideshow/Alert_Pug_Puppy.jpg +0 -0
  31. data/data/d3/puppytime/slideshow/Australian_Cattle_Dog_puppies_04.JPG +0 -0
  32. data/data/d3/puppytime/slideshow/Beagle_puppy_Cadet.jpg +0 -0
  33. data/data/d3/puppytime/slideshow/Bernese_Mountain_Dog.jpg +0 -0
  34. data/data/d3/puppytime/slideshow/Bloodhound_Puppy.jpg +0 -0
  35. data/data/d3/puppytime/slideshow/Boston_terrier_with_toy.jpg +0 -0
  36. data/data/d3/puppytime/slideshow/Boxer_puppy_fawn_portrai.jpg +0 -0
  37. data/data/d3/puppytime/slideshow/Caracal_kitten.jpg +0 -0
  38. data/data/d3/puppytime/slideshow/Chihuahua_&_Doberman_Pup.jpg +0 -0
  39. data/data/d3/puppytime/slideshow/Cuccioli_di_Margot_a_35_gg_Basenjis.jpg +0 -0
  40. data/data/d3/puppytime/slideshow/Dalmatian_puppy_03.jpg +0 -0
  41. data/data/d3/puppytime/slideshow/GoldenRetrieverPuppyDaisyParker.JPG +0 -0
  42. data/data/d3/puppytime/slideshow/Green_eyed_beige_Chihuahua.jpg +0 -0
  43. data/data/d3/puppytime/slideshow/Let_Sleeping_Dogs_Lie.jpg +0 -0
  44. data/data/d3/puppytime/slideshow/Meatball_-_French_Bulldog_Puppy.jpg +0 -0
  45. data/data/d3/puppytime/slideshow/Oola_-_9_weeks.jpg +0 -0
  46. data/data/d3/puppytime/slideshow/Pancho0008.JPG +0 -0
  47. data/data/d3/puppytime/slideshow/Pomeranian_orange-sable_Coco.jpg +0 -0
  48. data/data/d3/puppytime/slideshow/Pug_puppy_001.jpg +0 -0
  49. data/data/d3/puppytime/slideshow/Puggle_puppy_6_weeks.JPG +0 -0
  50. data/data/d3/puppytime/slideshow/Puli_kan.jpg +0 -0
  51. data/data/d3/puppytime/slideshow/Puppy_French_Bulldog.jpg +0 -0
  52. data/data/d3/puppytime/slideshow/Rocco_the_Bulldog.jpg +0 -0
  53. data/data/d3/puppytime/slideshow/Rottweiler_Face.jpg +0 -0
  54. data/data/d3/puppytime/slideshow/Saint_Bernard_puppy.jpg +0 -0
  55. data/data/d3/puppytime/slideshow/Scottish_froment.jpg +0 -0
  56. data/data/d3/puppytime/slideshow/Shar_pei_puppy_(age_2_months).jpg +0 -0
  57. data/data/d3/puppytime/slideshow/Shiba-Inu_beim_Spielen_im_Schnee.JPG +0 -0
  58. data/data/d3/puppytime/slideshow/Smooth-coat_Border_Collie_puppy..jpg +0 -0
  59. data/data/d3/puppytime/slideshow/Smooth_Dachshund_puppies.jpg +0 -0
  60. data/data/d3/puppytime/slideshow/Snow_dog.jpg +0 -0
  61. data/data/d3/puppytime/slideshow/Taylor_the_Pembroke_Welsh_Corgi.png +0 -0
  62. data/data/d3/puppytime/slideshow/Weim_Pups_001.jpg +0 -0
  63. data/data/d3/puppytime/slideshow/Westie_pups.jpg +0 -0
  64. data/data/d3/puppytime/slideshow/Yellow_Labrador_puppies_(4165737325).jpg +0 -0
  65. data/lib/d3/admin/add.rb +451 -0
  66. data/lib/d3/admin/auth.rb +470 -0
  67. data/lib/d3/admin/edit.rb +297 -0
  68. data/lib/d3/admin/help.rb +396 -0
  69. data/lib/d3/admin/interactive.rb +972 -0
  70. data/lib/d3/admin/options.rb +454 -0
  71. data/lib/d3/admin/prefs.rb +204 -0
  72. data/lib/d3/admin/report.rb +727 -0
  73. data/lib/d3/admin/state.rb +42 -0
  74. data/lib/d3/admin/validate.rb +413 -0
  75. data/lib/d3/admin.rb +42 -0
  76. data/lib/d3/basename.rb +217 -0
  77. data/lib/d3/client/auth.rb +108 -0
  78. data/lib/d3/client/class_methods.rb +766 -0
  79. data/lib/d3/client/class_variables.rb +47 -0
  80. data/lib/d3/client/cli.rb +187 -0
  81. data/lib/d3/client/environment.rb +134 -0
  82. data/lib/d3/client/help.rb +110 -0
  83. data/lib/d3/client/lists.rb +314 -0
  84. data/lib/d3/client/receipt.rb +1173 -0
  85. data/lib/d3/client.rb +45 -0
  86. data/lib/d3/configuration.rb +319 -0
  87. data/lib/d3/constants.rb +60 -0
  88. data/lib/d3/database.rb +488 -0
  89. data/lib/d3/exceptions.rb +44 -0
  90. data/lib/d3/log.rb +271 -0
  91. data/lib/d3/package/aliases.rb +80 -0
  92. data/lib/d3/package/attributes.rb +97 -0
  93. data/lib/d3/package/class_methods.rb +817 -0
  94. data/lib/d3/package/class_variables.rb +46 -0
  95. data/lib/d3/package/client_actions.rb +293 -0
  96. data/lib/d3/package/constants.rb +58 -0
  97. data/lib/d3/package/constructor.rb +191 -0
  98. data/lib/d3/package/getters.rb +164 -0
  99. data/lib/d3/package/mixins.rb +39 -0
  100. data/lib/d3/package/private_methods.rb +227 -0
  101. data/lib/d3/package/questions.rb +95 -0
  102. data/lib/d3/package/server_actions.rb +683 -0
  103. data/lib/d3/package/setters.rb +326 -0
  104. data/lib/d3/package/validate.rb +448 -0
  105. data/lib/d3/package.rb +51 -0
  106. data/lib/d3/puppytime/pending_puppy.rb +108 -0
  107. data/lib/d3/puppytime/puppy_queue.rb +274 -0
  108. data/lib/d3/puppytime.rb +68 -0
  109. data/lib/d3/state.rb +105 -0
  110. data/lib/d3/utility.rb +325 -0
  111. data/lib/d3/version.rb +1 -1
  112. metadata +162 -9
data/lib/d3/utility.rb ADDED
@@ -0,0 +1,325 @@
1
+ ### Copyright 2016 Pixar
2
+ ###
3
+ ### Licensed under the Apache License, Version 2.0 (the "Apache License")
4
+ ### with the following modification; you may not use this file except in
5
+ ### compliance with the Apache License and the following modification to it:
6
+ ### Section 6. Trademarks. is deleted and replaced with:
7
+ ###
8
+ ### 6. Trademarks. This License does not grant permission to use the trade
9
+ ### names, trademarks, service marks, or product names of the Licensor
10
+ ### and its affiliates, except as required to comply with Section 4(c) of
11
+ ### the License and to reproduce the content of the NOTICE file.
12
+ ###
13
+ ### You may obtain a copy of the Apache License at
14
+ ###
15
+ ### http://www.apache.org/licenses/LICENSE-2.0
16
+ ###
17
+ ### Unless required by applicable law or agreed to in writing, software
18
+ ### distributed under the Apache License with the above modification is
19
+ ### distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
20
+ ### KIND, either express or implied. See the Apache License for the specific
21
+ ### language governing permissions and limitations under the Apache License.
22
+ ###
23
+ ###
24
+
25
+
26
+ module D3
27
+
28
+
29
+ ### Is there a process running that would prevent un/installation?
30
+ ###
31
+ ### @return [Boolean]
32
+ ###
33
+ def self.prohibited_by_process_running? (xproc)
34
+ `/bin/ps -A -c -o comm`.lines.each do |ps_line|
35
+ return true if ps_line.strip.casecmp(xproc) == 0
36
+ end
37
+ return false
38
+ end #
39
+
40
+ ### Try to figure out the login name of the admin
41
+ ### running this code
42
+ ###
43
+ def self.admin (refresh = false)
44
+
45
+ no_good = self.badmins
46
+
47
+ # use the USER if it's valid
48
+ admin = ENV['USER']
49
+
50
+ # otherwise, try SUDO_USER
51
+ admin = ENV['SUDO_USER'] if no_good.include? admin
52
+
53
+ # otherwise, try SSH_CLIENT_USER
54
+ admin = ENV['SSH_CLIENT_USER'] if no_good.include? admin
55
+
56
+ # otherwise, use the default, which might still be bad
57
+ admin = DFT_CLI_ADMIN if no_good.include? admin
58
+
59
+ return admin
60
+ end # get admin name
61
+
62
+ ### The list of names not allowed as the --admin option in
63
+ ### d3 and d3admin
64
+ ###
65
+ ### This just combines DISALLOWED_ADMINS and
66
+ ### D3::CONFIG.client_prohibited_admin_names
67
+ ###
68
+ ### @return [Array] list of admins not allowed.
69
+ ###
70
+ def self.badmins
71
+ return D3::DISALLOWED_ADMINS unless D3::CONFIG.client_prohibited_admin_names
72
+ return D3::DISALLOWED_ADMINS + D3::CONFIG.client_prohibited_admin_names
73
+ end
74
+
75
+ ### Run a Casper policy on the local machine
76
+ ###
77
+ ### @param policy[String,Integer] the custom-trigger, name, or id of the policy
78
+ ###
79
+ ### @param type[Symbol] the type of policy being run, e.g. :expiration
80
+ ###
81
+ ### @param verbose[Boolean] should we be verbose?
82
+ ###
83
+ ### @return [boolean] Did the policy run?
84
+ ###
85
+ def self.run_policy (policy, type, verbose = false)
86
+ D3.log "Running #{type} policy", :info
87
+ # if numeric, and there's a policy with that id
88
+ if policy =~ /^\d+$/ and polname = JSS::Policy.map_all_ids_to(:name)[policy]
89
+ D3.log "Executing #{type} policy '#{polname}', id: #{policy}", :debug
90
+ pol_to_run = "-id #{policy}"
91
+ # if there's a policy with that name
92
+ elsif polid = JSS::Policy.map_all_ids_to(:name).invert[policy]
93
+ D3.log "Executing #{type} policy '#{policy}', id: #{polid}", :debug
94
+ pol_to_run = "-id #{polid}"
95
+ # else assume its a trigger
96
+ else
97
+ D3.log "Executing #{type} policy with trigger '#{policy}'", :debug
98
+ pol_to_run = "-event '#{policy}'"
99
+ end
100
+
101
+ output = JSS::Client.run_jamf "policy", pol_to_run, verbose
102
+ if D3::LOG.level == :debug
103
+ D3.log "Policy execution output:", :debug
104
+ output.lines.each{|l| D3.log " #{l.chomp}", :debug}
105
+ end
106
+
107
+ if output.include? "No policies were found for the"
108
+ D3.log "No policy matching '#{policy}' was found in the JSS", :warn
109
+ return false
110
+ else
111
+ D3.log "Done executing #{type} policy", :debug
112
+ return true
113
+ end
114
+ end #run policy
115
+
116
+ ### Get the ids of all scripts used by all policies
117
+ ### This is a hash of PolicyName => Array of Script id's
118
+ ### @return [Hash{String => Array<Integer>}]
119
+ ###
120
+ def self.policy_scripts
121
+ qry = <<-ENDQ
122
+ SELECT p.name, GROUP_CONCAT(ps.script_id) AS script_ids
123
+ FROM policies p
124
+ JOIN policy_scripts ps
125
+ ON p.policy_id = ps.policy_id
126
+ GROUP BY p.policy_id
127
+ ENDQ
128
+ res = JSS::DB_CNX.db.query qry
129
+ p_scripts = {}
130
+ res.each{|r| p_scripts[r[0]] = r[1].split(/,\s*/).map{|id| id.to_i} }
131
+ p_scripts
132
+ end
133
+
134
+
135
+ ### Generate a report of columned data, either fixed-width or tab-delimited.
136
+ ### The title line(s) are pre-pended with '# ' for easier exclusion when using
137
+ ### the report as input for some other program. If the :type is :fixed, so
138
+ ### will the column header line.
139
+ ###
140
+ ### @param lines[Array<Array>] the rows and columns of data
141
+ ###
142
+ ### @param type[Symbol] :fixed or :tab, defaults to :fixed
143
+ ###
144
+ ### @param args[Hash] the options for the report
145
+ ###
146
+ ### @options args :title[String] a descriptive text or title, shown above the
147
+ ### column headers. Every line is pre-pended with '# '.
148
+ ### Only used on :fixed reports.
149
+ ###
150
+ ### @option args :header_row[Array<String>,nil] the column headers. optional.
151
+ ###
152
+ ### @return [String] the formatted report.
153
+ ###
154
+ def self.generate_report (lines, type: :fixed, header_row: [], **args)
155
+ raise JSS::InvalidDataError, "The first argument must be an Array of Arrays" unless lines.is_a? Array
156
+ raise JSS::InvalidDataError, "The header_row must be an Array" unless header_row.is_a? Array
157
+
158
+ return "" if lines.empty?
159
+
160
+ # tab delim is easy
161
+ if type== :tab
162
+ report_tab = header_row.join("\t")
163
+ lines.each{|line| report_tab += "\n#{line.join("\t")}" }
164
+ return report_tab.strip
165
+ end # if :tab
166
+
167
+ # below here, fixed width
168
+ format = ""
169
+ line_width = 0
170
+ header_row[0] = "# #{header_row[0]}"
171
+
172
+ self.col_widths(lines, header_row).each do |w|
173
+ # make sure there's a space between columns
174
+ col_width = w + 1
175
+
176
+ # add the column to the printf format
177
+ format += "%-#{col_width}s"
178
+ line_width += col_width
179
+ end
180
+ format += "\n"
181
+
182
+ # limit the total line width for the header the width of the terminal
183
+ if IO.console
184
+ height, width = IO.console.winsize
185
+ line_width = width if line_width > width
186
+ else
187
+ line_width = 80
188
+ end
189
+
190
+ # title if given
191
+ report = args[:title] ? "# #{args[:title]}\n" : ""
192
+
193
+ unless header_row.empty?
194
+ raise JSS::InvalidDataError, "Header row must have #{lines[0].count} items" unless header_row.count == lines[0].count
195
+ # then the header line if given
196
+ report += format % header_row
197
+ # add a separator
198
+ report += "#" + ("-" * (line_width -1)) + "\n"
199
+ end
200
+ # add the rows
201
+ lines.each { |line| report += format % line }
202
+
203
+ return report
204
+ end # generate report
205
+
206
+ ### Given an Array of Arrays representing rows and columns of data
207
+ ### figure out the widest width of each column and return an array
208
+ ### of integers representing those widths
209
+ ###
210
+ ### @param data_array[Array<Array>] The rows and columns of data
211
+ ###
212
+ ### @param header_row[Array] An optional header row to include in the
213
+ ### width calculation.
214
+ ###
215
+ ### @return [Array<Integer>] the max widths of each column of data.
216
+ ###
217
+ def self.col_widths (data, header_row = [])
218
+ widths = header_row.map{|c| c.to_s.length}
219
+ data.each do |row|
220
+ row.each_index do |col|
221
+ this_width = row[col].to_s.length
222
+ widths[col] = this_width if this_width > widths[col].to_i
223
+ end # do field
224
+ end # do line
225
+ widths
226
+ end
227
+
228
+ ### Send a string to the terminal, possibly piping it through 'less'
229
+ ### if the number of lines is greater than the number of terminal lines
230
+ ### minus 3
231
+ ###
232
+ ### @param text[String] the text to send to the terminal
233
+ ###
234
+ ### @param show_help[Boolean] should the text have a line at the top
235
+ ### showing basic 'less' key commands.
236
+ ###
237
+ ### @result [void]
238
+ ###
239
+ def self.less_text (text, show_help = true)
240
+ unless IO.console
241
+ puts text
242
+ return
243
+ end
244
+
245
+ height, width = IO.console.winsize
246
+
247
+ if text.lines.count <= (height - 3)
248
+ puts text
249
+ return
250
+ end
251
+
252
+ if show_help
253
+ help = "#------' ' next, 'b' prev, 'q' exit, 'h' help ------"
254
+ text = "#{help}\n#{text}"
255
+ end
256
+
257
+ # point stdout through less, print, then restore stdout
258
+ less = IO.popen("/usr/bin/less","w")
259
+ begin
260
+ less.puts text
261
+
262
+ # this catches the quitting of 'less' before all the output
263
+ # is displayed
264
+ rescue Errno::EPIPE => e
265
+ true
266
+ ensure
267
+ less.close
268
+ end
269
+ end
270
+
271
+ ### Parse a plist into a Ruby data structure.
272
+ ### This enhances Plist::parse_xml taking file paths, as well as XML Strings
273
+ ### and reading the files regardless of binary/XML format.
274
+ ###
275
+ ### see JSS::parse_plsit
276
+ ### TODO - make all calls to this go directly to JSS.parse_plist
277
+ ###
278
+ ### @param plist[Pathname, String] the plist XML, or the path to a plist file
279
+ ###
280
+ ### @return [Object] the parsed plist as a ruby hash,array, etc.
281
+ ###
282
+ def self.parse_plist (plist)
283
+ JSS.parse_plist plist
284
+ end # parse_plist
285
+
286
+ ### Reconnect to both the API and DB with a much larger timeout, and
287
+ ### using an alternate DB server if one is defined. Should be used
288
+ ### by either the D3::Client for lists, or D3::Admin for reports,
289
+ ### with appropriate credentials.
290
+ ###
291
+ ### @param api_user[String] the user for the api connection
292
+ ###
293
+ ### @param api_pw[String the pw for the api user
294
+ ###
295
+ ### @param db_user[String] the user for the db connection
296
+ ###
297
+ ### @param db_pw[String the pw for the db user
298
+ ###
299
+ ### @return [Hash<String>] the hostnames of the connected JSS & MySQL servers
300
+ ###
301
+ def self.connect_for_reports(api_user, api_pw, db_user, db_pw)
302
+
303
+ JSS::API.connect :user => api_user, :pw => api_pw, :timeout => REPORT_CONNECTION_TIMEOUT
304
+
305
+ if D3::CONFIG.report_db_server
306
+ begin
307
+ JSS::DB_CNX.connect(
308
+ :server => D3::CONFIG.report_db_server,
309
+ :user => db_user,
310
+ :pw => db_pw,
311
+ :timeout => REPORT_CONNECTION_TIMEOUT
312
+ )
313
+ return {db: D3::CONFIG.report_db_server, api: JSS::CONFIG.api_server_name}
314
+
315
+ rescue Mysql::ServerError::AccessDeniedError
316
+ raise JSS::AuthenticationError, "Authentication error on report_db_server: Credentials must match #{JSS::CONFIG.db_username} on #{JSS::CONFIG.db_server_name}"
317
+ end # begin
318
+ end # if rpt db server
319
+
320
+ JSS::DB_CNX.connect :user => db_user, :pw => db_pw, :timeout => REPORT_CONNECTION_TIMEOUT
321
+
322
+ return {db: JSS::CONFIG.db_server_name, api: JSS::CONFIG.api_server_name}
323
+ end # connect for report
324
+
325
+ end # module
data/lib/d3/version.rb CHANGED
@@ -24,5 +24,5 @@
24
24
 
25
25
 
26
26
  module D3
27
- VERSION = '0.0.0a1'
27
+ VERSION = '3.0.7'
28
28
  end # module
metadata CHANGED
@@ -1,20 +1,65 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: depot3
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0a1
4
+ version: 3.0.7
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-03-25 00:00:00.000000000 Z
12
- dependencies: []
13
- description: |2+
14
- This is a placeholder for the depot3 gem. We plan public release in early April, 2016. See http://pixaranimationstudios.github.io/depot3/index.html
15
-
11
+ date: 2016-04-01 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: ruby-keychain
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '0.2'
20
+ - - '>'
21
+ - !ruby/object:Gem::Version
22
+ version: 0.2.0
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '0.2'
30
+ - - '>'
31
+ - !ruby/object:Gem::Version
32
+ version: 0.2.0
33
+ - !ruby/object:Gem::Dependency
34
+ name: ruby-jss
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ~>
38
+ - !ruby/object:Gem::Version
39
+ version: '0.6'
40
+ - - '>='
41
+ - !ruby/object:Gem::Version
42
+ version: 0.6.2
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ~>
48
+ - !ruby/object:Gem::Version
49
+ version: '0.6'
50
+ - - '>='
51
+ - !ruby/object:Gem::Version
52
+ version: 0.6.2
53
+ description: |
54
+ d3 extends the package-deployment capabilities of the Casper Suite, an enterprise/education
55
+ tool for managing Apple devices, from JAMF Software LLC.
56
+ For details, see http://pixaranimationstudios.github.io/depot3/index.html
16
57
  email: d3@pixar.com
17
- executables: []
58
+ executables:
59
+ - d3
60
+ - d3admin
61
+ - d3helper
62
+ - puppytime
18
63
  extensions: []
19
64
  extra_rdoc_files:
20
65
  - README.md
@@ -27,7 +72,115 @@ files:
27
72
  - LICENSE.txt
28
73
  - README.md
29
74
  - THANKS.md
75
+ - bin/d3
76
+ - bin/d3admin
77
+ - bin/d3helper
78
+ - bin/puppytime
79
+ - data/d3/com.pixar.d3.RepoMan.plist
80
+ - data/d3/d3.conf.example
81
+ - data/d3/d3RepoMan.app/Contents/Frameworks/libswiftAppKit.dylib
82
+ - data/d3/d3RepoMan.app/Contents/Frameworks/libswiftCore.dylib
83
+ - data/d3/d3RepoMan.app/Contents/Frameworks/libswiftCoreData.dylib
84
+ - data/d3/d3RepoMan.app/Contents/Frameworks/libswiftCoreGraphics.dylib
85
+ - data/d3/d3RepoMan.app/Contents/Frameworks/libswiftCoreImage.dylib
86
+ - data/d3/d3RepoMan.app/Contents/Frameworks/libswiftDarwin.dylib
87
+ - data/d3/d3RepoMan.app/Contents/Frameworks/libswiftDispatch.dylib
88
+ - data/d3/d3RepoMan.app/Contents/Frameworks/libswiftFoundation.dylib
89
+ - data/d3/d3RepoMan.app/Contents/Frameworks/libswiftObjectiveC.dylib
90
+ - data/d3/d3RepoMan.app/Contents/Info.plist
91
+ - data/d3/d3RepoMan.app/Contents/MacOS/d3RepoMan
92
+ - data/d3/d3RepoMan.app/Contents/PkgInfo
93
+ - data/d3/d3RepoMan.app/Contents/Resources/Base.lproj/MainMenu.nib
94
+ - data/d3/d3RepoMan.app/Contents/Resources/last-foreground-times-template.plist
95
+ - data/d3/d3RepoMan.app/Contents/_CodeSignature/CodeResources
96
+ - data/d3/puppytime/ImageLicenses.txt
97
+ - data/d3/puppytime/notification_image
98
+ - data/d3/puppytime/opt_out_image
99
+ - data/d3/puppytime/slideshow/2008-07-11_White_German_Shepherd_pup_chilling_at_the_Coker_Arboretum.jpg
100
+ - data/d3/puppytime/slideshow/2009-04-21_APBT_pup_on_deck.jpg
101
+ - data/d3/puppytime/slideshow/A_puppy_Yorkie.jpg
102
+ - data/d3/puppytime/slideshow/Alert_Pug_Puppy.jpg
103
+ - data/d3/puppytime/slideshow/Australian_Cattle_Dog_puppies_04.JPG
104
+ - data/d3/puppytime/slideshow/Beagle_puppy_Cadet.jpg
105
+ - data/d3/puppytime/slideshow/Bernese_Mountain_Dog.jpg
106
+ - data/d3/puppytime/slideshow/Bloodhound_Puppy.jpg
107
+ - data/d3/puppytime/slideshow/Boston_terrier_with_toy.jpg
108
+ - data/d3/puppytime/slideshow/Boxer_puppy_fawn_portrai.jpg
109
+ - data/d3/puppytime/slideshow/Caracal_kitten.jpg
110
+ - data/d3/puppytime/slideshow/Chihuahua_&_Doberman_Pup.jpg
111
+ - data/d3/puppytime/slideshow/Cuccioli_di_Margot_a_35_gg_Basenjis.jpg
112
+ - data/d3/puppytime/slideshow/Dalmatian_puppy_03.jpg
113
+ - data/d3/puppytime/slideshow/GoldenRetrieverPuppyDaisyParker.JPG
114
+ - data/d3/puppytime/slideshow/Green_eyed_beige_Chihuahua.jpg
115
+ - data/d3/puppytime/slideshow/Let_Sleeping_Dogs_Lie.jpg
116
+ - data/d3/puppytime/slideshow/Meatball_-_French_Bulldog_Puppy.jpg
117
+ - data/d3/puppytime/slideshow/Oola_-_9_weeks.jpg
118
+ - data/d3/puppytime/slideshow/Pancho0008.JPG
119
+ - data/d3/puppytime/slideshow/Pomeranian_orange-sable_Coco.jpg
120
+ - data/d3/puppytime/slideshow/Pug_puppy_001.jpg
121
+ - data/d3/puppytime/slideshow/Puggle_puppy_6_weeks.JPG
122
+ - data/d3/puppytime/slideshow/Puli_kan.jpg
123
+ - data/d3/puppytime/slideshow/Puppy_French_Bulldog.jpg
124
+ - data/d3/puppytime/slideshow/Rocco_the_Bulldog.jpg
125
+ - data/d3/puppytime/slideshow/Rottweiler_Face.jpg
126
+ - data/d3/puppytime/slideshow/Saint_Bernard_puppy.jpg
127
+ - data/d3/puppytime/slideshow/Scottish_froment.jpg
128
+ - data/d3/puppytime/slideshow/Shar_pei_puppy_(age_2_months).jpg
129
+ - data/d3/puppytime/slideshow/Shiba-Inu_beim_Spielen_im_Schnee.JPG
130
+ - data/d3/puppytime/slideshow/Smooth-coat_Border_Collie_puppy..jpg
131
+ - data/d3/puppytime/slideshow/Smooth_Dachshund_puppies.jpg
132
+ - data/d3/puppytime/slideshow/Snow_dog.jpg
133
+ - data/d3/puppytime/slideshow/Taylor_the_Pembroke_Welsh_Corgi.png
134
+ - data/d3/puppytime/slideshow/Weim_Pups_001.jpg
135
+ - data/d3/puppytime/slideshow/Westie_pups.jpg
136
+ - data/d3/puppytime/slideshow/Yellow_Labrador_puppies_(4165737325).jpg
30
137
  - lib/d3.rb
138
+ - lib/d3/admin.rb
139
+ - lib/d3/admin/add.rb
140
+ - lib/d3/admin/auth.rb
141
+ - lib/d3/admin/edit.rb
142
+ - lib/d3/admin/help.rb
143
+ - lib/d3/admin/interactive.rb
144
+ - lib/d3/admin/options.rb
145
+ - lib/d3/admin/prefs.rb
146
+ - lib/d3/admin/report.rb
147
+ - lib/d3/admin/state.rb
148
+ - lib/d3/admin/validate.rb
149
+ - lib/d3/basename.rb
150
+ - lib/d3/client.rb
151
+ - lib/d3/client/auth.rb
152
+ - lib/d3/client/class_methods.rb
153
+ - lib/d3/client/class_variables.rb
154
+ - lib/d3/client/cli.rb
155
+ - lib/d3/client/environment.rb
156
+ - lib/d3/client/help.rb
157
+ - lib/d3/client/lists.rb
158
+ - lib/d3/client/receipt.rb
159
+ - lib/d3/configuration.rb
160
+ - lib/d3/constants.rb
161
+ - lib/d3/database.rb
162
+ - lib/d3/exceptions.rb
163
+ - lib/d3/log.rb
164
+ - lib/d3/package.rb
165
+ - lib/d3/package/aliases.rb
166
+ - lib/d3/package/attributes.rb
167
+ - lib/d3/package/class_methods.rb
168
+ - lib/d3/package/class_variables.rb
169
+ - lib/d3/package/client_actions.rb
170
+ - lib/d3/package/constants.rb
171
+ - lib/d3/package/constructor.rb
172
+ - lib/d3/package/getters.rb
173
+ - lib/d3/package/mixins.rb
174
+ - lib/d3/package/private_methods.rb
175
+ - lib/d3/package/questions.rb
176
+ - lib/d3/package/server_actions.rb
177
+ - lib/d3/package/setters.rb
178
+ - lib/d3/package/validate.rb
179
+ - lib/d3/puppytime.rb
180
+ - lib/d3/puppytime/pending_puppy.rb
181
+ - lib/d3/puppytime/puppy_queue.rb
182
+ - lib/d3/state.rb
183
+ - lib/d3/utility.rb
31
184
  - lib/d3/version.rb
32
185
  - lib/depot3.rb
33
186
  homepage: http://pixaranimationstudios.github.io/depot3/
@@ -50,9 +203,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
50
203
  version: 2.0.0
51
204
  required_rubygems_version: !ruby/object:Gem::Requirement
52
205
  requirements:
53
- - - '>'
206
+ - - '>='
54
207
  - !ruby/object:Gem::Version
55
- version: 1.3.1
208
+ version: '0'
56
209
  requirements: []
57
210
  rubyforge_project:
58
211
  rubygems_version: 2.6.1