project-generator 0.1.0a

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