slideshow 1.1.0 → 1.2.0.beta1

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
@@ -6,10 +6,12 @@ bin/slideshow
6
6
  config/slideshow.builtin.yml
7
7
  config/slideshow.yml
8
8
  lib/slideshow.rb
9
- lib/slideshow/commands/fetch.rb
10
- lib/slideshow/commands/gen.rb
11
- lib/slideshow/commands/gen_templates.rb
12
- lib/slideshow/commands/list.rb
9
+ lib/slideshow/cli/commands/fetch.rb
10
+ lib/slideshow/cli/commands/gen.rb
11
+ lib/slideshow/cli/commands/gen_templates.rb
12
+ lib/slideshow/cli/commands/list.rb
13
+ lib/slideshow/cli/opts.rb
14
+ lib/slideshow/cli/runner.rb
13
15
  lib/slideshow/config.rb
14
16
  lib/slideshow/filters/debug_filter.rb
15
17
  lib/slideshow/filters/headers_filter.rb
@@ -28,12 +30,10 @@ lib/slideshow/helpers/syntax/sh_helper.rb
28
30
  lib/slideshow/helpers/syntax/uv_helper.rb
29
31
  lib/slideshow/helpers/table_helper.rb
30
32
  lib/slideshow/helpers/text_helper.rb
31
- lib/slideshow/manifest.rb
33
+ lib/slideshow/manifest_helpers.rb
32
34
  lib/slideshow/markup/markdown.rb
33
35
  lib/slideshow/markup/rest.rb
34
36
  lib/slideshow/markup/textile.rb
35
- lib/slideshow/opts.rb
36
- lib/slideshow/runner.rb
37
37
  lib/slideshow/slide.rb
38
38
  lib/slideshow/version.rb
39
39
  templates/s6.txt
data/Rakefile CHANGED
@@ -16,12 +16,10 @@ Hoe.spec 'slideshow' do
16
16
  ['RedCloth','>= 4.2.9'],
17
17
  ['markdown','>= 0.4.0'],
18
18
  ['textutils','>= 0.2.0'],
19
- ['fetcher','>= 0.1.0'],
20
- ['props','>= 0.2.0']
19
+ ['props','>= 0.2.0'],
20
+ ['pakman','>= 0.1.0']
21
21
  ]
22
-
23
- self.remote_rdoc_dir = 'doc'
24
-
22
+
25
23
  # switch extension to .rdoc for gihub formatting
26
24
  self.readme_file = 'README.rdoc'
27
25
  self.history_file = 'History.rdoc'
data/lib/slideshow.rb CHANGED
@@ -35,21 +35,22 @@ class Env
35
35
  end # class Env
36
36
 
37
37
  require 'textutils' # text filters and helpers
38
+ require 'pakman' # template pack manager
38
39
 
39
40
 
40
41
  # our own code
41
42
  require 'slideshow/version'
42
- require 'slideshow/opts'
43
43
  require 'slideshow/headers'
44
44
  require 'slideshow/config'
45
- require 'slideshow/manifest'
45
+ require 'slideshow/manifest_helpers'
46
46
  require 'slideshow/slide'
47
- require 'slideshow/runner'
48
47
 
49
- require 'slideshow/commands/fetch'
50
- require 'slideshow/commands/gen'
51
- require 'slideshow/commands/gen_templates'
52
- require 'slideshow/commands/list'
48
+ require 'slideshow/cli/opts'
49
+ require 'slideshow/cli/runner'
50
+ require 'slideshow/cli/commands/fetch'
51
+ require 'slideshow/cli/commands/gen'
52
+ require 'slideshow/cli/commands/gen_templates'
53
+ require 'slideshow/cli/commands/list'
53
54
 
54
55
  require 'slideshow/markup/textile'
55
56
  require 'slideshow/markup/markdown'
