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