lock_jar 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -1,6 +1,6 @@
1
1
  source "http://rubygems.org"
2
2
 
3
- gem "naether", "~> 0.6.0"
3
+ gem "naether", "~> 0.7.0"
4
4
 
5
5
  # Add dependencies to develop your gem here.
6
6
  # Include everything needed to run rake, tests, features, etc.
data/README.rdoc CHANGED
@@ -16,14 +16,15 @@ gem install lock_jar
16
16
  === Using a Jarfile
17
17
 
18
18
  ==== Jarfile
19
- A Jarfile is a simple file using a Ruby DSL for defining a project's Jar dependencies using the following
19
+
20
+ A Jarfile is a simple file using a Ruby DSL for defining a project's dependencies using the following
20
21
  methods:
21
22
 
22
23
  * local: Set the local Maven repository
23
- * repository: Add url of additional Maven repository to use.
24
- * jar: Add Jar dependency in artifact notation
25
- * pom: Add local path to a Maven pom
26
- * scope: set the scope for a jar or pom declaration. Default scope is compile
24
+ * repository: Add url of additional remote Maven repository.
25
+ * jar: Add Jar dependency in artifact notation, default scope is *compile*
26
+ * pom: Add local path to a Maven pom, default is to load dependencies for all scopes.
27
+ * scope: Set the scope for nested jar or pom.
27
28
 
28
29
  Example Jarfile
29
30
 
@@ -43,7 +44,7 @@ Example Jarfile
43
44
 
44
45
  ==== Resolving dependencies
45
46
 
46
- When the Jarfile is locked, the transitive dependencies for the Jars and Pom are resolved and saved to the Jarfile.lock file.
47
+ When the Jarfile is locked, the transitive dependencies for the Jars and POM are resolved and saved to the Jarfile.lock file.
47
48
 
48
49
  Example of locking a Jarfile to a Jarfile.lock
49
50
 
@@ -101,34 +102,45 @@ or directly load all Jars into the classpath
101
102
 
102
103
  Do not forget, if you change your Jarfile, you have to re-generate the Jarfile.lock.
103
104
 
104
- === Skipping the Jarfile
105
+ ==== Skipping the Jarfile
105
106
 
106
- You can skip the Jarfile and directly load dependencies by passing a block to LockJar.load
107
+ You can skip the Jarfile and Jarfile.lock to directly load dependencies by passing a block to LockJar.load
107
108
 
108
109
  LockJar.load do
109
110
  jar 'org.eclipse.jetty:example-jetty-embedded:jar:8.1.2.v20120308'
110
111
  end
111
112
 
113
+ Since you skipped the locking part, mostly likely you will need to resolve the dependences in the block, just pass the
114
+ :resolve => true option to enable dependency resolution.
115
+
116
+ LockJar.load( :resolve => true ) do
117
+ jar 'org.eclipse.jetty:example-jetty-embedded:jar:8.1.2.v20120308'
118
+ end
119
+
112
120
  === Bundler Integration
113
121
 
