mini_aether 0.0.5-java → 0.0.6-java
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.
- 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
|