Class: TwitterCldr::Resources::Requirements::IcuRequirement

Inherits:
Object
  • Object
show all
Defined in:
lib/twitter_cldr/resources/requirements/icu_requirement.rb

Overview

This requirement makes use of the JarClassLoader package (github.com/kamranzafar/JCL) to load ICU in an isolated environment to keep different versions of the library separate. If ICU versions are not kept separate, the one that’s first on the classpath wins, which can be surprising if you’re not expecting it. Oh, and it can break all the tests.

Constant Summary collapse

ICU_URL =
"http://download.icu-project.org/files/icu4j/%{version}/icu4j-%{underscored_version}.jar"
JCL_JARS =

first entry is JCL itself, other two are JCL dependencies

[
  'https://repo.maven.apache.org/maven2/org/xeustechnologies/jcl-core/2.7/jcl-core-2.7.jar',
  'https://repo.maven.apache.org/maven2/org/objenesis/objenesis/2.1/objenesis-2.1.jar',
  'https://repo.maven.apache.org/maven2/cglib/cglib-nodep/2.2/cglib-nodep-2.2.jar'
]

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(version) ⇒ IcuRequirement

Returns a new instance of IcuRequirement.



29
30
31
# File 'lib/twitter_cldr/resources/requirements/icu_requirement.rb', line 29

def initialize(version)
  @version = version
end

Instance Attribute Details

#versionObject (readonly)

Returns the value of attribute version.



27
28
29
# File 'lib/twitter_cldr/resources/requirements/icu_requirement.rb', line 27

def version
  @version
end

Instance Method Details

#get_class(name) ⇒ Object



56
57
58
# File 'lib/twitter_cldr/resources/requirements/icu_requirement.rb', line 56

def get_class(name)
  class_loader.load_class(name).ruby_class
end

#icu_source_pathObject



46
47
48
49
50
# File 'lib/twitter_cldr/resources/requirements/icu_requirement.rb', line 46

def icu_source_path
  @source_path ||= File.join(
    TwitterCldr::VENDOR_DIR, "icu_v#{version}.jar"
  )
end

#jcl_source_path_for(url) ⇒ Object



52
53
54
# File 'lib/twitter_cldr/resources/requirements/icu_requirement.rb', line 52

def jcl_source_path_for(url)
  File.join(TwitterCldr::VENDOR_DIR, File.basename(url))
end

#prepareObject



33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/twitter_cldr/resources/requirements/icu_requirement.rb', line 33

def prepare
  download_icu
  download_jcl

  JCL_JARS.each do |jcl_jar_url|
    require jcl_source_path_for(jcl_jar_url)
  end

  java_import 'org.xeustechnologies.jcl.JarClassLoader'

  class_loader.add(icu_source_path)
end