114
122
  LockJar integrates with {Bundler}[https://github.com/carlhuda/bundler/] by {modifying}[https://github.com/mguymon/lock_jar/blob/master/lib/lock_jar/bundler.rb] the Bundler
115
- DSL to include LockJar's DSL, generating a Jarfile.lock when Bundler locks, and populating the classpath
116
- when Bundler requires.
123
+ DSL to include LockJar's DSL, generating a Jarfile.lock when Bundler locks, and populating the classpath when Bundler requires.
117
124
 
118
125
  ==== Example
119
126
 
120
127
  The following Gemfile with LockJar
121
128
 
122
- require 'lock_jar/bundler'
129
+ # This is what modifies Bundler to trigger LockJar
130
+ require 'lock_jar/bundler'
123
131
 
124
132
  gem "naether"
133
+
134
+ group :development do
135
+ gem "rspec", "~> 2.9.0"
136
+ end
125
137
 
126
138
  # lockjar dsl that is used to generate Jarfile.lock
127
139
  lock_jar do
128
140
  scope :test do
129
- jar 'junit:junit:jar:4.10'
130
- end
131
-
141
+ jar 'junit:junit:jar:4.10'
142
+ end
143
+
132
144
  pom 'spec/pom.xml', :scope => :compile
133
145
  end
134
146
 
@@ -136,12 +148,20 @@ Will produce a Gemfile.lock and Jarfile.lock for
136
148
 
137
149
  bundle install
138
150
 
139
- When Bundle.setup or Bundle.require is called, the jars from the Jarfile.lock are loaded into the classpath.
151
+ When Bundler.setup or Bundler.require is called, the jars from the Jarfile.lock are loaded into the classpath.
152
+
153
+ require 'rubygems'
154
+ require 'bundler'
155
+
156
+ # This is what modifies Bundler to trigger LockJar
157
+ require 'lock_jar/bundler'
158
+
159
+ Bundler.require
140
160
 
141
161
  === Buildr Integration
142
162
 
143
163
  LockJar integrates with {Buildr}[http://buildr.apache.org/] using an {Addon}[https://github.com/mguymon/lock_jar/blob/master/lib/lock_jar/buildr.rb].
144
- This allows the Jarfile to be defined directly into a buildfile. A global app LockJar definition can be set and
164
+ This allows the Jarfile to be defined directly into a buildfile. A global LockJar definition can be set and
145
165
  is inherited to all projects. Each project may have its own LockJar definition. A lock file is generated per project based
146
166
  on the project name.
147
167
 
@@ -153,8 +173,9 @@ and a task per project to generate the lockfile for a single project
153
173
 
154
174
  buildr <app>:<project>:lock_jar:lock
155
175
 
156
- The resolved dependencies are automatically added to the classpath for compiling and testing. Do not forget, if you change the lock_jar
157
- definitions, you have to rerun the lock_jar:lock task.
176
+ The compile scoped dependencies are automatically added to the classpath for compiling. The test scoped dependencies are
177
+ automatically added to the classpath for tests. Do not forget, if you change the lock_jar
178
+ definitions, you have to rerun the *lock_jar:lock* task.
158
179
 
159
180
 
160
181
  ==== Example
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.2.0
@@ -18,16 +18,18 @@ require 'lock_jar/dsl'
18
18
 
19
19
  module Buildr
20
20
 
21
- attr_reader :global_lockjar_dsl
22
-
23
21
  class << self
24
22
  def project_to_lockfile( project )
25
23
  "#{project.name.gsub(/:/,'-')}.lock"
26
24
  end
25
+
26
+ def global_lockjar_dsl
27
+ @@global_lockjar_dsl
28
+ end
27
29
  end
28
30
 
29
31
  def lock_jar( &blk )
30
- @global_lockjar_dsl = ::LockJar::Dsl.evaluate(&blk)
32
+ @@global_lockjar_dsl = ::LockJar::Dsl.evaluate(&blk)
31
33
  end
32
34
 
33
35
  namespace "lock_jar" do
@@ -47,8 +49,9 @@ module Buildr
47
49
 
48
50
  def lock_jar( &blk )
49
51
  @lockjar_dsl = ::LockJar::Dsl.evaluate(&blk)
50
- if global_lockjar_dsl
51
- @lockjar_dsl.merge( global_lockjar_dsl )
52
+
53
+ unless Buildr.global_lockjar_dsl.nil?
54
+ @lockjar_dsl.merge( Buildr.global_lockjar_dsl )
52
55
  end
53
56
  end
54
57
 
@@ -57,7 +60,7 @@ module Buildr
57
60
  end
58
61
 
59
62
  def lockjar_dsl
60
- @lockjar_dsl || global_lockjar_dsl
63
+ @lockjar_dsl || Buildr.global_lockjar_dsl
61
64
  end
62
65
 
63
66
  after_define do |project|
@@ -47,6 +47,8 @@ module Bundler
47
47
  attr_accessor :lock_jar
48
48
 
49
49
  def lock( file )
50
+
51
+ # XXX: this is call from Bundler.setup. Only should happen on install or update
50
52
  LockJar.lock( lock_jar )
51
53
 
52
54
  lockjar_replaced_lock( file )
data/lib/lock_jar/dsl.rb CHANGED
@@ -20,6 +20,7 @@ module LockJar
20
20
  attr_reader :repositories
21
21
  attr_reader :local_repository
22
22
  attr_reader :scopes
23
+ attr_reader :maps
23
24
 
24
25
  class << self
25
26
 
@@ -61,10 +62,7 @@ module LockJar
61
62
  @present_scope = 'compile'
62
63
 
63
64
  @local_repository = nil
64
- end
65
-
66
- def local( path )
67
- @local_repository = path
65
+ @maps = {}
68
66
  end
69
67
 
70
68
  def jar(notation, *args)
@@ -75,6 +73,34 @@ module LockJar
75
73
 
76
74
  artifact( notation, opts )
77
75
  end
76
+
77
+ def local( path )
78
+ @local_repository = path
79
+ end
80
+
81
+ def merge( dsl )
82
+ @repositories = (@repositories + dsl.repositories).uniq
83
+
84
+ dsl.notations.each do |scope, notations|
85
+ @notations[scope] = (@notations[scope] + notations).uniq
86
+ end
87
+
88
+ dsl.maps.each do |notation,paths|
89
+ existing_map = @maps[notation]
90
+ if existing_map
91
+ @maps[notation] = (existing_map + paths).uniq
92
+ else
93
+ @maps[notation] = paths
94
+ end
95
+ end
96
+
97
+ self
98
+ end
99
+
100
+ # Map a dependency to another dependency or local directory.
101
+ def map( notation, *args )
102
+ @maps[notation] = args
103
+ end
78
104
 
79
105
  # Pom default to all scopes, unless nested in a scope
80
106
  def pom(path, *args)
@@ -91,11 +117,15 @@ module LockJar
91
117
 
92
118
  artifact( path, opts )
93
119
  end
120
+
121
+ def read_file(file)
122
+ File.open(file, "rb") { |f| f.read }
123
+ end
94
124
 
95
125
  def repository( url, opts = {} )
96
126
  @repositories << url
97
127
  end
98
-
128
+
99
129
  def scope(*scopes, &blk)
100
130
  @scope_changed = true
101
131
  scopes.each do |scope|
@@ -104,22 +134,8 @@ module LockJar
104
134
  end
105
135
  @scope_changed = false
106
136
  @present_scope = 'compile'
107
- end
137
+ end
108
138
 
109
- def read_file(file)
110
- File.open(file, "rb") { |f| f.read }
111
- end
112
-
113
- def merge( dsl )
114
- @repositories = (@repositories + dsl.repositories).uniq
115
-
116
- dsl.notations.each do |scope, notations|
117
- @notations[scope] = (@notations[scope] + notations).uniq
118
- end
119
-
120
- self
121
- end
122
-
123
139
  private
124
140
  def artifact(artifact, opts)
125
141
 
@@ -63,11 +63,37 @@ module LockJar
63
63
  @naether.dependenciesNotation
64
64
  end
65
65
 
66
- def load_jars_to_classpath( notations )
67
- jars = @naether.to_local_paths( notations )
66
+ def to_local_paths( notations )
67
+ paths = []
68
+ notations.each do |notation|
69
+ if File.directory?(notation)
70
+ paths << notation
71
+ else
72
+ paths = paths + @naether.to_local_paths( [notation] )
73
+ end
74
+ end
75
+
76
+ paths
77
+ end
78
+
79
+ def load_to_classpath( notations )
80
+ dirs = []
81
+ jars = []
82
+
83
+ notations.each do |notation|
84
+ if File.directory?(notation)
85
+ dirs << notation
86
+ else
87
+ jars << notation
88
+ end
89
+ end
90
+
91
+ Naether::Java.load_paths( dirs )
92
+
93
+ jars = @naether.to_local_paths( jars )
68
94
  Naether::Java.load_jars( jars )
69
95
 
70
- jars
96
+ dirs + jars
71
97
  end
72
98
  end
73
99
  end
@@ -27,6 +27,7 @@ module LockJar
27
27
  attr_reader :current_resolver
28
28
 
29
29
  def resolver( opts = {} )
30
+ # XXX: opts for a method will cause resolver to reload
30
31
  if @current_resolver.nil? || opts != @current_resolver.opts
31
32
  @current_resolver = LockJar::Resolver.new( opts )
32
33
  end
@@ -35,6 +36,7 @@ module LockJar
35
36
  end
36
37
 
37
38
  def lock( jarfile, opts = {} )
39
+
38
40
  lock_jar_file = nil
39
41
 
40
42
  if jarfile.is_a? LockJar::Dsl
@@ -61,7 +63,11 @@ module LockJar
61
63
  if lock_jar_file.repositories.size > 0
62
64
  lock_data['repositories'] = lock_jar_file.repositories
63
65
  end
64
-
66
+
67
+ if lock_jar_file.maps.size > 0
68
+ lock_data['maps'] = lock_jar_file.maps
69
+ end
70
+
65
71
  lock_data['scopes'] = {}
66
72
 
67
73
  lock_jar_file.notations.each do |scope, notations|
@@ -73,6 +79,7 @@ module LockJar
73
79
 
74
80
  if dependencies.size > 0
75
81
  resolved_notations = resolver(opts).resolve( dependencies )
82
+
76
83
  lock_data['scopes'][scope] = {
77
84
  'dependencies' => notations,
78
85
  'resolved_dependencies' => resolved_notations }
@@ -86,17 +93,45 @@ module LockJar
86
93
 
87
94
  def list( jarfile_lock, scopes = ['compile', 'runtime'], opts = {}, &blk )
88
95
  dependencies = []
89
-
96
+ maps = []
97
+
90
98
  if jarfile_lock
91
- dependencies += lockfile_dependencies( read_lockfile( jarfile_lock), scopes )
99
+ lockfile = read_lockfile( jarfile_lock)
100
+ dependencies += lockfile_dependencies( lockfile, scopes )
101
+ maps = lockfile['maps']
92
102
  end
93
103
 
94
104
  unless blk.nil?
95
105
  dsl = LockJar::Dsl.evaluate(&blk)
96
106
  dependencies += dsl_dependencies( dsl, scopes )
107
+ maps = dsl.maps
97
108
  end
98
109
 
99
- dependencies.uniq
110
+ if maps && maps.size > 0
111
+ mapped_dependencies = []
112
+
113
+ maps.each do |notation, replacements|
114
+ dependencies.each do |dep|
115
+ if dep =~ /#{notation}/
116
+ replacements.each do |replacement|
117
+ mapped_dependencies << replacement
118
+ end
119
+ else
120
+ mapped_dependencies << dep
121
+ end
122
+ end
123
+ end
124
+
125
+ dependencies = mapped_dependencies
126
+ end
127
+
128
+ if opts[:local_paths]
129
+ opts.delete( :local_paths ) # remove list opts so resolver is not reset
130
+ resolver(opts).to_local_paths( dependencies.uniq )
131
+
132
+ else
133
+ dependencies.uniq
134
+ end
100
135
  end
101
136
 
102
137
  def load( jarfile_lock, scopes = ['compile', 'runtime'], opts = {}, &blk )
@@ -122,14 +157,15 @@ module LockJar
122
157
  dependencies = resolver(opts).resolve( dependencies )
123
158
  end
124
159
 
125
- resolver(opts).load_jars_to_classpath( dependencies )
160
+ resolver(opts).load_to_classpath( dependencies )
126
161
  end
127
162
 
128
- private
129
163
  def read_lockfile( jarfile_lock )
130
164
  YAML.load_file( jarfile_lock )
131
165
  end
132
166
 
167
+ private
168
+
133
169
  def lockfile_dependencies( lockfile, scopes)
134
170
  dependencies = []
135
171
 
data/lib/lock_jar.rb CHANGED
@@ -21,6 +21,10 @@ require 'lock_jar/runtime'
21
21
 
22
22
  module LockJar
23
23
 
24
+ def self.config( opts )
25
+ Runtime.instance.resolver( opts )
26
+ end
27
+
24
28
  # Lock a Jarfile and generate a Jarfile.lock
25
29
  #
26
30
  # Accepts path to the jarfile and hash of options to configure LockJar
@@ -80,5 +84,9 @@ module LockJar
80
84
 
81
85
  Runtime.instance.load( lockfile, scopes, opts, &blk )
82
86
  end
87
+
88
+ def self.read( lockfile )
89
+ Runtime.instance.read_lockfile( lockfile )
90
+ end
83
91
 
84
92
  end
data/lock_jar.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "lock_jar"
8
- s.version = "0.1.0"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Michael Guymon"]
12
- s.date = "2012-04-19"
12
+ s.date = "2012-05-09"
13
13
  s.description = "Manage Jar files for Ruby. In the spirit of Bundler, a Jarfile\n is used to generate a Jarfile.lock that contains all the resolved jar dependencies for scopes runtime, compile, and test.\n The Jarfile.lock can be used to populate the classpath"
14
14
  s.email = "michael.guymon@gmail.com"
15
15
  s.extra_rdoc_files = [
@@ -45,25 +45,25 @@ Gem::Specification.new do |s|
45
45
  s.homepage = "http://github.com/mguymon/lock_jar"
46
46
  s.licenses = ["Apache"]
47
47
  s.require_paths = ["lib"]
48
- s.rubygems_version = "1.8.12"
48
+ s.rubygems_version = "1.8.24"
49
49
  s.summary = "Manage Jar files for Ruby"
50
50
 
51
51
  if s.respond_to? :specification_version then
52
52
  s.specification_version = 3
53
53
 
54
54
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
55
- s.add_runtime_dependency(%q<naether>, ["~> 0.6.0"])
55
+ s.add_runtime_dependency(%q<naether>, ["~> 0.7.0"])
56
56
  s.add_development_dependency(%q<rspec>, ["~> 2.9.0"])
57
57
  s.add_development_dependency(%q<bundler>, ["> 1.0.0"])
58
58
  s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
59
59
  else
60
- s.add_dependency(%q<naether>, ["~> 0.6.0"])
60
+ s.add_dependency(%q<naether>, ["~> 0.7.0"])
61
61
  s.add_dependency(%q<rspec>, ["~> 2.9.0"])
62
62
  s.add_dependency(%q<bundler>, ["> 1.0.0"])
63
63
  s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
64
64
  end
65
65
  else
66
- s.add_dependency(%q<naether>, ["~> 0.6.0"])
66
+ s.add_dependency(%q<naether>, ["~> 0.7.0"])
67
67
  s.add_dependency(%q<rspec>, ["~> 2.9.0"])
68
68
  s.add_dependency(%q<bundler>, ["> 1.0.0"])
69
69
  s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
@@ -1,16 +1,22 @@
1
- require 'spec_helper'
1
+ require File.expand_path(File.join(File.dirname(__FILE__),'../spec_helper'))
2
+
2
3
  require 'rubygems'
3
4
  require 'bundler'
4
5
  require 'lib/lock_jar/bundler'
5
6
  require 'helper/bundler_helper'
7
+ require 'fileutils'
6
8
 
7
9
  describe Bundler do
8
10
  include BundlerHelper
9
11
 
12
+ before(:all) do
13
+ FileUtils.rm_rf( bundled_app ) if File.exists? bundled_app
14
+ FileUtils.mkdir_p tmp('bundler')
15
+ end
16
+
10
17
  before(:each) do
11
18
  gemfile <<-G
12
19
  require 'lock_jar/bundler'
13
- source "file://#{tmp('bundler')}"
14
20
  gem "naether"
15
21
 
16
22
  lock_jar do
@@ -33,14 +39,13 @@ describe Bundler do
33
39
  end
34
40
 
35
41
  it "provides a list of the jar and pom dependencies" do
36
- Bundler.load.lock_jar.notations.should eql( {"compile"=>["/home/zinger/devel/projects/swx/lock_jar/spec/pom.xml"], "runtime"=>[], "test"=>["junit:junit:jar:4.10"]} )
42
+ Bundler.load.lock_jar.notations.should eql( {"compile"=>[File.expand_path(File.join(File.dirname(__FILE__), "../../spec/pom.xml"))], "runtime"=>[], "test"=>["junit:junit:jar:4.10"]} )
37
43
  end
38
44
 
39
45
  it "should create Jarfile.lock with bundle install" do
40
46
  File.delete( bundled_app("Jarfile.lock") ) if File.exists? bundled_app("Jarfile.lock")
41
47
  install_gemfile <<-G
42
48
  require 'lock_jar/bundler'
43
- source "file://#{tmp('bundler')}"
44
49
  gem "naether"
45
50
 
46
51
  lock_jar do
@@ -52,10 +57,9 @@ describe Bundler do
52
57
  end
53
58
 
54
59
  G
60
+ File.exists?( bundled_app("Jarfile.lock") ).should be_true
55
61
 
56
- File.exists?( bundled_app("Jarfile.lock") ).should be_true
57
-
58
- IO.read( File.join(root,'spec', 'BundlerJarfile.lock') ).should eql( IO.read( bundled_app("Jarfile.lock") ) )
62
+ LockJar.read( File.join(root,'spec', 'BundlerJarfile.lock') ).should eql( LockJar.read( bundled_app("Jarfile.lock") ) )
59
63
  end
60
64
 
61
65
  it "should create Jarfile.lock with bundle update" do
@@ -63,7 +67,7 @@ describe Bundler do
63
67
  bundle "update"
64
68
  File.exists?( bundled_app("Jarfile.lock") ).should be_true
65
69
 
66
- IO.read( File.join(root,'spec', 'BundlerJarfile.lock') ).should eql( IO.read( bundled_app("Jarfile.lock") ) )
70
+ LockJar.read( File.join(root,'spec', 'BundlerJarfile.lock') ).should eql( LockJar.read( bundled_app("Jarfile.lock") ) )
67
71
  end
68
72
 
69
73
  it "should load Jarfile.lock with Bundle.setup" do
@@ -71,12 +75,16 @@ describe Bundler do
71
75
  require 'rubygems'
72
76
  require 'bundler'
73
77
  require 'lock_jar/bundler'
78
+ require 'naether/java'
79
+
80
+ LockJar.config( :local_repo => '#{tmp('test-repo')}' )
81
+
74
82
  Bundler.setup
75
83
 
76
- puts com.slackworks.modelcitizen.ModelFactory.to_s
84
+ puts Naether::Java.create('com.slackworks.modelcitizen.ModelFactory').getClass().toString()
77
85
  RUBY
78
- err.should eq("")
79
- out.should match("Java::ComSlackworksModelcitizen::ModelFactory")
86
+ # err.should eq("") # 1.9.3 has a IConv error that outputs to std err
87
+ out.should match("class com.slackworks.modelcitizen.ModelFactory")
80
88
  end
81
89
 
82
90
  end
@@ -1,4 +1,4 @@
1
- require 'spec_helper'
1
+ require 'spec/spec_helper'
2
2
 
3
3
  describe LockJar::Dsl do
4
4
  context "Instance" do
@@ -1,4 +1,4 @@
1
- require 'rubygems'
1
+ require 'spec/spec_helper'
2
2
  require 'lib/lock_jar'
3
3
  require 'lib/lock_jar/maven'
4
4
  require 'naether'
@@ -1,19 +1,26 @@
1
- require 'rubygems'
1
+ require 'spec/spec_helper'
2
2
  require 'lib/lock_jar/resolver'
3
3
  require 'fileutils'
4
4
  require 'naether'
5
5
 
6
6
  describe LockJar::Resolver do
7
7
  context "Instance" do
8
- it "should bootstrap naether" do
8
+ before(:each) do
9
9
  FileUtils.mkdir_p( 'tmp/test-repo' )
10
- resolver = LockJar::Resolver.new( :local_repo => 'tmp/test-repo' )
11
-
10
+ @resolver = LockJar::Resolver.new( :local_repo => 'tmp/test-repo' )
11
+ end
12
+
13
+ it "should bootstrap naether" do
12
14
  deps = Naether::Bootstrap.check_local_repo_for_deps( 'tmp/test-repo' )
13
15
  deps[:missing].should eql([])
14
16
  deps[:exists].each do |dep|
15
17
  dep.values[0].should match /.+#{File::SEPARATOR}tmp#{File::SEPARATOR}test-repo#{File::SEPARATOR}.+/
16
18
  end
17
19
  end
20
+
21
+ it "should return local paths for notations" do
22
+ @resolver.to_local_paths( ["junit:junit:jar:4.10"] ).should
23
+ eql( [File.expand_path("tmp/test-repo/junit/junit/4.10/junit-4.10.jar")] )
24
+ end
18
25
  end
19
26
  end
@@ -1,11 +1,11 @@
1
- require 'rubygems'
1
+ require 'spec/spec_helper'
2
2
  require 'lib/lock_jar/runtime'
3
3
 
4
4
  describe LockJar::Runtime do
5
5
  context "Singleton" do
6
6
  it "should set local repo" do
7
7
  LockJar::Runtime.instance.load( nil ) do
8
- jar 'org.modeshape:modeshape-common:2.3.0.Final'
8
+ jar 'junit:junit:4.10'
9
9
  end
10
10
 
11
11
  LockJar::Runtime.instance.current_resolver.naether.local_repo_path.should eql File.expand_path('~/.m2/repository')
@@ -1,20 +1,64 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__),'spec_helper'))
1
2
  require 'rubygems'