@@ -0,0 +1,53 @@
1
+ module Slideshow
2
+
3
+ class Fetch
4
+
5
+ ### fix: remove opts, use config (wrapped!!)
6
+
7
+ def initialize( logger, opts, config )
8
+ @logger = logger
9
+ @opts = opts
10
+ @config = config
11
+ end
12
+
13
+ attr_reader :logger, :opts, :config
14
+
15
+
16
+ def run
17
+ logger.debug "fetch_uri=#{opts.fetch_uri}"
18
+
19
+ src = opts.fetch_uri
20
+
21
+ ## check for builtin shortcut (assume no / or \)
22
+ if src.index( '/' ).nil? && src.index( '\\' ).nil?
23
+ shortcut = src.clone
24
+ src = config.map_fetch_shortcut( src )
25
+
26
+ if src.nil?
27
+ puts "** Error: No mapping found for fetch shortcut '#{shortcut}'."
28
+ return
29
+ end
30
+ puts " Mapping fetch shortcut '#{shortcut}' to: #{src}"
31
+ end
32
+
33
+ # src = 'http://github.com/geraldb/slideshow/raw/d98e5b02b87ee66485431b1bee8fb6378297bfe4/code/templates/fullerscreen.txt'
34
+ # src = 'http://github.com/geraldb/sandbox/raw/13d4fec0908fbfcc456b74dfe2f88621614b5244/s5blank/s5blank.txt'
35
+ uri = URI.parse( src )
36
+ logger.debug "scheme: #{uri.scheme}, host: #{uri.host}, port: #{uri.port}, path: #{uri.path}"
37
+
38
+ basename = File.basename( uri.path, '.*' ) # e.g. fullerscreen (without extension)
39
+ logger.debug "basename: #{basename}"
40
+
41
+ pakpath = File.expand_path( "#{config.config_dir}/templates/#{basename}" )
42
+ logger.debug "pakpath: #{pakpath}"
43
+
44
+ ## note: code moved to its own gem, that is, pakman
45
+ ## see https://github.com/geraldb/pakman
46
+
47
+ Pakman::Fetcher.new( logger ).fetch_pak( src, pakpath )
48
+ end # method run
49
+
50
+
51
+ end # class Fetch
52
+
53
+ end # module Slideshow
@@ -1,8 +1,11 @@
1
1
  module Slideshow
2
2
 
3
+ ## fix:/todo: move generation code out of command into its own class
4
+ ## not residing/depending on cli
5
+
3
6
  class Gen
4
7
 
5
- include Manifest # gets us methods like installed_template_manifests, etc.
8
+ include ManifestHelper
6
9
 
7
10
  ### fix: remove opts, use config (wrapped!!)
8
11
 
@@ -163,7 +166,7 @@ class Gen
163
166
 
164
167
  # check if file exists (if yes use custom template package!) - allows you to override builtin package with same name
165
168
  if File.exists?( manifest_path_or_name )
166
- manifest = load_manifest( manifest_path_or_name )
169
+ manifest = Pakman::Manifest.load_file( logger, manifest_path_or_name )
167
170
  else
168
171
  # check for builtin manifests
169
172
  manifests = installed_template_manifests
@@ -175,7 +178,7 @@ class Gen
175
178
  exit 2
176
179
  end
177
180
 
178
- manifest = load_manifest( matches[0][1] )
181
+ manifest = Pakman::Manifest.load_file( logger, matches[0][1] )
179
182
  end
180
183
 
181
184
 
@@ -250,6 +253,9 @@ class Gen
250
253
  end
251
254
 
252
255
 
256
+ ###
257
+ ## fix: move code into Pakman::Gen/Generator or Templater
258
+
253
259
  #### fix/todo:
254
260
  ##
255
261
  ## check for .erb file extension for trigger for erb processing
