kpm 0.1.3 → 0.1.4

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
2
  SHA1:
3
- metadata.gz: 843f4ad85941d5bdf68f95a2b70eb60c657a3863
4
- data.tar.gz: 443167bd27e004d5658f5acd862dd83778c11fd8
3
+ metadata.gz: bf947b3325fa9702980797739a85241543a1084d
4
+ data.tar.gz: 79241998d05b9583a74b74c6b79a854d283b46c0
5
5
  SHA512:
6
- metadata.gz: 1075cdab8831e95e8d58f99cb9754868cab56fb8276a0f515e0d3eb3bde00c547505905cdae4fbf29288f63cafe01584fcfe03086b41a3b71de72a16b30d7ad6
7
- data.tar.gz: 5d2f1873ebd4e08852d14deb608a53e4758d005c8a00ca5c5009b3dbc145fc9f67e24725f969f51290cc46195d70920115fc6cebb6baca536ff976dc854cf09a
6
+ metadata.gz: 0a84a0a01fc7aa88bce35da72f38b771c0ddd8a7b9d899ee32eda996413be22de161a7152d67476011e770ea6ff5a0f8fbc8d69b9123d6418d59759a01dc790f
7
+ data.tar.gz: 4e44086024f1509f77ae7adfc9872b99ca6f09c3822d7601858ae92b47d361447891e48e2f651b4566b7994ad605496e3faea527a968a5e95ac60ac76dbba54c
@@ -36,8 +36,8 @@ module KPM
36
36
 
37
37
  class << self
38
38
  def pull(logger, group_id, artifact_id, packaging='jar', classifier=nil, version='LATEST', destination_path=nil, sha1_file=nil, force_download=false, verify_sha1=true, overrides={}, ssl_verify=true)
39
- coordinates = build_coordinates(group_id, artifact_id, packaging, classifier, version)
40
- pull_and_put_in_place(logger, coordinates, destination_path, is_ruby_plugin_and_should_skip_top_dir(group_id, artifact_id), sha1_file, force_download, verify_sha1, overrides, ssl_verify)
39
+ coordinate_map = {:group_id => group_id, :artifact_id => artifact_id, :packaging => packaging, :classifier => classifier, :version => version}
40
+ pull_and_put_in_place(logger, coordinate_map, destination_path, is_ruby_plugin_and_should_skip_top_dir(group_id, artifact_id), sha1_file, force_download, verify_sha1, overrides, ssl_verify)
41
41
  end
42
42
 
43
43
  def pull_from_fs(logger, file_path, destination_path=nil)
@@ -57,19 +57,41 @@ module KPM
57
57
 
58
58
  protected
59
59
 
60
- def pull_and_put_in_place(logger, coordinates, destination_path=nil, skip_top_dir=true, sha1_file=nil, force_download=false, verify_sha1=true, overrides={}, ssl_verify=true)
60
+ def pull_and_put_in_place(logger, coordinate_map, destination_path=nil, skip_top_dir=true, sha1_file=nil, force_download=false, verify_sha1=true, overrides={}, ssl_verify=true)
61
61
  # Build artifact info
62
- artifact_info = artifact_info(coordinates, overrides, ssl_verify)
63
-
62
+ artifact_info = artifact_info(coordinate_map, overrides, ssl_verify)
64
63
  populate_fs_info(artifact_info, destination_path)
65
64
 
65
+ # Update with resolved version in case 'LATEST' was passed
66
+ coordinate_map[:version] = artifact_info[:version]
67
+ coordinates = build_coordinates(coordinate_map)
68
+
66
69
  # Return early if there's nothing to do
67
70
  if !force_download && skip_if_exists(artifact_info, coordinates, sha1_file)
68
71
  logger.info " Skipping installation of #{coordinates} to #{artifact_info[:file_path]}, file already exists"