2
3
  require 'lib/lock_jar'
3
4
  require 'naether'
4
5
 
5
6
  describe LockJar do
6
7
  context "Module" do
7
- it "should create a lock file" do
8
- File.delete( 'tmp/Jarfile.lock' ) if File.exists?( 'tmp/Jarfile.lock' )
9
- Dir.mkdir( 'tmp' ) unless File.exists?( 'tmp' )
8
+ context "lock" do
9
+ it "should create a lock file" do
10
+ File.delete( 'tmp/Jarfile.lock' ) if File.exists?( 'tmp/Jarfile.lock' )
11
+ Dir.mkdir( 'tmp' ) unless File.exists?( 'tmp' )
12
+
13
+ LockJar.lock( "spec/Jarfile", :local_repo => 'tmp/test-repo', :lockfile => 'tmp/Jarfile.lock' )
14
+ File.exists?( 'tmp/Jarfile.lock' ).should be_true
15
+ end
10
16
 
11
- LockJar.lock( "spec/Jarfile", :local_repo => 'tmp/test-repo', :lockfile => 'tmp/Jarfile.lock' )
12
- File.exists?( 'tmp/Jarfile.lock' ).should be_true
17
+ it "should not replace dependencies with maps" do
18
+ dsl = LockJar::Dsl.evaluate do
19
+ map 'junit:junit:4.10', 'tmp'
20
+ jar 'junit:junit:4.10'
21
+ end
22
+
23
+ LockJar.lock( dsl, :local_repo => 'tmp/test-repo', :lockfile => 'tmp/Jarfile.lock' )
24
+ lockfile = LockJar.read('tmp/Jarfile.lock')
25
+ lockfile.should eql( {
26
+ "maps"=>{"junit:junit:4.10"=>["tmp"]},
27
+ "scopes"=>{
28
+ "compile"=>{
29
+ "dependencies"=>["junit:junit:4.10"], "resolved_dependencies"=>["junit:junit:jar:4.10", "org.hamcrest:hamcrest-core:jar:1.1"]}}} )
30
+ end
13
31
  end
