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.
@@ -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
- System = Java::JavaLang::System
12
-
13
- # Pre-resolved dependencies of mini_aether.
14
- def dependencies
15
- spec = Spec.new do
16
- group 'org.sonatype.aether' do
17
- version '1.13.1' do
18
- jar 'aether-api'
19
- jar 'aether-connector-asynchttpclient'
20
- jar 'aether-connector-file'
21
- jar 'aether-impl'
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
- jar 'com.ning:async-http-client:1.6.5'
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
- group 'org.apache.maven' do
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
- group 'org.codehaus.plexus' do
51
- jar 'plexus-interpolation:1.14'
52
- jar 'plexus-component-annotations:1.5.5'
53
- jar 'plexus-utils:2.0.6'
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
- spec.dependencies
58
- end
59
-
60
- # Interpolate variables like +${user.home}+ and +${env.HOME}+ from
61
- # system properties and environment variables respectively.
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
- while s.scan_until(/\$\{[^\s}]+\}/) # match ${stuff}
69
- # add the pre_match, but only starting from previous position
70
- ret << str.slice(pos, (s.pos - pos - s.matched.size))
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
- # interpolate
73
- var = s.matched.slice(2..-2)
74
- ret << case var
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
- pos = s.pos
82
- end
83
- ret << s.rest
84
-
85
- ret
86
- end
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
- def local_repository_path
89
- default_local_repo_path =
90
- File.join(System.getProperty('user.home'), '.m2', 'repository')
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
- if File.exists? M2_SETTINGS
93
- xml = File.read M2_SETTINGS
94
- begin
95
- parser = XmlParser.new(xml)
96
- parser.pull_to_path(:settings, :localRepository)
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
- # Load the required jar files, downloading them if necessary.
114
- #
115
- # Ignores any maven config regarding repositories and attempts a
116
- # direct download from repo1.maven.org using Net::HTTP.
117
- def bootstrap!
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
- def install(path, file, repo = MAVEN_CENTRAL_REPO)
124
- print "installing #{File.basename(path)}... "
125
- $stdout.flush
126
-
127
- remote_base = File.dirname(path) + '/' + File.basename(path, File.extname(path))
128
- local_dir = File.dirname(file)
129
- local_base = File.join(local_dir, File.basename(file, File.extname(file)))
130
-
131
- exts = [File.extname(path), '.pom', '.pom.sha1']
132
- exts.each do |ext|
133
- uri = URI("#{repo}/#{remote_base}#{ext}")
134
- local_file = local_base + ext
135
-
136
- Net::HTTP.start(uri.host, uri.port) do |http|
137
- request = Net::HTTP::Get.new uri.request_uri
138
-
139
- http.request request do |response|
140
- unless response.code == '200'
141
- raise "#{response.code} #{response.message}: #{uri}"
142
- end
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
- FileUtils.mkdir_p local_dir
145
- open local_file, 'w' do |io|
146
- response.read_body do |chunk|
147
- io.write chunk
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
@@ -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.extend(MiniAether::Bootstrap)
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(MiniAether.local_repository_path)
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 ({})', dep_hashes.size
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.info 'requested {}', dep
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.2fMiB %s (%s)" % [size/MiB_PER_BYTE, artifact, file.name])
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
- files
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
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: 2012-12-12 00:00:00.000000000 Z
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/bootstrap_test.rb
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
- - - !binary |-
106
- Pg==
106
+ - - ">="
107
107
  - !ruby/object:Gem::Version
108
- version: 1.3.1
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