Class: Gempilot::Project
- Inherits:
-
Object
show all
- Defined in:
- lib/gempilot/project.rb,
lib/gempilot/project/version.rb
Overview
Introspects a gem project to discover its name, module, and version.
Defined Under Namespace
Classes: ProjectIntrospectionError
Constant Summary
collapse
- Version =
Data.define(:path, :value) do
def tag
"v#{value}"
end
def bump(segment = :patch)
case segment.to_sym
when :major, :minor, :patch then bump_semver(segment)
when :dev then bump_dev
else raise ArgumentError, "Unknown segment #{segment.inspect}. Use :major, :minor, :patch, or :dev"
end
end
private
def bump_semver(segment)
major, minor, patch = value.split(".").first(3).map(&:to_i)
new_value = case segment.to_sym
when :major then "#{major + 1}.0.0"
when :minor then "#{major}.#{minor + 1}.0"
when :patch then "#{major}.#{minor}.#{patch + 1}"
end
with(value: new_value)
end
def bump_dev
if value.match?(/\.dev\d+\z/)
with(value: value.sub(/\d+\z/) { it.to_i + 1 })
else
with(value: "#{value}.dev1")
end
end
alias_method :next_version, :bump
end.freeze
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
#initialize(root = Dir.pwd) ⇒ Project
Returns a new instance of Project.
17
18
19
20
|
# File 'lib/gempilot/project.rb', line 17
def initialize(root = Dir.pwd)
@root = Pathname(root)
@verifications = Set.new
end
|
Instance Attribute Details
#root ⇒ Object
Returns the value of attribute root.
15
16
17
|
# File 'lib/gempilot/project.rb', line 15
def root
@root
end
|
Instance Method Details
#increment_version ⇒ Object
47
48
49
|
# File 'lib/gempilot/project.rb', line 47
def increment_version
version.next_version
end
|
#klass ⇒ Object
35
36
37
|
# File 'lib/gempilot/project.rb', line 35
def klass
Object.const_get(name.camelize)
end
|
#lib ⇒ Object
22
23
24
25
|
# File 'lib/gempilot/project.rb', line 22
def lib
root.join("lib")
.tap { verify_existence! it }
end
|
#lib_project ⇒ Object
27
28
29
|
# File 'lib/gempilot/project.rb', line 27
def lib_project
@lib_project ||= fetch_lib_project
end
|
#name ⇒ Object
31
32
33
|
# File 'lib/gempilot/project.rb', line 31
def name
lib_project.basename.to_s
end
|
#refresh_version! ⇒ Object
43
44
45
|
# File 'lib/gempilot/project.rb', line 43
def refresh_version!
@version = fetch_version
end
|
#version ⇒ Object
39
40
41
|
# File 'lib/gempilot/project.rb', line 39
def version
@version ||= fetch_version
end
|
#version_tag ⇒ Object
51
|
# File 'lib/gempilot/project.rb', line 51
def version_tag = version.tag
|
#version_value ⇒ Object
53
|
# File 'lib/gempilot/project.rb', line 53
def version_value = version.value
|
#write_version!(old_version, new_version) ⇒ Object
55
56
57
58
59
60
61
62
63
64
65
66
|
# File 'lib/gempilot/project.rb', line 55
def write_version!(old_version, new_version)
with_version_file do |f|
source = f.read
unless source.match?(Regexp.escape(old_version.value))
abort "Expected to find #{old_version.value} in #{f.path} but did not"
end
f.rewind
f.write source.gsub(old_version.value, new_version.value)
end
end
|