greg 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6ce205a1383267a783a85edffb4caddd38698ab3
4
- data.tar.gz: 53b65e3e6061c23c28aa4c6b4e2262ab554b7499
3
+ metadata.gz: 43d86623060138705711092c127b214b7603dedc
4
+ data.tar.gz: 3d34ed47a7b3db7f901993f7173c2065c1465590
5
5
  SHA512:
6
- metadata.gz: 98557f0cd97fa4b2947f45487a0d31c943c48601cd0e23997915fc93b19781d3c924c7531e1a431e6ed8c04fc0c93deaeb7084c3af5860af1fcbba6b4330dc2e
7
- data.tar.gz: 998427235a0c5e6d1f5cf4c820b47214330c4290d64867ce13d80559f20ef116c07ebc67fe39600210cdc60822e6992c27dbac7b53b4cf76541796b167078ea8
6
+ metadata.gz: fa23c9e295dd50935e69688c2a3429a68e20668b634d613dbe942e4048858ffa72e6f536fb1b4569c3ded8295f0947fbb7712f8737fa50d21f4e739a21d96222
7
+ data.tar.gz: 0f765367414ccf8afe1ef527647cfb4a4ec796fd140dd246a86bfa86d5d7033b0a001ae65a548458555a461aea80a0612e2d9ed5b939a38149f683ef409c56b6
data/README.md CHANGED
@@ -1,26 +1,132 @@
1
1
  # Greg
2
2
 
3
- TODO: Write a gem description
3
+ Simple code generator
4
4
 
5
- ## Installation
5
+ ## Introduction
6
+
7
+ Greg is a simple code generator. It generates code based on templates.
8
+
9
+ ## Usage
10
+
11
+ To create an app use the `greg` command as follows:
12
+
13
+ $ greg <app name> --template=<template name>
14
+
15
+ This will create your app on the current directory.
16
+
17
+ For example, to create a Roda application:
18
+
19
+ ```bash
20
+ $ pwd
21
+ /tmp/code
22
+ $ ls
23
+ $ greg my_awesome_app --template=roda_app
24
+ Creating Project:
25
+ [create] .env
26
+ [create] routes/
27
+ [create] routes/main.rb
28
+ [create] spec/
29
+ [create] spec/my_awesome_app/
30
+ [create] spec/spec_helper.rb
31
+ [create] spec/my_awesome_app_spec.rb
32
+ [create] config.ru
33
+ [create] Gemfile
34
+ [create] public/
35
+ [create] my_awesome_app.rb
36
+ [create] views/
37
+ [create] views/welcome.haml
38
+ [create] views/layout.haml
39
+ [create] assets/
40
+ [create] assets/js/
41
+ [create] assets/js/some_file.coffee
42
+ [create] assets/css/
43
+ [create] assets/css/some_file.scss
44
+ %
45
+ $ ls
46
+ my_awesome_app
47
+ $ ls my_awesome_app
48
+ assets config.ru Gemfile my_awesome_app.rb public routes spec views
49
+ $
50
+ ```
51
+
52
+ To get a list of templates you can use the `--list` flag
53
+
54
+ $ greg --list
55
+
56
+ To install a template (mus be listed under "Available templates" on the `--list`):
57
+
58
+ $ greg --install=<template name>
59
+
60
+ For example:
61
+
62
+ $ greg --install=roda_app
63
+
64
+ ## Creating you own template
65
+
66
+ The first thing you probably want to do is get some boilerplate in place:
6
67
 
7
- Add this line to your application's Gemfile:
68
+ $ greg my_template --template=template
69
+
70
+ This will create a new directory called `my_template` under `~/.greg_templates/`.
71
+ Inside, you'll find the `my_template_generator.rb` file. That's where all the logic for the generator goes.
72
+
73
+ Now you just need to define a method called `#files`, which should return an array containing all the needed files to be created.
74
+
75
+ The easiest way to get started is using `Greg::FileTreeTemplate`, like this:
8
76
 
9
77
  ```ruby
10
- gem 'greg'
78
+ class MyTemplateGenerator < Greg::Generator
79
+ def files
80
+ [
81
+ Greg::FileTreeTemplate.new("templates"),
82
+ ]
83
+ end
84
+ end
11
85
  ```
12
86
 
13
- And then execute:
87
+ And under `~/.greg_templates/my_template/templates/` put all the template files. This will compy the `templates` subdirectory almost verbatim to the generated application.
14
88
 
15
- $ bundle
89
+ Notice I said "almost verbatim" and that's because we have an ace under our sleeves.
90
+ Normally, we want to name files with some name different than just 'app.rb' or 'my_app.whatever'. In that case, instead of naming the file like that, you can use the `@APP_NAME@` "variable".
91
+ If you have the following tree:
16
92
 
17
- Or install it yourself as:
93
+ ```
94
+ ~/.greg_templates/foo/templates/
95
+ ├── @APP_NAME@.rb
96
+ └── spec
97
+ ├── @APP_NAME@_spec.rb
98
+ ├── @TEMPLATE_NAME@_spec.rb
99
+ └── spec_helper.rb
100
+ ```
18
101
 
19
- $ gem install greg
102
+ When you run
20
103
 
21
- ## Usage
104
+ $ greg my_cool_app --template=foo
22
105
 