72
+
73
+ # We need to do a bit of magic to make sure that artifact_info[:bundle_dir] is correctly populated when we bail early
74
+ if artifact_info[:is_tgz]
75
+ plugin_dir = File.split(artifact_info[:dir_name])[0]
76
+ plugins_manager = PluginsManager.new(plugin_dir, logger)
77
+ artifact_id = coordinates.split(':')[1]
78
+ plugin_name = plugins_manager.guess_plugin_name(artifact_id)
79
+ if plugin_name.nil?
80
+ logger.warn("Failed to guess plugin_name for #{coordinates}: artifact_info[:bundle_dir] will not be populated correctly")
81
+ else
82
+ version = artifact_info[:version]
83
+ artifact_info[:bundle_dir] = Pathname.new(artifact_info[:dir_name]).join(plugin_name).join(version).to_s
84
+ end
85
+ else
86
+ artifact_info[:bundle_dir] = artifact_info[:dir_name]
87
+ end
88
+
69
89
  artifact_info[:skipped] = true
70
90
  return artifact_info
71
91
  end
72
92
 
93
+
94
+
73
95
  # Create the destination directory
74
96
  FileUtils.mkdir_p(artifact_info[:dir_name])
75
97
 
@@ -138,11 +160,12 @@ module KPM
138
160
  local_sha1 == artifact_info[:sha1]
139
161
  end
140
162
 
141
- def artifact_info(coordinates, overrides={}, ssl_verify=true)
163
+ def artifact_info(coordinate_map, overrides={}, ssl_verify=true)
142
164
  info = {
143
165
  :skipped => false
144
166
  }
145
167
 
168
+ coordinates = build_coordinates(coordinate_map)
146
169
  nexus_info = nexus_remote(overrides, ssl_verify).get_artifact_info(coordinates)
147
170
 
148
171
  xml = REXML::Document.new(nexus_info)
@@ -216,7 +239,14 @@ module KPM
216
239
  res
217
240
  end
218
241
 
219
- def build_coordinates(group_id, artifact_id, packaging, classifier, version=nil)
242
+ def build_coordinates(coordinate_map)
243
+
244
+ group_id = coordinate_map[:group_id]
245
+ artifact_id = coordinate_map[:artifact_id]
246
+ packaging = coordinate_map[:packaging]
247
+ classifier = coordinate_map[:classifier]
248
+ version = coordinate_map[:version]
249
+
220
250
  if classifier.nil?
221
251
  if version.nil?
222
252
  "#{group_id}:#{artifact_id}:#{packaging}"
@@ -63,7 +63,7 @@ module KPM
63
63
 
64
64
 
65
65
 
66
- def install_plugin(plugin_key, specified_group_id=nil, specified_artifact_id=nil, specified_packaging=nil, specified_classifier=nil, specified_version=nil, bundles_dir=nil, specified_type=nil, force_download=false, verify_sha1=true)
66
+ def install_plugin(plugin_key, raw_kb_version=nil, specified_group_id=nil, specified_artifact_id=nil, specified_packaging=nil, specified_classifier=nil, specified_version=nil, bundles_dir=nil, specified_type=nil, force_download=false, verify_sha1=true)
67
67
 
68
68
  # plugin_key needs to exist
69
69
  if plugin_key.nil?
@@ -73,7 +73,7 @@ module KPM
73
73
 
74
74
 
75
75
  # Lookup artifact and perform validation against input
76
- looked_up_group_id, looked_up_artifact_id, looked_up_packaging, looked_up_classifier, looked_up_version, looked_up_type = KPM::PluginsDirectory.lookup(plugin_key, true)
76
+ looked_up_group_id, looked_up_artifact_id, looked_up_packaging, looked_up_classifier, looked_up_version, looked_up_type = KPM::PluginsDirectory.lookup(plugin_key, true, raw_kb_version)
77
77
  return if !validate_installation_arg(plugin_key, 'group_id', specified_group_id, looked_up_group_id)
78
78
  return if !validate_installation_arg(plugin_key, 'artifact_id', specified_artifact_id, looked_up_artifact_id)
79
79
  return if !validate_installation_arg(plugin_key, 'packaging', specified_packaging, looked_up_packaging)
@@ -119,8 +119,8 @@ module KPM
119
119
 
120
120
 