@@ -0,0 +1,53 @@
1
+ module Slideshow
2
+
3
+ class GenTemplates
4
+
5
+
6
+ ### fix: remove opts, use config (wrapped!!)
7
+
8
+ def initialize( logger, opts, config )
9
+ @logger = logger
10
+ @opts = opts
11
+ @config = config
12
+ end
13
+
14
+ attr_reader :logger, :opts, :config
15
+
16
+ def run
17
+ manifest_name = opts.manifest
18
+ logger.debug "manifest=#{manifest_name}"
19
+
20
+ manifests = installed_generator_manifests
21
+
22
+ # check for builtin generator manifests
23
+ matches = manifests.select { |m| m[0] == manifest_name+".gen" }
24
+
25
+ if matches.empty?
26
+ puts "*** error: unknown template manifest '#{manifest_name}'"
27
+ # todo: list installed manifests
28
+ exit 2
29
+ end
30
+
31
+ manifestsrc = matches[0][1]
32
+ pakpath = opts.output_path
33
+
34
+ Pakman::Copier.new( logger ).copy_pak( manifestsrc, pakpath )
35
+ end
36
+
37
+ private
38
+
39
+ def installed_generator_manifests
40
+ # 1) search gem/templates
41
+
42
+ builtin_patterns = [
43
+ "#{Slideshow.root}/templates/*.txt.gen"
44
+ ]
45
+
46
+ ## note: code moved to its own gem, that is, pakman
47
+ ## see https://github.com/geraldb/pakman
48
+
49
+ Pakman::Finder.new( logger ).find_manifests( builtin_patterns )
50
+ end
51
+
52
+ end # class GenTemplates
53
+ end # module Slideshow
@@ -2,7 +2,7 @@ module Slideshow
2
2
 
3
3
  class List
4
4
 
5
- include Manifest # gets us methods like installed_template_manifests, etc.
5
+ include ManifestHelper
6
6
 
7
7
  ### fix: remove opts, use config (wrapped!!)
8
8
 
@@ -14,19 +14,22 @@ class List
14
14
 
15
15
  attr_reader :logger, :opts, :config
16
16
 
17
-
18
17
  def run
19
18
  manifests = installed_template_manifests
20
19
 
21
20
  puts ''
22
- puts 'Installed templates include:'
21
+ puts 'Installed template packs in search path'
22
+
23
+ installed_template_manifest_patterns.each_with_index do |pattern,i|
24
+ puts " [#{i+1}] #{pattern}"
25
+ end
26
+ puts ' include:'
23
27
 
24
28
  manifests.each do |manifest|
25
- puts " #{manifest[0]} (#{manifest[1]})"
29
+ puts "%16s (%s)" % [manifest[0], manifest[1]]
26
30
  end
27
31
  end
28
32
 
29
-
30
33
  end # class List
31
34
 
32
35
  end # class Slideshow
@@ -68,9 +68,9 @@ class Opts
68
68
  def config_path=(value)
69
69
  @config_path = value
70
70
  end
71
-
71
+
72
72
  def config_path
73
- @config_path
73
+ @config_path || File.join( Env.home, '.slideshow' )
74
74
  end
75
75
 
76
76
  def output_path=(value)
@@ -14,25 +14,23 @@ class Runner
14
14
  attr_reader :logger, :opts, :config, :headers
15
15
 
16
16
 
17
-
18
- def load_plugins
19
-
20
- patterns = []
21
- patterns << "#{config.config_dir}/lib/**/*.rb"
22
- patterns << 'lib/**/*.rb' unless Slideshow.root == File.expand_path( '.' ) # don't include lib if we are in repo (don't include slideshow/lib)
17
+ def load_plugins
18
+ patterns = []
19
+ patterns << "#{config.config_dir}/lib/**/*.rb"
20
+ patterns << 'lib/**/*.rb' unless Slideshow.root == File.expand_path( '.' ) # don't include lib if we are in repo (don't include slideshow/lib)
23
21
 
24
- patterns.each do |pattern|
25
- pattern.gsub!( '\\', '/') # normalize path; make sure all path use / only
26
- Dir.glob( pattern ) do |plugin|
27
- begin
28
- puts "Loading plugins in '#{plugin}'..."
29
- require( plugin )
30
- rescue Exception => e
31
- puts "** error: failed loading plugins in '#{plugin}': #{e}"
22
+ patterns.each do |pattern|
23
+ pattern.gsub!( '\\', '/') # normalize path; make sure all path use / only
24
+ Dir.glob( pattern ) do |plugin|
25
+ begin
26
+ puts "Loading plugins in '#{plugin}'..."
27
+ require( plugin )
28
+ rescue Exception => e
29
+ puts "** error: failed loading plugins in '#{plugin}': #{e}"
30
+ end
32
31
  end
