lock_jar 0.13.0 → 0.14.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.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +16 -0
  3. data/.rubocop.yml +28 -0
  4. data/.travis.yml +12 -1
  5. data/Gemfile +6 -3
  6. data/Guardfile +2 -3
  7. data/README.md +17 -16
  8. data/Rakefile +11 -7
  9. data/lib/lock_jar/buildr.rb +95 -89
  10. data/lib/lock_jar/bundler.rb +85 -84
  11. data/lib/lock_jar/class_loader.rb +19 -21
  12. data/lib/lock_jar/cli.rb +32 -25
  13. data/lib/lock_jar/domain/artifact.rb +39 -45
  14. data/lib/lock_jar/domain/dsl.rb +50 -79
  15. data/lib/lock_jar/domain/dsl_merger.rb +76 -0
  16. data/lib/lock_jar/domain/gem_dsl.rb +10 -12
  17. data/lib/lock_jar/domain/jarfile_dsl.rb +6 -18
  18. data/lib/lock_jar/domain/lockfile.rb +17 -24
  19. data/lib/lock_jar/logging.rb +4 -3
  20. data/lib/lock_jar/maven.rb +29 -29
  21. data/lib/lock_jar/registry.rb +52 -60
  22. data/lib/lock_jar/resolver.rb +17 -20
  23. data/lib/lock_jar/runtime/install.rb +28 -0
  24. data/lib/lock_jar/runtime/list.rb +55 -0
  25. data/lib/lock_jar/runtime/load.rb +54 -0
  26. data/lib/lock_jar/runtime/lock.rb +152 -0
  27. data/lib/lock_jar/runtime.rb +30 -302
  28. data/lib/lock_jar/version.rb +2 -1
  29. data/lib/lock_jar.rb +137 -105
  30. data/lock_jar.gemspec +7 -4
  31. data/spec/fixtures/jarfile_gem/Gemfile +4 -0
  32. data/spec/fixtures/jarfile_gem/Jarfile +1 -0
  33. data/spec/fixtures/jarfile_gem/jarfile_gem.gemspec +23 -0
  34. data/spec/fixtures/jarfile_gem/lib/jarfile_gem/version.rb +3 -0
  35. data/spec/fixtures/jarfile_gem/lib/jarfile_gem.rb +5 -0
  36. data/spec/lock_jar/bundler_spec.rb +27 -0
  37. data/spec/lock_jar/class_loader_spec.rb +34 -36
  38. data/spec/lock_jar/cli_spec.rb +39 -46
  39. data/spec/lock_jar/domain/dsl_merger_spec.rb +49 -0
  40. data/spec/lock_jar/domain/dsl_spec.rb +35 -37
  41. data/spec/lock_jar/domain/gem_dsl_spec.rb +18 -0
  42. data/spec/lock_jar/maven_spec.rb +9 -11
  43. data/spec/lock_jar/resolver_spec.rb +16 -17
  44. data/spec/lock_jar/runtime_spec.rb +17 -13
  45. data/spec/lock_jar_spec.rb +255 -195
  46. data/spec/spec_helper.rb +13 -8
  47. data/spec/support/helper.rb +13 -5
  48. data/spec/support/shared_examples/lockfile.rb +4 -6
  49. metadata +43 -19
  50. data/bundler/Gemfile +0 -21
  51. data/bundler/LICENSE.txt +0 -22
  52. data/bundler/README.md +0 -29
  53. data/bundler/Rakefile +0 -2
  54. data/bundler/lib/lock_jar_bundler/bundler.rb +0 -35
  55. data/bundler/lib/lock_jar_bundler/piggy_back.rb +0 -98
  56. data/bundler/lib/lock_jar_bundler/version.rb +0 -5
  57. data/bundler/lib/lock_jar_bundler.rb +0 -5
  58. data/bundler/lock_jar_bundler.gemspec +0 -24
  59. data/bundler/spec/Jarfile +0 -3
  60. data/bundler/spec/dummy_gem/Jarfile +0 -1
  61. data/bundler/spec/dummy_gem/dummy_gem.gemspec +0 -19
  62. data/bundler/spec/lock_jar_bundler_spec.rb +0 -49
  63. data/bundler/spec/spec_helper.rb +0 -88
  64. data/lib/lock_jar/domain/dsl_helper.rb +0 -84
  65. data/spec/lock_jar/domain/dsl_helper_spec.rb +0 -52