121
121
  # Before we do the install we verify that the entry we have in the plugin_identifiers.json matches our current request
122
- coordinates = [group_id, artifact_id, packaging, classifier, version]
123
- return if !validate_plugin_key(plugins_dir, plugin_key, coordinates)
122
+ coordinate_map = {:group_id => group_id, :artifact_id => artifact_id, :packaging => packaging, :classifier => classifier}
123
+ return if !validate_plugin_key(plugins_dir, plugin_key, coordinate_map)
124
124
 
125
125
 
126
126
  @logger.debug("Installing plugin: group_id=#{group_id} artifact_id=#{artifact_id} packaging=#{packaging} classifier=#{classifier} version=#{version} destination=#{destination}")
@@ -137,9 +137,12 @@ module KPM
137
137
  @nexus_config,
138
138
  @nexus_ssl_verify)
139
139
 
140
+ # Update with resolved version
141
+ coordinate_map[:version] = artifact_info[:version]
142
+
140
143
  mark_as_active(plugins_dir, artifact_info, artifact_id)
141
144
 
142
- update_plugin_identifier(plugins_dir, plugin_key, type.to_s, coordinates, artifact_info)
145
+ update_plugin_identifier(plugins_dir, plugin_key, type.to_s, coordinate_map, artifact_info)
143
146
 
144
147
  artifact_info
145
148
  end
@@ -240,32 +243,24 @@ module KPM
240
243
  true
241
244
  end
242
245
 
243
- def validate_plugin_key(plugins_dir, plugin_key, coordinates)
246
+ def validate_plugin_key(plugins_dir, plugin_key, coordinate_map)
244
247
  plugins_manager = PluginsManager.new(plugins_dir, @logger)
245
- return plugins_manager.validate_plugin_identifier_key(plugin_key, coordinates)
248
+ return plugins_manager.validate_plugin_identifier_key(plugin_key, coordinate_map)
246
249
  end
247
250
 
248
- def update_plugin_identifier(plugins_dir, plugin_key, type, coordinates, artifact_info)
249
- # In case the artifact on disk already existed and the installation is skipped, info[:bundle_dir] is null but the path exists in info[:dir_name]
250
- path = artifact_info[:bundle_dir] || artifact_info[:dir_name]
251
+ def update_plugin_identifier(plugins_dir, plugin_key, type, coordinate_map, artifact_info)
252
+ path = artifact_info[:bundle_dir]
251
253
 
252
254
  # The plugin_name needs to be computed after the fact (after the installation) because some plugin archive embed their directory structure
253
255
  plugin_name = Pathname.new(path).parent.split[1].to_s
254
256
  plugins_manager = PluginsManager.new(plugins_dir, @logger)
255
- plugins_manager.add_plugin_identifier_key(plugin_key, plugin_name, type, coordinates)
257
+ plugins_manager.add_plugin_identifier_key(plugin_key, plugin_name, type, coordinate_map)
256
258
  end
257
259
 
258
260
  def mark_as_active(plugins_dir, artifact_info, artifact_id=nil)
259
261
  # Mark this bundle as active
260
262
  plugins_manager = PluginsManager.new(plugins_dir, @logger)
261
- if artifact_info[:bundle_dir].nil?
262
- # In case the artifact on disk already existed and the installation is skipped,
263
- # we don't know the plugin name on disk (arbitrary if it's a .tar.gz). That being said,
264
- # we can guess it for Kill Bill plugins (using our naming conventions)
265
- plugins_manager.set_active(plugins_manager.guess_plugin_name(artifact_id), artifact_info[:version])
266
- else
267
- plugins_manager.set_active(artifact_info[:bundle_dir])
268
- end
263
+ plugins_manager.set_active(artifact_info[:bundle_dir])
269
264
  end
270
265
  end
271
266
  end
data/lib/kpm/installer.rb CHANGED
@@ -79,7 +79,7 @@ module KPM
79
79
 
80
80
  infos = []
81
81
  @config['plugins']['java'].each do |plugin|
