project_templater 0.1.0
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/README.md +58 -0
- data/bin/project_templater +10 -0
- data/lib/generators/generator.rb +23 -0
- data/lib/generators/js_project.rb +16 -0
- data/lib/generators/ruby_project.rb +18 -0
- data/lib/generators/sinatra_basic.rb +29 -0
- data/lib/project_templater.rb +26 -0
- metadata +52 -0
data/README.md
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
# Project Templater
|
2
|
+
|
3
|
+
__V0.1.0__
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
```
|
8
|
+
gem install project_templater
|
9
|
+
```
|
10
|
+
|
11
|
+
Adds the `project_templater` executable.
|
12
|
+
|
13
|
+
## Usage
|
14
|
+
|
15
|
+
```
|
16
|
+
project_templater {generator} {path}
|
17
|
+
```
|
18
|
+
|
19
|
+
Templates are listed within `lib/generators`.
|
20
|
+
|
21
|
+
Will default to the PWD if you don't define a path.
|
22
|
+
|
23
|
+
## Examples
|
24
|
+
|
25
|
+
```
|
26
|
+
project_templater sinatra_basic
|
27
|
+
```
|
28
|
+
|
29
|
+
Run the `sinatra_basic` generator and output to the current directory
|
30
|
+
|
31
|
+
```
|
32
|
+
project_templater sinatra_basic foo/
|
33
|
+
```
|
34
|
+
|
35
|
+
Run the `sinatra_basic` generator and output to the `pwd/foo/ directory`.
|
36
|
+
|
37
|
+
## Available Generators
|
38
|
+
- `sinatra_basic`
|
39
|
+
- `js_project`
|
40
|
+
- `ruby_project`
|
41
|
+
|
42
|
+
## Adding a Generator
|
43
|
+
|
44
|
+
These exist within `lib/generators`. Create a new `.rb` file. The class must extend from `Generator`, and you need to define an instance method `run`.
|
45
|
+
|
46
|
+
You have two methods available to you, `make_file` and `make_dir`.
|
47
|
+
|
48
|
+
The best way to do it is to copy an existing one - they are all in `lib/generators`.
|
49
|
+
|
50
|
+
Define a `run` method that will be called. There are two methods available:
|
51
|
+
|
52
|
+
- `make_file` can be called with just the file to create, and optionally a block. Whatever is returned from the block is then stored as the contents of the file.
|
53
|
+
- `make_dir` will create a new directory.
|
54
|
+
|
55
|
+
You can also define a `post_install` method that is run after the `run` method has. You also have access to the `@base` variable, which is the directory the generator was run in.
|
56
|
+
|
57
|
+
|
58
|
+
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require "fileutils"
|
2
|
+
|
3
|
+
class Generator
|
4
|
+
def initialize(base_dir)
|
5
|
+
@base = base_dir
|
6
|
+
unless @base[-1, 1] == "/"
|
7
|
+
@base = @base + "/"
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def post_install
|
12
|
+
end
|
13
|
+
|
14
|
+
def make_file(path, &block)
|
15
|
+
contents = ""
|
16
|
+
contents = block.call if block_given?
|
17
|
+
File.open(@base + path, 'w') {|f| f.write(contents) }
|
18
|
+
end
|
19
|
+
|
20
|
+
def make_dir(path)
|
21
|
+
FileUtils.mkdir_p(@base + path)
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require_relative "./generator.rb"
|
2
|
+
|
3
|
+
class JsProject < Generator
|
4
|
+
def run
|
5
|
+
make_file("package.json")
|
6
|
+
make_file("README.md")
|
7
|
+
make_dir("test")
|
8
|
+
make_dir("src")
|
9
|
+
make_dir("demo")
|
10
|
+
|
11
|
+
end
|
12
|
+
|
13
|
+
def post_install
|
14
|
+
`cd #{@base} && git init`
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require_relative "./generator.rb"
|
2
|
+
|
3
|
+
class RubyProject < Generator
|
4
|
+
def run
|
5
|
+
make_file("Gemfile") {
|
6
|
+
"source 'http://rubygems.org'\ngem 'rspec'"
|
7
|
+
}
|
8
|
+
make_file(".rspec") {
|
9
|
+
"--color"
|
10
|
+
}
|
11
|
+
make_file(".gitignore")
|
12
|
+
make_dir("spec")
|
13
|
+
end
|
14
|
+
|
15
|
+
def post_install
|
16
|
+
`cd #{@base} && git init && bundle`
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require_relative "./generator.rb"
|
2
|
+
|
3
|
+
class SinatraBasic < Generator
|
4
|
+
def run
|
5
|
+
make_file("Gemfile") {
|
6
|
+
"source 'http://rubygems.org'\ngem 'sinatra'"
|
7
|
+
}
|
8
|
+
make_file("app.rb") {
|
9
|
+
"require 'sinatra'"
|
10
|
+
}
|
11
|
+
make_file("config.ru") {
|
12
|
+
"require './app'\nrun Sinatra::Application"
|
13
|
+
}
|
14
|
+
make_file("README.md")
|
15
|
+
|
16
|
+
make_dir("public")
|
17
|
+
make_dir("public/css")
|
18
|
+
make_dir("public/js")
|
19
|
+
make_dir("public/views")
|
20
|
+
make_file("public/css/style.css")
|
21
|
+
make_file("public/js/app.js")
|
22
|
+
make_file("public/views/layout.erb")
|
23
|
+
end
|
24
|
+
|
25
|
+
def post_install
|
26
|
+
`cd #{@base} && git init && bundle`
|
27
|
+
`cd #{@base}/public/js && nodefetch jquery`
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
class String
|
2
|
+
def camel_case
|
3
|
+
return self if self !~ /_/ && self =~ /[A-Z]+.*/
|
4
|
+
split('_').map{|e| e.capitalize}.join
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
8
|
+
|
9
|
+
require "generators/generator.rb"
|
10
|
+
|
11
|
+
class ProjectTemplater
|
12
|
+
def initialize(template)
|
13
|
+
@template = template
|
14
|
+
# load in the right generator
|
15
|
+
require "generators/#{@template}.rb"
|
16
|
+
end
|
17
|
+
|
18
|
+
def run(base_dir)
|
19
|
+
base_dir = Dir.pwd + "/" + (base_dir ||= "")
|
20
|
+
class_name = @template.camel_case
|
21
|
+
instance = Object::const_get(class_name).new(base_dir)
|
22
|
+
instance.run
|
23
|
+
instance.post_install
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
metadata
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: project_templater
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Jack Franklin
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-12-30 00:00:00.000000000 Z
|
13
|
+
dependencies: []
|
14
|
+
description: A gem for creating file and folder structures.
|
15
|
+
email: jack@jackfranklin.net
|
16
|
+
executables:
|
17
|
+
- project_templater
|
18
|
+
extensions: []
|
19
|
+
extra_rdoc_files: []
|
20
|
+
files:
|
21
|
+
- lib/generators/generator.rb
|
22
|
+
- lib/generators/js_project.rb
|
23
|
+
- lib/generators/ruby_project.rb
|
24
|
+
- lib/generators/sinatra_basic.rb
|
25
|
+
- lib/project_templater.rb
|
26
|
+
- bin/project_templater
|
27
|
+
- README.md
|
28
|
+
homepage: http://github.com/jackfranklin/project_templater
|
29
|
+
licenses: []
|
30
|
+
post_install_message:
|
31
|
+
rdoc_options: []
|
32
|
+
require_paths:
|
33
|
+
- lib
|
34
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
35
|
+
none: false
|
36
|
+
requirements:
|
37
|
+
- - ! '>='
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0'
|
40
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
requirements: []
|
47
|
+
rubyforge_project:
|
48
|
+
rubygems_version: 1.8.23
|
49
|
+
signing_key:
|
50
|
+
specification_version: 3
|
51
|
+
summary: Project Templating
|
52
|
+
test_files: []
|