33
32
  end
34
- end
35
- end
33
+ end # method load_plugins
36
34
 
37
35
 
38
36
  def find_file_with_known_extension( fn )
@@ -52,7 +50,6 @@ end
52
50
 
53
51
 
54
52
  def find_files( file_or_dir_or_pattern )
55
-
56
53
  filtered_files = []
57
54
 
58
55
  ## for now process/assume only single file
@@ -72,21 +69,22 @@ end
72
69
  end
73
70
  end
74
71
 
75
- filtered_files
76
-
72
+ filtered_files
77
73
  end # method find_files
78
74
 
79
75
 
80
76
 
81
77
  def run( args )
82
78
 
79
+ config.load
80
+
83
81
  opt=OptionParser.new do |cmd|
84
82
 
85
83
  cmd.banner = "Usage: slideshow [options] name"
86
84
 
87
- cmd.on( '-o', '--output PATH', 'Output Path' ) { |path| opts.output_path = path }
85
+ cmd.on( '-o', '--output PATH', "Output Path (default is #{opts.output_path})" ) { |path| opts.output_path = path }
88
86
 
89
- cmd.on( "-t", "--template MANIFEST", "Template Manifest (default is s6.txt)" ) do |t|
87
+ cmd.on( "-t", "--template MANIFEST", "Template Manifest (default is #{opts.manifest})" ) do |t|
90
88
  # todo: do some checks on passed in template argument
91
89
  opts.manifest = t
92
90
  end
@@ -104,30 +102,32 @@ def run( args )
104
102
 
105
103
  # ?? cmd.on( '-i', '--include PATH', 'Load Path' ) { |s| opts.put( 'include', s ) }
106
104
 
107
- cmd.on( '-c', '--config PATH', 'Configuration Path (default is ~/.slideshow)' ) do |path|
108
- opts.config_path = path
109
- end
110
-
111
105
  cmd.on( '-f', '--fetch URI', 'Fetch Templates' ) do |uri|
112
106
  opts.fetch_uri = uri
113
107
  end
114
108
 
115
- cmd.on( '-g', '--generate', 'Generate Slide Show Templates (Using Built-In S6 Pack)' ) { opts.generate = true }
116
-
117
109
  cmd.on( '-l', '--list', 'List Installed Templates' ) { opts.list = true }
118
110
 
119
- # todo: find different letter for debug trace switch (use v for version?)
120
- cmd.on( "-v", "--verbose", "Show debug trace" ) do
121
- logger.datetime_format = "%H:%H:%S"
122
- logger.level = Logger::DEBUG
111
+ cmd.on( '-c', '--config PATH', "Configuration Path (default is #{opts.config_path})" ) do |path|
112
+ opts.config_path = path
123
113
  end
114
+
115
+ cmd.on( '-g', '--generate', 'Generate Slide Show Templates (using built-in S6 Pack)' ) { opts.generate = true }
116
+
117
+ ## fix:/todo: add generator for quickstart
118
+ cmd.on( '-q', '--quick', 'Generate Quickstart Slide Show Sample') { }
124
119
 
125
- ## todo: add --version
126
120
 
127
- cmd.on( '--version', "Show version" ) do
121
+ cmd.on( '-v', '--version', "Show version" ) do
128
122
  puts Slideshow.generator
129
123
  exit
130
124
  end
125
+
126
+ cmd.on( "--verbose", "Show debug trace" ) do
127
+ logger.datetime_format = "%H:%H:%S"
128
+ logger.level = Logger::DEBUG
129
+ end
130
+
131
131
 
132
132
  cmd.on_tail( "-h", "--help", "Show this message" ) do
133
133
  puts <<EOS
@@ -138,12 +138,13 @@ Slide Show (S9) is a free web alternative to PowerPoint or KeyNote in Ruby
138
138
 
139
139
  Examples:
140
140
  slideshow microformats
