PackageChanger 0.1.0 → 0.2.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.
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: []