pakman 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.markdown +43 -2
- data/lib/pakman/cli/commands/list.rb +6 -2
- data/lib/pakman/cli/helpers.rb +6 -1
- data/lib/pakman/copier.rb +14 -3
- data/lib/pakman/fetcher.rb +17 -12
- data/lib/pakman/finder.rb +23 -4
- data/lib/pakman/version.rb +1 -1
- metadata +4 -4
data/README.markdown
CHANGED
@@ -2,10 +2,51 @@
|
|
2
2
|
|
3
3
|
* [geraldb.github.com/pakman](http://geraldb.github.com/pakman)
|
4
4
|
|
5
|
-
## Usage
|
5
|
+
## Usage - Ruby Code
|
6
6
|
|
7
|
-
|
7
|
+
Fetch a template pack:
|
8
8
|
|
9
|
+
```ruby
|
10
|
+
Pakman::Fetcher.new( logger ).fetch_pak( src, pakpath )
|
11
|
+
```
|
12
|
+
|
13
|
+
Copy a template pack from your cache:
|
14
|
+
|
15
|
+
```ruby
|
16
|
+
Pakman::Copier.new( logger ).copy_pak( src, pakpath )
|
17
|
+
```
|
18
|
+
|
19
|
+
List all template packs in your cache (using passed in search path):
|
20
|
+
|
21
|
+
```ruby
|
22
|
+
patterns = [
|
23
|
+
"#{File.expand_path('~/.pak')}/*.txt",
|
24
|
+
"#{File.expand_path('~/.pak')}/*/*.txt",
|
25
|
+
"*.txt",
|
26
|
+
"*/*.txt"
|
27
|
+
]
|
28
|
+
|
29
|
+
Pakman::Finder.new( logger ).find_manifests( patterns )
|
30
|
+
```
|
31
|
+
|
32
|
+
|
33
|
+
## Usage - Command Line
|
34
|
+
|
35
|
+
The `pakman` gem includes a little command line tool. Try `pakman -h` for details:
|
36
|
+
|
37
|
+
```
|
38
|
+
pakman - Lets you manage template packs.
|
39
|
+
|
40
|
+
Usage: pakman [options]
|
41
|
+
-f, --fetch URI Fetch Templates
|
42
|
+
-t, --template MANIFEST Generate Templates
|
43
|
+
-l, --list List Installed Templates
|
44
|
+
-c, --config PATH Configuration Path (default is ~/.pak)
|
45
|
+
-o, --output PATH Output Path (default is .)
|
46
|
+
-v, --version Show version
|
47
|
+
--verbose Show debug trace
|
48
|
+
-h, --help Show this message
|
49
|
+
```
|
9
50
|
|
10
51
|
## Install
|
11
52
|
|
@@ -21,8 +21,12 @@ class List
|
|
21
21
|
end
|
22
22
|
puts ' include:'
|
23
23
|
|
24
|
-
manifests.
|
25
|
-
puts "
|
24
|
+
if manifests.empty?
|
25
|
+
puts " -- none --"
|
26
|
+
else
|
27
|
+
manifests.each do |manifest|
|
28
|
+
puts "%16s (%s)" % [manifest[0], manifest[1]]
|
29
|
+
end
|
26
30
|
end
|
27
31
|
end
|
28
32
|
|
data/lib/pakman/cli/helpers.rb
CHANGED
@@ -26,7 +26,12 @@ module ManifestHelper
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def installed_template_manifests
|
29
|
-
|
29
|
+
excludes = [
|
30
|
+
"Manifest.txt",
|
31
|
+
"*/Manifest.txt"
|
32
|
+
]
|
33
|
+
|
34
|
+
Finder.new( logger ).find_manifests( installed_template_manifest_patterns, excludes )
|
30
35
|
end
|
31
36
|
|
32
37
|
end # module ManifestHelper
|
data/lib/pakman/copier.rb
CHANGED
@@ -10,26 +10,37 @@ class Copier
|
|
10
10
|
|
11
11
|
def copy_pak( manifestsrc, pakpath )
|
12
12
|
|
13
|
+
start = Time.now
|
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', '' )
|
19
|
+
|
20
|
+
puts "Copying template pack '#{pakname}'"
|
21
|
+
|
13
22
|
manifest = Manifest.load_file( logger, manifestsrc )
|
14
23
|
|
15
24
|
# expand output path in current dir (if relative) and make sure output path exists
|
16
25
|
outpath = File.expand_path( pakpath )
|
17
26
|
logger.debug "outpath=#{outpath}"
|
18
|
-
FileUtils.makedirs( outpath ) unless File.directory? outpath
|
27
|
+
FileUtils.makedirs( outpath ) unless File.directory?( outpath )
|
19
28
|
|
20
29
|
manifest.each do |entry|
|
21
30
|
dest = entry[0]
|
22
31
|
source = entry[1]
|
23
32
|
|
24
|
-
puts "Copying to #{dest} from #{source}..."
|
33
|
+
puts " Copying to #{dest} from #{source}..."
|
25
34
|
FileUtils.copy( source, with_output_path( dest, outpath ) )
|
26
35
|
end
|
27
36
|
|
28
|
-
puts "Done."
|
37
|
+
puts "Done (in #{Time.now-start} s)."
|
29
38
|
end # method copy_pak
|
30
39
|
|
31
40
|
private
|
32
41
|
|
42
|
+
############################
|
43
|
+
## fix/todo: cleanup needed
|
33
44
|
## fix: remove with_output_path helper (code it directly w/o helper)
|
34
45
|
|
35
46
|
def with_output_path( dest, output_path )
|
data/lib/pakman/fetcher.rb
CHANGED
@@ -11,6 +11,8 @@ class Fetcher
|
|
11
11
|
|
12
12
|
def fetch_pak( manifestsrc, pakpath )
|
13
13
|
|
14
|
+
start = Time.now
|
15
|
+
|
14
16
|
# src = 'http://github.com/geraldb/slideshow/raw/d98e5b02b87ee66485431b1bee8fb6378297bfe4/code/templates/fullerscreen.txt'
|
15
17
|
# src = 'http://github.com/geraldb/sandbox/raw/13d4fec0908fbfcc456b74dfe2f88621614b5244/s5blank/s5blank.txt'
|
16
18
|
uri = URI.parse( manifestsrc )
|
@@ -18,22 +20,25 @@ class Fetcher
|
|
18
20
|
logger.debug "scheme: #{uri.scheme}, host: #{uri.host}, port: #{uri.port}, path: #{uri.path}"
|
19
21
|
|
20
22
|
dirname = File.dirname( uri.path )
|
21
|
-
basename = File.basename( uri.path, '.*' ) # e.g. fullerscreen (without extension)
|
22
23
|
filename = File.basename( uri.path ) # e.g. fullerscreen.txt (with extension)
|
23
24
|
|
24
|
-
|
25
|
-
|
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', '' )
|
29
|
+
|
30
|
+
logger.debug "dirname >#{dirname}<"
|
31
|
+
logger.debug "pakname >#{pakname}<, filename >#{filename}<"
|
26
32
|
|
27
33
|
dlbase = "#{uri.scheme}://#{uri.host}:#{uri.port}#{dirname}"
|
28
|
-
|
29
34
|
logger.debug "dlpath: #{dlbase}"
|
30
35
|
logger.debug "pakpath: #{pakpath}"
|
31
|
-
|
32
|
-
FileUtils.makedirs( pakpath ) unless File.directory? pakpath
|
33
|
-
|
34
|
-
puts "Fetching template
|
35
|
-
puts "
|
36
|
-
puts "
|
36
|
+
|
37
|
+
FileUtils.makedirs( pakpath ) unless File.directory?( pakpath )
|
38
|
+
|
39
|
+
puts "Fetching template pack '#{pakname}'"
|
40
|
+
puts " from '#{dlbase}'"
|
41
|
+
puts " saving to '#{pakpath}'"
|
37
42
|
|
38
43
|
# download manifest
|
39
44
|
dest = "#{pakpath}/#{filename}"
|
@@ -52,7 +57,7 @@ class Fetcher
|
|
52
57
|
|
53
58
|
# make sure path exists
|
54
59
|
destpath = File.dirname( dest )
|
55
|
-
FileUtils.makedirs( destpath ) unless File.directory? destpath
|
60
|
+
FileUtils.makedirs( destpath ) unless File.directory?( destpath )
|
56
61
|
|
57
62
|
src = "#{dlbase}/#{file}"
|
58
63
|
|
@@ -60,7 +65,7 @@ class Fetcher
|
|
60
65
|
fetch_file( src, dest )
|
61
66
|
end
|
62
67
|
end
|
63
|
-
puts "Done."
|
68
|
+
puts "Done (in #{Time.now-start} s)."
|
64
69
|
end # method fetch_pak
|
65
70
|
|
66
71
|
private
|
data/lib/pakman/finder.rb
CHANGED
@@ -8,20 +8,39 @@ class Finder
|
|
8
8
|
@logger = logger
|
9
9
|
end
|
10
10
|
|
11
|
-
def find_manifests( patterns )
|
11
|
+
def find_manifests( patterns, excludes=[] )
|
12
12
|
manifests = []
|
13
13
|
|
14
14
|
patterns.each do |pattern|
|
15
15
|
pattern.gsub!( '\\', '/') # normalize path; make sure all path use / only
|
16
|
-
logger.debug "Checking
|
16
|
+
logger.debug "Checking >#{pattern}<"
|
17
17
|
Dir.glob( pattern ) do |file|
|
18
|
-
logger.debug " Found manifest
|
19
|
-
|
18
|
+
logger.debug " Found manifest candidate >#{file}<"
|
19
|
+
if File.directory?( file ) # NB: do not include directories
|
20
|
+
logger.debug " Skipping match; it's a directory"
|
21
|
+
else
|
22
|
+
unless exclude?( file, excludes ) # check for excludes; skip if excluded
|
23
|
+
logger.debug " Adding match >#{file}<"
|
24
|
+
manifests << [ File.basename( file ), file ]
|
25
|
+
end
|
26
|
+
end
|
20
27
|
end
|
21
28
|
end
|
22
29
|
|
23
30
|
manifests
|
24
31
|
end
|
32
|
+
|
33
|
+
private
|
34
|
+
def exclude?( file, excludes )
|
35
|
+
excludes.each do |pattern|
|
36
|
+
## todo: FNM_DOTMATCH helps or not?? (make up some tests??)
|
37
|
+
if File.fnmatch?( pattern, file, File::FNM_CASEFOLD | File::FNM_DOTMATCH )
|
38
|
+
logger.debug " Skipping match; it's excluded by pattern >#{pattern}<"
|
39
|
+
return true
|
40
|
+
end
|
41
|
+
end
|
42
|
+
false
|
43
|
+
end
|
25
44
|
|
26
45
|
end # class Finder
|
27
46
|
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: 23
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
8
|
+
- 2
|
9
9
|
- 0
|
10
|
-
version: 0.
|
10
|
+
version: 0.2.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-19 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: fetcher
|