git_versioner 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -1,9 +1,7 @@
1
- source "http://rubygems.org"
1
+ source :rubygems
2
2
 
3
- gem "rails", "3.0.17"
4
- gem "capybara", ">= 0.4.0"
5
- gem "sqlite3"
3
+ group :development, :test do
4
+ gem 'rb-fsevent', require: false if RUBY_PLATFORM =~ /darwin/i
5
+ end
6
6
 
7
- # To use debugger (ruby-debug for Ruby 1.8.7+, ruby-debug19 for Ruby 1.9.2+)
8
- # gem 'ruby-debug'
9
- # gem 'ruby-debug19'
7
+ gemspec
data/Rakefile CHANGED
@@ -3,16 +3,10 @@ require "bundler/gem_tasks"
3
3
  require 'rake'
4
4
  require 'rdoc/task'
5
5
 
6
- require 'rake/testtask'
6
+ require 'rspec/core/rake_task'
7
7
 
8
- Rake::TestTask.new(:test) do |t|
9
- t.libs << 'lib'
10
- t.libs << 'test'
11
- t.pattern = 'test/**/*_test.rb'
12
- t.verbose = false
13
- end
14
-
15
- task :default => :test
8
+ RSpec::Core::RakeTask.new('spec')
9
+ task :default => :spec
16
10
 
17
11
  Rake::RDocTask.new(:rdoc) do |rdoc|
18
12
  rdoc.rdoc_dir = 'rdoc'
@@ -2,11 +2,22 @@ require 'git_versioner/view_helpers'
2
2
 
3
3
  module GitVersioner
4
4
  class Railtie < ::Rails::Railtie
5
+ rake_tasks do
6
+ load 'tasks/git_versioner.rake'
7
+ end
8
+
5
9
  initializer "git_versioner.versionize" do
6
- Rails.application.class.parent::VERSION = GitVersioner
7
- Rails.application.class.parent::VERSION.memorize do
10
+ GitVersioner.format do
11
+ if Rails.env == 'production'
12
+ 'v%{version_number}'
13
+ else
14
+ 'v%{version_number}-g%{git_hash}'
15
+ end
16
+ end
17
+ GitVersioner.memorize do
8
18
  Rails.env == 'production'
9
19
  end
20
+ Rails.application.class.parent::VERSION = GitVersioner
10
21
  end
11
22
 
12
23
  initializer "git_versioner.view_helpers" do
@@ -1,3 +1,3 @@
1
1
  module GitVersioner
2
- VERSION = '0.0.1'
2
+ VERSION = '0.1.0'
3
3
  end
data/lib/git_versioner.rb CHANGED
@@ -1,9 +1,42 @@
1
1
  require 'git_versioner/railtie' if defined?(Rails)
2
2
 
3
3
  module GitVersioner
4
+ # = Git Versioner
5
+ # Git Versioner generates version number.
6
+ #
7
+ # To read a VERSION file pass the path the file to be read
8
+ #
9
+ # GitVersioner.version_file_path = Rails.root.join('VERSION').to_s
10
+ # GitVersioner.version_file_path # => '/path/to/rails/root/VERSION'
11
+ #
12
+ # Format version
13
+ #
14
+ # Available format variables:
15
+ # version_number: read version file provided from version file path
16
+ # git_hash: short hash reference for HEAD
17
+ #
18
+ # Use block to conditionally set format
19
+ # GitVersioner.format do
20
+ # if env == 'production'
21
+ # 'v%{version_number}'
22
+ # else
23
+ # 'v%{version_number}-g%{git_hash}'
24
+ # end
25
+ # end
26
+ #
27
+ # VERSION file `1.0.0`
28
+ #
29
+ # GitVersioner.version_file_path = /path/to/VERSION
30
+ # GitVersioner.format = "v%{version_number}"
31
+ # GitVersioner.version # => 'v1.0.0'
32
+ #
33
+ # GitVersioner.format = "g%{git_hash}"
34
+ # GitVersioner.version
4
35
  class << self
5
36
 
6
- attr_writer :memorize
37
+ attr_writer :memorize, :format
38
+ attr_accessor :version_file_path
39
+
7
40
  def memorize
8
41
  @memorize = yield if block_given?
9
42
  @memorize
@@ -13,6 +46,11 @@ module GitVersioner
13
46
  memorize == true
14
47
  end
15
48
 
49
+ def format
50
+ @format = yield if block_given?
51
+ @format
52
+ end
53
+
16
54
  def version
17
55
  if memorize?
18
56
  @version ||= calculate_version
@@ -22,9 +60,24 @@ module GitVersioner
22
60
  end