141
- slideshow microformats.textile # Process slides using Textile
142
- slideshow microformats.text # Process slides using Markdown
143
- slideshow microformats.rst # Process slides using reStructuredText
141
+ slideshow microformats.text # Process slides using Markdown (#{config.known_markdown_extnames.join(', ')})
142
+ slideshow microformats.textile # Process slides using Textile (#{config.known_textile_extnames.join(', ')})
143
+ slideshow microformats.rst # Process slides using reStructuredText (#{config.known_rest_extnames.join(', ')})
144
144
  slideshow -o slides microformats # Output slideshow to slides folder
145
145
 
146
146
  More examles:
147
+ slideshow -q # Generate quickstart slide show sample
147
148
  slideshow -g # Generate slide show templates using built-in S6 pack
148
149
 
149
150
  slideshow -l # List installed slide show templates
@@ -160,8 +161,6 @@ EOS
160
161
 
161
162
  opt.parse!( args )
162
163
 
163
- config.load
164
-
165
164
  puts Slideshow.generator
166
165
 
167
166
  if opts.list?
@@ -22,12 +22,7 @@ class Config
22
22
 
23
23
  def config_dir
24
24
  unless @config_dir # first time? calculate config_dir value to "cache"
25
-
26
- if opts.config_path
27
- @config_dir = opts.config_path
28
- else
29
- @config_dir = cache_dir
30
- end
25
+ @config_dir = opts.config_path
31
26
 
32
27
  # make sure path exists
33
28
  FileUtils.makedirs( @config_dir ) unless File.directory? @config_dir
@@ -0,0 +1,38 @@
1
+ module Slideshow
2
+
3
+ module ManifestHelper
4
+
5
+ ## shared methods for handling manifest lookups
6
+
7
+ def installed_template_manifest_patterns
8
+ # 1) search ./templates
9
+ # 2) search config_dir/templates
10
+ # 3) search gem/templates
11
+
12
+ builtin_patterns = [
13
+ "#{Slideshow.root}/templates/*.txt"
14
+ ]
15
+ config_patterns = [
16
+ "#{config.config_dir}/templates/*.txt",
17
+ "#{config.config_dir}/templates/*/*.txt"
18
+ ]
19
+ current_patterns = [
20
+ "templates/*.txt",
21
+ "templates/*/*.txt"
22
+ ]
23
+
24
+ patterns = []
25
+ patterns += current_patterns unless Slideshow.root == File.expand_path( '.' ) # don't include working dir if we test code from repo (don't include slideshow/templates)
26
+ patterns += config_patterns
27
+ patterns += builtin_patterns
28
+ end
29
+
30
+ def installed_template_manifests
31
+ ## note: code moved to its own gem, that is, pakman
32
+ ## see https://github.com/geraldb/pakman
33
+
34
+ Pakman::Finder.new( logger ).find_manifests( installed_template_manifest_patterns )
35
+ end
36
+
37
+ end # module Manifest
38
+ end # module Slideshow
@@ -1,3 +1,3 @@
1
1
  module Slideshow
2
- VERSION = '1.1.0'
2
+ VERSION = '1.2.0.beta1'
3
3
  end
metadata CHANGED
@@ -1,13 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: slideshow
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
5
- prerelease:
4
+ hash: -399806770
5
+ prerelease: 6
6
6
  segments:
7
7
  - 1
8
- - 1
8
+ - 2
9
9
  - 0
10
- version: 1.1.0
10
+ - beta
11
+ - 1
12
+ version: 1.2.0.beta1
11
13
  platform: ruby
12
14
  authors:
13
15
  - Gerald Bauer
@@ -15,7 +17,7 @@ autorequire:
15
17
  bindir: bin
16
18
  cert_chain: []
17
19
 
18
- date: 2012-06-17 00:00:00 Z
20
+ date: 2012-06-18 00:00:00 Z
19
21
  dependencies:
20
22
  - !ruby/object:Gem::Dependency
21
23
  name: RedCloth
@@ -66,35 +68,35 @@ dependencies:
66
68
  type: :runtime
67
69
  version_requirements: *id003
68
70
  - !ruby/object:Gem::Dependency
69
- name: fetcher
71
+ name: props
70
72
  prerelease: false
71
73
  requirement: &id004 !ruby/object:Gem::Requirement
72
74
  none: false
73
75
  requirements:
74
76
  - - ">="