82
- infos << install_plugin(plugin['name'], plugin['group_id'], plugin['artifact_id'], plugin['packaging'], plugin['classifier'], plugin['version'], @config['plugins_dir'], 'java', force_download, verify_sha1)
82
+ infos << install_plugin(plugin['name'], nil, plugin['group_id'], plugin['artifact_id'], plugin['packaging'], plugin['classifier'], plugin['version'], @config['plugins_dir'], 'java', force_download, verify_sha1)
83
83
  end
84
84
 
85
85
  infos
@@ -90,7 +90,7 @@ module KPM
90
90
 
91
91
  infos = []
92
92
  @config['plugins']['ruby'].each do |plugin|
93
- infos << install_plugin(plugin['name'], plugin['group_id'], plugin['artifact_id'], plugin['packaging'], plugin['classifier'], plugin['version'], @config['plugins_dir'], 'ruby', force_download, verify_sha1)
93
+ infos << install_plugin(plugin['name'], nil, plugin['group_id'], plugin['artifact_id'], plugin['packaging'], plugin['classifier'], plugin['version'], @config['plugins_dir'], 'ruby', force_download, verify_sha1)
94
94
  end
95
95
 
96
96
  infos
@@ -5,10 +5,10 @@ module KPM
5
5
  class KauiArtifact < BaseArtifact
6
6
  class << self
7
7
  def versions(overrides={}, ssl_verify=true)
8
- coordinates = build_coordinates(KPM::BaseArtifact::KAUI_GROUP_ID,
9
- KPM::BaseArtifact::KAUI_ARTIFACT_ID,
10
- KPM::BaseArtifact::KAUI_PACKAGING,
11
- KPM::BaseArtifact::KAUI_CLASSIFIER)
8
+
9
+ coordinate_map = {:group_id => KPM::BaseArtifact::KAUI_GROUP_ID, :artifact_id => KPM::BaseArtifact::KAUI_ARTIFACT_ID, :packaging => KPM::BaseArtifact::KAUI_PACKAGING, :classifier => KPM::BaseArtifact::KAUI_CLASSIFIER}
10
+
11
+ coordinates = build_coordinates(coordinate_map)
12
12
  response = REXML::Document.new nexus_remote(overrides, ssl_verify).search_for_artifacts(coordinates)
13
13
  versions = SortedSet.new
14
14
  response.elements.each('search-results/data/artifact/version') { |element| versions << element.text }
@@ -5,7 +5,8 @@ module KPM
5
5
  class KillbillServerArtifact < BaseArtifact
6
6
  class << self
7
7
  def versions(artifact_id, packaging=KPM::BaseArtifact::KILLBILL_PACKAGING, classifier=KPM::BaseArtifact::KILLBILL_CLASSIFIER, overrides={}, ssl_verify=true)
8
- coordinates = build_coordinates(KPM::BaseArtifact::KILLBILL_GROUP_ID, artifact_id, packaging, classifier)
8
+ coordinate_map = {:group_id => KPM::BaseArtifact::KILLBILL_GROUP_ID, :artifact_id => artifact_id, :packaging => packaging, :classifier => classifier}
9
+ coordinates = build_coordinates(coordinate_map)
9
10
  response = REXML::Document.new nexus_remote(overrides, ssl_verify).search_for_artifacts(coordinates)
10
11
  versions = SortedSet.new
11
12
  response.elements.each('search-results/data/artifact/version') { |element| versions << element.text }
@@ -54,32 +54,32 @@ module KPM
54
54
  end
55
55
  end
56
56
 
57
- def validate_plugin_identifier_key(plugin_key, coordinates)
58
-
57
+ def validate_plugin_identifier_key(plugin_key, coordinate_map)
59
58
  identifiers = read_plugin_identifiers
60
59
  entry = identifiers[plugin_key]
61
60
  if entry
62
- [:group_id, :artifact_id, :packaging, :classifier, :version].each_with_index do |value_type, idx|
63
- return false if !validate_plugin_identifier_key_value(plugin_key, value_type, entry[value_type.to_s], coordinates[idx])
61
+ coordinate_map.each_pair do |key, value|
62
+ return false if !validate_plugin_identifier_key_value(plugin_key, key, entry[key.to_s], value)
64
63
  end
