pakman 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Manifest.txt +3 -0
- data/lib/pakman.rb +4 -0
- data/lib/pakman/cli/commands/fetch.rb +8 -12
- data/lib/pakman/cli/commands/gen.rb +21 -17
- data/lib/pakman/cli/commands/list.rb +1 -1
- data/lib/pakman/cli/ctx.rb +32 -0
- data/lib/pakman/cli/runner.rb +3 -1
- data/lib/pakman/template.rb +20 -0
- data/lib/pakman/templater.rb +90 -0
- data/lib/pakman/version.rb +1 -1
- metadata +7 -4
data/Manifest.txt
CHANGED
@@ -7,6 +7,7 @@ lib/pakman.rb
|
|
7
7
|
lib/pakman/cli/commands/fetch.rb
|
8
8
|
lib/pakman/cli/commands/gen.rb
|
9
9
|
lib/pakman/cli/commands/list.rb
|
10
|
+
lib/pakman/cli/ctx.rb
|
10
11
|
lib/pakman/cli/helpers.rb
|
11
12
|
lib/pakman/cli/opts.rb
|
12
13
|
lib/pakman/cli/runner.rb
|
@@ -14,4 +15,6 @@ lib/pakman/copier.rb
|
|
14
15
|
lib/pakman/fetcher.rb
|
15
16
|
lib/pakman/finder.rb
|
16
17
|
lib/pakman/manifest.rb
|
18
|
+
lib/pakman/template.rb
|
19
|
+
lib/pakman/templater.rb
|
17
20
|
lib/pakman/version.rb
|
data/lib/pakman.rb
CHANGED
@@ -8,6 +8,7 @@
|
|
8
8
|
|
9
9
|
require 'yaml'
|
10
10
|
require 'pp'
|
11
|
+
require 'erb'
|
11
12
|
require 'logger'
|
12
13
|
require 'optparse'
|
13
14
|
require 'fileutils'
|
@@ -22,8 +23,11 @@ require 'pakman/copier'
|
|
22
23
|
require 'pakman/fetcher'
|
23
24
|
require 'pakman/finder'
|
24
25
|
require 'pakman/manifest'
|
26
|
+
require 'pakman/template'
|
27
|
+
require 'pakman/templater'
|
25
28
|
require 'pakman/version'
|
26
29
|
|
30
|
+
require 'pakman/cli/ctx'
|
27
31
|
require 'pakman/cli/helpers'
|
28
32
|
require 'pakman/cli/opts'
|
29
33
|
require 'pakman/cli/runner'
|
@@ -2,29 +2,25 @@ module Pakman
|
|
2
2
|
|
3
3
|
class Fetch
|
4
4
|
|
5
|
+
attr_reader :logger, :opts
|
6
|
+
|
5
7
|
def initialize( logger, opts )
|
6
8
|
@logger = logger
|
7
9
|
@opts = opts
|
8
10
|
end
|
9
11
|
|
10
|
-
attr_reader :logger, :opts
|
11
|
-
|
12
|
-
|
13
12
|
def run
|
14
|
-
logger.debug "fetch_uri
|
15
|
-
|
13
|
+
logger.debug "fetch_uri: >#{opts.fetch_uri}<"
|
16
14
|
src = opts.fetch_uri
|
17
15
|
|
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
16
|
uri = URI.parse( src )
|
21
|
-
logger.debug "scheme:
|
17
|
+
logger.debug "scheme: >#{uri.scheme}<, host: >#{uri.host}<, port: >#{uri.port}<, path: >#{uri.path}<"
|
22
18
|
|
23
|
-
|
24
|
-
logger.debug "
|
19
|
+
pakname = File.basename( uri.path ).downcase.gsub( '.txt', '' )
|
20
|
+
logger.debug "pakname: >#{pakname}<"
|
25
21
|
|
26
|
-
pakpath = File.expand_path( "#{opts.config_path}/#{
|
27
|
-
logger.debug "pakpath:
|
22
|
+
pakpath = File.expand_path( "#{opts.config_path}/#{pakname}" )
|
23
|
+
logger.debug "pakpath: >#{pakpath}<"
|
28
24
|
|
29
25
|
Fetcher.new( logger ).fetch_pak( src, pakpath )
|
30
26
|
end # method run
|
@@ -11,31 +11,35 @@ class Gen
|
|
11
11
|
|
12
12
|
attr_reader :logger, :opts
|
13
13
|
|
14
|
-
def run
|
14
|
+
def run( args )
|
15
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?
|
16
|
+
manifest_name = manifest_name.downcase.gsub('.txt', '' ) # remove .txt if present
|
21
17
|
|
22
18
|
logger.debug "manifest=#{manifest_name}"
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
if matches.empty?
|
30
|
-
puts "*** error: unknown template manifest '#{manifest_name}'"
|
31
|
-
# todo: list installed manifests
|
19
|
+
|
20
|
+
# check for matching manifests
|
21
|
+
manifests = installed_template_manifests.select { |m| m[0] == manifest_name+'.txt' }
|
22
|
+
|
23
|
+
if manifests.empty?
|
24
|
+
puts "*** error: unknown template pack '#{manifest_name}'; use pakman -l to list installed template packs"
|
32
25
|
exit 2
|
33
26
|
end
|
34
27
|
|
35
|
-
manifestsrc =
|
28
|
+
manifestsrc = manifests[0][1]
|
36
29
|
pakpath = opts.output_path
|
37
30
|
|
38
|
-
|
31
|
+
if args.empty?
|
32
|
+
Copier.new( logger ).copy_pak( manifestsrc, pakpath )
|
33
|
+
else
|
34
|
+
args.each do |arg|
|
35
|
+
data = YAML.load_file( arg )
|
36
|
+
name = File.basename( arg, '.*' )
|
37
|
+
puts "#{name}:"
|
38
|
+
pp data
|
39
|
+
Templater.new( logger ).copy_pak( manifestsrc, pakpath, Ctx.new(data).ctx, name, '--content-todo-remove--' )
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
39
43
|
end
|
40
44
|
|
41
45
|
end # class Gen
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Pakman
|
2
|
+
|
3
|
+
class Ctx # Context
|
4
|
+
|
5
|
+
def initialize( hash )
|
6
|
+
@hash = hash
|
7
|
+
end
|
8
|
+
|
9
|
+
def ctx
|
10
|
+
### todo: check if method_missing works with binding in erb???
|
11
|
+
binding
|
12
|
+
end
|
13
|
+
|
14
|
+
def method_missing( mn, *args, &blk )
|
15
|
+
## only allow read-only access (no arguments)
|
16
|
+
if args.length > 0 # || mn[-1].chr == "="
|
17
|
+
return super # super( mn, *args, &blk )
|
18
|
+
end
|
19
|
+
|
20
|
+
key = mn.to_sym
|
21
|
+
|
22
|
+
if @hash.has_key?( key )
|
23
|
+
puts "ctx.#{key}"
|
24
|
+
@hash[ key ]
|
25
|
+
else
|
26
|
+
puts "*** ctx.#{key} missing"
|
27
|
+
super
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end # class Ctx
|
32
|
+
end # module Pakman
|
data/lib/pakman/cli/runner.rb
CHANGED
@@ -58,6 +58,8 @@ Examples:
|
|
58
58
|
pakman -l -c ~/.slideshow/templates
|
59
59
|
|
60
60
|
pakman -t s6
|
61
|
+
pakman -t s6 ruby19.yml
|
62
|
+
pakman -t s6 ruby19.yml tagging.yml
|
61
63
|
pakman -t s6 -o o
|
62
64
|
pakman -t s6 -c ~/.slideshow/templates
|
63
65
|
|
@@ -76,7 +78,7 @@ EOS
|
|
76
78
|
if opts.list?
|
77
79
|
List.new( logger, opts ).run
|
78
80
|
elsif opts.generate?
|
79
|
-
Gen.new( logger, opts ).run
|
81
|
+
Gen.new( logger, opts ).run( args )
|
80
82
|
elsif opts.fetch?
|
81
83
|
Fetch.new( logger, opts ).run
|
82
84
|
else
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Pakman
|
2
|
+
|
3
|
+
class Template
|
4
|
+
|
5
|
+
def initialize( path )
|
6
|
+
@path = path
|
7
|
+
end
|
8
|
+
|
9
|
+
def render( binding )
|
10
|
+
ERB.new( load_template() ).result( binding )
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
def load_template
|
15
|
+
puts " Loading template >#{@path}<..."
|
16
|
+
File.read( @path )
|
17
|
+
end
|
18
|
+
|
19
|
+
end # class Template
|
20
|
+
end # module Pakman
|
@@ -0,0 +1,90 @@
|
|
1
|
+
module Pakman
|
2
|
+
|
3
|
+
class Templater
|
4
|
+
|
5
|
+
attr_reader :logger
|
6
|
+
|
7
|
+
def initialize( logger )
|
8
|
+
@logger = logger
|
9
|
+
end
|
10
|
+
|
11
|
+
|
12
|
+
## fix/todo:
|
13
|
+
## - get @name or @content from binding - possible with lookup???
|
14
|
+
|
15
|
+
def copy_pak( manifestsrc, pakpath, binding, name, content )
|
16
|
+
|
17
|
+
start = Time.now
|
18
|
+
|
19
|
+
#### fix/todo:
|
20
|
+
## - check for .erb file extension for trigger for erb processing
|
21
|
+
|
22
|
+
# downcase and remove .txt (if anywhere in name)
|
23
|
+
# e.g. welcome.quick.txt becomes welcome.quick
|
24
|
+
# welcome.txt.quick becomse welcome.quick
|
25
|
+
pakname = File.basename( manifestsrc ).downcase.gsub( '.txt', '' )
|
26
|
+
|
27
|
+
puts "Copying template pack '#{pakname}'"
|
28
|
+
|
29
|
+
manifest = Manifest.load_file( logger, manifestsrc )
|
30
|
+
|
31
|
+
# expand output path in current dir (if relative) and make sure output path exists
|
32
|
+
outpath = File.expand_path( pakpath )
|
33
|
+
logger.debug "outpath=#{outpath}"
|
34
|
+
FileUtils.makedirs( outpath ) unless File.directory?( outpath )
|
35
|
+
|
36
|
+
manifest.each do |entry|
|
37
|
+
outname = entry[0]
|
38
|
+
if outname.include?( '__file__' ) # process
|
39
|
+
outname = outname.gsub( '__file__', name )
|
40
|
+
puts "Preparing #{outname}..."
|
41
|
+
|
42
|
+
out = File.new( with_output_path( outname, outpath ), 'w+' )
|
43
|
+
|
44
|
+
out << Template.new( entry[1] ).render( binding )
|
45
|
+
|
46
|
+
## fix: remove entry.size > 2
|
47
|
+
## check template pack and convert to new simple erb classic version
|
48
|
+
|
49
|
+
if entry.size > 2 # more than one source file? assume header and footer with content added inbetween
|
50
|
+
out << content
|
51
|
+
out << Template.new( entry[2] ).render( binding )
|
52
|
+
end
|
53
|
+
|
54
|
+
out.flush
|
55
|
+
out.close
|
56
|
+
else # just copy verbatim if target/dest has no __file__ in name
|
57
|
+
dest = entry[0]
|
58
|
+
source = entry[1]
|
59
|
+
|
60
|
+
#### fix/todo:
|
61
|
+
# - check for .erb file extension for trigger for erb processing
|
62
|
+
|
63
|
+
puts "Copying to #{dest} from #{source}..."
|
64
|
+
FileUtils.copy( source, with_output_path( dest, outpath ) )
|
65
|
+
end
|
66
|
+
end # each entry in manifest
|
67
|
+
|
68
|
+
puts "Done (in #{Time.now-start} s)."
|
69
|
+
end # method copy_pak
|
70
|
+
|
71
|
+
private
|
72
|
+
|
73
|
+
|
74
|
+
############################
|
75
|
+
## fix/todo: cleanup needed
|
76
|
+
## fix: remove with_output_path helper (code it directly w/o helper)
|
77
|
+
|
78
|
+
def with_output_path( dest, output_path )
|
79
|
+
dest_full = File.expand_path( dest, output_path )
|
80
|
+
logger.debug "dest_full=#{dest_full}"
|
81
|
+
|
82
|
+
# make sure dest path exists
|
83
|
+
dest_path = File.dirname( dest_full )
|
84
|
+
logger.debug "dest_path=#{dest_path}"
|
85
|
+
FileUtils.makedirs( dest_path ) unless File.directory? dest_path
|
86
|
+
dest_full
|
87
|
+
end
|
88
|
+
|
89
|
+
end # class Templater
|
90
|
+
end # module Pakman
|
data/lib/pakman/version.rb
CHANGED
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: 19
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
8
|
+
- 3
|
9
9
|
- 0
|
10
|
-
version: 0.
|
10
|
+
version: 0.3.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Gerald Bauer
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-06-
|
18
|
+
date: 2012-06-20 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: fetcher
|
@@ -81,6 +81,7 @@ files:
|
|
81
81
|
- lib/pakman/cli/commands/fetch.rb
|
82
82
|
- lib/pakman/cli/commands/gen.rb
|
83
83
|
- lib/pakman/cli/commands/list.rb
|
84
|
+
- lib/pakman/cli/ctx.rb
|
84
85
|
- lib/pakman/cli/helpers.rb
|
85
86
|
- lib/pakman/cli/opts.rb
|
86
87
|
- lib/pakman/cli/runner.rb
|
@@ -88,6 +89,8 @@ files:
|
|
88
89
|
- lib/pakman/fetcher.rb
|
89
90
|
- lib/pakman/finder.rb
|
90
91
|
- lib/pakman/manifest.rb
|
92
|
+
- lib/pakman/template.rb
|
93
|
+
- lib/pakman/templater.rb
|
91
94
|
- lib/pakman/version.rb
|
92
95
|
homepage: http://geraldb.github.com/pakman
|
93
96
|
licenses: []
|