@@ -13,7 +13,6 @@
13
13
  # License for the specific language governing permissions and limitations under
14
14
  # the License.
15
15
 
16
- require 'rubygems'
17
16
  require 'yaml'
18
17
  require 'singleton'
19
18
  require 'lock_jar/resolver'
@@ -21,11 +20,18 @@ require 'lock_jar/registry'
21
20
  require 'lock_jar/domain/dsl'
22
21
  require 'lock_jar/domain/jarfile_dsl'
23
22
  require 'lock_jar/domain/lockfile'
23
+ require 'lock_jar/runtime/load'
24
+ require 'lock_jar/runtime/lock'
25
+ require 'lock_jar/runtime/list'
26
+ require 'lock_jar/runtime/install'
24
27
 
25
28
  module LockJar
26
-
29
+ #
27
30
  class Runtime
28
31
  include Singleton
32
+ include Load
33
+ include List
34
+ include Install
29
35
 
30
36
  attr_reader :current_resolver
31
37
 
@@ -33,25 +39,27 @@ module LockJar
33
39
  @current_resolver = nil
34
40
  end
35
41
 
36
- def resolver( opts = {} )
42
+ def lock(jarfile_or_dsl, opts = {}, &blk)
43
+ Lock.new(self).lock(jarfile_or_dsl, opts, &blk)
44
+ end
45
+
46
+ def opts
47
+ current_resolver.opts if current_resolver
48
+ end
37
49
 
50
+ def resolver(opts = {})
38
51
  # XXX: Caches the resolver by the options. Passing in nil opts will replay
39
52
  # from the cache. This need to change.
40
-
41
- unless opts.nil?
42
- if opts[:local_repo]
43
- opts[:local_repo] = File.expand_path(opts[:local_repo])
44
- end
53
+ if !opts.nil?
54
+ opts[:local_repo] = File.expand_path(opts[:local_repo]) if opts[:local_repo]
55
+ elsif @current_resolver
56
+ opts = @current_resolver.opts
45
57
  else
46
- if @current_resolver
47
- opts = @current_resolver.opts
48
- else
49
- opts = {}
50
- end
58
+ opts = {}
51
59
  end
52
60
 
53
61
  if @current_resolver.nil? || opts != @current_resolver.opts
54
- @current_resolver = LockJar::Resolver.new( opts )
62
+ @current_resolver = LockJar::Resolver.new(opts)
55
63
  end
56
64
 
57
65
  @current_resolver
@@ -61,309 +69,29 @@ module LockJar
61
69
  @current_resolver = nil
62
70
  end
63
71
 