65
64
  end
66
65
  true
67
66
  end
68
67
 
69
- def add_plugin_identifier_key(plugin_key, plugin_name, language, coordinates)
68
+ def add_plugin_identifier_key(plugin_key, plugin_name, language, coordinate_map)
70
69
 
71
70
  identifiers = read_plugin_identifiers
72
- # If key does not already exists we update it, if not nothing to do
73
- if !identifiers.has_key?(plugin_key)
71
+ # If key does not already exists or if the version in the json is not the one we are currently installing we update the entry, if not nothing to do
72
+ if !identifiers.has_key?(plugin_key) ||
73
+ (coordinate_map && identifiers[plugin_key]['version'] != coordinate_map[:version])
74
74
 
75
75
  entry = {'plugin_name' => plugin_name}
76
76
  entry['language'] = language
77
- if coordinates
78
- entry['group_id'] = coordinates[0]
79
- entry['artifact_id'] = coordinates[1]
80
- entry['packaging'] = coordinates[2]
81
- entry['classifier'] = coordinates[3]
82
- entry['version'] = coordinates[4]
77
+ if coordinate_map
78
+ entry['group_id'] = coordinate_map[:group_id]
79
+ entry['artifact_id'] = coordinate_map[:artifact_id]
80
+ entry['packaging'] = coordinate_map[:packaging]
81
+ entry['classifier'] = coordinate_map[:classifier]
82
+ entry['version'] = coordinate_map[:version]
83
83
  end
84
84
  identifiers[plugin_key] = entry
85
85
  write_plugin_identifiers(identifiers)
@@ -24,6 +24,10 @@ module KPM
24
24
  @sha1_config['sha1'][coordinates]
25
25
  end
26
26
 
27
+ def all_sha1()
28
+ @sha1_config['sha1']
29
+ end
30
+
27
31
  def add_or_modify_entry!(coordinates, sha1)
28
32
  @sha1_config['sha1'][coordinates] = sha1
29
33
  save!
data/lib/kpm/tasks.rb CHANGED
@@ -174,6 +174,27 @@ module KPM
174
174
  say "Artifact has been retrieved and can be found at path: #{response[:file_path]}", :green
175
175
  end
176
176
 
177
+ method_option :force_download,
178
+ :type => :boolean,
179
+ :default => false,
180
+ :desc => 'Force download of the artifact even if it exists'
181
+ method_option :verify_sha1,
182
+ :type => :boolean,
183
+ :default => true,
184
+ :desc => 'Validates sha1 sum'
185
+ desc 'pull_defaultbundles', 'Pulls the default OSGI bundles from Sonatype and places it on your machine.'
186
+ def pull_defaultbundles(kb_version='LATEST')
187
+ response = BaseInstaller.new(logger,
188
+ options[:overrides],
189
+ options[:ssl_verify])
190
+ .install_default_bundles(nil,
191
+ nil,
192
+ kb_version,
193
+ options[:force_download],
194
+ options[:verify_sha1])
195
+ say "Artifact has been retrieved and can be found at path: #{response[:file_path]}", :green
196
+ end
197
+
177
198
  desc 'search_for_plugins', 'Searches for all available plugins and prints them to the screen.'
178
199
  def search_for_plugins
179
200
  all_plugins = KillbillPluginArtifact.versions(options[:overrides], options[:ssl_verify])
data/lib/kpm/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module KPM
2
- VERSION = '0.1.3'
2
+ VERSION = '0.1.4'
3
3
  end
@@ -46,6 +46,15 @@ describe KPM::Installer do
46
46
  # Verify idempotency
47
47
  installer.install
48
48
  check_installation(plugins_dir, kb_webapp_path, kaui_webapp_path)
