pakman 0.3.0 → 0.4.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 CHANGED
@@ -17,4 +17,5 @@ lib/pakman/finder.rb
17
17
  lib/pakman/manifest.rb
18
18
  lib/pakman/template.rb
19
19
  lib/pakman/templater.rb
20
+ lib/pakman/utils.rb
20
21
  lib/pakman/version.rb
data/README.markdown CHANGED
@@ -16,6 +16,13 @@ Copy a template pack from your cache:
16
16
  Pakman::Copier.new( logger ).copy_pak( src, pakpath )
17
17
  ```
18
18
 
19
+ Merge a template pack from your cache:
20
+
21
+ ```ruby
22
+ Pakman::Templater.new( logger ).merge_pak( src, pakpath, binding, name )
23
+ ```
24
+
25
+
19
26
  List all template packs in your cache (using passed in search path):
20
27
 
21
28
  ```ruby
@@ -61,6 +68,11 @@ The [`slideshow`](http://slideshow.rubyforge.org) (also known as Slide Show (S9)
61
68
  that lets you create slide shows
62
69
  and author slides in plain text using a wiki-style markup language that's easy-to-write and easy-to-read.
63
70
 
71
+ ## Real World Template Packs
72
+
73
+ * [S6 Template Pack](https://github.com/geraldb/slideshow-s6-blank)
74
+ * [impress.js Template Pack](https://github.com/geraldb/slideshow-impress.js)
75
+ * [deck.js Template Pack](https://github.com/geraldb/slideshow-deck.js)
64
76
 
65
77
  ## License
66
78
 
data/lib/pakman.rb CHANGED
@@ -25,6 +25,7 @@ require 'pakman/finder'
25
25
  require 'pakman/manifest'
26
26
  require 'pakman/template'
27
27
  require 'pakman/templater'
28
+ require 'pakman/utils'
28
29
  require 'pakman/version'
29
30
 
30
31
  require 'pakman/cli/ctx'
@@ -16,10 +16,10 @@ class Fetch
16
16
  uri = URI.parse( src )
17
17
  logger.debug "scheme: >#{uri.scheme}<, host: >#{uri.host}<, port: >#{uri.port}<, path: >#{uri.path}<"
18
18
 
19
- pakname = File.basename( uri.path ).downcase.gsub( '.txt', '' )
19
+ pakname = Pakman.pakname_from_file( uri.path )
20
20
  logger.debug "pakname: >#{pakname}<"
21
21
 
22
- pakpath = File.expand_path( "#{opts.config_path}/#{pakname}" )
22
+ pakpath = File.expand_path( pakname, opts.config_path )
23
23
  logger.debug "pakpath: >#{pakpath}<"
24
24
 
25
25
  Fetcher.new( logger ).fetch_pak( src, pakpath )
@@ -36,7 +36,7 @@ class Gen
36
36
  name = File.basename( arg, '.*' )
37
37
  puts "#{name}:"
38
38
  pp data
39
- Templater.new( logger ).copy_pak( manifestsrc, pakpath, Ctx.new(data).ctx, name, '--content-todo-remove--' )
39
+ Templater.new( logger ).merge_pak( manifestsrc, pakpath, Ctx.new(data).ctx, name )
40
40
  end
41
41
  end
42
42
 
@@ -17,13 +17,16 @@ class Ctx # Context
17
17
  return super # super( mn, *args, &blk )
18
18
  end
19
19
 
20
- key = mn.to_sym
20
+ key = mn.to_s
21
21
 
22
22
  if @hash.has_key?( key )
23
- puts "ctx.#{key}"
24
- @hash[ key ]
23
+ puts "calling ctx.#{key}"
24
+ value = @hash[ key ]
25
+ puts " returning #{value.class.name}:"
26
+ pp value
27
+ value
25
28
  else
26
- puts "*** ctx.#{key} missing"
29
+ puts "*** warning: ctx.#{key} missing"
27
30
  super
28
31
  end
29
32
  end
data/lib/pakman/copier.rb CHANGED
@@ -12,47 +12,30 @@ class Copier
12
12
 
13
13
  start = Time.now
14
14
 
15
- # downcase and remove .txt (if anywhere in name)
16
- # e.g. welcome.quick.txt becomes welcome.quick
17
- # welcome.txt.quick becomse welcome.quick
18
- pakname = File.basename( manifestsrc ).downcase.gsub( '.txt', '' )
15
+ pakname = Pakman.pakname_from_file( manifestsrc )
19
16
 
20
17
  puts "Copying template pack '#{pakname}'"
21
18
 
22
19
  manifest = Manifest.load_file( logger, manifestsrc )
23
20
 
24
- # expand output path in current dir (if relative) and make sure output path exists
25
- outpath = File.expand_path( pakpath )
26
- logger.debug "outpath=#{outpath}"
27
- FileUtils.makedirs( outpath ) unless File.directory?( outpath )
28
-
29
21
  manifest.each do |entry|
30
22
  dest = entry[0]
31
23
  source = entry[1]
32
-
24
+
25
+ # get full (absolute) path and make sure path exists
26
+ destfull = File.expand_path( dest, pakpath )
27
+ destpath = File.dirname( destfull )
28
+ FileUtils.makedirs( destpath ) unless File.directory?( destpath )
29
+
30
+ logger.debug "destfull=>#{destfull}<"
31
+ logger.debug "destpath=>#{destpath}<"
32
+
33
33
  puts " Copying to #{dest} from #{source}..."
34
- FileUtils.copy( source, with_output_path( dest, outpath ) )
34
+ FileUtils.copy( source, destfull )
35
35
  end
36
36
 
37
37
  puts "Done (in #{Time.now-start} s)."
38
38
  end # method copy_pak
39
39
 
40
- private
41
-
42
- ############################
43
- ## fix/todo: cleanup needed
44
- ## fix: remove with_output_path helper (code it directly w/o helper)
45
-
46
- def with_output_path( dest, output_path )
47
- dest_full = File.expand_path( dest, output_path )
48
- logger.debug "dest_full=#{dest_full}"
49
-
50
- # make sure dest path exists
51
- dest_path = File.dirname( dest_full )
52
- logger.debug "dest_path=#{dest_path}"
53
- FileUtils.makedirs( dest_path ) unless File.directory? dest_path
54
- dest_full
55
- end
56
-
57
40
  end # class Copier
58
- end # module Pakman
41
+ end # module Pakman
@@ -13,8 +13,6 @@ class Fetcher
13
13
 
14
14
  start = Time.now
15
15
 
16
- # src = 'http://github.com/geraldb/slideshow/raw/d98e5b02b87ee66485431b1bee8fb6378297bfe4/code/templates/fullerscreen.txt'
17
- # src = 'http://github.com/geraldb/sandbox/raw/13d4fec0908fbfcc456b74dfe2f88621614b5244/s5blank/s5blank.txt'
18
16
  uri = URI.parse( manifestsrc )
19
17
 
20
18
  logger.debug "scheme: #{uri.scheme}, host: #{uri.host}, port: #{uri.port}, path: #{uri.path}"
@@ -22,16 +20,14 @@ class Fetcher
22
20
  dirname = File.dirname( uri.path )
23
21
  filename = File.basename( uri.path ) # e.g. fullerscreen.txt (with extension)
24
22
 
25
- # downcase and remove .txt (if anywhere in name)
26
- # e.g. welcome.quick.txt becomes welcome.quick
27
- # welcome.txt.quick becomse welcome.quick
28
- pakname = File.basename( uri.path ).downcase.gsub( '.txt', '' )
23
+ pakname = Pakman.pakname_from_file( uri.path )
29
24
 
30
25
  logger.debug "dirname >#{dirname}<"
31
- logger.debug "pakname >#{pakname}<, filename >#{filename}<"
26
+ logger.debug "filename >#{filename}<"
27
+ logger.debug "pakname >#{pakname}<"
32
28
 
33
29
  dlbase = "#{uri.scheme}://#{uri.host}:#{uri.port}#{dirname}"
34
- logger.debug "dlpath: #{dlbase}"
30
+ logger.debug "dlbase: #{dlbase}"
35
31
  logger.debug "pakpath: #{pakpath}"
36
32
 
37
33
  FileUtils.makedirs( pakpath ) unless File.directory?( pakpath )
@@ -40,30 +36,36 @@ class Fetcher
40
36
  puts " from '#{dlbase}'"
41
37
  puts " saving to '#{pakpath}'"
42
38
 
43
- # download manifest
44
- dest = "#{pakpath}/#{filename}"
39
+ # step 1: download manifest
40
+ manifestdest = "#{pakpath}/#{filename}"
45
41
 
46
42
  puts " Downloading manifest '#{filename}'..."
47
43
 
48
- fetch_file( manifestsrc, dest )
44
+ fetch_file( manifestsrc, manifestdest )
49
45
 
50
- manifest = Manifest.load_file_core( logger, dest )
46
+ manifest = Manifest.load_file_core( logger, manifestdest )
51
47
 
52
- # download templates listed in manifest
53
- manifest.each do |values|
54
- values[1..-1].each do |file|
55
-
56
- dest = "#{pakpath}/#{file}"
48
+ # step 2: download files & templates listed in manifest
49
+ manifest.each do |entry|
50
+ source = entry[1]
57
51
 
58
- # make sure path exists
59
- destpath = File.dirname( dest )
60
- FileUtils.makedirs( destpath ) unless File.directory?( destpath )
61
-
62
- src = "#{dlbase}/#{file}"
52
+ # get full (absolute) path and make sure path exists
53
+ destfull = File.expand_path( source, pakpath ) # NB: turning source into dest
54
+ destpath = File.dirname( destfull )
55
+ FileUtils.makedirs( destpath ) unless File.directory?( destpath )
56
+
57
+ logger.debug "destfull=>#{destfull}<"
58
+ logger.debug "destpath=>#{destpath}<"
59
+
60
+ sourcefull = "#{dlbase}/#{source}"
63
61
 
64
- puts " Downloading template '#{file}'..."
65
- fetch_file( src, dest )
62
+ if source =~ /\.erb\.|.erb$/
63
+ puts " Downloading template '#{source}'..."
64
+ else
65
+ puts " Downloading file '#{source}'..."
66
66
  end
67
+
68
+ fetch_file( sourcefull, destfull )
67
69
  end
68
70
  puts "Done (in #{Time.now-start} s)."
69
71
  end # method fetch_pak
data/lib/pakman/finder.rb CHANGED
@@ -21,6 +21,11 @@ class Finder
21
21
  else
22
22
  unless exclude?( file, excludes ) # check for excludes; skip if excluded
23
23
  logger.debug " Adding match >#{file}<"
24
+
25
+ ## todo/fix:
26
+ # array first entry - downcase and gsub('.txt','') ??
27
+ # use Pakman.pakname_from_file()
28
+
24
29
  manifests << [ File.basename( file ), file ]
25
30
  end
26
31
  end
@@ -35,7 +40,7 @@ private
35
40
  excludes.each do |pattern|
36
41
  ## todo: FNM_DOTMATCH helps or not?? (make up some tests??)
37
42
  if File.fnmatch?( pattern, file, File::FNM_CASEFOLD | File::FNM_DOTMATCH )
38
- logger.debug " Skipping match; it's excluded by pattern >#{pattern}<"
43
+ logger.debug " Skipping match; it's excluded by pattern >#{pattern}<"
39
44
  return true
40
45
  end
41
46
  end
@@ -7,84 +7,50 @@ class Templater
7
7
  def initialize( logger )
8
8
  @logger = logger
9
9
  end
10
-
11
10
 
12
- ## fix/todo:
13
- ## - get @name or @content from binding - possible with lookup???
14
-
15
- def copy_pak( manifestsrc, pakpath, binding, name, content )
11
+
12
+ def merge_pak( manifestsrc, pakpath, binding, name )
16
13
 
17
14
  start = Time.now
18
15
 
19
- #### fix/todo:
20
- ## - check for .erb file extension for trigger for erb processing
16
+ pakname = Pakman.pakname_from_file( manifestsrc )
21
17
 
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}'"
18
+ puts "Merging template pack '#{pakname}'"
28
19
 
29
20
  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
21
 
44
- out << Template.new( entry[1] ).render( binding )
22
+ manifest.each do |entry|
23
+ dest = entry[0]
24
+ source = entry[1]
45
25
 
46
- ## fix: remove entry.size > 2
47
- ## check template pack and convert to new simple erb classic version
26
+ if dest =~ /__file__/ # replace w/ name
27
+ dest = dest.gsub( '__file__', name )
28
+ end
48
29
 
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
-
30
+ # get full (absolute) path and make sure path exists
31
+ destfull = File.expand_path( dest, pakpath )
32
+ destpath = File.dirname( destfull )
33
+ FileUtils.makedirs( destpath ) unless File.directory?( destpath )
34
+
35
+ logger.debug "destfull=>#{destfull}<"
36
+ logger.debug "destpath=>#{destpath}<"
37
+
38
+ if source =~ /\.erb\.|.erb$/
39
+ puts " Merging to #{dest}..."
40
+
41
+ out = File.new( destfull, 'w+' )
42
+ out << Template.new( source ).render( binding )
54
43
  out.flush
55
44
  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 ) )
45
+ else
46
+ puts " Copying to #{dest} from #{source}..."
47
+
48
+ FileUtils.copy( source, destfull )
65
49
  end
66
50
  end # each entry in manifest
67
51
 
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
52
+ puts "Done (in #{Time.now-start} s)."
53
+ end # method merge_pak
88
54
 
89
55
  end # class Templater
90
56
  end # module Pakman
@@ -0,0 +1,13 @@
1
+ module Pakman
2
+
3
+
4
+ # downcase and remove .txt (if anywhere in name)
5
+ # e.g. welcome.quick.txt becomes welcome.quick
6
+ # welcome.txt.quick becomse welcome.quick
7
+ # s6blank.txt becomes s6blank
8
+
9
+ def self.pakname_from_file( path )
10
+ File.basename( path ).downcase.gsub( '.txt', '' )
11
+ end
12
+
13
+ end # class Pakman
@@ -1,3 +1,3 @@
1
1
  module Pakman
2
- VERSION = '0.3.0'
2
+ VERSION = '0.4.0'
3
3
  end
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: 19
4
+ hash: 15
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 3
8
+ - 4
9
9
  - 0
10
- version: 0.3.0
10
+ version: 0.4.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-20 00:00:00 Z
18
+ date: 2012-06-22 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: fetcher
@@ -91,6 +91,7 @@ files:
91
91
  - lib/pakman/manifest.rb
92
92
  - lib/pakman/template.rb
93
93
  - lib/pakman/templater.rb
94
+ - lib/pakman/utils.rb
94
95
  - lib/pakman/version.rb
95
96
  homepage: http://geraldb.github.com/pakman
96
97
  licenses: []