Class: Naether::Bootstrap

Inherits:
Object
  • Object
show all
Defined in:
lib/naether/bootstrap.rb

Overview

Helper for bootstrapping Naether

Author:

Constant Summary

@@dependencies =
nil

Class Method Summary (collapse)

Class Method Details

+ (Object) bootstrap_local_repo(local_repo = nil, opts = {})

Bootstrap the local repo by downloading Naether's dependencies

Parameters:

  • local_repo (String) (defaults to: nil)

    defaults to #default_local_repo

  • opts (hash) (defaults to: {})


68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/naether/bootstrap.rb', line 68

def bootstrap_local_repo(local_repo = nil, opts = {} )
  local_repo = local_repo || default_local_repo
  
  opts[:local_repo] = local_repo
  
  temp_naether_dir = File.join( local_repo, ".naether" )
  
  
  deps = download_dependencies( temp_naether_dir, opts )
  
  jars = (deps[:exists] + deps[:downloaded]).map {|jar| jar.values.first }
    
  jars = Naether::Java.internal_load_paths( jars )
  
  if ( deps[:downloaded].size > 0)
    install_dependencies_to_local_repo( deps[:downloaded], jars, opts )
  end
  
  #raise Naether::Java.internal_loaded_paths.inspect
  
end

+ (Hash) check_local_repo_for_deps(local_repo = nil, opts = {})

Check local_repo for Naether dependencies

Parameters:

  • local_repo (String) (defaults to: nil)
  • opts (Hash) (defaults to: {})

Returns:

  • (Hash)

    with status of missing, downloaded, exists dependencies



148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
# File 'lib/naether/bootstrap.rb', line 148

def check_local_repo_for_deps(local_repo = nil, opts = {} )
  
  local_repo = local_repo || default_local_repo
  local_repo = File.expand_path(local_repo)
  
  #puts "Checking #{local_repo} for jars to bootstrap Naether"
  
  deps = {:exists => [], :missing => [], :downloaded => [] }
  
  dependencies( opts[:dep_yaml] ).each do |dep|
    notation = dep.split(":")
    group = notation[0].gsub("\.", File::SEPARATOR)
    artifact = notation[1].gsub("\.", File::SEPARATOR)
    type = notation[2]
    version = notation[3]
    
    jar = "#{artifact}-#{version}.#{type}"
    
    maven_path = "#{local_repo}#{File::SEPARATOR}#{group}#{File::SEPARATOR}#{artifact}#{File::SEPARATOR}#{version}#{File::SEPARATOR}#{jar}"
    
    if File.exists? maven_path
      deps[:exists] << { dep => maven_path }
    else
      deps[:missing] << dep
    end
    
  end  
  deps
end

+ (String) default_local_repo

Default local repo of ENV or ~/.m2/repository

Returns:

  • (String)


24
25
26
# File 'lib/naether/bootstrap.rb', line 24

def default_local_repo
  ENV['M2_REPO'] || File.expand_path('~/.m2/repository')
end

+ (List) dependencies(dep_file = nil)

List of Java dependencies for Naether from yaml dependency file. Caches result after first run.

Parameters:

  • dep_file (String) (defaults to: nil)

    path, defaults to Naether::Configuration.dependencies_yml

Returns:

  • (List)


48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/naether/bootstrap.rb', line 48

def dependencies( dep_file=nil )
  
  if @@dependencies
    return @@dependencies
  end
  
  if dep_file.nil?
    dep_file = Naether::Configuration.dependencies_yml
  end
  
  dep = YAML.load_file( dep_file )  
  @@dependencies = dep[:dependencies]
end

+ (Hash) download_dependencies(dest, opts = {})

Download Naether dependencies

Parameters:

  • dest (String)

    to download dependencies t

  • opts (Hash) (defaults to: {})

Returns:

  • (Hash)

    with status of missing, downloaded, exists dependencies



96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
# File 'lib/naether/bootstrap.rb', line 96

def download_dependencies( dest, opts = {} )
   
  if !File.exists? dest
    FileUtils.mkdir_p( dest )
  end
  
  deps = {}
    
  if opts[:deps]
    deps[:missing] = opts[:deps] 
  else
    deps = check_local_repo_for_deps( opts[:local_repo], opts )
  end
  
  deps[:downloaded] = []
    
  if deps[:missing].size > 0
      
    deps[:missing].each do |dep|
      notation = dep.split(":")
      group = notation[0].gsub("\.", File::SEPARATOR)
      artifact = notation[1]
      type = notation[2]
      version = notation[3]
      
      jar = "#{artifact}-#{version}.#{type}"
      
      maven_path = "#{dest}#{File::SEPARATOR}#{jar}"
      
      if !File.exists? maven_path
        maven_mirror = "http://repo1.maven.org/maven2/#{group}/#{artifact}/#{version}/#{jar}"
        
        open(maven_path, 'wb') do |io|
          io.print open(maven_mirror).read
        end
        
        deps[:downloaded] << { dep => maven_path }
      else
        deps[:downloaded] << { dep => maven_path }
      end
    end
  end
  
  deps
end

+ (Naether) install_dependencies_to_local_repo(install_jars, naether_jars, opts = {})

Install Naether Dependencies to local_repo

Parameters:

  • install_jars (Array<String>)
  • naether_jars (Array<String>)

    to bootstrap Naether. These may overlap with install_jars.

  • opts (Hash) (defaults to: {})

Returns:



186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
# File 'lib/naether/bootstrap.rb', line 186

def install_dependencies_to_local_repo( install_jars, naether_jars, opts = {}  )
    
  require "#{File.dirname(__FILE__)}/../naether"
  
  @naether = Naether.create_from_jars( naether_jars )
  
  if opts[:local_repo]
    @naether.local_repo_path = opts[:local_repo]
  end
  
  install_jars.each do |dep|
    notation, path = dep.to_a.first
    @naether.install( notation, nil, path )
  end
  
  @naether
end

+ (Object) write_dependencies(dest = 'jar_dependencies.yml')

Write bootstrap dependencies to yaml file



29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/naether/bootstrap.rb', line 29

def write_dependencies( dest = 'jar_dependencies.yml' )
  deps = {};
  if Naether::Configuration.platform == 'java'
    deps[:dependencies] = com.tobedevoured.naether.Bootstrap.dependencies.to_a
  else
    bootstrap = Rjb::import('com.tobedevoured.naether.Bootstrap')
    deps[:dependencies] = bootstrap.dependencies.toArray().map{ |dep| dep.toString() }
  end  
  
  File.open( dest, 'w' ) do |out|
    YAML.dump( deps, out )
  end
end