49
+
50
+ # Finally verify that for both (well behaved) ruby and java plugin, skipping the install will still correctly return the `:bundle_dir`
51
+ info = installer.install_plugin('payment-test-plugin', nil, 'org.kill-bill.billing.plugin.ruby', 'payment-test-plugin', nil, nil, '1.8.7', plugins_dir)
52
+ info[:bundle_dir].should == plugins_dir + '/plugins/ruby/killbill-payment-test/1.8.7'
53
+
54
+
55
+ info = installer.install_plugin('analytics', nil, nil, nil, nil, nil, '0.7.1', plugins_dir)
56
+ info[:bundle_dir].should == plugins_dir + '/plugins/java/analytics-plugin/0.7.1'
57
+
49
58
  end
50
59
  end
51
60
 
@@ -9,29 +9,40 @@ describe KPM::KillbillPluginArtifact do
9
9
 
10
10
  it 'should be able to download and verify artifacts' do
11
11
  Dir.mktmpdir do |dir|
12
+ sha1_file = dir + '/sha1.yml'
12
13
  info = KPM::KillbillPluginArtifact.pull(@logger,
13
14
  KPM::BaseArtifact::KILLBILL_JAVA_PLUGIN_GROUP_ID,
14
15
  'analytics-plugin',
15
16
  KPM::BaseArtifact::KILLBILL_JAVA_PLUGIN_PACKAGING,
16
17
  KPM::BaseArtifact::KILLBILL_JAVA_PLUGIN_CLASSIFIER,
17
18
  'LATEST',
18
- dir)
19
+ dir,
20
+ sha1_file)
19
21
  info[:file_name].should == "analytics-plugin-#{info[:version]}.jar"
20
22
  info[:size].should == File.size(info[:file_path])
23
+
24
+ check_yaml_for_resolved_latest_version(sha1_file, 'org.kill-bill.billing.plugin.java:analytics-plugin:jar', '3.0.0')
21
25
  end
22
26
 
23
27
  Dir.mktmpdir do |dir|
28
+ sha1_file = dir + '/sha1.yml'
24
29
  info = KPM::KillbillPluginArtifact.pull(@logger,
25
30
  KPM::BaseArtifact::KILLBILL_RUBY_PLUGIN_GROUP_ID,
26
31
  'logging-plugin',
27
32
  KPM::BaseArtifact::KILLBILL_RUBY_PLUGIN_PACKAGING,
28
33
  KPM::BaseArtifact::KILLBILL_RUBY_PLUGIN_CLASSIFIER,
29
34
  'LATEST',
30
- dir)
35
+ dir,
36
+ sha1_file)
31
37
 
32
38
  # No file name - since we untar'ed it
33
39
  info[:file_name].should be_nil
40
+
41
+ check_yaml_for_resolved_latest_version(sha1_file, 'org.kill-bill.billing.plugin.ruby:logging-plugin:tar.gz', '3.0.0')
34
42
  end
43
+
44
+
45
+
35
46
  end
36
47
 
37
48
  it 'should be able to list versions' do
@@ -51,4 +62,24 @@ describe KPM::KillbillPluginArtifact do
51
62
  logging_plugin_versions.size.should >= 1
52
63
  logging_plugin_versions[0].should == '1.7.0'
53
64
  end
65
+
66
+ private
67
+
68
+ # We verify that 'LATEST' version has been correctly translated into the yml file
69
+ # (we can't check against actual version because as we keep releasing those increment,
70
+ # so the best we can do it check this is *not* LATEST and greater than current version at the time the test was written )
71
+ def check_yaml_for_resolved_latest_version(sha1_file, key_prefix, minimum_version)
72
+
73
+ sha1_checker = KPM::Sha1Checker.from_file(sha1_file)
74
+
75
+ keys = sha1_checker.all_sha1.keys.select { |k| k.start_with? key_prefix}
76
+ keys.size.should == 1
77
+
78
+ parts = keys[0].split(':')
79
+ parts.size.should == 4
80
+ parts[3].should_not == 'LATEST'
81
+ parts[3].should >= minimum_version
82
+ end
83
+
84
+
54
85
  end
@@ -30,7 +30,8 @@ describe KPM::PluginsManager do
30
30
 
31
31
  it 'creates a plugin identifier entry with coordinates' do