64
- def install( jarfile_lock, groups = ['default'], opts = {}, &blk )
65
- deps = list( jarfile_lock, groups, {:with_locals => false}.merge( opts ), &blk )
66
-
67
- lockfile = LockJar::Domain::Lockfile.read( jarfile_lock )
68
- if opts[:local_repo].nil? && lockfile.local_repository
69
- opts[:local_repo] = lockfile.local_repository
70
- end
71
-
72
- # Older Jarfile expected the defaul maven repo, but did not write
73
- # it to the lockfile
74
- if lockfile.version.to_f >= 0.11
75
- resolver(opts).clear_remote_repositories
76
- end
77
-
78
- lockfile.remote_repositories.each do |repo|
79
- resolver(opts).add_remote_repository( repo )
80
- end
81
-
82
- files = resolver(opts).download( deps )
83
-
84
- files
85
- end
86
-
87
- def lock( jarfile_or_dsl, opts = {}, &blk )
88
-
89
- opts = {:download => true }.merge( opts )
90
-
91
- jarfile = nil
92
-
93
- if jarfile_or_dsl
94
- if jarfile_or_dsl.is_a? LockJar::Domain::Dsl
95
- jarfile = jarfile_or_dsl
96
- else
97
- jarfile = LockJar::Domain::JarfileDsl.create( jarfile_or_dsl )
98
- end
99
- end
100
-
101
- unless blk.nil?
102
- dsl = LockJar::Domain::Dsl.create(&blk)
103
- if jarfile.nil?
104
- jarfile = dsl
105
- else
106
- jarfile = LockJar::Domain::DslHelper.merge( jarfile, dsl )
107
- end
108
- end
109
-
110
- if jarfile.respond_to?(:bundler_enabled ) && jarfile.bundler_enabled
111
- require 'lock_jar_bundler/bundler'
112
-
113
- LockJar::Bundler.bundled_jarfiles(jarfile.bundler_enabled).each do |bundled_jarfile|
114
- jarfile = LockJar::Domain::DslHelper.merge( jarfile, LockJar::Domain::JarfileDsl.create(bundled_jarfile) )
115
- end
116
- end
117
-
118
-
119
- # If not set in opts, and is set in dsl
120
- if opts[:local_repo].nil? && jarfile.local_repository
121
- opts[:local_repo] = jarfile.local_repository
122
- end
123
-
124
- lockfile = LockJar::Domain::Lockfile.new
125
-
126
- if jarfile.clear_repositories
127
- resolver(opts).clear_remote_repositories
128
- else
129
- repos = resolver(opts).remote_repositories
130
- lockfile.remote_repositories += repos.to_a if repos
131
- end
132
-
133
- jarfile.remote_repositories.each do |repo|
134
- resolver(opts).add_remote_repository( repo )
135
- lockfile.remote_repositories << repo
136
- end
137
-
138
- unless jarfile.local_repository.nil?
139
- lockfile.local_repository = jarfile.local_repository
140
- end
141
-
142
- if jarfile.maps.size > 0
143
- lockfile.maps = jarfile.maps
144
- end
145
-
146
- if jarfile.excludes.size > 0
147
- lockfile.excludes = jarfile.excludes
148
- end
149
-
150
- artifacts = []
151
- jarfile.artifacts.each do |group, group_artifacts|
152
- group_artifacts.each do |artifact|
153
- artifacts += group_artifacts
154
- end
155
- end
156
-
157
- if !jarfile.merged.empty?
158
- lockfile.merged = jarfile.merged
159
- end
160
-
161
- if !artifacts.empty?
162
- resolved_notations = resolver(opts).resolve( artifacts.select{ |artifact| artifact.resolvable? }.map(&:to_dep), opts[:download] == true )
163
-
164
- jarfile.artifacts.each do |group_name, group_artifacts|
165
- group = {'locals' => [], 'dependencies' => [], 'artifacts' => []}
166
-
167
- group_artifacts.each do |artifact|
168
-
169
- artifact_data = {}
170
-
171
- if artifact.is_a? LockJar::Domain::Jar
172
- group['dependencies'] << artifact.notation
173
- g = resolver(opts).dependencies_graph[artifact.notation]
174
- artifact_data["transitive"] = g.to_hash if g
175
-
176
- elsif artifact.is_a? LockJar::Domain::Pom
177
- artifact_data['scopes'] = artifact.scopes
178
-
179
- # iterate each dependency in Pom to map transitive dependencies
180
- transitive = {}
181
- artifact.notations.each do |notation|
182
- transitive.merge!( notation => resolver(opts).dependencies_graph[notation] )
183
- end
184
- artifact_data["transitive"] = transitive
185
-
186
- elsif artifact.is_a? LockJar::Domain::Local
187
- group['locals'] << artifact.path
188
- else
189
- # XXX: handle unsupported artifact
190
-
191
- end
192
-
193
- # flatten the graph of nested hashes
194
- dep_merge = lambda do |graph|
195
- deps = graph.keys
196
- graph.values.each do |next_step|
197
- deps += dep_merge.call(next_step)
198
- end
199
- deps
200
- end
201
-
202
- if artifact_data["transitive"]
203
- group['dependencies'] += dep_merge.call( artifact_data["transitive"] )
204
-
205
- # xxX: set required_by ?
206
-
207
- group['artifacts'] << { artifact.to_urn => artifact_data }
208
- end
209
- end
210
-
211
- if lockfile.excludes
212
- lockfile.excludes.each do |exclude|
213
- group['dependencies'].delete_if { |dep| dep =~ /#{exclude}/ }
214
- end
215
- end
216
-
217
- group['dependencies'].sort!
218
- if group['locals'].empty?
219
- group.delete 'locals'
220
- end
221
-
222
- lockfile.groups[group_name] = group
223
- end
224
- end
225
-
226
- lockfile.write( opts[:lockfile] || "Jarfile.lock" )
227
-
228
- lockfile
229
- end
230
-
231
- def list( lockfile_or_path, groups = ['default'], opts = {}, &blk )
232
-
233
- lockfile = nil
234
- dependencies = []
235
- maps = []
236
- with_locals = {:with_locals => true }.merge(opts).delete :with_locals
237
-
238
- if lockfile_or_path
239
- if lockfile_or_path.is_a? LockJar::Domain::Lockfile
240
- lockfile = lockfile_or_path
241
- elsif lockfile_or_path
242
- lockfile = LockJar::Domain::Lockfile.read( lockfile_or_path )
243
- end
244
-
245
- dependencies = lockfile_dependencies( lockfile, groups, with_locals )
246
- maps = lockfile.maps
247
- end
248
-
249
- # Support limited DSL from block
250
- unless blk.nil?
251
- dsl = LockJar::Domain::Dsl.create(&blk)
252
- dependencies += dsl_dependencies( dsl, groups, with_locals ).map(&:to_dep)
253
- maps = dsl.maps
254
- end
255
-
256
- if maps && maps.size > 0
257
- mapped_dependencies = []
258
-
259
- maps.each do |notation, replacements|
260
- dependencies.each do |dep|
261
- if dep =~ /#{notation}/
262
- replacements.each do |replacement|
263
- mapped_dependencies << replacement
264
- end
265
- else
266
- mapped_dependencies << dep
267
- end
268
- end
269
- end
270
-
271
- dependencies = mapped_dependencies
272
- end
273
-
274
- if opts[:resolve]
275
- dependencies = resolver(opts).resolve( dependencies )
276
- end
277
-
278
- if opts[:local_paths]
279
- opts.delete( :local_paths ) # remove list opts so resolver is not reset
280
- resolver(opts).to_local_paths( dependencies )
281
-
282
- else
283
- dependencies
284
- end
285
- end
286
-
287
- # Load paths from a lockfile or block. Paths are loaded once per lockfile.
288
- #
289
- # @param [String] lockfile_path the lockfile
290
- # @param [Array] groups to load into classpath
291
- # @param [Hash] opts
292
- # @param [Block] blk
293
- def load( lockfile_or_path, groups = ['default'], opts = {}, &blk )
294
-
295
- lockfile = nil
296
-
297
- # lockfile is only loaded once
298
- unless lockfile_or_path.nil?
299
- # loaded a Lockfile instance
300
- if lockfile_or_path.is_a? LockJar::Domain::Lockfile
301
- lockfile = lockfile_or_path
302
-
303
- # check if lockfile path is already loaded
304
- elsif LockJar::Registry.instance.lockfile_registered?( lockfile_or_path )
305
- return
306
-
307
- # convert lockfile path to a Lockfile instance
308
- else
309
- lockfile = LockJar::Domain::Lockfile.read( lockfile_or_path )
310
- end
311
-
312
-
313
- if opts[:local_repo].nil? && lockfile.local_repository
314
- opts[:local_repo] = lockfile.local_repository
315
- end
316
- end
317
-
318
- # set local_repo if passed in the block
319
- unless blk.nil?
320
- dsl = LockJar::Domain::Dsl.create(&blk)
321
-
322
- # set local_repo from block
323
- if opts[:local_repo].nil? && dsl.local_repository
324
- opts[:local_repo] = dsl.local_repository
325
- end
326
- end
327
-
328
- # registered merged lockfiles for lockfile
329
- if lockfile && !lockfile.merged.empty?
330
- lockfile.merged.each do |path|
331
- LockJar::Registry.instance.register_lockfile( path )
332
- end
333
- end
334
-
335
- dependencies = LockJar::Registry.instance.register_jars( list( lockfile, groups, opts, &blk ) )
336
-
337
- resolver(opts).load_to_classpath( dependencies )
338
- end
339
-
340
72
  private
341
73
 
342
- def lockfile_dependencies( lockfile, groups, with_locals = true)
74
+ def lockfile_dependencies(lockfile, groups, with_locals = true)
343
75
  dependencies = []
344
76
 
345
77
  groups.each do |group|
346
- if lockfile.groups[group.to_s]
347
- dependencies += lockfile.groups[group.to_s]['dependencies']
78
+ next unless lockfile.groups[group.to_s]
79
+ dependencies += lockfile.groups[group.to_s]['dependencies']
348
80
 
349
- if with_locals
350
- locals = lockfile.groups[group.to_s]['locals']
351
- dependencies += locals if locals
352
- end
81
+ if with_locals
82
+ locals = lockfile.groups[group.to_s]['locals']
83
+ dependencies += locals if locals
353
84
  end
354
85
  end
355
86
 
356
87
  dependencies
357
88
  end
358
89
 
359
- def dsl_dependencies( dsl, groups, with_locals = true)
360
-
90
+ def dsl_dependencies(dsl, groups, with_locals = true)
361
91
  dependencies = []
362
92
 
363
93
  groups.each do |group|
364
- if dsl.artifacts[group.to_s]
365
- dependencies += dsl.artifacts[group.to_s]
366
- end
94
+ dependencies += dsl.artifacts[group.to_s] if dsl.artifacts[group.to_s]
367
95
  end
368
96
 
369
97
  unless with_locals
@@ -1,3 +1,4 @@
1
+ # the version
1
2
  module LockJar
2
- VERSION = '0.13.0'
3
+ VERSION = '0.14.0'
3
4
  end
data/lib/lock_jar.rb CHANGED
@@ -13,12 +13,13 @@
13
13
  # License for the specific language governing permissions and limitations under
14
14
  # the License.
15
15
 
16
- require "yaml"
17
- require 'rubygems'
16
+ require 'yaml'
18
17
  require 'lock_jar/resolver'
19
18
  require 'lock_jar/runtime'
20
19
  require 'lock_jar/version'
21
20
  require 'lock_jar/domain/lockfile'
21
+ require 'lock_jar/domain/jarfile_dsl'
22
+ require 'lock_jar/domain/gem_dsl'
22
23
  require 'lock_jar/domain/dsl'
23
24
 
24
25
  #
@@ -27,128 +28,159 @@ require 'lock_jar/domain/dsl'
27
28
  # @author Michael Guymon
28
29
  #
29
30
  module LockJar
31
+ class << self
32
+ #
33
+ # Override LockJar configuration
34
+ #
35
+ def config(opts)
36
+ Runtime.instance.resolver(opts)
37
+ end
30
38
 
31
- #
32
- # Override LockJar configuration
33
- #
34
- def self.config( opts )
35
- Runtime.instance.resolver( opts )
36
- end
37
-
38
- def self.install( *args, &blk )
39
- lockfile, groups, opts = extract_args :lockfile, args, &blk
40
- Runtime.instance.install( lockfile, groups, opts, &blk )
41
- end
42
-
43
-
44
- # Lists all dependencies as notations for groups from the Jarfile.lock. Depending on the type of arg, a different configuration is set.
45
- #
46
- # * An arg of a String will set the Jarfile.lock, e.g. 'Better.lock'. Default lock file is *Jarfile.lock*.
47
- # * An arg of an Array will set the groups, e.g. ['development','test']. Defaults group is *default*
48
- # * An arg of a Hash will set the options, e.g. { :local_repo => 'path' }
49
- # * :local_repo [String] sets the local repo path
50
- # * :local_paths [Boolean] to true converts the notations to paths to jars in the local repo path
51
- # * :resolve [Boolean] to true will make transitive dependences resolve before loading to classpath
52
- #
53
- # A block can be passed in, overriding values from a Jarfile.lock.
54
- #
55
- # @return [Array] of jar and mapped path
56
- def self.list( *args, &blk )
57
- lockfile, groups, opts = extract_args :lockfile, args, &blk
58
- Runtime.instance.list( lockfile, groups, opts, &blk )
59
- end
39
+ def install(*args, &blk)
40
+ lockfile, groups, opts = extract_args :lockfile, args, &blk
41
+ Runtime.instance.install(lockfile, groups, opts, &blk)
42
+ end
60
43
 
61
- # LockJar.load(*args): Loads all dependencies to the classpath for groups from the Jarfile.lock. Depending on the type of arg, a different configuration is set.
62
- # * An arg of a String will set the Jarfile.lock, e.g. 'Better.lock'. Default lock file is *Jarfile.lock*.
63
- # * An arg of an Array will set the groups, e.g. ['development','test'].Defaults group is *default*.
64
- # * An arg of a Hash will set the options, e.g. { :local_repo => 'path' }
65
- # * :local_repo sets the local repo path
66
- # * :resolve to true will make transitive dependences resolve before loading to classpath
67
- #
68
- # A block can be passed in, overriding values from a Jarfile.lock.
69
- #
70
- # @return [Array] of absolute paths of jars and mapped paths loaded into claspath
71
- def self.load( *args, &blk )
72
- lockfile, groups, opts = extract_args :lockfile, args, &blk
73
- Runtime.instance.load( lockfile, groups, opts, &blk )
74
- end
44
+ # Lists all dependencies as notations for groups from the Jarfile.lock.
45
+ # Depending on the type of arg, a different configuration is set.
46
+ #
47
+ # * An arg of a String will set the Jarfile.lock, e.g. 'Better.lock'.
48
+ # Default lock file is *Jarfile.lock*.
49
+ # * An arg of an Array will set the groups, e.g. ['development','test'].
50
+ # Defaults group is *default*
51
+ # * An arg of a Hash will set the options, e.g. { :local_repo => 'path' }
52
+ # * :local_repo [String] sets the local repo path
53
+ # * :local_paths [Boolean] to true converts the notations to paths to jars
54
+ # in the local repo path
55
+ # * :resolve [Boolean] to true will make transitive dependences resolve
56
+ # before loading to classpath
57
+ #
58
+ # A block can be passed in, overriding values from a Jarfile.lock.
59
+ #
60
+ # @return [Array] of jar and mapped path
61
+ def list(*args, &blk)
62
+ lockfile, groups, opts = extract_args :lockfile, args, &blk
63
+ Runtime.instance.list(lockfile, groups, opts, &blk)
64
+ end
75
65
 
76
- # Lock a Jarfile and generate a Jarfile.lock.
77
- #
78
- # LockJar.lock accepts an Array for parameters. Depending on the type of arg, a different configuration is set.
79
- #
80
- # * An arg of a String will set the Jarfile, e.g. 'Jarfile.different'. Default Jarfile is *Jarfile*.
81
- # * An arg of a Hash will set the options, e.g. { :local_repo => 'path' }
82
- # * :download_artifacts if true, will download jars to local repo. Defaults to true.
83
- # * :local_repo sets the local repo path
84
- # * :lockfile sets the Jarfile.lock path. Default lockfile is *Jarfile.lock*.
85
- #
86
- # A block can be passed in, overriding values from a Jarfile.
87
- #
88
- # @return [Hash] Lock data
89
- def self.lock( *args, &blk )
90
- jarfile, groups, opts = extract_args :jarfile, args, &blk
91
- Runtime.instance.lock( jarfile, opts, &blk )
92
- end
66
+ # LockJar.load(*args): Loads all dependencies to the classpath for groups
67
+ # from the Jarfile.lock. Depending on the type of arg, a different configuration is set.
68
+ # * An arg of a String will set the Jarfile.lock, e.g. 'Better.lock'.
69
+ # Default lock file is *Jarfile.lock*.
70
+ # * An arg of an Array will set the groups, e.g. ['development','test'].
71
+ # Defaults group is *default*.
72
+ # * An arg of a Hash will set the options, e.g. { :local_repo => 'path' }
73
+ # * :local_repo [String] sets the local repo path
74
+ # * :resolve [Boolean] to true will make transitive dependences resolve
75
+ # before loading to classpath
76
+ # * :disable [Boolean] to true will disable any additional calls to load and lock
77
+ #
78
+ # A block can be passed in, overriding values from a Jarfile.lock.
79
+ #
80
+ # @return [Array] of absolute paths of jars and mapped paths loaded into claspath
81
+ def load(*args, &blk)
82
+ if Runtime.instance.opts.nil? || !Runtime.instance.opts[:disable]
83
+ lockfile, groups, opts = extract_args(:lockfile, args, &blk)
84
+ Runtime.instance.load(lockfile, groups, opts, &blk)
85
+ else
86
+ puts 'LockJar#load has been disabled'
87
+ []
88
+ end
89
+ end
93
90
 
94
- #
95
- # Read a Jafile.lock and convert it to a LockJar::Domain::Lockfile
96
- #
97
- # @param [String] lockfile path to lockfile
98
- # @return [Hash] Lock Data
99
- def self.read( lockfile )
100
- LockJar::Domain::Lockfile.read( lockfile )
101
- end
91
+ # Lock a Jarfile and generate a Jarfile.lock.
92
+ #
93
+ # LockJar.lock accepts an Array for parameters. Depending on the type of
94
+ # arg, a different configuration is set.
95
+ #
96
+ # * An arg of a String will set the Jarfile, e.g. 'Jarfile.different'.
97
+ # Default Jarfile is *Jarfile*.
98
+ # * An arg of a Hash will set the options, e.g. { :local_repo => 'path' }
99
+ # * :download_artifacts if true, will download jars to local repo. Defaults to true.
100
+ # * :local_repo sets the local repo path
101
+ # * :lockfile sets the Jarfile.lock path. Default lockfile is *Jarfile.lock*.
102
+ # * :disable [Boolean] to true will disable any additional calls to load and lock
103
+
104
+ # A block can be passed in, overriding values from a Jarfile.
105
+ #
106
+ # @return [Hash] Lock data
107
+ def lock(*args, &blk)
108
+ if Runtime.instance.opts.nil? || !Runtime.instance.opts[:disable]
109
+ jarfile, _, opts = extract_args(:jarfile, args, &blk)
110
+ Runtime.instance.lock(jarfile, opts, &blk)
111
+ else
112
+ puts 'LockJar#lock has been disabled'
113
+ []
114
+ end
115
+ end
102
116
 
103
- # Add a Jarfile to be included when LockJar.lock_registered_jarfiles is called.
104
- #
105
- # @param [String] jarfile path to register
106
- # @return [Array] All registered jarfiles
107
- def self.register_jarfile( jarfile )
108
- fail "Jarfile not found: #{ jarfile }" unless File.exists? jarfile
109
- registered_jarfiles << jarfile
110
- end
117
+ #
118
+ # Read a Jafile.lock and convert it to a LockJar::Domain::Lockfile
119
+ #
120
+ # @param [String] lockfile path to lockfile
121
+ # @return [Hash] Lock Data
122
+ def read(lockfile)
123
+ LockJar::Domain::Lockfile.read(lockfile)
124
+ end
111
125
 
112
- def self.reset_registered_jarfiles
113
- @@registered_jarfiles = []
114
- end
126
+ # Add a Jarfile to be included when LockJar.lock_registered_jarfiles is called.
127
+ #
128
+ # @param [String] jarfile path to register
129
+ # @param [GemSpec] gem spec if the Jarfile is from a gem
130
+ # @return [Array] All registered jarfiles
131
+ def register_jarfile(jarfile, gem_spec = nil)
132
+ fail "Jarfile not found: #{jarfile}" unless File.exist? jarfile
133
+ registered_jarfiles[jarfile] = gem_spec
134
+ end
115
135
 
116
- def self.registered_jarfiles
117
- @@registered_jarfiles ||= []
118
- end
136
+ # Clear all registered jarfiles
137
+ def reset_registered_jarfiles
138
+ @registered_jarfiles = {}
139
+ end
119
140
 
120
- # Lock the registered Jarfiles and generate a Jarfile.lock.
121
- #
122
- # Options and groups are passed through to the LockJar.lock method, but
123
- # if a Jarfile is specified, it will be ignored. Use LockJar.register_jarfile
124
- # to add dependencies.
125
- #
126
- # A block can be passed in, overriding values from the Jarfiles.
127
- #
128
- # @return [Hash] Lock data
129
- def self.lock_registered_jarfiles( *args, &blk )
130
- jarfiles = registered_jarfiles
131
- return if jarfiles.empty?
132
- instances = jarfiles.map do |jarfile|
133
- LockJar::Domain::JarfileDsl.create jarfile
141
+ # Hash of registered jarfiles
142
+ def registered_jarfiles
143
+ @registered_jarfiles ||= {}
134
144
  end
135
- combined = instances.reduce do |result, inst|
136
- LockJar::Domain::DslHelper.merge result, inst
145
+
146
+ # Lock the registered Jarfiles and generate a Jarfile.lock.
147
+ #
148
+ # Options and groups are passed through to the LockJar.lock method, but
149
+ # if a Jarfile is specified, it will be ignored. Use LockJar.register_jarfile
150
+ # to add dependencies.
151
+ #
152
+ # A block can be passed in, overriding values from the Jarfiles.
153
+ #
154
+ # @return [Hash] Lock data
155
+ def lock_registered_jarfiles(*args, &blk)
156
+ jarfiles = registered_jarfiles
157
+ return if jarfiles.empty?
158
+ instances = jarfiles.map do |jarfile, spec|
159
+ if spec
160
+ LockJar::Domain::GemDsl.create spec, jarfile
161
+ else
162
+ LockJar::Domain::JarfileDsl.create jarfile
163
+ end
164
+ end
165
+ combined = instances.reduce do |result, inst|
166
+ LockJar::Domain::DslMerger.new(result, inst).merge
167
+ end
168
+ args = args.reject { |arg| arg.is_a? String }
169
+ lock(combined, *args, &blk)
137
170
  end
138
- args = args.reject { |arg| arg.is_a? String }
139
- lock combined, *args, &blk
140
171
  end
141
172
 
142
173
  private
143
174
 
144
- def self.extract_args(type, args, &blk )
175
+ # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
176
+ def self.extract_args(type, args, &blk)
145
177
  lockfile_or_path = nil
146
178
  opts = {}
147
179
  groups = ['default']
148
180
  args.each do |arg|
149
181
  case arg
150
182
  when Hash
151
- opts.merge!( arg )
183
+ opts.merge!(arg)
152
184
  when String
153
185
  lockfile_or_path = arg
154
186
  when LockJar::Domain::Lockfile
@@ -168,5 +200,5 @@ module LockJar
168
200
  end
169
201
  [lockfile_or_path, groups, opts]
170
202
  end
203
+ # rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
171
204
  end
172
-