pakman 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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: []