75
77
  - !ruby/object:Gem::Version
76
- hash: 27
78
+ hash: 23
77
79
  segments:
78
80
  - 0
79
- - 1
81
+ - 2
80
82
  - 0
81
- version: 0.1.0
83
+ version: 0.2.0
82
84
  type: :runtime
83
85
  version_requirements: *id004
84
86
  - !ruby/object:Gem::Dependency
85
- name: props
87
+ name: pakman
86
88
  prerelease: false
87
89
  requirement: &id005 !ruby/object:Gem::Requirement
88
90
  none: false
89
91
  requirements:
90
92
  - - ">="
91
93
  - !ruby/object:Gem::Version
92
- hash: 23
94
+ hash: 27
93
95
  segments:
94
96
  - 0
95
- - 2
97
+ - 1
96
98
  - 0
97
- version: 0.2.0
99
+ version: 0.1.0
98
100
  type: :runtime
99
101
  version_requirements: *id005
100
102
  - !ruby/object:Gem::Dependency
@@ -151,10 +153,12 @@ files:
151
153
  - config/slideshow.builtin.yml
152
154
  - config/slideshow.yml
153
155
  - lib/slideshow.rb
154
- - lib/slideshow/commands/fetch.rb
155
- - lib/slideshow/commands/gen.rb
156
- - lib/slideshow/commands/gen_templates.rb
157
- - lib/slideshow/commands/list.rb
156
+ - lib/slideshow/cli/commands/fetch.rb
157
+ - lib/slideshow/cli/commands/gen.rb
158
+ - lib/slideshow/cli/commands/gen_templates.rb
159
+ - lib/slideshow/cli/commands/list.rb
160
+ - lib/slideshow/cli/opts.rb
161
+ - lib/slideshow/cli/runner.rb
158
162
  - lib/slideshow/config.rb
159
163
  - lib/slideshow/filters/debug_filter.rb
160
164
  - lib/slideshow/filters/headers_filter.rb
@@ -173,12 +177,10 @@ files:
173
177
  - lib/slideshow/helpers/syntax/uv_helper.rb
174
178
  - lib/slideshow/helpers/table_helper.rb
175
179
  - lib/slideshow/helpers/text_helper.rb
176
- - lib/slideshow/manifest.rb
180
+ - lib/slideshow/manifest_helpers.rb
177
181
  - lib/slideshow/markup/markdown.rb
178
182
  - lib/slideshow/markup/rest.rb
179
183
  - lib/slideshow/markup/textile.rb
180
- - lib/slideshow/opts.rb
181
- - lib/slideshow/runner.rb
182
184
  - lib/slideshow/slide.rb
183
185
  - lib/slideshow/version.rb
184
186
  - templates/s6.txt
@@ -220,12 +222,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
220
222
  required_rubygems_version: !ruby/object:Gem::Requirement
221
223
  none: false
222
224
  requirements:
223
- - - ">="
225
+ - - ">"
224
226
  - !ruby/object:Gem::Version
225
- hash: 3
227
+ hash: 25
226
228
  segments:
227
- - 0
228
- version: "0"
229
+ - 1
230
+ - 3
231
+ - 1
232
+ version: 1.3.1
229
233
  requirements: []
230
234
 
231
235
  rubyforge_project: slideshow
