project-generator 0.1.0a

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.
@@ -0,0 +1 @@
1
+ Dot file
@@ -0,0 +1,4 @@
1
+ prompt :title
2
+ prompt :body, "What would you like for the main body text?"
3
+ filter :erb, "*"
4
+ ignore "CHANGELOG.txt"
@@ -0,0 +1 @@
1
+ 3/20/2012 - Created Sample Project
@@ -0,0 +1,23 @@
1
+ <!doctype html>
2
+ <!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7" lang="en"> <![endif]-->
3
+ <!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8" lang="en"> <![endif]-->
4
+ <!--[if IE 8]> <html class="no-js lt-ie9" lang="en"> <![endif]-->
5
+ <!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
6
+ <head>
7
+ <meta charset="utf-8">
8
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
9
+ <title><%=title%></title>
10
+ <meta name="description" content="Sample">
11
+ </head>
12
+ <body>
13
+ <header>
14
+ Header
15
+ </header>
16
+ <div role="main">
17
+ <%=body%>
18
+ </div>
19
+ <footer>
20
+ Footer
21
+ </footer>
22
+ </body>
23
+ </html>
data/bin/pg ADDED
@@ -0,0 +1,57 @@
1
+ #!/usr/bin/env ruby
2
+ bin_dir = File.dirname(__FILE__)
3
+ require File.join(bin_dir, "..", "lib", "pg.rb")
4
+ require "fileutils"
5
+
6
+ # Set up template folder
7
+ templates_path = File.join(Dir.home, ".pg")
8
+ FileUtils.cp_r(File.join(bin_dir, ".pg"), templates_path) unless File.directory? templates_path
9
+
10
+ # Initialize
11
+ @template_path = ARGV[0]
12
+ @template_path = ask "Which project template would you like to use?" if @template_path.nil?
13
+ @template_path = File.join(templates_path, @template_path)
14
+ target = ARGV[1]
15
+ target = ask "Where would you like to build the project?" if target.nil?
16
+ target = File.join(Dir::pwd, target)
17
+
18
+ # And we're off!
19
+ puts "Initializing template \"#{@template_path}\" in directory \"#{target}"
20
+
21
+ # Get files in directory
22
+ @template_files = Dir.glob((File.join @template_path, "*"), File::FNM_DOTMATCH)
23
+
24
+ # Execute configuration script
25
+ config_script = Dir.glob(File.join(@template_path, ".pgconfig.rb"), File::FNM_CASEFOLD).first
26
+ @template_variables = Context.new
27
+ @system_files = [File.join(@template_path, "."), File.join(@template_path, "..")]
28
+ @ignore_files = [] + @system_files;
29
+ @ignore_files << config_script if config_script
30
+ @filter_files = {:erb => []}
31
+ require config_script if config_script
32
+
33
+ # Subtract all files to ignore from the files to filter
34
+ @filter_files.each do |engine, files|
35
+ @filter_files[engine] -= @ignore_files
36
+ end
37
+
38
+ # copy all files
39
+ puts "Copying files"
40
+ FileUtils.cp_r @template_path, target
41
+
42
+ # fix ignored files
43
+ @ignore_files -= @system_files
44
+
45
+ # delete the ignored files
46
+ @ignore_files.each do |file|
47
+ temp = file.gsub(@template_path, target)
48
+ puts "Remove #{temp}"
49
+ FileUtils.remove(temp) if File.file? temp
50
+ FileUtils.remove_dir(temp) if File.directory? temp
51
+ end
52
+
53
+ # run the filters
54
+ run_filters @filter_files, @template_path, target
55
+
56
+ # we're done
57
+ puts "Done!"
@@ -0,0 +1,110 @@
1
+ require "tilt"
2
+
3
+ def ask(question)
4
+ print "#{question} "
5
+ STDIN.gets.strip
6
+ end
7
+
8
+ def prompt(key, question = "#{key.to_s}:")
9
+ value = ask question
10
+ @template_variables.add(key, value)
11
+ end
12
+
13
+ def filter(engine, glob)
14
+ files = Dir.glob(File.join(@template_path, glob), File::FNM_DOTMATCH)
15
+ files.each do |file|
16
+ @filter_files[engine] << file
17
+ end
18
+ end
19
+
20
+ def ignore(glob)
21
+ files = Dir.glob(File.join @template_path, glob)
22
+ files.each do |file|
23
+ @ignore_files << file
24
+ end
25
+ end
26
+
27
+ def run_filters(filter_files, origin, target)
28
+ filter_files.each do |engine, files|
29
+ files.each do |file|
30
+ run_filter engine, file, file.gsub(origin, target)
31
+ end
32
+ end
33
+ end
34
+
35
+ def run_filter(engine, source, target)
36
+ template = get_template(engine, source)
37
+ File.open target, "w" do |file|
38
+ puts "#{engine}: #{source} to #{target}"
39
+ file.write template.render(@template_variables)
40
+ end
41
+ end
42
+
43
+ def get_template(engine, file)
44
+ case engine
45
+ when :erb
46
+ Tilt::ERBTemplate.new(file)
47
+ when :str
48
+ Tilt::StringTemplate.new(file)
49
+ when :erubis
50
+ Tilt::ErubisTemplate.new(file)
51
+ when :haml
52
+ Tilt::HamlTemplate.new(file)
53
+ when :sass
54
+ Tilt::SassTemplate.new(file)
55
+ when :scss
56
+ Tilt::ScssTemplate.new(file)
57
+ when :less
58
+ Tilt::LessTemplate.new(file)
59
+ when :builder
60
+ Tilt::BuilderTemplate.new(file)
61
+ when :liquid
62
+ Tilt::LiquidTemplate.new(file)
63
+ when :rdiscount
64
+ Tilt::RDiscountTemplate.new(file)
65
+ when :redcarpet
66
+ Tilt::RedcarpetTemplate.new(file)
67
+ when :bluecloth
68
+ Tilt::BlueClothTemplate.new(file)
69
+ when :kramdown
70
+ Tilt::KramdownTemplate.new(file)
71
+ when :maruku
72
+ Tilt::MarukuTemplate.new(file)
73
+ when :redcloth
74
+ Tilt::RedClothTemplate.new(file)
75
+ when :rdoc
76
+ Tilt::RDocTemplate.new(file)
77
+ when :radius
78
+ Tilt::RadiusTemplate.new(file)
79
+ when :markaby
80
+ Tilt::MarkabyTemplate.new(file)
81
+ when :nokogiri
82
+ Tilt::NokogiriTemplate.new(file)
83
+ when :coffeescript
84
+ Tilt::CoffeeScriptTemplate.new(file)
85
+ when :creole
86
+ Tilt::CreoleTemplate.new(file)
87
+ when :wikicloth
88
+ Tilt::WikiClothTemplate.new(file)
89
+ when :yajl
90
+ Tilt::YajlTemplate.new(file)
91
+ else
92
+ puts "ERROR: filter #{engine} not supported!"
93
+ puts "HALTING"
94
+ exit
95
+ end
96
+ end
97
+
98
+ class Context
99
+ def initialize
100
+ @storage = Hash.new
101
+ end
102
+
103
+ def add(key, value)
104
+ @storage[key.to_sym] = value
105
+ end
106
+
107
+ def method_missing(key)
108
+ @storage[key]
109
+ end
110
+ end
metadata ADDED
@@ -0,0 +1,69 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: project-generator
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0a
5
+ prerelease: 5
6
+ platform: ruby
7
+ authors:
8
+ - Kenneth Powers
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-03-20 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: tilt
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ description: A project generation script.
31
+ email:
32
+ - mail@kenpowers.net
33
+ executables:
34
+ - pg
35
+ extensions: []
36
+ extra_rdoc_files: []
37
+ files:
38
+ - lib/pg.rb
39
+ - bin/pg
40
+ - bin/.pg/sample/.dotfile
41
+ - bin/.pg/sample/.pgconfig.rb
42
+ - bin/.pg/sample/CHANGELOG.txt
43
+ - bin/.pg/sample/index.html
44
+ homepage: http://kenpowers.net
45
+ licenses: []
46
+ post_install_message:
47
+ rdoc_options: []
48
+ require_paths:
49
+ - lib
50
+ required_ruby_version: !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ! '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ required_rubygems_version: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>'
60
+ - !ruby/object:Gem::Version
61
+ version: 1.3.1
62
+ requirements: []
63
+ rubyforge_project:
64
+ rubygems_version: 1.8.19
65
+ signing_key:
66
+ specification_version: 3
67
+ summary: A project generation script. Projects are generated using templates stored
68
+ in the user's home directory.
69
+ test_files: []