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.
@@ -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