mini_aether 0.0.5-java → 0.0.6-java
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/mini_aether.rb +42 -0
- data/lib/mini_aether/bootstrap.rb +100 -132
- data/lib/mini_aether/helper.rb +67 -0
- data/lib/mini_aether/resolver.rb +20 -12
- data/test/mini_aether/helper_test.rb +63 -0
- metadata +17 -13
- data/test/mini_aether/bootstrap_test.rb +0 -67
data/lib/mini_aether.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'java'
|
2
|
+
require 'logger'
|
2
3
|
require 'mini_aether/spec'
|
3
4
|
|
4
5
|
module MiniAether
|
@@ -6,7 +7,45 @@ module MiniAether
|
|
6
7
|
|
7
8
|
M2_SETTINGS = File.join(ENV['HOME'], '.m2', 'settings.xml').freeze
|
8
9
|
|
10
|
+
class LoggerConfig
|
11
|
+
attr_reader :level
|
12
|
+
|
13
|
+
def initialize
|
14
|
+
@level = 'INFO'
|
15
|
+
end
|
16
|
+
|
17
|
+
def level=(level)
|
18
|
+
@level = case level
|
19
|
+
when Symbol, String
|
20
|
+
level.to_s.upcase
|
21
|
+
when Logger::FATAL, Logger::ERROR
|
22
|
+
'ERROR'
|
23
|
+
when Logger::WARN
|
24
|
+
'WARN'
|
25
|
+
when Logger::INFO
|
26
|
+
'INFO'
|
27
|
+
when Logger::DEBUG
|
28
|
+
'DEBUG'
|
29
|
+
else
|
30
|
+
'INFO'
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def info?
|
35
|
+
case @level
|
36
|
+
when 'INFO', 'DEBUG'
|
37
|
+
true
|
38
|
+
else
|
39
|
+
false
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
9
44
|
class << self
|
45
|
+
def logger
|
46
|
+
@logger ||= LoggerConfig.new
|
47
|
+
end
|
48
|
+
|
10
49
|
# Create a new ScriptingContainer (Java object interface to a
|
11
50
|
# JRuby runtime) in SINGLETHREAD mode, and yield it to the block.
|
12
51
|
# Ensure the runtime is terminated after the block returns.
|
@@ -14,6 +53,9 @@ module MiniAether
|
|
14
53
|
scope = Java::OrgJrubyEmbed::LocalContextScope::SINGLETHREAD
|
15
54
|
c = Java::OrgJrubyEmbed::ScriptingContainer.new(scope)
|
16
55
|
begin
|
56
|
+
# short-lived container of mostly java calls may be a bit
|
57
|
+
# faster without spending time to JIT
|
58
|
+
c.setCompileMode Java::OrgJruby::RubyInstanceConfig::CompileMode::OFF
|
17
59
|
yield c
|
18
60
|
ensure
|
19
61
|
c.terminate
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'mini_aether/helper'
|
1
2
|
require 'mini_aether/spec'
|
2
3
|
require 'mini_aether/xml_parser'
|
3
4
|
require 'fileutils'
|
@@ -8,162 +9,129 @@ require 'uri'
|
|
8
9
|
|
9
10
|
module MiniAether
|
10
11
|
module Bootstrap
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
jar 'aether-spi'
|
23
|
-
jar 'aether-util'
|
12
|
+
class << self
|
13
|
+
# Load the required jar files, downloading them if necessary.
|
14
|
+
#
|
15
|
+
# Ignores any maven config regarding repositories and attempts a
|
16
|
+
# direct download from repo1.maven.org using Net::HTTP.
|
17
|
+
def bootstrap!
|
18
|
+
logback = false
|
19
|
+
dependencies.each do |dep|
|
20
|
+
require ensure_dependency(dep)
|
21
|
+
if dep[:artifact_id] == 'logback-classic'
|
22
|
+
logback = true
|
24
23
|
end
|
25
24
|
end
|
25
|
+
initialize_logger if logback
|
26
|
+
end
|
26
27
|
|
27
|
-
|
28
|
-
jar 'org.jboss.netty:netty:3.2.5.Final'
|
29
|
-
jar 'org.slf4j:slf4j-api:1.6.2'
|
30
|
-
|
31
|
-
begin
|
32
|
-
Java::OrgSlf4jImpl::StaticLoggerBinder
|
33
|
-
rescue NameError
|
34
|
-
# use logback when no slf4j backend exists
|
35
|
-
jar 'ch.qos.logback:logback-core:1.0.6'
|
36
|
-
jar 'ch.qos.logback:logback-classic:1.0.6'
|
37
|
-
# add dir to classpath since it contains logback.xml
|
38
|
-
$CLASSPATH << File.expand_path(File.dirname(__FILE__))
|
39
|
-
end
|
28
|
+
private
|
40
29
|
|
41
|
-
|
42
|
-
version '3.0.4' do
|
43
|
-
jar 'maven-aether-provider'
|
44
|
-
jar 'maven-model'
|
45
|
-
jar 'maven-model-builder'
|
46
|
-
jar 'maven-repository-metadata'
|
47
|
-
end
|
48
|
-
end
|
30
|
+
include Helper
|
49
31
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
32
|
+
def initialize_logger
|
33
|
+
file = File.expand_path('../logback.xml', __FILE__)
|
34
|
+
context = Java::OrgSlf4j::LoggerFactory.getILoggerFactory
|
35
|
+
begin
|
36
|
+
configurator = Java::ChQosLogbackClassicJoran::JoranConfigurator.new
|
37
|
+
configurator.setContext(context)
|
38
|
+
context.reset
|
39
|
+
context.putProperty("level", MiniAether.logger.level)
|
40
|
+
configurator.doConfigure(file)
|
41
|
+
rescue Java::ChQosLogbackCoreJoranSpi::JoranException
|
42
|
+
# StatusPrinter will handle this
|
54
43
|
end
|
44
|
+
Java::ChQosLogbackCoreUtil::StatusPrinter.printInCaseOfErrorsOrWarnings context
|
55
45
|
end
|
56
46
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
def interpolate(str)
|
63
|
-
ret = ''
|
64
|
-
|
65
|
-
s = StringScanner.new(str)
|
66
|
-
pos = s.pos
|
47
|
+
# Pre-resolved dependencies of mini_aether. This list includes a
|
48
|
+
# set of dependencies and all transient dependencies.
|
49
|
+
def dependencies
|
50
|
+
mini_aether_spec.dependencies
|
51
|
+
end
|
67
52
|
|
68
|
-
|
69
|
-
|
70
|
-
|
53
|
+
# @return [MiniAether::Spec] the dependencies of mini_aether itself
|
54
|
+
def mini_aether_spec
|
55
|
+
Spec.new do
|
56
|
+
group 'org.sonatype.aether' do
|
57
|
+
version '1.13.1' do
|
58
|
+
jar 'aether-api'
|
59
|
+
jar 'aether-connector-asynchttpclient'
|
60
|
+
jar 'aether-connector-file'
|
61
|
+
jar 'aether-impl'
|
62
|
+
jar 'aether-spi'
|
63
|
+
jar 'aether-util'
|
64
|
+
end
|
65
|
+
end
|
71
66
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
when /^env\.(.*)/
|
76
|
-
ENV[$1] || ''
|
77
|
-
else
|
78
|
-
System.getProperty(var) || ''
|
79
|
-
end
|
67
|
+
jar 'com.ning:async-http-client:1.6.5'
|
68
|
+
jar 'org.jboss.netty:netty:3.2.5.Final'
|
69
|
+
jar 'org.slf4j:slf4j-api:1.6.2'
|
80
70
|
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
71
|
+
begin
|
72
|
+
Java::OrgSlf4jImpl::StaticLoggerBinder
|
73
|
+
rescue NameError
|
74
|
+
# use logback when no slf4j backend exists
|
75
|
+
jar 'ch.qos.logback:logback-core:1.0.6'
|
76
|
+
jar 'ch.qos.logback:logback-classic:1.0.6'
|
77
|
+
end
|
87
78
|
|
88
|
-
|
89
|
-
|
90
|
-
|
79
|
+
group 'org.apache.maven' do
|
80
|
+
version '3.0.4' do
|
81
|
+
jar 'maven-aether-provider'
|
82
|
+
jar 'maven-model'
|
83
|
+
jar 'maven-model-builder'
|
84
|
+
jar 'maven-repository-metadata'
|
85
|
+
end
|
86
|
+
end
|
91
87
|
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
interpolate(parser.pull_text_until_end.strip)
|
98
|
-
rescue XmlParser::NotFoundError
|
99
|
-
default_local_repo_path
|
88
|
+
group 'org.codehaus.plexus' do
|
89
|
+
jar 'plexus-interpolation:1.14'
|
90
|
+
jar 'plexus-component-annotations:1.5.5'
|
91
|
+
jar 'plexus-utils:2.0.6'
|
92
|
+
end
|
100
93
|
end
|
101
|
-
else
|
102
|
-
default_local_repo_path
|
103
94
|
end
|
104
|
-
end
|
105
|
-
|
106
|
-
def ensure_dependency(dep)
|
107
|
-
path = jar_path(dep)
|
108
|
-
local_file = File.join(local_repository_path, path)
|
109
|
-
install(path, local_file) unless File.exists?(local_file)
|
110
|
-
local_file
|
111
|
-
end
|
112
95
|
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
dependencies.each do |dep|
|
119
|
-
require ensure_dependency(dep)
|
96
|
+
def ensure_dependency(dep)
|
97
|
+
path = jar_path(dep)
|
98
|
+
local_file = File.join(local_repository_path, path)
|
99
|
+
install(path, local_file) unless File.exists?(local_file)
|
100
|
+
local_file
|
120
101
|
end
|
121
|
-
end
|
122
102
|
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
103
|
+
def install(path, file, repo = MAVEN_CENTRAL_REPO)
|
104
|
+
if MiniAether.logger.info?
|
105
|
+
puts "[mini_aether] INFO bootstrap installing #{File.basename(path)}"
|
106
|
+
end
|
107
|
+
|
108
|
+
remote_base = File.dirname(path) + '/' + File.basename(path, File.extname(path))
|
109
|
+
local_dir = File.dirname(file)
|
110
|
+
local_base = File.join(local_dir, File.basename(file, File.extname(file)))
|
111
|
+
|
112
|
+
exts = [File.extname(path), '.pom', '.pom.sha1']
|
113
|
+
exts.each do |ext|
|
114
|
+
uri = URI("#{repo}/#{remote_base}#{ext}")
|
115
|
+
local_file = local_base + ext
|
116
|
+
|
117
|
+
Net::HTTP.start(uri.host, uri.port) do |http|
|
118
|
+
request = Net::HTTP::Get.new uri.request_uri
|
119
|
+
|
120
|
+
http.request request do |response|
|
121
|
+
unless response.code == '200'
|
122
|
+
raise "#{response.code} #{response.message}: #{uri}"
|
123
|
+
end
|
143
124
|
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
125
|
+
FileUtils.mkdir_p local_dir
|
126
|
+
open local_file, 'w' do |io|
|
127
|
+
response.read_body do |chunk|
|
128
|
+
io.write chunk
|
129
|
+
end
|
148
130
|
end
|
149
131
|
end
|
150
132
|
end
|
151
133
|
end
|
152
|
-
|
153
|
-
print "#{ext} "
|
154
|
-
$stdout.flush
|
155
134
|
end
|
156
|
-
puts
|
157
|
-
end
|
158
|
-
|
159
|
-
def jar_path(dep)
|
160
|
-
group_id = dep[:group_id]
|
161
|
-
group_path = group_id.gsub('.', '/')
|
162
|
-
artifact_id = dep[:artifact_id]
|
163
|
-
version = dep[:version]
|
164
|
-
|
165
|
-
file_name = "#{artifact_id}-#{version}.jar"
|
166
|
-
"#{group_path}/#{artifact_id}/#{version}/#{file_name}"
|
167
135
|
end
|
168
136
|
end
|
169
137
|
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
module MiniAether
|
2
|
+
module Helper
|
3
|
+
System = Java::JavaLang::System
|
4
|
+
|
5
|
+
def local_repository_path
|
6
|
+
default_local_repo_path =
|
7
|
+
File.join(System.getProperty('user.home'), '.m2', 'repository')
|
8
|
+
|
9
|
+
if File.exists? M2_SETTINGS
|
10
|
+
xml = File.read M2_SETTINGS
|
11
|
+
begin
|
12
|
+
parser = XmlParser.new(xml)
|
13
|
+
parser.pull_to_path(:settings, :localRepository)
|
14
|
+
interpolate(parser.pull_text_until_end.strip)
|
15
|
+
rescue XmlParser::NotFoundError
|
16
|
+
default_local_repo_path
|
17
|
+
end
|
18
|
+
else
|
19
|
+
default_local_repo_path
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
# Interpolate variables like +${user.home}+ and +${env.HOME}+ from
|
24
|
+
# system properties and environment variables respectively.
|
25
|
+
def interpolate(str)
|
26
|
+
ret = ''
|
27
|
+
|
28
|
+
s = StringScanner.new(str)
|
29
|
+
pos = s.pos
|
30
|
+
|
31
|
+
while s.scan_until(/\$\{[^\s}]+\}/) # match ${stuff}
|
32
|
+
# add the pre_match, but only starting from previous position
|
33
|
+
ret << str.slice(pos, (s.pos - pos - s.matched.size))
|
34
|
+
|
35
|
+
# interpolate
|
36
|
+
var = s.matched.slice(2..-2)
|
37
|
+
ret << case var
|
38
|
+
when /^env\.(.*)/
|
39
|
+
ENV[$1] || ''
|
40
|
+
else
|
41
|
+
System.getProperty(var) || ''
|
42
|
+
end
|
43
|
+
|
44
|
+
pos = s.pos
|
45
|
+
end
|
46
|
+
ret << s.rest
|
47
|
+
|
48
|
+
ret
|
49
|
+
end
|
50
|
+
|
51
|
+
# Build a m2 repository path fragment for +dep+. For example,
|
52
|
+
# coordinates of +com.example:project:1.0.1+ would result in
|
53
|
+
# +com/example/project/1.0.1/project-1.0.1.jar+.
|
54
|
+
#
|
55
|
+
# @param [Hash] dep a hash with keys +:group_id+, +:artifact_id+, and +:version+
|
56
|
+
# @return [String] a path fragment to this artifact in m2 repository format
|
57
|
+
def jar_path(dep)
|
58
|
+
group_id = dep[:group_id]
|
59
|
+
group_path = group_id.gsub('.', '/')
|
60
|
+
artifact_id = dep[:artifact_id]
|
61
|
+
version = dep[:version]
|
62
|
+
|
63
|
+
file_name = "#{artifact_id}-#{version}.jar"
|
64
|
+
"#{group_path}/#{artifact_id}/#{version}/#{file_name}"
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
data/lib/mini_aether/resolver.rb
CHANGED
@@ -6,12 +6,14 @@
|
|
6
6
|
|
7
7
|
require 'mini_aether'
|
8
8
|
require 'mini_aether/bootstrap'
|
9
|
+
require 'mini_aether/helper'
|
9
10
|
|
10
|
-
MiniAether
|
11
|
-
MiniAether.bootstrap!
|
11
|
+
MiniAether::Bootstrap.bootstrap!
|
12
12
|
|
13
13
|
module MiniAether
|
14
14
|
class Resolver
|
15
|
+
include Helper
|
16
|
+
|
15
17
|
RepositorySystem =
|
16
18
|
Java::OrgSonatypeAether::RepositorySystem
|
17
19
|
|
@@ -64,7 +66,7 @@ module MiniAether
|
|
64
66
|
@logger = Java::OrgSlf4j::LoggerFactory.getLogger(self.class.to_s)
|
65
67
|
@system = LOCATOR.getService(RepositorySystem.java_class)
|
66
68
|
@session = MavenRepositorySystemSession.new
|
67
|
-
local_repo = LocalRepository.new(
|
69
|
+
local_repo = LocalRepository.new(local_repository_path)
|
68
70
|
local_manager = @system.newLocalRepositoryManager(local_repo)
|
69
71
|
@session.setLocalRepositoryManager(local_manager)
|
70
72
|
end
|
@@ -98,19 +100,23 @@ module MiniAether
|
|
98
100
|
#
|
99
101
|
# @return [Java::JavaUtil::List<Java::JavaIo::File>]
|
100
102
|
def resolve(dep_hashes, repos)
|
101
|
-
@logger.info 'resolving dependencies
|
103
|
+
@logger.info 'resolving dependencies'
|
102
104
|
collect_req = CollectRequest.new
|
103
105
|
|
104
106
|
dep_hashes.each do |hash|
|
105
107
|
dep = Dependency.new new_artifact(hash), 'compile'
|
106
108
|
collect_req.addDependency dep
|
107
|
-
@logger.
|
109
|
+
@logger.debug 'requested {}', dep
|
108
110
|
end
|
109
111
|
|
110
112
|
repos.each do |uri|
|
111
113
|
repo = RemoteRepository.new(uri.object_id.to_s, 'default', uri)
|
112
114
|
collect_req.addRepository repo
|
113
|
-
@logger.info 'added repository {}', repo
|
115
|
+
@logger.info 'added repository {}', repo.getUrl
|
116
|
+
enabled = []
|
117
|
+
enabled << 'releases' if repo.getPolicy(false).isEnabled
|
118
|
+
enabled << 'snapshots' if repo.getPolicy(true).isEnabled
|
119
|
+
@logger.debug '{}', enabled.join('+')
|
114
120
|
end
|
115
121
|
|
116
122
|
node = @system.collectDependencies(@session, collect_req).getRoot
|
@@ -120,9 +126,6 @@ module MiniAether
|
|
120
126
|
|
121
127
|
nlg = PreorderNodeListGenerator.new
|
122
128
|
node.accept nlg
|
123
|
-
files = nlg.getFiles
|
124
|
-
|
125
|
-
@logger.info "resolved with #{files.size} artifacts"
|
126
129
|
|
127
130
|
if @logger.isDebugEnabled
|
128
131
|
total_size = 0
|
@@ -131,12 +134,17 @@ module MiniAether
|
|
131
134
|
size = File.stat(artifact.file.absolute_path).size
|
132
135
|
total_size += size
|
133
136
|
|
134
|
-
@logger.debug("%0.
|
137
|
+
@logger.debug("Using %0.2f %s" % [size/MiB_PER_BYTE, artifact])
|
138
|
+
end
|
139
|
+
@logger.debug(' -----')
|
140
|
+
@logger.debug(" %0.2f MiB total" % [total_size/MiB_PER_BYTE])
|
141
|
+
else
|
142
|
+
nlg.getArtifacts(false).each do |artifact|
|
143
|
+
@logger.info 'Using {}', artifact
|
135
144
|
end
|
136
|
-
@logger.debug("%0.3f MiB total" % [total_size/MiB_PER_BYTE])
|
137
145
|
end
|
138
146
|
|
139
|
-
|
147
|
+
nlg.getFiles
|
140
148
|
end
|
141
149
|
end
|
142
150
|
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'mini_aether/helper'
|
3
|
+
|
4
|
+
module MiniAether
|
5
|
+
class HelperTest < MiniTest::Unit::TestCase
|
6
|
+
class InterpolateTest < MiniTest::Unit::TestCase
|
7
|
+
include Helper
|
8
|
+
|
9
|
+
def test_passes_through_plain_string
|
10
|
+
strs = [
|
11
|
+
'hello',
|
12
|
+
'$ { nope } ',
|
13
|
+
'text${text',
|
14
|
+
'a a a a'
|
15
|
+
]
|
16
|
+
strs.each do |str|
|
17
|
+
assert_equal str, interpolate(str)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_interpolates_env_vars
|
22
|
+
key = '__AETHER_INTERPOLATE_TEST__'
|
23
|
+
ENV[key] = 'value'
|
24
|
+
assert_equal 'value', interpolate("${env.#{key}}")
|
25
|
+
assert_equal 'aaa value', interpolate("aaa ${env.#{key}}")
|
26
|
+
assert_equal 'value aaa', interpolate("${env.#{key}} aaa")
|
27
|
+
assert_equal 'value}', interpolate("${env.#{key}}}")
|
28
|
+
assert_equal 'avaluea', interpolate("a${env.#{key}}a")
|
29
|
+
|
30
|
+
assert_equal 'a value a value a', interpolate("a ${env.#{key}} a ${env.#{key}} a")
|
31
|
+
ensure
|
32
|
+
ENV[key] = nil
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_empty_string_when_no_env_var
|
36
|
+
assert_nil ENV['NO_SUCH_ENV_VAR']
|
37
|
+
assert_equal '', interpolate("${env.NO_SUCH_ENV_VAR}")
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_interpolates_system_props
|
41
|
+
key = '__AETHER_INTERPOLATE_TEST__'
|
42
|
+
sys = Java::JavaLang::System
|
43
|
+
sys.setProperty(key, 'value')
|
44
|
+
|
45
|
+
assert_equal 'value', interpolate("${#{key}}")
|
46
|
+
assert_equal 'aaa value', interpolate("aaa ${#{key}}")
|
47
|
+
assert_equal 'value aaa', interpolate("${#{key}} aaa")
|
48
|
+
assert_equal 'value}', interpolate("${#{key}}}")
|
49
|
+
assert_equal 'avaluea', interpolate("a${#{key}}a")
|
50
|
+
|
51
|
+
assert_equal 'a value a value a', interpolate("a ${#{key}} a ${#{key}} a")
|
52
|
+
ensure
|
53
|
+
sys.clearProperty(key)
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_empty_string_when_no_sys_prop
|
57
|
+
sys = Java::JavaLang::System
|
58
|
+
assert_nil sys.getProperty 'NO_SUCH_ENV_VAR'
|
59
|
+
assert_equal '', interpolate("${NO_SUCH_ENV_VAR}")
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
metadata
CHANGED
@@ -2,27 +2,27 @@
|
|
2
2
|
name: mini_aether
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.6
|
6
6
|
platform: java
|
7
7
|
authors:
|
8
8
|
- Patrick Mahoney
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-01-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: minitest
|
16
16
|
version_requirements: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- -
|
18
|
+
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
20
|
version: !binary |-
|
21
21
|
MA==
|
22
22
|
none: false
|
23
23
|
requirement: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
|
-
- -
|
25
|
+
- - ">="
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
version: !binary |-
|
28
28
|
MA==
|
@@ -33,14 +33,14 @@ dependencies:
|
|
33
33
|
name: rake
|
34
34
|
version_requirements: !ruby/object:Gem::Requirement
|
35
35
|
requirements:
|
36
|
-
- -
|
36
|
+
- - ">="
|
37
37
|
- !ruby/object:Gem::Version
|
38
38
|
version: !binary |-
|
39
39
|
MA==
|
40
40
|
none: false
|
41
41
|
requirement: !ruby/object:Gem::Requirement
|
42
42
|
requirements:
|
43
|
-
- -
|
43
|
+
- - ">="
|
44
44
|
- !ruby/object:Gem::Version
|
45
45
|
version: !binary |-
|
46
46
|
MA==
|
@@ -51,14 +51,14 @@ dependencies:
|
|
51
51
|
name: version
|
52
52
|
version_requirements: !ruby/object:Gem::Requirement
|
53
53
|
requirements:
|
54
|
-
- -
|
54
|
+
- - ">="
|
55
55
|
- !ruby/object:Gem::Version
|
56
56
|
version: !binary |-
|
57
57
|
MA==
|
58
58
|
none: false
|
59
59
|
requirement: !ruby/object:Gem::Requirement
|
60
60
|
requirements:
|
61
|
-
- -
|
61
|
+
- - ">="
|
62
62
|
- !ruby/object:Gem::Version
|
63
63
|
version: !binary |-
|
64
64
|
MA==
|
@@ -77,10 +77,11 @@ files:
|
|
77
77
|
- lib/mini_aether/resolver.rb
|
78
78
|
- lib/mini_aether/bootstrap.rb
|
79
79
|
- lib/mini_aether/xml_parser.rb
|
80
|
+
- lib/mini_aether/helper.rb
|
80
81
|
- lib/mini_aether/spec.rb
|
81
82
|
- test/mini_aether_test.rb
|
82
83
|
- test/test_helper.rb
|
83
|
-
- test/mini_aether/
|
84
|
+
- test/mini_aether/helper_test.rb
|
84
85
|
- test/mini_aether/spec_test.rb
|
85
86
|
- README.md
|
86
87
|
- COPYING
|
@@ -92,7 +93,7 @@ require_paths:
|
|
92
93
|
- lib
|
93
94
|
required_ruby_version: !ruby/object:Gem::Requirement
|
94
95
|
requirements:
|
95
|
-
- -
|
96
|
+
- - ">="
|
96
97
|
- !ruby/object:Gem::Version
|
97
98
|
version: !binary |-
|
98
99
|
MA==
|
@@ -102,10 +103,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
102
103
|
none: false
|
103
104
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
104
105
|
requirements:
|
105
|
-
- -
|
106
|
-
Pg==
|
106
|
+
- - ">="
|
107
107
|
- !ruby/object:Gem::Version
|
108
|
-
version:
|
108
|
+
version: !binary |-
|
109
|
+
MA==
|
110
|
+
segments:
|
111
|
+
- 0
|
112
|
+
hash: 2
|
109
113
|
none: false
|
110
114
|
requirements: []
|
111
115
|
rubyforge_project:
|
@@ -1,67 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
require 'mini_aether/bootstrap'
|
4
|
-
|
5
|
-
module MiniAether
|
6
|
-
class BootstrapTest < MiniTest::Unit::TestCase
|
7
|
-
class InterpolateTest < MiniTest::Unit::TestCase
|
8
|
-
def setup
|
9
|
-
@bootstrap = Object.new
|
10
|
-
@bootstrap.extend(Bootstrap)
|
11
|
-
end
|
12
|
-
|
13
|
-
def test_passes_through_plain_string
|
14
|
-
strs = [
|
15
|
-
'hello',
|
16
|
-
'$ { nope } ',
|
17
|
-
'text${text',
|
18
|
-
'a a a a'
|
19
|
-
]
|
20
|
-
strs.each do |str|
|
21
|
-
assert_equal str, @bootstrap.interpolate(str)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
def test_interpolates_env_vars
|
26
|
-
key = '__AETHER_INTERPOLATE_TEST__'
|
27
|
-
ENV[key] = 'value'
|
28
|
-
assert_equal 'value', @bootstrap.interpolate("${env.#{key}}")
|
29
|
-
assert_equal 'aaa value', @bootstrap.interpolate("aaa ${env.#{key}}")
|
30
|
-
assert_equal 'value aaa', @bootstrap.interpolate("${env.#{key}} aaa")
|
31
|
-
assert_equal 'value}', @bootstrap.interpolate("${env.#{key}}}")
|
32
|
-
assert_equal 'avaluea', @bootstrap.interpolate("a${env.#{key}}a")
|
33
|
-
|
34
|
-
assert_equal 'a value a value a', @bootstrap.interpolate("a ${env.#{key}} a ${env.#{key}} a")
|
35
|
-
ensure
|
36
|
-
ENV[key] = nil
|
37
|
-
end
|
38
|
-
|
39
|
-
def test_empty_string_when_no_env_var
|
40
|
-
assert_nil ENV['NO_SUCH_ENV_VAR']
|
41
|
-
assert_equal '', @bootstrap.interpolate("${env.NO_SUCH_ENV_VAR}")
|
42
|
-
end
|
43
|
-
|
44
|
-
def test_interpolates_system_props
|
45
|
-
key = '__AETHER_INTERPOLATE_TEST__'
|
46
|
-
sys = Java::JavaLang::System
|
47
|
-
sys.setProperty(key, 'value')
|
48
|
-
|
49
|
-
assert_equal 'value', @bootstrap.interpolate("${#{key}}")
|
50
|
-
assert_equal 'aaa value', @bootstrap.interpolate("aaa ${#{key}}")
|
51
|
-
assert_equal 'value aaa', @bootstrap.interpolate("${#{key}} aaa")
|
52
|
-
assert_equal 'value}', @bootstrap.interpolate("${#{key}}}")
|
53
|
-
assert_equal 'avaluea', @bootstrap.interpolate("a${#{key}}a")
|
54
|
-
|
55
|
-
assert_equal 'a value a value a', @bootstrap.interpolate("a ${#{key}} a ${#{key}} a")
|
56
|
-
ensure
|
57
|
-
sys.clearProperty(key)
|
58
|
-
end
|
59
|
-
|
60
|
-
def test_empty_string_when_no_sys_prop
|
61
|
-
sys = Java::JavaLang::System
|
62
|
-
assert_nil sys.getProperty 'NO_SUCH_ENV_VAR'
|
63
|
-
assert_equal '', @bootstrap.interpolate("${NO_SUCH_ENV_VAR}")
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|