14
-
15
- it "should list jars" do
16
- jars = LockJar.list( 'tmp/Jarfile.lock', ['compile', 'runtime', 'bad scope'], :local_repo => 'tmp/test-repo' )
17
- jars.should eql( ["org.apache.mina:mina-core:jar:2.0.4", "org.slf4j:slf4j-api:jar:1.6.1", "com.slackworks:modelcitizen:jar:0.2.2", "commons-lang:commons-lang:jar:2.6", "commons-beanutils:commons-beanutils:jar:1.8.3", "commons-logging:commons-logging:jar:1.1.1", "ch.qos.logback:logback-classic:jar:0.9.24", "ch.qos.logback:logback-core:jar:0.9.24", "com.metapossum:metapossum-scanner:jar:1.0", "commons-io:commons-io:jar:1.4", "junit:junit:jar:4.7", "org.apache.tomcat:servlet-api:jar:6.0.35"] )
32
+
33
+ context "list" do
34
+ it "should list jars" do
35
+ LockJar.lock( "spec/Jarfile", :local_repo => 'tmp/test-repo', :lockfile => 'tmp/Jarfile.lock' )
36
+
37
+ jars = LockJar.list( 'tmp/Jarfile.lock', ['compile', 'runtime', 'bad scope'], :local_repo => 'tmp/test-repo' )
38
+ jars.should eql( ["org.apache.mina:mina-core:jar:2.0.4", "org.slf4j:slf4j-api:jar:1.6.1", "com.slackworks:modelcitizen:jar:0.2.2", "commons-lang:commons-lang:jar:2.6", "commons-beanutils:commons-beanutils:jar:1.8.3", "commons-logging:commons-logging:jar:1.1.1", "ch.qos.logback:logback-classic:jar:0.9.24", "ch.qos.logback:logback-core:jar:0.9.24", "com.metapossum:metapossum-scanner:jar:1.0", "commons-io:commons-io:jar:1.4", "junit:junit:jar:4.7", "org.apache.tomcat:servlet-api:jar:6.0.35"] )
39
+ end
40
+
41
+ it "should replace dependencies with maps" do
42
+ dsl = LockJar::Dsl.evaluate do
43
+ map 'junit:junit', 'tmp'
44
+ jar 'junit:junit:4.10'
45
+ end
46
+
47
+ LockJar.lock( dsl, :local_repo => 'tmp/test-repo', :lockfile => 'tmp/ListJarfile.lock' )
48
+ paths = LockJar.list( 'tmp/ListJarfile.lock', :local_repo => 'tmp/test-repo' )
49
+ paths.should eql( [ "tmp", "org.hamcrest:hamcrest-core:jar:1.1"] )
50
+ end
51
+
52
+ it "should replace dependencies with maps and get local paths" do
53
+ dsl = LockJar::Dsl.evaluate do
54
+ map 'junit:junit', 'tmp'
55
+ jar 'junit:junit:4.10'
56
+ end
57
+
58
+ LockJar.lock( dsl, :local_repo => 'tmp/test-repo', :lockfile => 'tmp/ListJarfile.lock' )
59
+ paths = LockJar.list( 'tmp/ListJarfile.lock', :local_repo => 'tmp/test-repo' )
60
+ paths.should eql( [ "tmp", "org.hamcrest:hamcrest-core:jar:1.1"] )
61
+ end
18
62
  end
