prigner 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +123 -200
- data/{README.mkd → README.rdoc} +36 -42
- data/Rakefile +140 -112
- data/lib/prigner/cli/copy.rb +39 -0
- data/lib/prigner/cli/new.rb +10 -8
- data/lib/prigner/extensions.rb +17 -2
- data/lib/prigner/template.rb +2 -24
- data/lib/prigner.rb +46 -10
- data/prigner.gemspec +27 -30
- data/test/fixtures/templates/shared/templates/ruby/sinatra/models/README.mkd +2 -0
- data/test/fixtures/templates/shared/templates/ruby/sinatra/models/Rakefile +7 -0
- data/test/fixtures/templates/shared/templates/ruby/sinatra/models/empty_test.rb +21 -0
- data/test/fixtures/templates/shared/templates/ruby/sinatra/models/module.rb +6 -0
- data/test/fixtures/templates/shared/templates/ruby/sinatra/specfile +18 -0
- data/test/fixtures/templates/user/.prigner/sources +1 -0
- data/test/helpers.rb +36 -1
- data/test/spec_test.rb +1 -1
- data/test/template_test.rb +7 -9
- metadata +30 -32
- /data/test/fixtures/templates/shared/{ruby → templates/ruby}/default/README.mkd +0 -0
- /data/test/fixtures/templates/shared/{ruby → templates/ruby}/default/models/README.mkd +0 -0
- /data/test/fixtures/templates/shared/{ruby → templates/ruby}/default/models/Rakefile +0 -0
- /data/test/fixtures/templates/shared/{ruby → templates/ruby}/default/models/empty_test.rb +0 -0
- /data/test/fixtures/templates/shared/{ruby → templates/ruby}/default/models/module.rb +0 -0
- /data/test/fixtures/templates/shared/{ruby → templates/ruby}/default/specfile +0 -0
- /data/test/fixtures/templates/user/{bash → .prigner/templates/bash}/default/specfile +0 -0
- /data/test/fixtures/templates/user/{ruby → .prigner/templates/ruby}/program/models/README.erb +0 -0
- /data/test/fixtures/templates/user/{ruby → .prigner/templates/ruby}/program/models/cli.rb.erb +0 -0
- /data/test/fixtures/templates/user/{ruby → .prigner/templates/ruby}/program/models/module.rb.erb +0 -0
- /data/test/fixtures/templates/user/{ruby → .prigner/templates/ruby}/program/models/program.rb.erb +0 -0
- /data/test/fixtures/templates/user/{ruby → .prigner/templates/ruby}/program/specfile +0 -0
- /data/test/fixtures/templates/user/{vim → .prigner/templates/vim}/default/specfile +0 -0
- /data/test/fixtures/templates/user/{vim → .prigner/templates/vim}/plugin/specfile +0 -0
- /data/test/fixtures/templates/user/{vim → .prigner/templates/vim}/syntax/specfile +0 -0
data/Rakefile
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require "rake/clean"
|
2
2
|
require "lib/prigner"
|
3
3
|
|
4
|
-
#
|
4
|
+
# Configurations
|
5
5
|
# =============================================================================
|
6
6
|
|
7
7
|
def rdoc(*args)
|
@@ -24,120 +24,125 @@ def test(pattern)
|
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
|
+
def git(cmd, *args)
|
28
|
+
`git #{cmd.to_s.gsub('_','-')} #{args.join(' ')}`
|
29
|
+
end
|
30
|
+
|
27
31
|
def manifest
|
28
|
-
@manifest ||=
|
32
|
+
@manifest ||= git(:ls_files).split("\n").sort.reject do |out|
|
29
33
|
out =~ /^\./ || out =~ /^doc/
|
30
34
|
end.map do |file|
|
31
35
|
" #{file.inspect}"
|
32
36
|
end.join(",\n")
|
33
37
|
end
|
34
38
|
|
39
|
+
def version
|
40
|
+
@version ||= Prigner.version
|
41
|
+
end
|
42
|
+
|
43
|
+
def tag
|
44
|
+
git(:tag).split("\n").last
|
45
|
+
end
|
46
|
+
|
47
|
+
def release_notes
|
48
|
+
@release_notes ||= Pathname.new("v#{spec.version}.rdoc")
|
49
|
+
end
|
50
|
+
|
35
51
|
def log
|
36
|
-
|
52
|
+
yaml = git :log,
|
53
|
+
"--date=short",
|
54
|
+
"--format='- head: %d%n date: %cd%n summary: %s%n notes: \"%n%b\"%n'"
|
55
|
+
YAML.load(yaml)
|
37
56
|
end
|
38
57
|
|
39
|
-
def
|
40
|
-
@
|
58
|
+
def specfile
|
59
|
+
@specfile ||= Pathname.new("prigner.gemspec")
|
60
|
+
end
|
61
|
+
|
62
|
+
def spec
|
63
|
+
@spec ||= eval(specfile.read)
|
41
64
|
end
|
42
65
|
|
43
|
-
def
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
66
|
+
def package_path
|
67
|
+
specfile.dirname.join("pkg").join("#{File.basename(spec.file_name, '.*')}")
|
68
|
+
end
|
69
|
+
|
70
|
+
def package(ext = "")
|
71
|
+
specfile.dirname.join("#{package_path}#{ext}")
|
48
72
|
end
|
49
73
|
|
50
74
|
# Documentation
|
51
75
|
# =============================================================================
|
52
76
|
|
53
|
-
|
77
|
+
CLOBBER << FileList["doc/*"]
|
78
|
+
|
79
|
+
file "doc/api/index.html" => FileList["lib/**/*.rb", "README.rdoc", "CHANGELOG"] do |filespec|
|
80
|
+
rm_rf "doc"
|
81
|
+
rdoc "--op", "doc/api",
|
82
|
+
"--charset", "utf8",
|
83
|
+
"--main", "'Prigner'",
|
84
|
+
"--title", "'Prigner v#{version.tag} API Documentation'",
|
85
|
+
"--inline-source",
|
86
|
+
"--promiscuous",
|
87
|
+
"--line-numbers",
|
88
|
+
filespec.prerequisites.join(" ")
|
89
|
+
end
|
54
90
|
|
55
|
-
|
91
|
+
desc "Build API documentation (doc/api)."
|
92
|
+
task :doc => "doc/api/index.html"
|
56
93
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
"--inline-source",
|
64
|
-
"--promiscuous",
|
65
|
-
"--line-numbers",
|
66
|
-
filespec.prerequisites.join(" ")
|
67
|
-
end
|
68
|
-
|
69
|
-
desc "Build API documentation (doc/api)"
|
70
|
-
task :api => "doc/api/index.html"
|
94
|
+
desc "Build CHANGELOG file."
|
95
|
+
task :changelog do
|
96
|
+
open("CHANGELOG", "w+") do |changelog|
|
97
|
+
title = lambda do |charlevel, text|
|
98
|
+
text << "\n" << charlevel
|
99
|
+
end
|
71
100
|
|
72
|
-
|
73
|
-
task :changelog do |spec|
|
74
|
-
historic = {}
|
75
|
-
text = ""
|
101
|
+
changelog << "= #{Prigner::Version} - Changelog"
|
76
102
|
|
77
|
-
log.
|
78
|
-
|
79
|
-
historic[date] = {
|
80
|
-
:release => "#{date} #{tag.match(/(v\d\..*)/im) ? tag : nil}",
|
81
|
-
:changes => []
|
82
|
-
} unless historic.has_key? date
|
103
|
+
historic = log.group_by { |entry| entry["date"] }
|
83
104
|
|
84
|
-
|
85
|
-
|
86
|
-
end
|
105
|
+
historic.keys.sort.reverse.map do |date|
|
106
|
+
changelog << "\n\n" << "== #{date}" << "\n"
|
87
107
|
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
end_text
|
108
|
+
for entry in historic[date]
|
109
|
+
notes = entry["notes"]
|
110
|
+
changelog << "\n* #{entry["summary"]}."
|
111
|
+
unless notes.empty?
|
112
|
+
changelog << notes.strip.gsub(/([\*-].*?)/){ "\n #{$1}" }
|
113
|
+
end
|
114
|
+
end
|
96
115
|
end
|
97
116
|
|
98
|
-
|
99
|
-
puts "Historic has #{historic.keys.size} entry dates"
|
100
|
-
puts "Successfully updated CHANGELOG file"
|
117
|
+
puts "Successfully updated the CHANGELOG file with #{historic.keys.size} dates."
|
101
118
|
end
|
102
|
-
|
103
119
|
end
|
104
120
|
|
121
|
+
file "CHANGELOG" => :changelog
|
122
|
+
|
105
123
|
# Versioning
|
106
124
|
# =============================================================================
|
107
125
|
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
desc "Dump major version"
|
113
|
-
task :major do
|
114
|
-
version.tag = "#{major+=1}.0.0"
|
115
|
-
version.save!
|
116
|
-
puts version.to_hash.to_yaml
|
117
|
-
end
|
118
|
-
|
119
|
-
desc "Dump minor version"
|
120
|
-
task :minor do
|
121
|
-
version.tag = "#{major}.#{minor+=1}.0"
|
122
|
-
version.save!
|
123
|
-
puts version.to_hash.to_yaml
|
124
|
-
end
|
126
|
+
desc "Dump version (current v#{version.tag})."
|
127
|
+
task :version, [:counter,:release] do |spec, args|
|
128
|
+
numbering = version.numbering
|
129
|
+
tagnames = %w[major minor patch]
|
125
130
|
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
+
if index = tagnames.index(args[:counter])
|
132
|
+
numbering[index] += 1
|
133
|
+
numbering.fill(0, (index + 1)..-1)
|
134
|
+
else
|
135
|
+
numbering[-1] += 1
|
131
136
|
end
|
132
137
|
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
end
|
138
|
+
numbering[-1] = "#{numbering[-1]}#{args[:release]}"
|
139
|
+
version.tag = numbering.join(".")
|
140
|
+
version.save!
|
141
|
+
puts version.to_hash.to_yaml
|
142
|
+
end
|
139
143
|
|
140
|
-
|
144
|
+
namespace :version do
|
145
|
+
desc "Update version date (current #{version.date})."
|
141
146
|
task :date, [:date] do |spec, args|
|
142
147
|
require "parsedate"
|
143
148
|
require "date"
|
@@ -148,58 +153,81 @@ namespace :version do
|
|
148
153
|
end
|
149
154
|
end
|
150
155
|
|
151
|
-
|
152
|
-
|
153
|
-
# RubyGems
|
156
|
+
# Packaging
|
154
157
|
# =============================================================================
|
155
158
|
|
156
|
-
|
159
|
+
CLOBBER << FileList["#{package_path.dirname}/*"]
|
157
160
|
|
158
|
-
|
159
|
-
|
161
|
+
task :tagged do
|
162
|
+
abort "The version #{version.tag} is not tagged, yet." unless tag[1..-1] == version.tag
|
163
|
+
end
|
160
164
|
|
161
|
-
|
162
|
-
|
165
|
+
file specfile => FileList["{bin,lib,test}/**", "Rakefile"] do
|
166
|
+
spec = specfile.read
|
163
167
|
|
164
|
-
|
165
|
-
|
168
|
+
puts "Updating version ..."
|
169
|
+
spec.sub! /spec\.version\s*=\s*".*?"/, "spec.version = #{version.tag.inspect}"
|
166
170
|
|
167
|
-
|
168
|
-
|
171
|
+
puts "Updating date of version ..."
|
172
|
+
spec.sub! /spec\.date\s*=\s*".*?"/, "spec.date = #{version.date.to_s.inspect}"
|
169
173
|
|
170
|
-
|
174
|
+
puts "Updating file list ..."
|
175
|
+
spec.sub! /spec\.files\s*=\s*\[.*?\]/m, "spec.files = [\n#{manifest}\n ]"
|
171
176
|
|
172
|
-
|
173
|
-
end
|
177
|
+
specfile.open("w+") { |file| file << spec }
|
174
178
|
|
175
|
-
|
176
|
-
|
177
|
-
sh "gem build #{gemspec.file}"
|
178
|
-
end
|
179
|
+
puts "Successfully update #{specfile} file"
|
180
|
+
end
|
179
181
|
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
182
|
+
directory package_path.to_s
|
183
|
+
|
184
|
+
file package(".gem") => [ specfile, package_path.dirname ] do |file|
|
185
|
+
sh "gem build #{specfile}"
|
186
|
+
mv spec.file_name, file.prerequisites.last
|
187
|
+
end
|
184
188
|
|
185
|
-
|
186
|
-
|
187
|
-
|
189
|
+
file package(".tar.gz") => [ specfile, package_path ] do |file|
|
190
|
+
spec.files.each do |source|
|
191
|
+
package_path.join(source).dirname.mkpath
|
192
|
+
cp source, package_path.join(source)
|
188
193
|
end
|
194
|
+
cd package_path.dirname do
|
195
|
+
sh "tar czvf #{package(".tar.gz").basename} #{package_path.basename}/*"
|
196
|
+
end
|
197
|
+
end
|
189
198
|
|
190
|
-
|
191
|
-
|
192
|
-
|
199
|
+
desc "Build packages."
|
200
|
+
task :package => [package(".gem"), package(".tar.gz")]
|
201
|
+
|
202
|
+
desc "Release gem package to repositories."
|
203
|
+
task :release => [ :tagged, :package ] do
|
204
|
+
sh "gem push #{package('.gem')}"
|
205
|
+
{ :release => ".gem", :file => ".tar.gz" }.each do |file, ext|
|
206
|
+
sh "rubyforge add_#{file}",
|
207
|
+
"#{spec.rubyforge_project}",
|
208
|
+
"#{spec.name} #{spec.version} #{package(ext)}"
|
209
|
+
end
|
210
|
+
if release_notes.exist?
|
211
|
+
sh "rubyforge add_news 'Prigner v#{spec.version} released' '#{release_notes.read}'"
|
193
212
|
end
|
213
|
+
end
|
214
|
+
|
215
|
+
desc "Install gem package #{spec.file_name}."
|
216
|
+
task :install => :package do
|
217
|
+
sh "gem install #{package('.gem')} --local"
|
218
|
+
end
|
194
219
|
|
220
|
+
desc "Uninstall gem package #{spec.file_name}."
|
221
|
+
task :uninstall do
|
222
|
+
sh "gem uninstall #{spec.name} --version #{spec.version}"
|
195
223
|
end
|
196
224
|
|
197
|
-
task :gem => "gem
|
225
|
+
task :gem => package(".gem")
|
198
226
|
|
199
227
|
# Test
|
200
228
|
# =============================================================================
|
201
229
|
|
202
|
-
desc "Run tests"
|
230
|
+
desc "Run tests."
|
203
231
|
task :test, [:pattern] do |spec, args|
|
204
232
|
test(args[:pattern] ? "test/#{args[:pattern]}_test.rb" : "test/*_test.rb")
|
205
233
|
end
|
@@ -207,5 +235,5 @@ end
|
|
207
235
|
# Default
|
208
236
|
# =============================================================================
|
209
237
|
|
210
|
-
task :default =>
|
238
|
+
task :default => :test
|
211
239
|
|
data/lib/prigner/cli/copy.rb
CHANGED
@@ -0,0 +1,39 @@
|
|
1
|
+
# Copyright (c) 2010 Hallison Batista
|
2
|
+
|
3
|
+
require "prigner"
|
4
|
+
|
5
|
+
program = :prign
|
6
|
+
command = File.basename(__FILE__, ".rb")
|
7
|
+
|
8
|
+
begin
|
9
|
+
ARGV.options do |arguments|
|
10
|
+
|
11
|
+
arguments.summary_indent = " "
|
12
|
+
arguments.summary_width = 24
|
13
|
+
arguments.banner = <<-end_banner.gsub /^[ ]{6}/, ''
|
14
|
+
#{Prigner::Version}
|
15
|
+
|
16
|
+
Usage:
|
17
|
+
#{program} #{command} <namespace>[:template] <path>
|
18
|
+
|
19
|
+
Templates:
|
20
|
+
#{Prigner::CLI.templates.sort.join("\n" + arguments.summary_indent)}
|
21
|
+
|
22
|
+
end_banner
|
23
|
+
|
24
|
+
if ARGV.empty?
|
25
|
+
puts arguments
|
26
|
+
exit 0
|
27
|
+
else
|
28
|
+
arguments.parse!
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
rescue => error
|
34
|
+
puts "#{program}: #{command}: #{error.message} (#{error.class})"
|
35
|
+
puts "Try '#{program} #{command} -h' or '#{program} #{command} --help' for more information."
|
36
|
+
exit 1
|
37
|
+
end
|
38
|
+
|
39
|
+
|
data/lib/prigner/cli/new.rb
CHANGED
@@ -22,8 +22,9 @@ begin
|
|
22
22
|
end_banner
|
23
23
|
|
24
24
|
unless ARGV.empty?
|
25
|
-
|
26
|
-
|
25
|
+
arguments.parse!
|
26
|
+
|
27
|
+
name = ARGV.shift
|
27
28
|
|
28
29
|
template = Prigner::Template.load(*name.split(":"))
|
29
30
|
|
@@ -52,12 +53,13 @@ begin
|
|
52
53
|
end
|
53
54
|
end
|
54
55
|
|
55
|
-
unless
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
56
|
+
path = unless ARGV.empty?
|
57
|
+
arguments.parse!
|
58
|
+
path = ARGV.shift unless name.nil?
|
59
|
+
else
|
60
|
+
puts arguments
|
61
|
+
exit 0
|
62
|
+
end
|
61
63
|
|
62
64
|
project = Prigner::Project.new(path)
|
63
65
|
builder = Prigner::Builder.new(project, template)
|
data/lib/prigner/extensions.rb
CHANGED
@@ -58,9 +58,24 @@ class Struct
|
|
58
58
|
end
|
59
59
|
|
60
60
|
class Pathname
|
61
|
+
def get(file)
|
62
|
+
result = self.join(file.gsub(/^\/(.*?)$/){$1})
|
63
|
+
def result.to_s
|
64
|
+
return [self.inspect, self.read].join("\n")
|
65
|
+
end
|
66
|
+
result
|
67
|
+
end
|
68
|
+
|
69
|
+
alias read_body read
|
70
|
+
|
71
|
+
alias address expand_path
|
72
|
+
|
73
|
+
def port
|
74
|
+
nil
|
75
|
+
end
|
61
76
|
|
62
|
-
def
|
63
|
-
|
77
|
+
def start
|
78
|
+
block_given? ? (yield self) : self
|
64
79
|
end
|
65
80
|
|
66
81
|
end
|
data/lib/prigner/template.rb
CHANGED
@@ -64,39 +64,17 @@ class Prigner::Template
|
|
64
64
|
# Load template from shared directories. The shared path set the home user
|
65
65
|
# directory and Prigner::Template shared files.
|
66
66
|
def self.load(namespace, template = :default)
|
67
|
-
shared_path.map do |source|
|
67
|
+
Prigner.shared_path.map do |source|
|
68
68
|
path = "#{source}/#{namespace}/#{template}"
|
69
69
|
return new(path) if File.exist? path
|
70
70
|
end
|
71
71
|
nil
|
72
72
|
end
|
73
73
|
|
74
|
-
# Look at user home and template shared path.
|
75
|
-
def self.shared_path
|
76
|
-
user_home_templates = File.join(user_home_basedir, "templates")
|
77
|
-
[ user_home_templates, "#{Prigner::ROOT}/share/templates" ]
|
78
|
-
end
|
79
|
-
|
80
|
-
# User home.
|
81
|
-
def self.user_home
|
82
|
-
File.expand_path "~"
|
83
|
-
rescue
|
84
|
-
if File::ALT_SEPARATOR then
|
85
|
-
"C:/"
|
86
|
-
else
|
87
|
-
"/"
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
# User home base directory for Prigner files.
|
92
|
-
def self.user_home_basedir
|
93
|
-
File.join(user_home, ".prigner")
|
94
|
-
end
|
95
|
-
|
96
74
|
# Return all template paths placed in shared user or in project base
|
97
75
|
# directory.
|
98
76
|
def self.all_template_paths
|
99
|
-
shared_path.map do |source|
|
77
|
+
Prigner.shared_path.map do |source|
|
100
78
|
Dir.glob("#{source}/*/*")
|
101
79
|
end.flatten.compact
|
102
80
|
end
|
data/lib/prigner.rb
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
#@ ---
|
2
2
|
#@ :timestamp: 2009-07-16 14:05:16 -04:00
|
3
|
-
#@ :date: 2010-10-
|
4
|
-
#@ :tag: 0.1.
|
5
|
-
#@ :milestone: Alpha
|
3
|
+
#@ :date: 2010-10-21
|
4
|
+
#@ :tag: 0.1.1
|
6
5
|
# encoding: UTF-8
|
7
6
|
|
8
7
|
# Copyright (c) 2009, 2010, Hallison Batista
|
@@ -28,6 +27,7 @@ module Prigner
|
|
28
27
|
autoload :Project, "prigner/project"
|
29
28
|
autoload :Model, "prigner/model"
|
30
29
|
autoload :Template, "prigner/template"
|
30
|
+
autoload :Source, "prigner/source"
|
31
31
|
autoload :Builder, "prigner/builder"
|
32
32
|
autoload :CLI, "prigner/cli"
|
33
33
|
|
@@ -36,13 +36,17 @@ module Prigner
|
|
36
36
|
@version ||= Version.current
|
37
37
|
end
|
38
38
|
|
39
|
-
class
|
39
|
+
# The objective of this class is to implement various ideas proposed by the
|
40
|
+
# Semantic Versioning Specification (see reference[http://semver.org/]).
|
41
|
+
class Version
|
40
42
|
|
41
43
|
FILE = Pathname.new(__FILE__).freeze
|
42
44
|
|
43
|
-
attr_accessor :
|
45
|
+
attr_accessor :date, :tag
|
46
|
+
|
44
47
|
attr_reader :timestamp
|
45
48
|
|
49
|
+
# Basic initialization of the attributes using a single hash.
|
46
50
|
def initialize(attributes = {})
|
47
51
|
attributes.each do |attribute, value|
|
48
52
|
send("#{attribute}=", value) if respond_to? "#{attribute}="
|
@@ -50,17 +54,27 @@ module Prigner
|
|
50
54
|
@timestamp = attributes[:timestamp]
|
51
55
|
end
|
52
56
|
|
57
|
+
# The numbering of the major, minor and patch values.
|
58
|
+
def numbering
|
59
|
+
self.tag.split(".").map do |key|
|
60
|
+
if key.match(/^(\d{1,})(\w+).*$/)
|
61
|
+
[ $1.to_i, $2 ]
|
62
|
+
else
|
63
|
+
key.to_i
|
64
|
+
end
|
65
|
+
end.flatten
|
66
|
+
end
|
67
|
+
|
53
68
|
def to_hash
|
54
|
-
[:tag, :date, :
|
69
|
+
[:tag, :date, :timestamp].inject({}) do |hash, key|
|
55
70
|
hash[key] = send(key)
|
56
71
|
hash
|
57
72
|
end
|
58
73
|
end
|
59
74
|
|
60
75
|
def save!
|
61
|
-
@date = Date.today
|
62
76
|
source = FILE.readlines
|
63
|
-
source[0..
|
77
|
+
source[0..3] = self.to_hash.to_yaml.to_s.gsub(/^/, '#@ ')
|
64
78
|
FILE.open("w+") do |file|
|
65
79
|
file << source.join("")
|
66
80
|
end
|
@@ -69,7 +83,7 @@ module Prigner
|
|
69
83
|
|
70
84
|
class << self
|
71
85
|
def current
|
72
|
-
yaml = FILE.readlines[0..
|
86
|
+
yaml = FILE.readlines[0..3].
|
73
87
|
join("").
|
74
88
|
gsub(/\#@ /,'')
|
75
89
|
new(YAML.load(yaml))
|
@@ -77,7 +91,7 @@ module Prigner
|
|
77
91
|
|
78
92
|
def to_s
|
79
93
|
name.match(/(.*?)::.*/)
|
80
|
-
"#{$1} v#{current.tag}
|
94
|
+
"#{$1} v#{current.tag} (#{current.date})"
|
81
95
|
end
|
82
96
|
end # self
|
83
97
|
|
@@ -182,5 +196,27 @@ module Prigner
|
|
182
196
|
|
183
197
|
end
|
184
198
|
|
199
|
+
# Look at user home and template shared path.
|
200
|
+
def self.shared_path
|
201
|
+
user_home_templates = File.join(user_home_basedir, "templates")
|
202
|
+
[ user_home_templates, "#{Prigner::ROOT}/share/templates" ]
|
203
|
+
end
|
204
|
+
|
205
|
+
# User home base directory for Prigner files.
|
206
|
+
def self.user_home_basedir
|
207
|
+
File.join(user_home, ".prigner")
|
208
|
+
end
|
209
|
+
|
210
|
+
# User home.
|
211
|
+
def self.user_home
|
212
|
+
File.expand_path(ENV["HOME"])
|
213
|
+
rescue
|
214
|
+
if File::ALT_SEPARATOR then
|
215
|
+
"C:/"
|
216
|
+
else
|
217
|
+
"/"
|
218
|
+
end
|
219
|
+
end
|
220
|
+
|
185
221
|
end # Prigner
|
186
222
|
|