@@ -1,101 +0,0 @@
1
- module Slideshow
2
-
3
- class Fetch
4
-
5
- include Manifest # gets us methods like installed_template_manifests, etc.
6
-
7
- ### fix: remove opts, use config (wrapped!!)
8
-
9
- def initialize( logger, opts, config )
10
- @logger = logger
11
- @opts = opts
12
- @config = config
13
- end
14
-
15
- attr_reader :logger, :opts, :config
16
-
17
- def fetch_file( dest, src )
18
-
19
- ## note: code moved to its own gem, that is, fetcher
20
- ## see https://github.com/geraldb/fetcher
21
-
22
- # nb: in new method src comes first (and dest second - might be optional in the future)
23
- Fetcher::Worker.new( logger ).copy( src, dest )
24
- end
25
-
26
-
27
- def run
28
- logger.debug "fetch_uri=#{opts.fetch_uri}"
29
-
30
- src = opts.fetch_uri
31
-
32
- ## check for builtin shortcut (assume no / or \)
33
- if src.index( '/' ).nil? && src.index( '\\' ).nil?
34
- shortcut = src.clone
35
- src = config.map_fetch_shortcut( src )
36
-
37
- if src.nil?
38
- puts "** Error: No mapping found for fetch shortcut '#{shortcut}'."
39
- return
40
- end
41
- puts " Mapping fetch shortcut '#{shortcut}' to: #{src}"
42
- end
43
-
44
-
45
- # src = 'http://github.com/geraldb/slideshow/raw/d98e5b02b87ee66485431b1bee8fb6378297bfe4/code/templates/fullerscreen.txt'
46
- # src = 'http://github.com/geraldb/sandbox/raw/13d4fec0908fbfcc456b74dfe2f88621614b5244/s5blank/s5blank.txt'
47
- uri = URI.parse( src )
48
-
49
- logger.debug "scheme: #{uri.scheme}, host: #{uri.host}, port: #{uri.port}, path: #{uri.path}"
50
-
51
- dirname = File.dirname( uri.path )
52
- basename = File.basename( uri.path, '.*' ) # e.g. fullerscreen (without extension)
53
- filename = File.basename( uri.path ) # e.g. fullerscreen.txt (with extension)
54
-
55
- logger.debug "dirname: #{dirname}"
56
- logger.debug "basename: #{basename}, filename: #{filename}"
57
-
58
- dlbase = "#{uri.scheme}://#{uri.host}:#{uri.port}#{dirname}"
59
- pkgpath = File.expand_path( "#{config.config_dir}/templates/#{basename}" )
60
-
61
- logger.debug "dlpath: #{dlbase}"
62
- logger.debug "pkgpath: #{pkgpath}"
63
-
64
- FileUtils.makedirs( pkgpath ) unless File.directory? pkgpath
65
-
66
- puts "Fetching template package '#{basename}'"
67
- puts " : from '#{dlbase}'"
68
- puts " : saving to '#{pkgpath}'"
69
-
70
- # download manifest
71
- dest = "#{pkgpath}/#{filename}"
72
-
73
- puts " Downloading manifest '#{filename}'..."
74
-
75
- fetch_file( dest, src )
76
-
77
- manifest = load_manifest_core( dest )
78
-
79
- # download templates listed in manifest
80
- manifest.each do |values|
81
- values[1..-1].each do |file|
82
-
83
- dest = "#{pkgpath}/#{file}"
84
-
85
- # make sure path exists
86
- destpath = File.dirname( dest )
87
- FileUtils.makedirs( destpath ) unless File.directory? destpath
88
-
89
- src = "#{dlbase}/#{file}"
90
-
91
- puts " Downloading template '#{file}'..."
92
- fetch_file( dest, src )
93
- end
94
- end
95
- puts "Done."
96
- end
97
-
98
-
99
- end # class Fetch
100
-
101
- end # module Slideshow
@@ -1,66 +0,0 @@
1
- module Slideshow
2
-
3
- class GenTemplates
4
-
5
- include Manifest # gets us methods like installed_template_manifests, etc.
6
-
7
- ### fix: remove opts, use config (wrapped!!)
8
-
9
- def initialize( logger, opts, config )
10
- @logger = logger
11
- @opts = opts
12
- @config = config
13
- end
14
-
15
- attr_reader :logger, :opts, :config
16
-
17
-
18
-
19
- def with_output_path( dest, output_path )
20
- dest_full = File.expand_path( dest, output_path )
21
- logger.debug "dest_full=#{dest_full}"
22
-
23
- # make sure dest path exists
24
- dest_path = File.dirname( dest_full )
25
- logger.debug "dest_path=#{dest_path}"
26
- FileUtils.makedirs( dest_path ) unless File.directory? dest_path
27
- dest_full
28
- end
29
-
30
-
31
- def run
32
- manifest_name = opts.manifest
33
- logger.debug "manifest=#{manifest_name}"
34
-
35
- manifests = installed_generator_manifests
36
-
37
- # check for builtin generator manifests
38
- matches = manifests.select { |m| m[0] == manifest_name+".gen" }
39
-
40
- if matches.empty?
41
- puts "*** error: unknown template manifest '#{manifest_name}'"
42
- # todo: list installed manifests
43
- exit 2
44
- end
45
-
46
- manifest = load_manifest( matches[0][1] )
47
-
48
- # expand output path in current dir and make sure output path exists
49
- outpath = File.expand_path( opts.output_path )
50
- logger.debug "outpath=#{outpath}"
51
- FileUtils.makedirs( outpath ) unless File.directory? outpath
52
-
53
- manifest.each do |entry|
54
- dest = entry[0]
55
- source = entry[1]
56
-
57
- puts "Copying to #{dest} from #{source}..."
58
- FileUtils.copy( source, with_output_path( dest, outpath ) )
59
- end
60
-
61
- puts "Done."
62
- end
63
-
64
- end # class GenTemplates
65
-
66
- end # class Slideshow
@@ -1,101 +0,0 @@
1
- module Slideshow
2
- module Manifest
3
-
4
- def load_manifest_core( path )
5
- manifest = []
6
-
7
- File.open( path ).readlines.each_with_index do |line,i|
8
- case line
9
- when /^\s*$/
10
- # skip empty lines
11
- when /^\s*#.*$/
12
- # skip comment lines
13
- else
14
- logger.debug "line #{i+1}: #{line.strip}"
15
- values = line.strip.split( /[ <,+]+/ )
16
-
17
- # add source for shortcuts (assumes relative path; if not issue warning/error)
18
- values << values[0] if values.size == 1
19
-
20
- manifest << values
21
- end
22
- end
23
-
24
- manifest
25
- end
26
-
27
- def load_manifest( path )
28
-
29
- filename = path
30
-
31
- puts " Loading template manifest #{filename}..."
32
- manifest = load_manifest_core( filename )
33
-
34
- # post-processing
35
- # normalize all source paths (1..-1) /make full path/add template dir
36
-
37
- templatesdir = File.dirname( path )
38
- logger.debug "templatesdir=#{templatesdir}"
39
-
40
- manifest.each do |values|
41
- (1..values.size-1).each do |i|
42
- values[i] = "#{templatesdir}/#{values[i]}"
43
- logger.debug " path[#{i}]=>#{values[i]}<"
44
- end
45
- end
46
-
47
- manifest
48
- end
49
-
50
- def find_manifests( patterns )
51
- manifests = []
52
-
53
- patterns.each do |pattern|
54
- pattern.gsub!( '\\', '/') # normalize path; make sure all path use / only
55
- logger.debug "Checking #{pattern}"
56
- Dir.glob( pattern ) do |file|
57
- logger.debug " Found manifest: #{file}"
58
- manifests << [ File.basename( file ), file ]
59
- end
60
- end
61
-
62
- manifests
63
- end
64
-
65
- def installed_generator_manifests
66
- # 1) search gem/templates
67
-
68
- builtin_patterns = [
69
- "#{Slideshow.root}/templates/*.txt.gen"
70
- ]
71
-
72
- find_manifests( builtin_patterns )
73
- end
74
-
75
- def installed_template_manifests
76
- # 1) search ./templates
77
- # 2) search config_dir/templates
78
- # 3) search gem/templates
79
-
80
- builtin_patterns = [
81
- "#{Slideshow.root}/templates/*.txt"
82
- ]
83
- config_patterns = [
84
- "#{config.config_dir}/templates/*.txt",
85
- "#{config.config_dir}/templates/*/*.txt"
86
- ]
87
- current_patterns = [
88
- "templates/*.txt",
89
- "templates/*/*.txt"
90
- ]
91
-
92
- patterns = []
93
- patterns += current_patterns unless Slideshow.root == File.expand_path( '.' ) # don't include working dir if we test code from repo (don't include slideshow/templates)
94
- patterns += config_patterns
95
- patterns += builtin_patterns
96
-
97
- find_manifests( patterns )
98
- end
99
-
100
- end # module Manifest
101
- end # module Slideshow