19
63
 
20
64
  context "load" do
@@ -25,6 +69,8 @@ describe LockJar do
25
69
  lambda { Rjb::import('org.apache.mina.core.IoUtil') }.should raise_error
26
70
  end
27
71
 
72
+ LockJar.lock( "spec/Jarfile", :local_repo => 'tmp/test-repo', :lockfile => 'tmp/Jarfile.lock' )
73
+
28
74
  jars = LockJar.load( 'tmp/Jarfile.lock', ['compile', 'runtime'], :local_repo => 'tmp/test-repo' )
29
75
 
30
76
  jars.should eql( [File.expand_path("tmp/test-repo/org/apache/mina/mina-core/2.0.4/mina-core-2.0.4.jar"), File.expand_path("tmp/test-repo/org/slf4j/slf4j-api/1.6.1/slf4j-api-1.6.1.jar"), File.expand_path("tmp/test-repo/com/slackworks/modelcitizen/0.2.2/modelcitizen-0.2.2.jar"), File.expand_path("tmp/test-repo/commons-lang/commons-lang/2.6/commons-lang-2.6.jar"), File.expand_path("tmp/test-repo/commons-beanutils/commons-beanutils/1.8.3/commons-beanutils-1.8.3.jar"), File.expand_path("tmp/test-repo/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar"), File.expand_path("tmp/test-repo/ch/qos/logback/logback-classic/0.9.24/logback-classic-0.9.24.jar"), File.expand_path("tmp/test-repo/ch/qos/logback/logback-core/0.9.24/logback-core-0.9.24.jar"), File.expand_path("tmp/test-repo/com/metapossum/metapossum-scanner/1.0/metapossum-scanner-1.0.jar"), File.expand_path("tmp/test-repo/commons-io/commons-io/1.4/commons-io-1.4.jar"), File.expand_path("tmp/test-repo/junit/junit/4.7/junit-4.7.jar"), File.expand_path("tmp/test-repo/org/apache/tomcat/servlet-api/6.0.35/servlet-api-6.0.35.jar")] )
