pakman 0.0.1 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Manifest.txt +12 -0
- data/Rakefile +5 -1
- data/bin/pakman +17 -0
- data/lib/pakman.rb +51 -2
- data/lib/pakman/cli/commands/fetch.rb +33 -0
- data/lib/pakman/cli/commands/gen.rb +42 -0
- data/lib/pakman/cli/commands/list.rb +30 -0
- data/lib/pakman/cli/helpers.rb +33 -0
- data/lib/pakman/cli/opts.rb +66 -0
- data/lib/pakman/cli/runner.rb +89 -0
- data/lib/pakman/copier.rb +47 -0
- data/lib/pakman/fetcher.rb +76 -0
- data/lib/pakman/finder.rb +27 -0
- data/lib/pakman/manifest.rb +73 -0
- data/lib/pakman/version.rb +3 -0
- metadata +38 -10
data/Manifest.txt
CHANGED
@@ -2,4 +2,16 @@ History.markdown
|
|
2
2
|
Manifest.txt
|
3
3
|
README.markdown
|
4
4
|
Rakefile
|
5
|
+
bin/pakman
|
5
6
|
lib/pakman.rb
|
7
|
+
lib/pakman/cli/commands/fetch.rb
|
8
|
+
lib/pakman/cli/commands/gen.rb
|
9
|
+
lib/pakman/cli/commands/list.rb
|
10
|
+
lib/pakman/cli/helpers.rb
|
11
|
+
lib/pakman/cli/opts.rb
|
12
|
+
lib/pakman/cli/runner.rb
|
13
|
+
lib/pakman/copier.rb
|
14
|
+
lib/pakman/fetcher.rb
|
15
|
+
lib/pakman/finder.rb
|
16
|
+
lib/pakman/manifest.rb
|
17
|
+
lib/pakman/version.rb
|
data/Rakefile
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'hoe'
|
2
|
-
require './lib/pakman.rb'
|
2
|
+
require './lib/pakman/version.rb'
|
3
3
|
|
4
4
|
Hoe.spec 'pakman' do
|
5
5
|
|
@@ -12,6 +12,10 @@ Hoe.spec 'pakman' do
|
|
12
12
|
|
13
13
|
self.author = 'Gerald Bauer'
|
14
14
|
self.email = 'webslideshow@googlegroups.com'
|
15
|
+
|
16
|
+
self.extra_deps = [
|
17
|
+
['fetcher','>= 0.1.0']
|
18
|
+
]
|
15
19
|
|
16
20
|
# switch extension to .rdoc for gihub formatting
|
17
21
|
self.readme_file = 'README.markdown'
|
data/bin/pakman
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
###################
|
4
|
+
# == DEV TIPS:
|
5
|
+
#
|
6
|
+
# For local testing run like:
|
7
|
+
#
|
8
|
+
# ruby -Ilib bin/pakman
|
9
|
+
#
|
10
|
+
# Set the executable bit in Linux. Example:
|
11
|
+
#
|
12
|
+
# % chmod a+x bin/pakman
|
13
|
+
#
|
14
|
+
|
15
|
+
require 'pakman'
|
16
|
+
|
17
|
+
Pakman.main
|
data/lib/pakman.rb
CHANGED
@@ -1,3 +1,52 @@
|
|
1
|
+
###
|
2
|
+
# NB: for local testing run like:
|
3
|
+
#
|
4
|
+
# 1.8.x: ruby -Ilib -rrubygems lib/pakman.rb
|
5
|
+
# 1.9.x: ruby -Ilib lib/pakman.rb
|
6
|
+
|
7
|
+
# core and stlibs
|
8
|
+
|
9
|
+
require 'yaml'
|
10
|
+
require 'pp'
|
11
|
+
require 'logger'
|
12
|
+
require 'optparse'
|
13
|
+
require 'fileutils'
|
14
|
+
|
15
|
+
# rubygems
|
16
|
+
|
17
|
+
require 'fetcher' # fetch (download) files
|
18
|
+
|
19
|
+
# our own code
|
20
|
+
|
21
|
+
require 'pakman/copier'
|
22
|
+
require 'pakman/fetcher'
|
23
|
+
require 'pakman/finder'
|
24
|
+
require 'pakman/manifest'
|
25
|
+
require 'pakman/version'
|
26
|
+
|
27
|
+
require 'pakman/cli/helpers'
|
28
|
+
require 'pakman/cli/opts'
|
29
|
+
require 'pakman/cli/runner'
|
30
|
+
require 'pakman/cli/commands/fetch'
|
31
|
+
require 'pakman/cli/commands/gen'
|
32
|
+
require 'pakman/cli/commands/list'
|
33
|
+
|
34
|
+
|
1
35
|
module Pakman
|
2
|
-
|
3
|
-
|
36
|
+
|
37
|
+
def self.banner
|
38
|
+
"pakman #{VERSION} on Ruby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE}) [#{RUBY_PLATFORM}]"
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.root
|
42
|
+
"#{File.expand_path( File.dirname(File.dirname(__FILE__)) )}"
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.main
|
46
|
+
Runner.new.run(ARGV)
|
47
|
+
end
|
48
|
+
|
49
|
+
end # module Pakman
|
50
|
+
|
51
|
+
|
52
|
+
Pakman.main if __FILE__ == $0
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Pakman
|
2
|
+
|
3
|
+
class Fetch
|
4
|
+
|
5
|
+
def initialize( logger, opts )
|
6
|
+
@logger = logger
|
7
|
+
@opts = opts
|
8
|
+
end
|
9
|
+
|
10
|
+
attr_reader :logger, :opts
|
11
|
+
|
12
|
+
|
13
|
+
def run
|
14
|
+
logger.debug "fetch_uri=#{opts.fetch_uri}"
|
15
|
+
|
16
|
+
src = opts.fetch_uri
|
17
|
+
|
18
|
+
# src = 'http://github.com/geraldb/slideshow/raw/d98e5b02b87ee66485431b1bee8fb6378297bfe4/code/templates/fullerscreen.txt'
|
19
|
+
# src = 'http://github.com/geraldb/sandbox/raw/13d4fec0908fbfcc456b74dfe2f88621614b5244/s5blank/s5blank.txt'
|
20
|
+
uri = URI.parse( src )
|
21
|
+
logger.debug "scheme: #{uri.scheme}, host: #{uri.host}, port: #{uri.port}, path: #{uri.path}"
|
22
|
+
|
23
|
+
basename = File.basename( uri.path, '.*' ) # e.g. fullerscreen (without extension)
|
24
|
+
logger.debug "basename: #{basename}"
|
25
|
+
|
26
|
+
pakpath = File.expand_path( "#{opts.config_path}/#{basename}" )
|
27
|
+
logger.debug "pakpath: #{pakpath}"
|
28
|
+
|
29
|
+
Fetcher.new( logger ).fetch_pak( src, pakpath )
|
30
|
+
end # method run
|
31
|
+
|
32
|
+
end # class Fetch
|
33
|
+
end # module Pakman
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module Pakman
|
2
|
+
|
3
|
+
class Gen
|
4
|
+
|
5
|
+
include ManifestHelper
|
6
|
+
|
7
|
+
def initialize( logger, opts )
|
8
|
+
@logger = logger
|
9
|
+
@opts = opts
|
10
|
+
end
|
11
|
+
|
12
|
+
attr_reader :logger, :opts
|
13
|
+
|
14
|
+
def run
|
15
|
+
manifest_name = opts.manifest
|
16
|
+
|
17
|
+
# add .txt file extension if missing (for convenience)
|
18
|
+
## fix: might not work with impress.js or deck.js
|
19
|
+
## check if extname is txt and add it to become deck.js.txt etc.
|
20
|
+
manifest_name << ".txt" if File.extname( manifest_name ).empty?
|
21
|
+
|
22
|
+
logger.debug "manifest=#{manifest_name}"
|
23
|
+
|
24
|
+
manifests = installed_template_manifests
|
25
|
+
|
26
|
+
# check for builtin generator manifests
|
27
|
+
matches = manifests.select { |m| m[0] == manifest_name }
|
28
|
+
|
29
|
+
if matches.empty?
|
30
|
+
puts "*** error: unknown template manifest '#{manifest_name}'"
|
31
|
+
# todo: list installed manifests
|
32
|
+
exit 2
|
33
|
+
end
|
34
|
+
|
35
|
+
manifestsrc = matches[0][1]
|
36
|
+
pakpath = opts.output_path
|
37
|
+
|
38
|
+
Copier.new( logger ).copy_pak( manifestsrc, pakpath )
|
39
|
+
end
|
40
|
+
|
41
|
+
end # class Gen
|
42
|
+
end # module Pakman
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Pakman
|
2
|
+
|
3
|
+
class List
|
4
|
+
|
5
|
+
include ManifestHelper
|
6
|
+
|
7
|
+
def initialize( logger, opts )
|
8
|
+
@logger = logger
|
9
|
+
@opts = opts
|
10
|
+
end
|
11
|
+
|
12
|
+
attr_reader :logger, :opts
|
13
|
+
|
14
|
+
def run
|
15
|
+
manifests = installed_template_manifests
|
16
|
+
|
17
|
+
puts 'Installed template packs in search path'
|
18
|
+
|
19
|
+
installed_template_manifest_patterns.each_with_index do |pattern,i|
|
20
|
+
puts " [#{i+1}] #{pattern}"
|
21
|
+
end
|
22
|
+
puts ' include:'
|
23
|
+
|
24
|
+
manifests.each do |manifest|
|
25
|
+
puts "%16s (%s)" % [manifest[0], manifest[1]]
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
end # class List
|
30
|
+
end # module Pakman
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Pakman
|
2
|
+
|
3
|
+
module ManifestHelper
|
4
|
+
|
5
|
+
def installed_template_manifest_patterns
|
6
|
+
# 1) search . # that is, working/current dir
|
7
|
+
# 2) search <config_dir>
|
8
|
+
# 3) search <gem>/templates
|
9
|
+
|
10
|
+
builtin_patterns = [
|
11
|
+
"#{Pakman.root}/templates/*.txt"
|
12
|
+
]
|
13
|
+
config_patterns = [
|
14
|
+
"#{File.expand_path(opts.config_path)}/*.txt",
|
15
|
+
"#{File.expand_path(opts.config_path)}/*/*.txt"
|
16
|
+
]
|
17
|
+
current_patterns = [
|
18
|
+
"*.txt",
|
19
|
+
"*/*.txt"
|
20
|
+
]
|
21
|
+
|
22
|
+
patterns = []
|
23
|
+
patterns += current_patterns
|
24
|
+
patterns += config_patterns
|
25
|
+
patterns += builtin_patterns
|
26
|
+
end
|
27
|
+
|
28
|
+
def installed_template_manifests
|
29
|
+
Finder.new( logger ).find_manifests( installed_template_manifest_patterns )
|
30
|
+
end
|
31
|
+
|
32
|
+
end # module ManifestHelper
|
33
|
+
end # module Pakman
|
@@ -0,0 +1,66 @@
|
|
1
|
+
module Pakman
|
2
|
+
|
3
|
+
class Opts
|
4
|
+
|
5
|
+
def list=(value)
|
6
|
+
@list = value
|
7
|
+
end
|
8
|
+
|
9
|
+
def list?
|
10
|
+
return false if @list.nil? # default list flag is false
|
11
|
+
@list == true
|
12
|
+
end
|
13
|
+
|
14
|
+
|
15
|
+
def generate=(value)
|
16
|
+
@generate = value
|
17
|
+
end
|
18
|
+
|
19
|
+
def generate?
|
20
|
+
return false if @generate.nil? # default generate flag is false
|
21
|
+
@generate == true
|
22
|
+
end
|
23
|
+
|
24
|
+
|
25
|
+
def fetch_uri=(value)
|
26
|
+
@fetch_uri = value
|
27
|
+
end
|
28
|
+
|
29
|
+
def fetch_uri
|
30
|
+
@fetch_uri || '-fetch uri required-'
|
31
|
+
end
|
32
|
+
|
33
|
+
def fetch?
|
34
|
+
@fetch_uri.nil? ? false : true
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
def manifest=(value)
|
39
|
+
@manifest = value
|
40
|
+
end
|
41
|
+
|
42
|
+
## fix:/todo: use a different default manifest
|
43
|
+
def manifest
|
44
|
+
@manifest || 's6.txt'
|
45
|
+
end
|
46
|
+
|
47
|
+
|
48
|
+
def config_path=(value)
|
49
|
+
@config_path = value
|
50
|
+
end
|
51
|
+
|
52
|
+
def config_path
|
53
|
+
@config_path || '~/.pak'
|
54
|
+
end
|
55
|
+
|
56
|
+
|
57
|
+
def output_path=(value)
|
58
|
+
@output_path = value
|
59
|
+
end
|
60
|
+
|
61
|
+
def output_path
|
62
|
+
@output_path || '.'
|
63
|
+
end
|
64
|
+
|
65
|
+
end # class Opts
|
66
|
+
end # module Pakman
|
@@ -0,0 +1,89 @@
|
|
1
|
+
module Pakman
|
2
|
+
|
3
|
+
class Runner
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
@logger = Logger.new(STDOUT)
|
7
|
+
@logger.level = Logger::INFO
|
8
|
+
|
9
|
+
@opts = Opts.new
|
10
|
+
end
|
11
|
+
|
12
|
+
attr_reader :logger, :opts
|
13
|
+
|
14
|
+
def run( args )
|
15
|
+
opt=OptionParser.new do |cmd|
|
16
|
+
|
17
|
+
cmd.banner = "Usage: pakman [options]"
|
18
|
+
|
19
|
+
cmd.on( '-f', '--fetch URI', 'Fetch Templates' ) do |uri|
|
20
|
+
opts.fetch_uri = uri
|
21
|
+
end
|
22
|
+
|
23
|
+
cmd.on( '-t', '--template MANIFEST', 'Generate Templates' ) do |manifest|
|
24
|
+
opts.generate = true
|
25
|
+
opts.manifest = manifest
|
26
|
+
end
|
27
|
+
|
28
|
+
cmd.on( '-l', '--list', "List Installed Templates" ) { opts.list = true }
|
29
|
+
|
30
|
+
cmd.on( '-c', '--config PATH', "Configuration Path (default is #{opts.config_path})" ) do |path|
|
31
|
+
opts.config_path = path
|
32
|
+
end
|
33
|
+
|
34
|
+
cmd.on( '-o', '--output PATH', "Output Path (default is #{opts.output_path})" ) { |path| opts.output_path = path }
|
35
|
+
|
36
|
+
cmd.on( '-v', '--version', "Show version" ) do
|
37
|
+
puts Pakman.banner
|
38
|
+
exit
|
39
|
+
end
|
40
|
+
|
41
|
+
cmd.on( "--verbose", "Show debug trace" ) do
|
42
|
+
logger.datetime_format = "%H:%H:%S"
|
43
|
+
logger.level = Logger::DEBUG
|
44
|
+
end
|
45
|
+
|
46
|
+
cmd.on_tail( "-h", "--help", "Show this message" ) do
|
47
|
+
puts <<EOS
|
48
|
+
|
49
|
+
pakman - Lets you manage template packs.
|
50
|
+
|
51
|
+
#{cmd.help}
|
52
|
+
|
53
|
+
Examples:
|
54
|
+
pakman -f URI # to be done
|
55
|
+
pakman -f URI -c ~/.slideshow/templates
|
56
|
+
|
57
|
+
pakman -l # to be done
|
58
|
+
pakman -l -c ~/.slideshow/templates
|
59
|
+
|
60
|
+
pakman -t s6
|
61
|
+
pakman -t s6 -o o
|
62
|
+
pakman -t s6 -c ~/.slideshow/templates
|
63
|
+
|
64
|
+
Further information:
|
65
|
+
http://geraldb.github.com/pakman
|
66
|
+
|
67
|
+
EOS
|
68
|
+
exit
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
opt.parse!( args )
|
73
|
+
|
74
|
+
puts Pakman.banner
|
75
|
+
|
76
|
+
if opts.list?
|
77
|
+
List.new( logger, opts ).run
|
78
|
+
elsif opts.generate?
|
79
|
+
Gen.new( logger, opts ).run
|
80
|
+
elsif opts.fetch?
|
81
|
+
Fetch.new( logger, opts ).run
|
82
|
+
else
|
83
|
+
puts "-- No command do nothing for now. --" ## run help??
|
84
|
+
puts "Done."
|
85
|
+
end
|
86
|
+
end # method run
|
87
|
+
|
88
|
+
end # class Runner
|
89
|
+
end # module Pakman
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Pakman
|
2
|
+
|
3
|
+
class Copier
|
4
|
+
|
5
|
+
attr_reader :logger
|
6
|
+
|
7
|
+
def initialize( logger )
|
8
|
+
@logger = logger
|
9
|
+
end
|
10
|
+
|
11
|
+
def copy_pak( manifestsrc, pakpath )
|
12
|
+
|
13
|
+
manifest = Manifest.load_file( logger, manifestsrc )
|
14
|
+
|
15
|
+
# expand output path in current dir (if relative) and make sure output path exists
|
16
|
+
outpath = File.expand_path( pakpath )
|
17
|
+
logger.debug "outpath=#{outpath}"
|
18
|
+
FileUtils.makedirs( outpath ) unless File.directory? outpath
|
19
|
+
|
20
|
+
manifest.each do |entry|
|
21
|
+
dest = entry[0]
|
22
|
+
source = entry[1]
|
23
|
+
|
24
|
+
puts "Copying to #{dest} from #{source}..."
|
25
|
+
FileUtils.copy( source, with_output_path( dest, outpath ) )
|
26
|
+
end
|
27
|
+
|
28
|
+
puts "Done."
|
29
|
+
end # method copy_pak
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
## fix: remove with_output_path helper (code it directly w/o helper)
|
34
|
+
|
35
|
+
def with_output_path( dest, output_path )
|
36
|
+
dest_full = File.expand_path( dest, output_path )
|
37
|
+
logger.debug "dest_full=#{dest_full}"
|
38
|
+
|
39
|
+
# make sure dest path exists
|
40
|
+
dest_path = File.dirname( dest_full )
|
41
|
+
logger.debug "dest_path=#{dest_path}"
|
42
|
+
FileUtils.makedirs( dest_path ) unless File.directory? dest_path
|
43
|
+
dest_full
|
44
|
+
end
|
45
|
+
|
46
|
+
end # class Copier
|
47
|
+
end # module Pakman
|
@@ -0,0 +1,76 @@
|
|
1
|
+
module Pakman
|
2
|
+
|
3
|
+
class Fetcher
|
4
|
+
|
5
|
+
attr_reader :logger
|
6
|
+
|
7
|
+
def initialize( logger )
|
8
|
+
@logger = logger
|
9
|
+
end
|
10
|
+
|
11
|
+
|
12
|
+
def fetch_pak( manifestsrc, pakpath )
|
13
|
+
|
14
|
+
# src = 'http://github.com/geraldb/slideshow/raw/d98e5b02b87ee66485431b1bee8fb6378297bfe4/code/templates/fullerscreen.txt'
|
15
|
+
# src = 'http://github.com/geraldb/sandbox/raw/13d4fec0908fbfcc456b74dfe2f88621614b5244/s5blank/s5blank.txt'
|
16
|
+
uri = URI.parse( manifestsrc )
|
17
|
+
|
18
|
+
logger.debug "scheme: #{uri.scheme}, host: #{uri.host}, port: #{uri.port}, path: #{uri.path}"
|
19
|
+
|
20
|
+
dirname = File.dirname( uri.path )
|
21
|
+
basename = File.basename( uri.path, '.*' ) # e.g. fullerscreen (without extension)
|
22
|
+
filename = File.basename( uri.path ) # e.g. fullerscreen.txt (with extension)
|
23
|
+
|
24
|
+
logger.debug "dirname: #{dirname}"
|
25
|
+
logger.debug "basename: #{basename}, filename: #{filename}"
|
26
|
+
|
27
|
+
dlbase = "#{uri.scheme}://#{uri.host}:#{uri.port}#{dirname}"
|
28
|
+
|
29
|
+
logger.debug "dlpath: #{dlbase}"
|
30
|
+
logger.debug "pakpath: #{pakpath}"
|
31
|
+
|
32
|
+
FileUtils.makedirs( pakpath ) unless File.directory? pakpath
|
33
|
+
|
34
|
+
puts "Fetching template package '#{basename}'"
|
35
|
+
puts " : from '#{dlbase}'"
|
36
|
+
puts " : saving to '#{pakpath}'"
|
37
|
+
|
38
|
+
# download manifest
|
39
|
+
dest = "#{pakpath}/#{filename}"
|
40
|
+
|
41
|
+
puts " Downloading manifest '#{filename}'..."
|
42
|
+
|
43
|
+
fetch_file( manifestsrc, dest )
|
44
|
+
|
45
|
+
manifest = Manifest.load_file_core( logger, dest )
|
46
|
+
|
47
|
+
# download templates listed in manifest
|
48
|
+
manifest.each do |values|
|
49
|
+
values[1..-1].each do |file|
|
50
|
+
|
51
|
+
dest = "#{pakpath}/#{file}"
|
52
|
+
|
53
|
+
# make sure path exists
|
54
|
+
destpath = File.dirname( dest )
|
55
|
+
FileUtils.makedirs( destpath ) unless File.directory? destpath
|
56
|
+
|
57
|
+
src = "#{dlbase}/#{file}"
|
58
|
+
|
59
|
+
puts " Downloading template '#{file}'..."
|
60
|
+
fetch_file( src, dest )
|
61
|
+
end
|
62
|
+
end
|
63
|
+
puts "Done."
|
64
|
+
end # method fetch_pak
|
65
|
+
|
66
|
+
private
|
67
|
+
|
68
|
+
def fetch_file( src, dest )
|
69
|
+
## note: code moved to its own gem, that is, fetcher
|
70
|
+
## see https://github.com/geraldb/fetcher
|
71
|
+
|
72
|
+
::Fetcher::Worker.new( logger ).copy( src, dest )
|
73
|
+
end
|
74
|
+
|
75
|
+
end # class Fetcher
|
76
|
+
end # module Pakman
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Pakman
|
2
|
+
|
3
|
+
class Finder
|
4
|
+
|
5
|
+
attr_reader :logger
|
6
|
+
|
7
|
+
def initialize( logger )
|
8
|
+
@logger = logger
|
9
|
+
end
|
10
|
+
|
11
|
+
def find_manifests( patterns )
|
12
|
+
manifests = []
|
13
|
+
|
14
|
+
patterns.each do |pattern|
|
15
|
+
pattern.gsub!( '\\', '/') # normalize path; make sure all path use / only
|
16
|
+
logger.debug "Checking #{pattern}"
|
17
|
+
Dir.glob( pattern ) do |file|
|
18
|
+
logger.debug " Found manifest: #{file}"
|
19
|
+
manifests << [ File.basename( file ), file ]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
manifests
|
24
|
+
end
|
25
|
+
|
26
|
+
end # class Finder
|
27
|
+
end # module Pakman
|
@@ -0,0 +1,73 @@
|
|
1
|
+
module Pakman
|
2
|
+
|
3
|
+
class Manifest
|
4
|
+
|
5
|
+
attr_reader :logger
|
6
|
+
|
7
|
+
def initialize( logger )
|
8
|
+
@logger = logger
|
9
|
+
@manifest = []
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.load_file_core( logger, path )
|
13
|
+
obj = self.new( logger )
|
14
|
+
obj.load_file_core_worker( path )
|
15
|
+
obj
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.load_file( logger, path )
|
19
|
+
obj = self.new( logger )
|
20
|
+
obj.load_file_worker( path )
|
21
|
+
obj
|
22
|
+
end
|
23
|
+
|
24
|
+
def each
|
25
|
+
@manifest.each { |ary| yield ary }
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
|
30
|
+
def load_file_core_worker( path )
|
31
|
+
@manifest = []
|
32
|
+
|
33
|
+
File.open( path ).readlines.each_with_index do |line,i|
|
34
|
+
case line
|
35
|
+
when /^\s*$/
|
36
|
+
# skip empty lines
|
37
|
+
when /^\s*#.*$/
|
38
|
+
# skip comment lines
|
39
|
+
else
|
40
|
+
logger.debug "line #{i+1}: #{line.strip}"
|
41
|
+
values = line.strip.split( /[ <,+]+/ )
|
42
|
+
|
43
|
+
# add source for shortcuts (assumes relative path; if not issue warning/error)
|
44
|
+
values << values[0] if values.size == 1
|
45
|
+
|
46
|
+
@manifest << values
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def load_file_worker( path )
|
52
|
+
filename = path
|
53
|
+
|
54
|
+
puts " Loading template manifest #{filename}..."
|
55
|
+
load_file_core_worker( filename )
|
56
|
+
|
57
|
+
# post-processing
|
58
|
+
# normalize all source paths (1..-1) /make full path/add template dir
|
59
|
+
|
60
|
+
templatesdir = File.dirname( path )
|
61
|
+
logger.debug "templatesdir=#{templatesdir}"
|
62
|
+
|
63
|
+
@manifest.each do |values|
|
64
|
+
(1..values.size-1).each do |i|
|
65
|
+
values[i] = "#{templatesdir}/#{values[i]}"
|
66
|
+
logger.debug " path[#{i}]=>#{values[i]}<"
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
|
72
|
+
end # class Manifest
|
73
|
+
end # module Pakman
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pakman
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
- 0
|
9
8
|
- 1
|
10
|
-
|
9
|
+
- 0
|
10
|
+
version: 0.1.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Gerald Bauer
|
@@ -15,12 +15,28 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-06-
|
18
|
+
date: 2012-06-18 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
|
-
name:
|
21
|
+
name: fetcher
|
22
22
|
prerelease: false
|
23
23
|
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 27
|
29
|
+
segments:
|
30
|
+
- 0
|
31
|
+
- 1
|
32
|
+
- 0
|
33
|
+
version: 0.1.0
|
34
|
+
type: :runtime
|
35
|
+
version_requirements: *id001
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: rdoc
|
38
|
+
prerelease: false
|
39
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
24
40
|
none: false
|
25
41
|
requirements:
|
26
42
|
- - ~>
|
@@ -31,11 +47,11 @@ dependencies:
|
|
31
47
|
- 10
|
32
48
|
version: "3.10"
|
33
49
|
type: :development
|
34
|
-
version_requirements: *
|
50
|
+
version_requirements: *id002
|
35
51
|
- !ruby/object:Gem::Dependency
|
36
52
|
name: hoe
|
37
53
|
prerelease: false
|
38
|
-
requirement: &
|
54
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
39
55
|
none: false
|
40
56
|
requirements:
|
41
57
|
- - ~>
|
@@ -46,11 +62,11 @@ dependencies:
|
|
46
62
|
- 0
|
47
63
|
version: "3.0"
|
48
64
|
type: :development
|
49
|
-
version_requirements: *
|
65
|
+
version_requirements: *id003
|
50
66
|
description: pakman - Template Pack Manager
|
51
67
|
email: webslideshow@googlegroups.com
|
52
|
-
executables:
|
53
|
-
|
68
|
+
executables:
|
69
|
+
- pakman
|
54
70
|
extensions: []
|
55
71
|
|
56
72
|
extra_rdoc_files:
|
@@ -60,7 +76,19 @@ files:
|
|
60
76
|
- Manifest.txt
|
61
77
|
- README.markdown
|
62
78
|
- Rakefile
|
79
|
+
- bin/pakman
|
63
80
|
- lib/pakman.rb
|
81
|
+
- lib/pakman/cli/commands/fetch.rb
|
82
|
+
- lib/pakman/cli/commands/gen.rb
|
83
|
+
- lib/pakman/cli/commands/list.rb
|
84
|
+
- lib/pakman/cli/helpers.rb
|
85
|
+
- lib/pakman/cli/opts.rb
|
86
|
+
- lib/pakman/cli/runner.rb
|
87
|
+
- lib/pakman/copier.rb
|
88
|
+
- lib/pakman/fetcher.rb
|
89
|
+
- lib/pakman/finder.rb
|
90
|
+
- lib/pakman/manifest.rb
|
91
|
+
- lib/pakman/version.rb
|
64
92
|
homepage: http://geraldb.github.com/pakman
|
65
93
|
licenses: []
|
66
94
|
|