32
32
  # Verifies file gets created if does not exist
33
- identifiers = @manager.add_plugin_identifier_key('bar', 'bar_name', 'type', ['group', 'artifact', 'packaging', nil, 'version'])
33
+ coordinate_map = {:group_id => 'group', :artifact_id => 'artifact', :packaging => 'packaging', :version => 'version'}
34
+ identifiers = @manager.add_plugin_identifier_key('bar', 'bar_name', 'type', coordinate_map)
34
35
  identifiers.size.should == 1
35
36
  identifiers['bar']['plugin_name'].should == 'bar_name'
36
37
  identifiers['bar']['group_id'].should == 'group'
@@ -98,17 +99,40 @@ describe KPM::PluginsManager do
98
99
 
99
100
  it 'creates plugin identifiers and validate entry' do
100
101
  # Verifies file gets created if does not exist
101
- identifiers = @manager.add_plugin_identifier_key('yoyo', 'yoyo_name', 'type', ['group', 'artifact', 'packaging', nil, 'version'])
102
+ coordinate_map = {:group_id => 'group', :artifact_id => 'artifact', :packaging => 'packaging', :version => 'version'}
103
+
104
+ identifiers = @manager.add_plugin_identifier_key('yoyo', 'yoyo_name', 'type', coordinate_map)
102
105
  identifiers.size.should == 1
103
106
  identifiers['yoyo']['plugin_name'].should == 'yoyo_name'
104
107
 
105
- @manager.validate_plugin_identifier_key('yoyo', ['group', 'artifact', 'packaging', nil, 'version']).should == true
108
+ @manager.validate_plugin_identifier_key('yoyo', coordinate_map).should == true
106
109
 
107
110
  # Negative validation
108
- @manager.validate_plugin_identifier_key('yoyo', ['group1', 'artifact', 'packaging', nil, 'version']).should == false
111
+ invalid_coordinate_map = {:group_id => 'group1', :artifact_id => 'artifact', :packaging => 'packaging', :version => 'version'}
112
+
113
+ @manager.validate_plugin_identifier_key('yoyo', invalid_coordinate_map).should == false
109
114
  end
110
115
 
111
116
 
117
+ it 'creates a plugin identifier entry with a new version' do
118
+ # Verifies file gets created if does not exist
119
+
120
+ coordinate_map1 = {:group_id => 'group', :artifact_id => 'artifact', :packaging => 'packaging', :version => 'version1'}
121
+
122
+ identifiers = @manager.add_plugin_identifier_key('bar', 'bar_name', 'type', coordinate_map1)
123
+ identifiers.size.should == 1
124
+ identifiers['bar']['plugin_name'].should == 'bar_name'
125
+ identifiers['bar']['version'].should == 'version1'
126
+
127
+ coordinate_map2 = {:group_id => 'group', :artifact_id => 'artifact', :packaging => 'packaging', :version => 'version2'}
128
+
129
+ identifiers = @manager.add_plugin_identifier_key('bar', 'bar_name', 'type', coordinate_map2)
130
+ identifiers.size.should == 1
131
+ identifiers['bar']['plugin_name'].should == 'bar_name'
132
+ identifiers['bar']['version'].should == 'version2'
133
+
134
+ end
135
+
112
136
  it 'sets a path as active' do
113
137
  @manager.set_active(@plugin_dir.join('1.0.0'))
114
138
  File.exists?(@plugin_dir.join('SET_DEFAULT')).should be_true
metadata CHANGED
@@ -1,85 +1,85 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kpm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kill Bill core team
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-18 00:00:00.000000000 Z
11
+ date: 2015-12-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: highline
15
- version_requirements: !ruby/object:Gem::Requirement
15
+ requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: 1.6.21
20
- requirement: !ruby/object:Gem::Requirement
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
21
23
  requirements:
22
- - - ~>
24
+ - - "~>"
23
25
  - !ruby/object:Gem::Version
24
26
  version: 1.6.21