data/spec/spec_helper.rb CHANGED
@@ -1,5 +1,10 @@
1
+ $:.unshift File.expand_path('.')
1
2
  $:.unshift File.expand_path('..', __FILE__)
2
- $:.unshift File.expand_path('../../lib', __FILE__)
3
+ $:.unshift File.expand_path('../lib', __FILE__)
4
+
5
+ require 'rubygems'
6
+ require 'rspec'
7
+ require 'lib/lock_jar'
3
8
 
4
9
  RSpec.configure do |config|
5
10
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lock_jar
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 23
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 1
8
+ - 2
9
9
  - 0
10
- version: 0.1.0
10
+ version: 0.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Michael Guymon
@@ -15,27 +15,25 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-04-19 00:00:00 Z
18
+ date: 2012-05-09 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
- prerelease: false
22
- type: :runtime
23
21
  requirement: &id001 !ruby/object:Gem::Requirement
24
22
  none: false
25
23
  requirements:
26
24
  - - ~>
27
25
  - !ruby/object:Gem::Version
28
- hash: 7
26
+ hash: 3
29
27
  segments:
30
28
  - 0
31
- - 6
29
+ - 7
32
30
  - 0
33
- version: 0.6.0
31
+ version: 0.7.0
34
32
  version_requirements: *id001
