Module: Baltix::Loader::Pom

Included in:
Source::Gem
Defined in:
lib/baltix/loader/pom.rb

Overview

POM xml based valid gemspec environment generation module example: “ovirt-engine-sdk” gem requires “xmllint” to work

Instance Method Summary collapse

Instance Method Details

#pom(propfile) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/baltix/loader/pom.rb', line 6

def pom propfile
   dir = File.dirname(propfile)

   specfile = Dir.glob(File.join(dir, '*.gemspec')).first

   re = /require.*?(?<version_file>[^"']+version[^"']*)/
   version_line = Dir.glob(File.join(dir, '**', '*.rb')).map { |x| IO.read(x).split("\n").grep(re).first }.compact.first
   return nil if !version_line or !specfile
   version_file = re.match(version_line)[:version_file]
   re_V = /(?<klass>[^\"\'\(\s]+)::VERSION/
   match = re_V.match(IO.read(specfile).split("\n").grep(re_V).first.to_s)
   if match
      klass = match[:klass]
      version = `xmllint pom.xml --xpath "/*[name()='project']/*[name()='version']/text()"`.strip
      if version != ""
         modtext = "module #{klass};VERSION = '#{version}';end"
         File.open(File.join(dir, "lib", version_file), "w+") {|f| f.puts(modtext) }
      end
   end
rescue Errno::ENOENT
end