25
- prerelease: false
26
- type: :runtime
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: nexus_cli
29
- version_requirements: !ruby/object:Gem::Requirement
29
+ requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: 4.1.0
34
- requirement: !ruby/object:Gem::Requirement
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
35
37
  requirements:
36
- - - ~>
38
+ - - "~>"
37
39
  - !ruby/object:Gem::Version
38
40
  version: 4.1.0
39
- prerelease: false
40
- type: :runtime
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: thor
43
- version_requirements: !ruby/object:Gem::Requirement
43
+ requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
47
  version: 0.19.1
48
- requirement: !ruby/object:Gem::Requirement
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
49
51
  requirements:
50
- - - ~>
52
+ - - "~>"
51
53
  - !ruby/object:Gem::Version
52
54
  version: 0.19.1
53
- prerelease: false
54
- type: :runtime
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rake
57
- version_requirements: !ruby/object:Gem::Requirement
57
+ requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: 10.0.0
62
- requirement: !ruby/object:Gem::Requirement
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
63
65
  requirements:
64
- - - '>='
66
+ - - ">="
65
67
  - !ruby/object:Gem::Version
66
68
  version: 10.0.0
67
- prerelease: false
68
- type: :development
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rspec
71
- version_requirements: !ruby/object:Gem::Requirement
71
+ requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ~>
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
75
  version: 2.12.0
76
- requirement: !ruby/object:Gem::Requirement
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
77
79
  requirements:
78
- - - ~>
80
+ - - "~>"
79
81
  - !ruby/object:Gem::Version
80
82
  version: 2.12.0
81
- prerelease: false
82
- type: :development
83
83
  description: A package manager for Kill Bill.
84
84
  email: killbilling-users@googlegroups.com
85
85
  executables:
@@ -87,8 +87,8 @@ executables:
87
87
  extensions: []
88
88
  extra_rdoc_files: []
89
89
  files:
90
- - .gemrelease
91
- - .gitignore
90
+ - ".gemrelease"
91
+ - ".gitignore"
92
92
  - Gemfile
93
93
  - README.md
94
94
  - Rakefile
@@ -127,26 +127,38 @@ homepage: http://kill-bill.org
127
127
  licenses:
128
128
  - Apache License (2.0)
129
129
  metadata: {}
130
- post_install_message:
130
+ post_install_message:
131
131
  rdoc_options:
132
- - --exclude
133
- - .
132
+ - "--exclude"
133
+ - "."
134
134
  require_paths:
135
135
  - lib
136
136
  required_ruby_version: !ruby/object:Gem::Requirement
137
137
  requirements:
138
- - - '>='
138
+ - - ">="
139
139
  - !ruby/object:Gem::Version
140
140
  version: 1.8.6
141
141
  required_rubygems_version: !ruby/object:Gem::Requirement
142
142
  requirements:
143
- - - '>='
143
+ - - ">="
144
144
  - !ruby/object:Gem::Version
145
145
  version: '0'
146
146
  requirements: []
147
- rubyforge_project:
148
- rubygems_version: 2.1.9
149
- signing_key:
147
+ rubyforge_project:
148
+ rubygems_version: 2.2.2
149
+ signing_key:
150
150
  specification_version: 4
151
151
  summary: Kill Bill package manager.
152
- test_files: []
152
+ test_files:
153
+ - spec/kpm/remote/base_artifact_spec.rb
154
+ - spec/kpm/remote/installer_spec.rb
155
+ - spec/kpm/remote/kaui_artifact_spec.rb
156
+ - spec/kpm/remote/killbill_plugin_artifact_spec.rb
157
+ - spec/kpm/remote/killbill_server_artifact_spec.rb
158
+ - spec/kpm/remote/tomcat_manager_spec.rb
159
+ - spec/kpm/unit/base_artifact_spec.rb
160
+ - spec/kpm/unit/plugins_directory_spec.rb
161
+ - spec/kpm/unit/plugins_manager_spec.rb
162
+ - spec/kpm/unit/sha1_checker_spec.rb
163
+ - spec/kpm/unit/sha1_test.yml
164
+ - spec/spec_helper.rb