23
61
  alias :to_s :version
24
62
 
25
- private
26
63
  def calculate_version
27
- `git describe --always`.strip
64
+ formatted_version = format.dup
65
+ %W[version_number git_hash].each do |var|
66
+ formatted_version.gsub! /%{#{var}}/, self.send(var)
67
+ end
68
+ formatted_version
69
+ end
70
+
71
+ private
72
+ def version_number
73
+ return '' unless version_file_path
74
+ if File.exists? version_file_path
75
+ File.read version_file_path
76
+ end
77
+ end
78
+
79
+ def git_hash
80
+ `git rev-parse --short HEAD`.strip
28
81
  end
29
82
  end
30
83
  end
@@ -0,0 +1,81 @@
1
+ namespace :version do
2
+
3
+ def write_version(version)
4
+ File.open(version_path, 'w') do |f|
5
+ f.write(version)
6
+ end
7
+ end
8
+
9
+ def read_version
10
+ make_sure_file_exists!
11
+ File.read(version_path)
12
+ end
13
+
14
+ def version_path
15
+ ENV['VERSION_PATH'] ||= Rails.root.join('VERSION').to_s if Rails
16
+ ENV['VERSION_PATH']
17
+ end
18
+
19
+ def version_path!
20
+ raise "Please provide a VERSION_PATH" unless version_path
21
+ version_path
22
+ end
23
+
24
+ def make_sure_file_exists!
25
+ raise 'VERSION file doesn\'t exists. Please run `rake version:init`' unless File.exists? version_path!
26
+ end
27
+
28
+ class Version
29
+ REGEXP = /^\d+\.\d+\.\d+$/
30
+ attr_accessor :major, :minor, :patch
31
+
32
+ def initialize(version)
33
+ raise ArgumentError.new("Not a valid SemVer Version (http://semver.org)") unless version =~ REGEXP
34
+ @major, @minor, @patch = version.split('.').map &:to_i
35
+ end
36
+
37
+ def to_a
38
+ [@major, @minor, @patch]
39
+ end
40
+
41
+ def to_s
42
+ self.to_a.join('.')
43
+ end
44
+
45
+ def to_h
46
+ keys = [:major, :minor, :patch]
47
+ Hash[keys.zip(self.to_a)]
48
+ end
49
+
50
+ def bump(segment='patch')
51
+ raise ArgumentError.new("Not a valid segment ['major', 'minor', 'patch']") unless %W[major minor patch].include? segment
52
+ self.send "#{segment}=", self.send(segment) + 1
53
+ self.patch = 0 if %W[major minor].include? segment
54
+ self.minor = 0 if %W[major].include? segment
55
+ self.to_s
56
+ end
57
+ end
58
+
59
+ task :current => :environment do
60
+ puts read_version
61
+ end
62
+
63
+ task :init => :environment do
64
+ version = Version.new(ENV['VERSION'] ||= '0.0.1')
65
+ raise "Version file already exists" if File.exists? version_path!
66
+ write_version(version)
67
+ puts "Version file created and version set to #{version}"
68
+ end
69
+
70
+ desc "Bump version (specify segment with SEGMENT=segment 'major', 'minor' or 'patch')"
71
+ task :bump => :environment do
72
+ segment = ENV['SEGMENT'] || 'patch'
73
+ version = Version.new read_version
74
+ version.bump segment
75
+ write_version(version)
76
+ puts "Version bumped to #{version}"
77
+ end
78
+ end
79
+
80
+ desc "Get the current version"
81
+ task :version => 'version:current'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: git_versioner
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,8 +9,88 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-08-27 00:00:00.000000000 Z
13
- dependencies: []
12
+ date: 2012-12-07 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec-rails
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rails
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - '='
36
+ - !ruby/object:Gem::Version
37
+ version: 3.0.17
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - '='
44
+ - !ruby/object:Gem::Version
45
+ version: 3.0.17
46
+ - !ruby/object:Gem::Dependency
47
+ name: capybara
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: 0.4.0
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: 0.4.0
62
+ - !ruby/object:Gem::Dependency
63
+ name: sqlite3
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: guard-rspec
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
14
94
  description:
15
95
  email:
16
96
  - brian@brianboughton.com
@@ -22,6 +102,7 @@ files:
22
102
  - lib/git_versioner/version.rb
23
103
  - lib/git_versioner/view_helpers.rb
24
104
  - lib/git_versioner.rb
105
+ - lib/tasks/git_versioner.rake
25
106
  - LICENSE
26
107
  - Rakefile
27
108
  - Gemfile