PackageChanger 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 2d2f7c832e92ce661bdfb8c674cd225389617b1c
4
- data.tar.gz: 872b1ef82b5972f97dd065ce4d77e37e381c6000
2
+ SHA256:
3
+ metadata.gz: e42fcbfef88337d942d5dc3d91e33252959b753a3d15cbdf1581bd8eb14463be
4
+ data.tar.gz: 04504df89dac7433c272baaf28b8f4d409f31932bc06c2cb009daa647ff107b7
5
5
  SHA512:
6
- metadata.gz: fb1e68e7399a25358ad683503f7a310e4722007ed076ca053bc3d152bf5a75dc6069262d6e45f0a053fd4c37b2f9526b8d318c70771c4f9acf6cce453a7b2d0a
7
- data.tar.gz: f4cec6c57c452d4534e98de28c7aa01a245f421f5d92076ff247a3c0bc7974faf2fb5e293551557ca2af3c9adca705f7b7de205b52f125a7e5cdb34b1689d45b
6
+ metadata.gz: cfc931f07224a433d2ee321f47dee9b8d068670a312ecf709f4a8eb6ea3cc7ff27b541d6901f639e90793c3c1d3b4fd47c1cd7d5bb1047b6246a8ee2005a15ae
7
+ data.tar.gz: d550a5ebb9334978ea5608ccc02aadcdeb9503b09ba731a74e9eec7de3085b3ca33078c96928a623cfcf6e462c3b35e334ba9c5c906bf9102ee70ba0917b13fc
data/.gitignore CHANGED
@@ -8,3 +8,4 @@
8
8
  /tmp/
9
9
  .DS_Store
10
10
  .idea
11
+ .idea/workspace.xml
Binary file
@@ -1,44 +1,46 @@
1
+ # frozen_string_literal: true
1
2
 
