lib/buildar.rb in buildar-1.2.0.1 vs lib/buildar.rb in buildar-1.3.0.7

- old
+ new

@@ -5,13 +5,16 @@ # So we need a "global". # But if we use a class-based singleton, it's namespaced. # And it can't be set to nil, for example. # class Buildar + def self.dir(file) + File.expand_path('..', file) + end + def self.version - vpath = File.join(File.dirname(__FILE__), '..', 'VERSION') - File.read(vpath).chomp + File.read(File.join(dir(__FILE__), '..', 'VERSION')).chomp end # Call this from the rakefile, like: # Buildar.conf(__FILE__) do |b| # b.name = 'foo' @@ -56,79 +59,110 @@ 0 end }.join('.') end - attr_accessor :root, :name, :version_filename, :manifest_filename, - :use_git, :publish, :use_manifest_file, :use_version_file + attr_accessor :root, :name, + :use_git, :publish, + :use_gemspec_file, :gemspec_filename, + :use_version_file, :version_filename, + :use_manifest_file, :manifest_filename - def initialize(root = nil, name = nil) + attr_writer :gemspec_filename + + def initialize(root = nil) @root = root ? File.expand_path(root) : Dir.pwd - @name = name || File.split(@root).last + @name = File.split(@root).last + @use_git = false + @publish = { rubygems: false } + @use_gemspec_file = true @use_version_file = false @version_filename = 'VERSION' @use_manifest_file = false @manifest_filename = 'MANIFEST.txt' - @use_git = false - @publish = { rubygems: false } end - # created on demand and kept up to date - # def gemspec - @gemspec ||= Gem::Specification.new - @gemspec.name = @name - @gemspec.files = self.manifest if @use_manifest_file - @gemspec.version = self.version if @use_version_file - @gemspec + @use_gemspec_file ? self.hard_gemspec : self.soft_gemspec end - def gemfile - path = File.join(@root, 'pkg', "#{@name}-#{self.available_version}.gem") - raise "gemfile #{path} does not exist" unless File.exists?(path) - path + def soft_gemspec + @soft_gemspec ||= Gem::Specification.new + @soft_gemspec.name = @name + @soft_gemspec.version = self.version if @use_version_file + @soft_gemspec.files = self.manifest if @use_manifest_file + @soft_gemspec end - def available_version - if @use_version_file - self.version - elsif !@gemspec.version - raise "gemspec.version is false or nil" - elsif @gemspec.version.to_s.empty? - raise "gemspec.version is empty" - else - @gemspec.version - end + # load every time; cache locally if you must + # + def hard_gemspec + Gem::Specification.load self.gemspec_file end - def available_manifest - if @use_manifest_file - self.manifest - elsif !@gemspec.files - raise "gemspec.files is false or nil" - elsif @gemspec.files.empty? - raise "gemspec.files is empty" - else - @gemspec.files - end + def gemspec_file + File.join(@root, self.gemspec_filename) end - def version_file - File.join(@root, @version_filename) + # @name.gemspec is the default, but don't set this in the constructor + # it's common to set the name after intialization. e.g. via Buildar.conf + # so set the default on first invocation. After that, it's an accessor. + # + def gemspec_filename + @gemspec_filename ||= "#{@name}.gemspec" + @gemspec_filename end + def gemspec_location + @use_gemspec_file ? self.gemspec_filename : 'Rakefile' + end + def version File.read(self.version_file).chomp end def write_version new_version File.open(self.version_file, 'w') { |f| f.write(new_version) } end - def manifest_file - File.join(@root, @manifest_filename) + def version_file + File.join(@root, @version_filename) end + def available_version + return self.version if @use_version_file + version = self.gemspec.version + raise "gemspec.version is missing" if !version or version.to_s.empty? + version + end + + def version_location + @use_version_file ? self.version_filename : self.gemspec_filename + end + + # where we expect a built gem to land + # + def gemfile + path = File.join(@root, 'pkg', "#{@name}-#{self.available_version}.gem") + raise "gemfile #{path} does not exist" unless File.exists?(path) + path + end + + def available_manifest + return self.manifest if @use_manifest_file + manifest = self.gemspec.files + raise "gemspec.files is missing" if !manifest or manifest.to_s.empty? + manifest + end + def manifest File.readlines(self.manifest_file).map { |line| line.chomp } + end + + def manifest_file + File.join(@root, @manifest_filename) + end + + def manifest_location + @use_manifest_file ? self.manifest_filename : self.gemspec_filename end end