35
33
  name: naether
36
- - !ruby/object:Gem::Dependency
37
34
  prerelease: false
38
- type: :development
35
+ type: :runtime
36
+ - !ruby/object:Gem::Dependency
39
37
  requirement: &id002 !ruby/object:Gem::Requirement
40
38
  none: false
41
39
  requirements:
@@ -49,9 +47,9 @@ dependencies:
49
47
  version: 2.9.0
50
48
  version_requirements: *id002
51
49
  name: rspec
52
- - !ruby/object:Gem::Dependency
53
50
  prerelease: false
54
51
  type: :development
52
+ - !ruby/object:Gem::Dependency
55
53
  requirement: &id003 !ruby/object:Gem::Requirement
56
54
  none: false
57
55
  requirements:
@@ -65,9 +63,9 @@ dependencies:
65
63
  version: 1.0.0
66
64
  version_requirements: *id003
67
65
  name: bundler
68
- - !ruby/object:Gem::Dependency
69
66
  prerelease: false
70
67
  type: :development
68
+ - !ruby/object:Gem::Dependency
71
69
  requirement: &id004 !ruby/object:Gem::Requirement
72
70
  none: false
73
71
  requirements:
@@ -81,6 +79,8 @@ dependencies:
81
79
  version: 1.6.4
82
80
  version_requirements: *id004
83
81
  name: jeweler
82
+ prerelease: false
83
+ type: :development
84
84
  description: |-
85
85
  Manage Jar files for Ruby. In the spirit of Bundler, a Jarfile
86
86
  is used to generate a Jarfile.lock that contains all the resolved jar dependencies for scopes runtime, compile, and test.
@@ -147,7 +147,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
147
147
  requirements: []
148
148
 
149
149
  rubyforge_project:
150
- rubygems_version: 1.8.12
150
+ rubygems_version: 1.8.24
151
151
  signing_key:
152
152
  specification_version: 3
153
153
  summary: Manage Jar files for Ruby