23
- TODO: Write usage instructions here
106
+ the resulting tree will be:
107
+
108
+ ```
109
+ ~/.greg_templates/foo/templates/
110
+ ├── my_cool_app.rb
111
+ └── spec
112
+ ├── my_cool_app_spec.rb
113
+ ├── foo_spec.rb
114
+ └── spec_helper.rb
115
+ ```
116
+
117
+ You also have some variables to use inside the file contents. The files will be rendered using ERB and you have the following methods available:
118
+ (assuming the app name is again `my_cool_app`)
119
+
120
+ | variable | exported value |
121
+ | ------------- |:--------------:|
122
+ | app_name | my_cool_app |
123
+ | app_clas_name | MyCoolApp |
124
+
125
+ ## Installation
126
+
127
+ You can install Greg by running
128
+
129
+ $ gem install greg
24
130
 
25
131
  ## Contributing
26
132
 
data/bin/greg CHANGED
@@ -19,20 +19,54 @@ Options:
19
19
  Installing a template
20
20
  greg --install=<template-name> [--path=<template-path>]
21
21
  greg -i <template-name> [--path=<template-path>]
22
- EOF
23
22
 
23
+ Listing templates
24
+ greg --list
25
+ EOF
24
26
  puts usage
25
27
  exit(0)
26
28
  end
27
29
 
30
+ require "greg"
31
+
32
+ if options[:list]
33
+ require "json"
34
+
35
+ installed_templates = `ls #{Greg.templates_dir}`.split("\n")
36
+ remote_templates = begin
37
+ JSON.parse(`curl https://api.github.com/orgs/GregTemplates/repos`).map {|i|i["name"]}
38
+ rescue
39
+ []
40
+ end
41
+
42
+
43
+ available_templates = remote_templates - ["greg", *installed_templates]
44
+
45
+ puts available_templates
46
+ msg = []
47
+ msg << "Installed templates:"
48
+ msg << installed_templates.map { |l| " * #{l}" }
49
+ msg << ""
50
+ if available_templates.any?
51
+ msg << "Available templates:"
52
+ msg << available_templates.map { |l| " * #{l}" }
53
+ end
54
+ puts msg.join("\n")
55
+
56
+ exit(0)
57
+ end
58
+
28
59
  if options[:i] || options[:install]
60
+ i = options.delete(:install)
61
+ i ||= options.delete(:i)
62
+ options[:template] ||= i
29
63
  require "greg/template_installer"
30
- installer = Greg::TemplateInstaller.new(options).install
64
+ installer = Greg::TemplateInstaller.new(**options).install
65
+
31
66
  exit(0)
32
67
  end
33
68
 
34
69
  begin
35
- require "greg"
36
70
 
37
71
  templates_dir = options.delete(:templates_dir)
38
72
  Greg.templates_dir = templates_dir if templates_dir
@@ -9,7 +9,7 @@ Gem::Specification.new do |spec|
9
9
  spec.authors = ["Federico Iachetti"]
10
10
  spec.email = ["iachetti.federico@gmail.com"]
11
11
  spec.summary = %q{Simple generator.}
12
- spec.description = %q{Simple generator.}
12
+ spec.description = %q{Simple code generator.}
13
13
  spec.homepage = "https://github.com/iachettifederico/greg"
14
14
  spec.license = "MIT"
15
15
 
@@ -13,6 +13,15 @@ module Greg
13
13
  @generator ||= get_generator(**options)
14
14
  end
15
15
 
16
+ def self.templates_dir
17
+ @templates_dir ||= Pathname("~/.greg_templates").expand_path.to_s
18
+ end
19
+
20
+ def self.templates_dir=(new_dir)
21
+ @templates_dir = Pathname(new_dir).expand_path.to_s
22
+ end
23
+
24
+ private
16
25
  def self.get_generator(**options) #name:, template_name: , output_directory: ".", force: false)
17
26
  template_name = options[:template_name]
18
27
  generator_name = "#{template_name}_generator"
@@ -27,12 +36,4 @@ module Greg
27
36
  generator_class.new( **options )
28
37
  end
29
38
 
30
- def self.templates_dir
31
- @templates_dir ||= Pathname("~/.greg_templates").expand_path.to_s
32
- end
33
-
34
- def self.templates_dir=(new_dir)
35
- @templates_dir = Pathname(new_dir).expand_path.to_s
36
- end
37
-
38
39
  end
@@ -1,5 +1,20 @@
1
1
  module Greg
2
2
  class TemplateInstaller
3
-
3
+ attr_reader :template
4
+ attr_reader :templates_dir
5
+ def initialize(template:, templates_dir: Greg.templates_dir)
6
+ raise "greg is not a template" if template == "greg"
7
+ @template = template
8
+ @templates_dir = templates_dir
9
+ end
10
+ def install
11
+ output_dir = "#{templates_dir}/#{template}"
12
+ `rm -rf #{output_dir}`
13
+ command = %W[git clone git@github.com:GregTemplates/#{template}.git #{output_dir}]
14
+ puts command.join " "
15
+ IO.popen(command) do |out|
16
+ out.read.each_line {|l| puts l}
17
+ end
18
+ end
4
19
  end
5
20
  end
@@ -7,7 +7,6 @@ module Greg
7
7
  @templates ||= templates
8
8
  end
9
9
 
10
- #def each(&block)
11
10
  def create!
12
11
  iterate_tree(templates) do |entry|
13
12
  puts entry.msg if entry.msg
@@ -1,3 +1,3 @@
1
1
  module Greg
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: greg
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Federico Iachetti
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-22 00:00:00.000000000 Z
11
+ date: 2015-02-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -80,7 +80,7 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: 0.1.6
83
- description: Simple generator.
83
+ description: Simple code generator.
84
84
  email:
85
85
  - iachetti.federico@gmail.com
86
86
  executables: