Skip to content

Commit

Permalink
Add underscore to standard delimiters; build/test updates
Browse files Browse the repository at this point in the history
  • Loading branch information
dazuma committed Apr 26, 2011
1 parent 2d2320f commit 025d70e
Show file tree
Hide file tree
Showing 22 changed files with 213 additions and 126 deletions.
1 change: 1 addition & 0 deletions .gitignore
@@ -1,3 +1,4 @@
/doc/
/pkg/
.DS_Store
*.rbc
6 changes: 6 additions & 0 deletions History.rdoc
@@ -1,3 +1,9 @@
=== 0.4.1 / 2011-04-26

* Support underscore "_" as a delimiter.
* A .gemspec file is now available for gem building and bundler git integration.
* Some cleanup of the Rakefile and tests.

=== 0.4.0 / 2010-05-24

* Included Semantic Version (http://semver.org/) format called "semver".
Expand Down
6 changes: 3 additions & 3 deletions README.rdoc
Expand Up @@ -113,9 +113,9 @@ provides a schema and formatter/parser matching Gem::Version.

=== Requirements

* Ruby 1.8.6 or later (1.8.7 recommended), Ruby 1.9.1 or later, or JRuby
1.4 or later.
* blockenspiel 0.3.1 or later.
* Ruby 1.8.7 or later, Ruby 1.9.1 or later, JRuby 1.5 or later, or
Rubinius 1.0 or later.
* blockenspiel 0.4.1 or later.

=== Installation

Expand Down
236 changes: 153 additions & 83 deletions Rakefile
Expand Up @@ -33,117 +33,187 @@
# -----------------------------------------------------------------------------


# Gemspec

require 'rubygems'
require 'rake'
require 'rake/clean'
require 'rake/gempackagetask'
require 'rake/testtask'
require 'rake/rdoctask'
require 'rdoc'
require 'rdoc/rdoc'
require 'rdoc/generator/darkfish'
gemspec_file_ = ::File.read(::Dir.glob('*.gemspec').first)
gemspec_ = eval(gemspec_file_)
release_gemspec_ = eval(gemspec_file_)
release_gemspec_.version = gemspec_.version.to_s.sub(/\.build\d+$/, '')
::RAKEFILE_CONFIG = {} unless defined?(::RAKEFILE_CONFIG)

require ::File.expand_path('lib/versionomy.rb', ::File.dirname(__FILE__))

# Platform info

# Configuration
extra_rdoc_files_ = ['README.rdoc', 'Versionomy.rdoc', 'History.rdoc']
dlext_ = ::Config::CONFIG['DLEXT']

platform_ =
case ::RUBY_DESCRIPTION
when /^jruby\s/ then :jruby
when /^ruby\s/ then :mri
when /^rubinius\s/ then :rubinius
else :unknown
end

# Default task
task :default => [:clean, :rdoc, :package, :test]
platform_suffix_ =
case platform_
when :mri
if ::RUBY_VERSION =~ /^1\.8\..*$/
'mri18'
elsif ::RUBY_VERSION =~ /^1\.9\..*$/
'mri19'
else
raise "Unknown version of Matz Ruby Interpreter (#{::RUBY_VERSION})"
end
when :rubinius then 'rbx'
when :jruby then 'jruby'
else 'unknown'
end


# Clean task
CLEAN.include(['doc', 'pkg'])
# Directories

doc_directory_ = ::RAKEFILE_CONFIG[:doc_directory] || 'doc'
pkg_directory_ = ::RAKEFILE_CONFIG[:pkg_directory] || 'pkg'
tmp_directory_ = ::RAKEFILE_CONFIG[:tmp_directory] || 'tmp'

# Test task
::Rake::TestTask.new('test') do |task_|
task_.pattern = 'tests/tc_*.rb'
end

# Build tasks

# RDoc task
::Rake::RDocTask.new do |task_|
task_.main = 'README.rdoc'
task_.rdoc_files.include(*extra_rdoc_files_)
task_.rdoc_files.include('lib/versionomy/**/*.rb')
task_.rdoc_dir = 'doc'
task_.title = "Versionomy #{::Versionomy::VERSION_STRING} documentation"
task_.options << '-f' << 'darkfish'
internal_ext_info_ = gemspec_.extensions.map do |extconf_path_|
source_dir_ = ::File.dirname(extconf_path_)
name_ = ::File.basename(source_dir_)
{
:name => name_,
:source_dir => source_dir_,
:extconf_path => extconf_path_,
:source_glob => "#{source_dir_}/*.{c,h}",
:obj_glob => "#{source_dir_}/*.{o,dSYM}",
:suffix_makefile_path => "#{source_dir_}/Makefile_#{platform_suffix_}",
:built_lib_path => "#{source_dir_}/#{name_}.#{dlext_}",
:staged_lib_path => "#{source_dir_}/#{name_}_#{platform_suffix_}.#{dlext_}",
}
end
internal_ext_info_ = [] if platform_ == :jruby

internal_ext_info_.each do |info_|
file info_[:staged_lib_path] => [info_[:suffix_makefile_path]] + ::Dir.glob(info_[:source_glob]) do
::Dir.chdir(info_[:source_dir]) do
cp "Makefile_#{platform_suffix_}", 'Makefile'
sh 'make'
rm 'Makefile'
end
mv info_[:built_lib_path], info_[:staged_lib_path]
rm_r ::Dir.glob(info_[:obj_glob])
end
file info_[:suffix_makefile_path] => info_[:extconf_path] do
::Dir.chdir(info_[:source_dir]) do
ruby 'extconf.rb'
mv 'Makefile', "Makefile_#{platform_suffix_}"
end
end
end


# Gem task
gemspec_ = ::Gem::Specification.new do |s_|
s_.name = 'versionomy'
s_.summary = 'Versionomy is a generalized version number library.'
s_.version = ::Versionomy::VERSION_STRING.dup
s_.author = 'Daniel Azuma'
s_.email = 'dazuma@gmail.com'
s_.description = 'Versionomy is a generalized version number library. It provides tools to represent, manipulate, parse, and compare version numbers in the wide variety of versioning schemes in use.'
s_.homepage = 'http://virtuoso.rubyforge.org/versionomy'
s_.rubyforge_project = 'virtuoso'
s_.required_ruby_version = '>= 1.8.6'
s_.files = ::FileList['lib/**/*.rb', 'tests/**/*.rb', '*.rdoc', 'Rakefile'].to_a
s_.extra_rdoc_files = extra_rdoc_files_
s_.has_rdoc = true
s_.test_files = ::FileList['tests/tc_*.rb']
s_.platform = ::Gem::Platform::RUBY
s_.add_dependency('blockenspiel', '>= 0.3.1')
task :build_ext => internal_ext_info_.map{ |info_| info_[:staged_lib_path] } do
internal_ext_info_.each do |info_|
target_prefix_ = target_name_ = nil
::Dir.chdir(info_[:source_dir]) do
ruby 'extconf.rb'
::File.open('Makefile') do |file_|
file_.each do |line_|
if line_ =~ /^target_prefix\s*=\s*(\S+)\s/
target_prefix_ = $1
elsif line_ =~ /^TARGET\s*=\s*(\S+)\s/
target_name_ = $1
end
end
end
rm 'Makefile'
end
raise "Could not find target_prefix in makefile for #{info_[:name]}" unless target_prefix_
raise "Could not find TARGET in makefile for #{info_[:name]}" unless target_name_
cp info_[:staged_lib_path], "lib#{target_prefix_}/#{target_name_}.#{dlext_}"
end
end
::Rake::GemPackageTask.new(gemspec_) do |task_|
task_.need_zip = false
task_.need_tar = true


# Clean task

clean_files_ = [doc_directory_, pkg_directory_, tmp_directory_] +
::Dir.glob('ext/**/Makefile*') +
::Dir.glob('ext/**/*.{o,class,log,dSYM}') +
::Dir.glob("**/*.{#{dlext_},rbc,jar}") +
(::RAKEFILE_CONFIG[:extra_clean_files] || [])
task :clean do
clean_files_.each{ |path_| rm_rf path_ }
end


# Publish RDocs
desc 'Publishes RDocs to RubyForge'
task :publish_rdoc_to_rubyforge => [:rerdoc] do
# RDoc tasks

task :build_rdoc => "#{doc_directory_}/index.html"
all_rdoc_files_ = ::Dir.glob("lib/**/*.rb") + gemspec_.extra_rdoc_files
main_rdoc_file_ = ::RAKEFILE_CONFIG[:main_rdoc_file]
main_rdoc_file_ = 'README.rdoc' if !main_rdoc_file_ && ::File.readable?('README.rdoc')
main_rdoc_file_ = ::Dir.glob("*.rdoc").first unless main_rdoc_file_
file "#{doc_directory_}/index.html" => all_rdoc_files_ do
rm_r doc_directory_ rescue nil
args_ = []
args_ << '-o' << doc_directory_
args_ << '--main' << main_rdoc_file_ if main_rdoc_file_
args_ << '--title' << "#{::RAKEFILE_CONFIG[:product_visible_name] || gemspec_.name.capitalize} #{release_gemspec_.version} Documentation"
args_ << '-f' << 'darkfish'
args_ << '--verbose' if ::ENV['VERBOSE']
gem 'rdoc'
require 'rdoc/rdoc'
::RDoc::RDoc.new.document(args_ + all_rdoc_files_)
end

task :publish_rdoc => :build_rdoc do
require 'yaml'
config_ = ::YAML.load(::File.read(::File.expand_path("~/.rubyforge/user-config.yml")))
username_ = config_['username']
sh "rsync -av --delete doc/ #{username_}@rubyforge.org:/var/www/gforge-projects/virtuoso/versionomy"
sh "rsync -av --delete #{doc_directory_}/ #{username_}@rubyforge.org:/var/www/gforge-projects/#{gemspec_.rubyforge_project}/#{gemspec_.name}"
end


# Publish gem
task :release_gem_to_rubyforge => [:package] do |t_|
v_ = ::ENV["VERSION"]
abort "Must supply VERSION=x.y.z" unless v_
if v_ != ::Versionomy::VERSION_STRING
abort "Versions don't match: #{v_} vs #{::Versionomy::VERSION_STRING}"
# Gem release tasks

task :build_gem do
::Gem::Builder.new(gemspec_).build
mkdir_p(pkg_directory_)
mv "#{gemspec_.name}-#{gemspec_.version}.gem", "#{pkg_directory_}/"
end

task :build_release do
::Gem::Builder.new(release_gemspec_).build
mkdir_p(pkg_directory_)
mv "#{release_gemspec_.name}-#{release_gemspec_.version}.gem", "#{pkg_directory_}/"
end

task :release_gem => :build_release do
::Dir.chdir(pkg_directory_) do
sh "#{::RbConfig::TOPDIR}/bin/gem push #{release_gemspec_.name}-#{release_gemspec_.version}.gem"
end
gem_pkg_ = "pkg/versionomy-#{v_}.gem"
tgz_pkg_ = "pkg/versionomy-#{v_}.tgz"
release_notes_ = ::File.read("README.rdoc").split(/^(==.*)/)[2].strip
release_changes_ = ::File.read("History.rdoc").split(/^(===.*)/)[1..2].join.strip

require 'rubyforge'
rf_ = ::RubyForge.new.configure
puts "Logging in to RubyForge"
rf_.login
config_ = rf_.userconfig
config_["release_notes"] = release_notes_
config_["release_changes"] = release_changes_
config_["preformatted"] = true
puts "Releasing versionomy #{v_} to RubyForge"
rf_.add_release('virtuoso', 'versionomy', v_, gem_pkg_, tgz_pkg_)
end


# Publish gem
task :release_gem_to_gemcutter => [:package] do |t_|
v_ = ::ENV["VERSION"]
abort "Must supply VERSION=x.y.z" unless v_
if v_ != ::Versionomy::VERSION_STRING
abort "Versions don't match: #{v_} vs #{::Versionomy::VERSION_STRING}"
# Unit test task

task :test => :build_ext do
$:.unshift(::File.expand_path('lib', ::File.dirname(__FILE__)))
if ::ENV['TESTCASE']
test_files_ = ::Dir.glob("test/#{::ENV['TESTCASE']}.rb")
else
test_files_ = ::Dir.glob("test/**/tc_*.rb")
end
test_files_.each do |path_|
load path_
puts "Loaded testcase #{path_}"
end
puts "Releasing versionomy #{v_} to GemCutter"
`cd pkg && gem push versionomy-#{v_}.gem`
end


# Publish everything
task :release => [:release_gem_to_gemcutter, :release_gem_to_rubyforge, :publish_rdoc_to_rubyforge]
# Default task

task :default => [:clean, :build_rdoc, :build_gem, :test]
1 change: 1 addition & 0 deletions Version
@@ -0,0 +1 @@
0.4.1
22 changes: 11 additions & 11 deletions lib/versionomy/format_definitions/standard.rb
Expand Up @@ -295,23 +295,23 @@ def self.create
# So we just allow it to fall through to the default.

recognize_regexp_map(:style => :long, :default_delimiter => '',
:delimiter_regexp => '-|\.|\s?') do
:delimiter_regexp => '-|_|\.|\s?') do
map(:development, 'dev')
map(:alpha, 'alpha')
map(:beta, 'beta')
map(:preview, 'preview')
end
recognize_regexp_map(:style => :short, :default_delimiter => '',
:delimiter_regexp => '-|\.|\s?') do
:delimiter_regexp => '-|_|\.|\s?') do
map(:release_candidate, 'rc')
map(:preview, 'pre')
end
recognize_regexp_map(:style => :long, :default_delimiter => '',
:delimiter_regexp => '-|\.|\s?') do
:delimiter_regexp => '-|_|\.|\s?') do
map(:release_candidate, 'rc')
end
recognize_regexp_map(:style => :short, :default_delimiter => '',
:delimiter_regexp => '-|\.|\s?',
:delimiter_regexp => '-|_|\.|\s?',
:requires_next_field => true) do
map(:development, 'd')
map(:alpha, 'a')
Expand All @@ -329,35 +329,35 @@ def self.create
# to 1, while parsing a string will yield 0 when the field is
# missing (e.g. we want "1.9.2dev" to mean "1.9.2dev0".)
field(:development_version, :default_value => 0) do
recognize_number(:delimiter_regexp => '-|\.|\s?', :default_delimiter => '',
recognize_number(:delimiter_regexp => '-|_|\.|\s?', :default_delimiter => '',
:default_value_optional => true)
end
field(:development_minor) do
recognize_number(:default_value_optional => true)
end
field(:alpha_version, :default_value => 0) do
recognize_number(:delimiter_regexp => '-|\.|\s?', :default_delimiter => '',
recognize_number(:delimiter_regexp => '-|_|\.|\s?', :default_delimiter => '',
:default_value_optional => true)
end
field(:alpha_minor) do
recognize_number(:default_value_optional => true)
end
field(:beta_version, :default_value => 0) do
recognize_number(:delimiter_regexp => '-|\.|\s?', :default_delimiter => '',
recognize_number(:delimiter_regexp => '-|_|\.|\s?', :default_delimiter => '',
:default_value_optional => true)
end
field(:beta_minor) do
recognize_number(:default_value_optional => true)
end
field(:release_candidate_version, :default_value => 0) do
recognize_number(:delimiter_regexp => '-|\.|\s?', :default_delimiter => '',
recognize_number(:delimiter_regexp => '-|_|\.|\s?', :default_delimiter => '',
:default_value_optional => true)
end
field(:release_candidate_minor) do
recognize_number(:default_value_optional => true)
end
field(:preview_version, :default_value => 0) do
recognize_number(:delimiter_regexp => '-|\.|\s?', :default_delimiter => '',
recognize_number(:delimiter_regexp => '-|_|\.|\s?', :default_delimiter => '',
:default_value_optional => true)
end
field(:preview_minor) do
Expand All @@ -370,9 +370,9 @@ def self.create
field(:patchlevel, :requires_previous_field => false,
:default_value_optional => true, :default_style => :number) do
recognize_number(:style => :number, :default_delimiter => '-',
:delimiter_regexp => '(-|\.|\s?)(p|u)|-|_')
:delimiter_regexp => '(-|_|\.|\s?)(p|u)|-|_')
recognize_letter(:style => :letter, :default_delimiter => '',
:delimiter_regexp => '-|\.|\s?',
:delimiter_regexp => '-|_|\.|\s?',
:expected_follower_regexp => '\z')
end
field(:patchlevel_minor) do
Expand Down
2 changes: 1 addition & 1 deletion lib/versionomy/version.rb
Expand Up @@ -37,7 +37,7 @@
module Versionomy

# Current gem version, as a frozen string.
VERSION_STRING = '0.4.0'.freeze
VERSION_STRING = ::File.read(::File.dirname(__FILE__)+'/../../Version').strip.freeze

# Current gem version, as a Versionomy::Value.
VERSION = ::Versionomy.parse(VERSION_STRING, :standard)
Expand Down

0 comments on commit 025d70e

Please sign in to comment.