Class: RPGem
- Inherits:
-
Object
- Object
- RPGem
- Defined in:
- lib/rpgem.rb
Constant Summary collapse
- HOME_DIR =
`echo ~`.strip
- CWD =
`pwd`.strip
- TMP =
"/tmp/rpgem"
- RPMBUILD_DIR =
"#{HOME_DIR}/rpmbuild"
- SOURCES_DIR =
"#{RPMBUILD_DIR}/SOURCES"
- SPECS_DIR =
"#{RPMBUILD_DIR}/SPECS"
Instance Attribute Summary collapse
-
#name ⇒ Object
readonly
Returns the value of attribute name.
-
#version ⇒ Object
readonly
Returns the value of attribute version.
Instance Method Summary collapse
- #build! ⇒ Object
- #fetch! ⇒ Object
- #fetched? ⇒ Boolean
- #fetched_version(name_or_dep, requirements = []) ⇒ Object
- #format ⇒ Object
- #gem_loc ⇒ Object
-
#initialize(name, options = {}) ⇒ RPGem
constructor
A new instance of RPGem.
- #make_spec! ⇒ Object
- #recurse!(action = :setup!) ⇒ Object
- #sh_version_reqs ⇒ Object
- #spec ⇒ Object
- #spec_loc ⇒ Object
- #to_s ⇒ Object
Constructor Details
#initialize(name, options = {}) ⇒ RPGem
Returns a new instance of RPGem.
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/rpgem.rb', line 40 def initialize(name, ={}) @name = name @options = .rmerge!({ :version => nil, :recursive => false, :version_reqs => [], :ruby_cmd => "ruby", :prefix => '/usr', :dependencies => [], :build_dependencies => [], :ree => false, :rake_tasks => [], }) @options.each do |k,v| instance_variable_set("@#{k}", v) end end |
Instance Attribute Details
#name ⇒ Object (readonly)
Returns the value of attribute name.
65 66 67 |
# File 'lib/rpgem.rb', line 65 def name @name end |
#version ⇒ Object (readonly)
Returns the value of attribute version.
65 66 67 |
# File 'lib/rpgem.rb', line 65 def version @version end |
Instance Method Details
#build! ⇒ Object
148 149 150 151 152 153 154 155 156 |
# File 'lib/rpgem.rb', line 148 def build! make_spec! puts puts "-*- Building RPM rpgem-#{self.to_s} -*-" FileUtils.cd RPMBUILD_DIR do system("rpmbuild -ba -v #{spec_loc}") end puts "-*- Done Building RPM rpgem-#{self.to_s} -*-" end |
#fetch! ⇒ Object
112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
# File 'lib/rpgem.rb', line 112 def fetch! v = self.fetched_version(@name, @version_reqs) if (@version.nil? && v) || (!@version.nil? && self.fetched?) @version = v puts "Skipping fetch of #{self.to_s}" else puts "Fetching the gem #{self.to_s}" if @version.nil? system("rm -rf #{TMP}") system("mkdir #{TMP}") FileUtils.cd TMP do system("gem fetch #{@name} #{sh_version_reqs}") gem_title = `ls` @version = gem_title.match(/-(\d+(\.\d+)+)\.gem$/)[1] end system("mv #{TMP}/* #{SOURCES_DIR}/") else FileUtils.cd SOURCES_DIR do system("gem fetch #{@name} --version #{@version}") end end end end |
#fetched? ⇒ Boolean
108 109 110 |
# File 'lib/rpgem.rb', line 108 def fetched? return File.exists?(self.gem_loc) end |
#fetched_version(name_or_dep, requirements = []) ⇒ Object
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/rpgem.rb', line 91 def fetched_version(name_or_dep, requirements=[]) if name_or_dep.is_a? Gem::Dependency d = name_or_dep else d = Gem::Dependency.new(name_or_dep, requirements) end currents = `ls #{SOURCES_DIR} | grep '^#{d.name}'`.split($/) return nil if currents.empty? currents.each do |c| ver = c.match(/-(\d+(\.\d+)+)(\.gem)?$/)[1] return ver if d.match?(d.name, ver) end return nil end |
#format ⇒ Object
83 84 85 |
# File 'lib/rpgem.rb', line 83 def format @format ||= Gem::Format.from_file_by_path(gem_loc) end |
#gem_loc ⇒ Object
75 76 77 |
# File 'lib/rpgem.rb', line 75 def gem_loc "#{SOURCES_DIR}/#{self.to_s}.gem" end |
#make_spec! ⇒ Object
136 137 138 139 140 141 142 143 144 145 146 |
# File 'lib/rpgem.rb', line 136 def make_spec! puts "Rendering specfile for #{self.to_s}" template = File.read("#{LIB_DIR}/template.spec.erb") specfile = ERB.new(template).result(binding) puts "rendered:" puts "===============" puts specfile puts "===============" File.write(spec_loc, specfile) puts "rendered to #{spec_loc}" end |
#recurse!(action = :setup!) ⇒ Object
158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 |
# File 'lib/rpgem.rb', line 158 def recurse!(action=:setup!) #TODO: add an option for dev dependencies #TODO: don't choke on circular dependencies deps = self.spec.runtime_dependencies deps.each do |d| puts puts "#{self.to_s} depends on #{d.name}" g = self.class.new(d.name, :version_reqs => d.requirements_list, :recursive => true, :prefix => @prefix, :ree => @ree ) g.fetch! g.recurse!(action) g.send(action) unless action == :fetch! end end |
#sh_version_reqs ⇒ Object
59 60 61 62 63 |
# File 'lib/rpgem.rb', line 59 def sh_version_reqs @version_reqs.map do |r| "--version '#{r}'" end.join ' ' end |
#spec ⇒ Object
87 88 89 |
# File 'lib/rpgem.rb', line 87 def spec @spec ||= format.spec end |
#spec_loc ⇒ Object
79 80 81 |
# File 'lib/rpgem.rb', line 79 def spec_loc "#{SPECS_DIR}/rpgem-#{self.to_s}.spec" end |
#to_s ⇒ Object
67 68 69 70 71 72 73 |
# File 'lib/rpgem.rb', line 67 def to_s if @version.nil? @name else "#{@name}-#{@version}" end end |