pakman 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
|