2
- lib = File.expand_path("../lib", __FILE__)
3
+ lib = File.expand_path('lib', __dir__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require "PackageChanger/version"
5
+ require 'PackageChanger/version'
5
6
 
6
7
  Gem::Specification.new do |spec|
7
- spec.name = "PackageChanger"
8
+ spec.name = 'PackageChanger'
8
9
  spec.version = PackageChanger::VERSION
9
- spec.authors = ["Bernardo Prieto"]
10
- spec.email = ["bernardo.prieto.curiel@zalando.de"]
10
+ spec.authors = ['Bernardo Prieto']
11
+ spec.email = ['bernardo.prieto.curiel@zalando.de']
11
12
 
12
- spec.summary = %q{Uses the API to list or replace a package in all JSS policies in which it appears.}
13
- spec.description = %q{With the help or Ruby JSS, uses the API to list all the policies in which a package appears
14
- and gives the ability to replace the package in all these policies.}
15
- spec.homepage = "https://github.com/Bearzooka/PackageChanger"
16
- spec.license = "MIT"
13
+ spec.summary = 'Uses the API to list or replace a package in all or one JSS policies in which it appears.'
14
+ spec.description = 'With the help or Ruby JSS, uses the API to list all or one the policies in which a package appears
15
+ and gives the ability to replace the package in all these policies.'
16
+ spec.homepage = 'https://github.com/Bearzooka/PackageChanger'
17
+ spec.license = 'MIT'
17
18
 
18
19
  # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
19
20
  # to allow pushing to a single host or delete this section to allow pushing to any host.
20
21
  if spec.respond_to?(:metadata)
21
- spec.metadata["allowed_push_host"] = "https://rubygems.org/"
22
+ spec.metadata['allowed_push_host'] = 'https://rubygems.org/'
22
23
 
23
- spec.metadata["homepage_uri"] = spec.homepage
24
- spec.metadata["source_code_uri"] = "https://github.com/Bearzooka/PackageChanger"
24
+ spec.metadata['homepage_uri'] = spec.homepage
25
+ spec.metadata['source_code_uri'] = 'https://github.com/Bearzooka/PackageChanger'
25
26
  else
26
- raise "RubyGems 2.0 or newer is required to protect against " \
27
- "public gem pushes."
27
+ raise 'RubyGems 2.0 or newer is required to protect against ' \
28
+ 'public gem pushes.'
28
29
  end
29
30
 
30
31
  # Specify which files should be added to the gem when it is released.
31
32
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
32
- spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
33
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
33
34
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
34
35
  end
35
- spec.bindir = "exe"
36
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
37
- spec.require_paths = ["lib"]
36
+ spec.bindir = 'bin'
37
+ spec.executables << 'PackageChanger'
38
+ # spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
39
+ spec.require_paths = ['lib']
38
40
 
39
- spec.add_development_dependency "bundler", "~> 2.0"
40
- spec.add_development_dependency "rake", "~> 10.0"
41
- spec.add_development_dependency "minitest", "~> 5.0"
42
- spec.add_development_dependency 'ruby-jss', '~> 1.0', '>= 1.0.2'
43
- spec.add_runtime_dependency 'ruby-jss', '~> 1.0', '>= 1.0.2'
41
+ spec.add_development_dependency 'bundler', '~> 2.0'
42
+ spec.add_development_dependency 'minitest', '~> 5.0'
43
+ spec.add_development_dependency 'rake', '~> 10.0'
44
+ spec.add_development_dependency 'ruby-jss', '~> 1.0', '>= 1.2.3'
45
+ spec.add_runtime_dependency 'ruby-jss', '~> 1.0', '>= 1.2.3'
44
46
  end
data/README.md CHANGED
@@ -16,6 +16,8 @@ Once configured, you can use it:
16
16
 
17
17
  ```packagechanger [--silent] --old OldPackageName --new NewPackageName || --list ListedPackage```
18
18
 
19
+ Run the first execution with sudo, or change the mode of the file `/private/var/log/packagechanger.log` so all users can write to it.
20
+
19
21
 
20
22
  ## Contributing
21
23
 
@@ -3,6 +3,7 @@
3
3
 
4
4
  require 'rubygems'
5
5
  require 'getoptlong'
6
+
6
7
  require_relative '../lib/PackageChanger/config'
7
8
  require_relative '../lib/PackageChanger/connection'
8
9
  require_relative '../lib/PackageChanger/messages'
@@ -11,22 +12,39 @@ require_relative '../lib/PackageChanger/log'
11
12
  old_package = nil
12
13
  new_package = nil
13
14
  list_package = nil
15
+ target_policy = nil
14
16
  mode = nil
15
17
  result_array = []
16
18
  silent = false
17
19
 
18
20
  # The CLI options for GetoptLong
19
21
  OPTS = GetoptLong.new(
20
- ['--old', '-o', GetoptLong::REQUIRED_ARGUMENT],
21
- ['--new', '-n', GetoptLong::REQUIRED_ARGUMENT],
22
- ['--list', '-l', GetoptLong::REQUIRED_ARGUMENT],
23
- ['--silent', '-s', GetoptLong::NO_ARGUMENT]
22
+ ['--policy', '-p', GetoptLong::REQUIRED_ARGUMENT],
23
+ ['--old', '-o', GetoptLong::REQUIRED_ARGUMENT],
24
+ ['--new', '-n', GetoptLong::REQUIRED_ARGUMENT],
25
+ ['--list', '-l', GetoptLong::REQUIRED_ARGUMENT],
26
+ ['--silent', '-s', GetoptLong::NO_ARGUMENT]
24
27
  )
25
28
 
26
29
  logger = PackageChanger::Log.new
27
30
 
31
+ # Default mode is change
32
+ mode = 'change'
33
+
28
34
  OPTS.each do |opt, arg|
29
35
  case opt
36
+ when '--policy'
37
+ if arg == ''
38
+ puts PackageChanger::USAGE
39
+ logger.write('Missing arguments.')
40
+ exit 1
41
+ else
42
+ target_policy = arg
43
+
44
+ # Change mode to single if policy flag is used
45
+ mode = 'single'
46
+ end
47
+
30
48
  when '--old'
31
49
  if arg == ''
32
50
  puts PackageChanger::USAGE
@@ -34,7 +52,6 @@ OPTS.each do |opt, arg|
34
52
  exit 1
35
53
  else
36
54
  old_package = arg
37
- mode = 'change'
38
55
  end
39
56
 
40
57
  when '--new'
@@ -53,22 +70,24 @@ OPTS.each do |opt, arg|
53
70
  exit 1
54
71
  else
55
72
  list_package = arg
56
- mode = "list"
73
+
74
+ # Change mode to list if flag is used
75
+ mode = 'list'
57
76
  end
58
77
  when '--silent'
59
- silent = true
78
+ silent = true
60
79
 
61
80
  end
62
81
  end
63
82
 
64
- unless (old_package and new_package) or list_package
83
+ unless (old_package && new_package) || list_package
65
84
  puts PackageChanger::USAGE
66
85
  logger.write('Missing package names')
67
86
  exit 1
68
87
  end
69
88
 
70
89
  begin
71
-
90
+ puts PackageChanger::STARTUP unless silent
72
91
  if PackageChanger::Configuration::DEFAULT_CONF_FILE.file?
73
92
  @config_src = PackageChanger::Configuration::DEFAULT_CONF_FILE.to_s
74
93
  elsif PackageChanger::Configuration::SAMPLE_CONF_FILE.file?
@@ -77,7 +96,7 @@ begin
77
96
  exit 1
78
97
  end
79
98
 
80
- PackageChanger.connect_to_jss
99
+ PackageChanger.connect_to_jss(silent)
81
100
 
82
101
  if mode == 'list'
83
102
  unless JSS::Package.valid_id list_package
@@ -86,10 +105,10 @@ begin
86
105
  exit 1
87
106
  end
88
107
 
89
- result_array = PackageChanger.get_policies_with(list_package, silent)
108
+ result_array = PackageChanger.get_policies_with(list_package, silent, logger)
90
109
 
91
110
  if result_array.count > 0
92
- puts "The package #{list_package} is used on the following policies: "
111
+ puts "\u{1F3C1} The package #{list_package} is used on the following policies: "
93
112
  result_array.each do |result|
94
113
  puts "\t#{result[:id]} - #{result[:name]}"
95
114
  end
@@ -98,8 +117,8 @@ begin
98
117
  exit 0
99
118
  end
100
119
 
101
- elsif mode == "change"
102
- unless JSS::Package.valid_id old_package and JSS::Package.valid_id new_package
120
+ elsif mode == 'change'
121
+ unless JSS::Package.valid_id(old_package) && JSS::Package.valid_id(new_package)
103
122
  logger.write("Either #{old_package} or #{new_package} do not exist")
104
123
  puts PackageChanger::MISSSING_PACKAGE
105
124
  exit 1
@@ -117,7 +136,7 @@ begin
117
136
 
118
137
  confirmation = ''
119
138
 
120
- while confirmation !~ (/[yn]/i)
139
+ while confirmation !~ /[yn]/i
121
140
  puts 'Please confirm [y/n]:'
122
141
  confirmation = gets.chomp.downcase
123
142
  end
@@ -127,7 +146,7 @@ begin
127
146
  puts 'Processing changes.' unless silent
128
147
  logger.write('Starting changes.')
129
148
  PackageChanger.replace_packages(result_array, old_package, new_package, silent, logger)
130
- puts 'Finished changing packages.' unless silent
149
+ puts "\u{1F3C1} Finished changing packages." unless silent
131
150
  logger.write('Finished changing.')
132
151
  exit 0
133
152
  when 'n'
@@ -146,6 +165,49 @@ begin
146
165
  exit 0
147
166
  end
148
167
 
149
- end
168
+ elsif mode == 'single'
169
+ unless JSS::Package.valid_id(old_package) && JSS::Package.valid_id(new_package)
170
+ logger.write("Either #{old_package} or #{new_package} does not exist")
171
+ puts PackageChanger::MISSSING_PACKAGE
172
+ exit 1
173
+ end
150
174
 
175
+
176
+ target_policy = target_policy.match(/[^[:digit:]]+/) ? target_policy : target_policy.to_i
177
+ unless JSS::Policy.valid_id(target_policy)
178
+ logger.write("The policy with id #{target_policy} does not exist.")
179
+ puts PackageChanger::MISSSING_POLICY
180
+ exit 1
181
+ end
182
+
183
+ changed_pol = JSS::Policy.fetch target_policy
184
+
185
+ puts "\u{1F4E6} The package #{old_package}\n\u{27A1 FE0F} will be replaced with #{new_package}\n\u{1F4CC} in #{changed_pol.name}"
186
+ logger.write("The package #{old_package} will be replaced with #{new_package} in #{changed_pol.name}")
187
+
188
+ confirmation = ''
189
+
190
+ while confirmation !~ /[yn]/i
191
+ puts 'Please confirm [y/n]:'
192
+ confirmation = gets.chomp.downcase
193
+ end
194
+
195
+ case confirmation
196
+ when 'y'
197
+ puts "\u{1F3A2} Processing changes." unless silent
198
+ logger.write('Starting changes.')
199
+ PackageChanger.replace_packages_in(changed_pol, old_package, new_package, silent, logger)
200
+ puts 'Finished changing packages.' unless silent
201
+ logger.write('Finished changing.')
202
+ exit 0
203
+ when 'n'
204
+ puts "\u{1F519} Cancelling changes."
205
+ logger.write('User cancelled.')
206
+ exit 0
207
+ else
208
+ puts PackageChanger::ERROR
209
+ logger.write(PackageChanger::ERROR)
210
+ exit 1
211
+ end
212
+ end
151
213
  end
data/bin/setup CHANGED
@@ -5,4 +5,7 @@ set -vx
5
5
 
6
6
  bundle install
7
7
 
8
+ touch /var/log/packagechanger.log
9
+ chmod 777 /var/log/packagechanger.log
10
+
8
11
  # Do any other automated setup that you need to do here
@@ -1,4 +1,3 @@
1
-
2
1
  require 'singleton'
3
2
  require 'pathname'
4
3
 
@@ -46,7 +45,7 @@ module PackageChanger
46
45
  def read(file)
47
46
  available_conf_keys = CONF_KEYS.keys
48
47
 
49
- puts file
48
+ # puts file
50
49
  Pathname.new(file).read.each_line do |line|
51
50
  # skip blank lines and those starting with #
52
51
  next if line =~ /^\s*(#|$)/
@@ -87,4 +86,4 @@ module PackageChanger
87
86
  def self.config
88
87
  PackageChanger::Configuration.instance
89
88
  end
90
- end # module
89
+ end # module
@@ -3,7 +3,7 @@ require_relative 'config'
3
3
 
4
4
  module PackageChanger
5
5
 
6
- def self.connect_to_jss
6
+ def self.connect_to_jss(silent)
7
7
  # JSS Connection info
8
8
 
9
9
  begin
@@ -12,9 +12,9 @@ module PackageChanger
12
12
  server: PackageChanger.config.jamf_server,
13
13
  verify_cert: false
14
14
 
15
- puts 'Connected to the JSS.'
15
+ puts "\u{1F50C} Connected to the JSS." unless silent
16
16
  rescue
17
- puts 'Could not connect to JSS. Please check the configuration.'
17
+ puts "\u{1F6AB} Could not connect to JSS. Please check the configuration."
18
18
  # abort
19
19
  end
20
20
  end
@@ -37,27 +37,62 @@ module PackageChanger
37
37
  end
38
38
  end
39
39
 
40
- def self.get_policies_with(list_package, silent)
40
+ def self.replace_packages_in(changed_pol, old_package, new_package, silent, logger)
41
+ puts 'Starting replacement process' unless silent
42
+
43
+ puts "Changing #{changed_pol.name}" unless silent
44
+ logger.write("Changing #{changed_pol.name}")
45
+ begin
46
+ changed_pol.remove_package(old_package)
47
+ changed_pol.add_package(new_package)
48
+ changed_pol.update
49
+ rescue StandardError => e
50
+ puts "\u{1F6AB} Changed failed due to error: #{e.message}"
51
+ logger.write("Changed on #{changed_pol.name} failed due to error: #{e.message}")
52
+ end
53
+ end
54
+
55
+ def self.get_policies_with(list_package, silent, logger)
41
56
  result_array = []
42
57
  all_policies = JSS::Policy.all.select { |p|
43
58
  !(p[:name].include? '[SelfService]') &&
44
59
  !(p[:name].include? '1 Computer')
45
60
  }
46
- puts "There are #{all_policies.count} policies in your JSS…" unless silent
47
- pol_count = 1
48
- all_policies.each do |policy|
49
- puts "\r#{pol_count} policies checked" unless silent
50
- one_result = {}
51
- fetched_policy = JSS::Policy.fetch(:id => policy[:id])
52
- if fetched_policy.packages.any? {|package| package[:name] == list_package}
53
- one_result[:id] = fetched_policy.id
54
- one_result[:name] = fetched_policy.name
55
- result_array.push(one_result)
61
+ puts "\u{203C FE0F} There are #{all_policies.count} policies in your JSS…"
62
+
63
+ confirmation = ''
64
+
65
+ while confirmation !~ /[yn]/i
66
+ puts 'Would you like to continue? [y/n]:'
67
+ confirmation = gets.chomp.downcase
68
+ end
69
+
70
+ case confirmation
71
+ when 'y'
72
+ pol_count = 1
73
+ all_policies.each do |policy|
74
+ puts "\r#{pol_count} policies checked" unless silent
75
+ one_result = {}
76
+ fetched_policy = JSS::Policy.fetch(:id => policy[:id])
77
+ if fetched_policy.packages.any? {|package| package[:name] == list_package}
78
+ one_result[:id] = fetched_policy.id
79
+ one_result[:name] = fetched_policy.name
80
+ result_array.push(one_result)
81
+ end
82
+ #end
83
+ pol_count += 1
56
84
  end
57
- #end
58
- pol_count += 1
85
+ return result_array
86
+
87
+ when 'n'
88
+ puts 'Cancelling checks.'
89
+ logger.write('User cancelled.')
90
+ exit 0
91
+ else
92
+ puts PackageChanger::ERROR
93
+ logger.write(PackageChanger::ERROR)
94
+ exit 1
59
95
  end
60
- return result_array
61
96
  end
62
97
 
63
- end # PackageChanger
98
+ end # PackageChanger
@@ -5,7 +5,7 @@ module PackageChanger
5
5
 
6
6
  ≈≈≈ PackageChanger ≈≈≈
7
7
 
8
- Usage: packagechanger [--silent] --old OldPackageName --new NewPackageName || --list ListedPackage
8
+ Usage: packagechanger [--silent] [--policy PolicyID] --old OldPackageName --new NewPackageName || --list ListedPackage
9
9
  "
10
10
 
11
11
 
@@ -24,28 +24,39 @@ module PackageChanger
24
24
 
25
25
  ≈≈≈ PackageChanger ≈≈≈
26
26
 
27
- Missing packages: One or both of the provided packages do not exist. Please verify.
27
+ \u{1f4a9} Missing packages: One or both of the provided packages do not exist. Please verify.
28
+ "
29
+
30
+ MISSSING_POLICY = "
31
+
32
+ ≈≈≈ PackageChanger ≈≈≈
33
+
34
+ \u{1f4a9} Missing policy: The policy ID you provided does not exist. Please verify.
28
35
  "
29
36
 
30
37
  MISSSING_LIST_PACKAGE = "
31
38
 
32
39
  ≈≈≈ PackageChanger ≈≈≈
33
40
 
34
- Missing package: The provided package does not exist. Please verify.
41
+ \u{1f4a9} Missing package: The provided package does not exist. Please verify.
35
42
  "
36
43
 
37
44
  NO_RESULTS_LIST = "
38
45
 
39
- There are no policies using the provided package.
46
+ \u{1F6AB 1F4E6} There are no policies using the provided package.
40
47
  "
41
48
 
42
49
  NO_RESULTS_CHANGE = "
43
50
 
44
- There are no policies using the package you intend to change.
51
+ \u{1F6AB 1F4E6} There are no policies using the package you intend to change.
45
52
  "
46
53
 
47
54
  ERROR = "
48
55
 
49
56
  Execution error.
50
57
  "
58
+
59
+ STARTUP = "
60
+ ≈≈≈ PackageChanger ≈≈≈
61
+ "
51
62
  end
@@ -1,3 +1,3 @@
1
1
  module PackageChanger
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: PackageChanger
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bernardo Prieto
8
8
  autorequire:
9
- bindir: exe
9
+ bindir: bin
10
10
  cert_chain: []
11
- date: 2019-06-03 00:00:00.000000000 Z
11
+ date: 2020-04-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -25,33 +25,33 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '2.0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: rake
28
+ name: minitest
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: '5.0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '10.0'
40
+ version: '5.0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: minitest
42
+ name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '5.0'
47
+ version: '10.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '5.0'
54
+ version: '10.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: ruby-jss
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -61,7 +61,7 @@ dependencies:
61
61
  version: '1.0'
62
62
  - - ">="
63
63
  - !ruby/object:Gem::Version
64
- version: 1.0.2
64
+ version: 1.2.3
65
65
  type: :development
66
66
  prerelease: false
67
67
  version_requirements: !ruby/object:Gem::Requirement
@@ -71,7 +71,7 @@ dependencies:
71
71
  version: '1.0'
72
72
  - - ">="
73
73
  - !ruby/object:Gem::Version
74
- version: 1.0.2
74
+ version: 1.2.3
75
75
  - !ruby/object:Gem::Dependency
76
76
  name: ruby-jss
77
77
  requirement: !ruby/object:Gem::Requirement
@@ -81,7 +81,7 @@ dependencies:
81
81
  version: '1.0'
82
82
  - - ">="
83
83
  - !ruby/object:Gem::Version
84
- version: 1.0.2
84
+ version: 1.2.3
85
85
  type: :runtime
86
86
  prerelease: false
87
87
  version_requirements: !ruby/object:Gem::Requirement
@@ -91,13 +91,14 @@ dependencies:
91
91
  version: '1.0'
92
92
  - - ">="
93
93
  - !ruby/object:Gem::Version
94
- version: 1.0.2
94
+ version: 1.2.3
95
95
  description: |-
96
- With the help or Ruby JSS, uses the API to list all the policies in which a package appears
96
+ With the help or Ruby JSS, uses the API to list all or one the policies in which a package appears
97
97
  and gives the ability to replace the package in all these policies.
98
98
  email:
99
99
  - bernardo.prieto.curiel@zalando.de
100
- executables: []
100
+ executables:
101
+ - PackageChanger
101
102
  extensions: []
102
103
  extra_rdoc_files: []
103
104
  files:
@@ -112,6 +113,7 @@ files:
112
113
  - ".travis.yml"
113
114
  - Gemfile
114
115
  - LICENSE.txt
116
+ - PackageChanger-0.1.0.gem
115
117
  - PackageChanger.gemspec
116
118
  - README.md
117
119
  - Rakefile
@@ -149,10 +151,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
149
151
  - !ruby/object:Gem::Version
150
152
  version: '0'
151
153
  requirements: []
152
- rubyforge_project:
153
- rubygems_version: 2.5.2.3
154
+ rubygems_version: 3.0.3
154
155
  signing_key:
155
156
  specification_version: 4
156
- summary: Uses the API to list or replace a package in all JSS policies in which it
157
- appears.
157
+ summary: Uses the API to list or replace a package in all or one JSS policies in which
158
+ it appears.
158
159
  test_files: []