gtl 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +1 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +18 -0
- data/README.md +28 -0
- data/Rakefile +1 -0
- data/TODO +1 -0
- data/bin/gtl +9 -0
- data/lib/gem-template.rb +6 -0
- data/lib/gem-template/cli.rb +12 -0
- data/lib/gem-template/engine.rb +218 -0
- data/lib/gem-template/render.rb +10 -0
- data/lib/gem-template/templates/bin_exe +9 -0
- data/lib/gem-template/templates/c_ext_c +9 -0
- data/lib/gem-template/templates/c_ext_h +10 -0
- data/lib/gem-template/templates/extconf_tmpl +38 -0
- data/lib/gem-template/templates/gem_lib +3 -0
- data/lib/gem-template/templates/gem_version +3 -0
- data/lib/gem-template/templates/gemfile +2 -0
- data/lib/gem-template/templates/gemspec +32 -0
- data/lib/gem-template/templates/gpl_license +674 -0
- data/lib/gem-template/templates/rakefile +22 -0
- data/lib/gem-template/templates/readme_markdown +1 -0
- data/lib/gem-template/templates/spec_file +4 -0
- data/lib/gem-template/templates/spec_helper +18 -0
- data/lib/gem-template/version.rb +3 -0
- data/rbgem.gemspec +25 -0
- metadata +99 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: c5bd0ea0fbc3a4fa619a3031fc245f7b4dc98e5e
|
4
|
+
data.tar.gz: 10436bdcaf9dab7f12d4edf550ed9d95b6035f46
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 3d5abb6ab85ef7f8783c6907c3637295859ca6ccd090a9d870759e9dab765137d56d686f2bb59dc602783e47ef07bd6723dbcb10116d6dff92af39bf77dbd0f6
|
7
|
+
data.tar.gz: 407b875e2a26125027a7a0c0d7bf5cfe46acf62f29efe08406e71dc7fea4bd0082dcfa507f68d22238b5045aafe58f481e3e423c4b64ed9894cf655405f2215a
|
data/.gitignore
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
pkg/
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
data/README.md
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# Ruby gem template
|
2
|
+
|
3
|
+
## Installation
|
4
|
+
|
5
|
+
`gem install gem-template`
|
6
|
+
|
7
|
+
## Usage
|
8
|
+
|
9
|
+
```zsh
|
10
|
+
> bin/gt
|
11
|
+
Commands:
|
12
|
+
gt help [COMMAND] # Describe available commands or one specific command
|
13
|
+
gt new NAME # Create a new Gem by passing options
|
14
|
+
```
|
15
|
+
|
16
|
+
### Create a new gem at a given location
|
17
|
+
|
18
|
+
|
19
|
+
`-b` specifies a base, to install to `default: .`
|
20
|
+
|
21
|
+
```zsh
|
22
|
+
> bin/gt new GemName -b ~/Documents/new-gem
|
23
|
+
|
24
|
+
|
25
|
+
|
26
|
+
```
|
27
|
+
|
28
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'bundler/gem_tasks'
|
data/bin/gtl
ADDED
data/lib/gem-template.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'thor'
|
2
|
+
module GemTemplate
|
3
|
+
class CLI < Thor
|
4
|
+
|
5
|
+
|
6
|
+
desc "new NAME", "Create a new Gem by passing options"
|
7
|
+
method_option :base, type: :string, required: false, default: '.', aliases: '-b'
|
8
|
+
def new(name)
|
9
|
+
Engine.new(name: name, base: options[:base]).create
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,218 @@
|
|
1
|
+
require 'active_support/inflector'
|
2
|
+
require 'fileutils'
|
3
|
+
require 'gem-template/render'
|
4
|
+
module GemTemplate
|
5
|
+
class Engine
|
6
|
+
|
7
|
+
STRUCT = [
|
8
|
+
{
|
9
|
+
name: 'spec',
|
10
|
+
type: 'folder',
|
11
|
+
sub: [
|
12
|
+
{name: 'spec_helper.rb', type: 'file',content: 'spec_helper'},
|
13
|
+
{name: '%s', type: 'folder',sub: [
|
14
|
+
{name: '%s_spec.rb', type: 'file', content: 'spec_file'}
|
15
|
+
]}
|
16
|
+
]
|
17
|
+
},
|
18
|
+
{
|
19
|
+
name: 'lib',
|
20
|
+
type: 'folder',
|
21
|
+
sub: [
|
22
|
+
{name: '%s.rb', type: 'file', content: 'gem_lib', unless: "ext?"},
|
23
|
+
{name: '%s', type: 'folder', sub: [
|
24
|
+
{name: 'version.rb', type: 'file',content: 'gem_version'}
|
25
|
+
]}
|
26
|
+
]
|
27
|
+
},
|
28
|
+
{
|
29
|
+
name: 'ext',
|
30
|
+
if: "ext?",
|
31
|
+
type: 'folder',
|
32
|
+
sub: [
|
33
|
+
{
|
34
|
+
name: '%s',
|
35
|
+
type: 'folder',
|
36
|
+
sub: [
|
37
|
+
{name: 'extconf.rb', type: 'file', content: 'extconf_tmpl'},
|
38
|
+
{name: '%s.c', type: 'file', content: 'c_ext_c'},
|
39
|
+
{name: '%s.h', type: 'file', content: 'c_ext_h'}
|
40
|
+
]}
|
41
|
+
]
|
42
|
+
},
|
43
|
+
{
|
44
|
+
name: 'bin',
|
45
|
+
if: "bin?",
|
46
|
+
type: 'folder',
|
47
|
+
sub: [
|
48
|
+
{name: '%s', type: 'file', content: 'bin_exe', mode: 0755}
|
49
|
+
]
|
50
|
+
},
|
51
|
+
{
|
52
|
+
name: '%s.gemspec',
|
53
|
+
type: 'file',
|
54
|
+
content: 'gemspec'
|
55
|
+
},
|
56
|
+
{
|
57
|
+
name: 'Gemfile',
|
58
|
+
type: 'file',
|
59
|
+
content: 'gemfile'
|
60
|
+
},
|
61
|
+
{
|
62
|
+
name: 'Rakefile',
|
63
|
+
type: 'file',
|
64
|
+
content: 'rakefile'
|
65
|
+
},
|
66
|
+
{
|
67
|
+
name: 'LICENSE',
|
68
|
+
type: 'file',
|
69
|
+
content: 'gpl_license'
|
70
|
+
},
|
71
|
+
{
|
72
|
+
name: 'README.md',
|
73
|
+
type: 'file',
|
74
|
+
content: 'readme_markdown'
|
75
|
+
}
|
76
|
+
]
|
77
|
+
|
78
|
+
|
79
|
+
def initialize(params = {})
|
80
|
+
|
81
|
+
# Required params
|
82
|
+
# :rbgem_name => 'mruby-hogehoge',
|
83
|
+
# :license => 'MIT',
|
84
|
+
# :github_user => 'matsumoto-r',
|
85
|
+
|
86
|
+
# Optional params (auto complete from Required data)
|
87
|
+
# :rbgem_prefix => '.',
|
88
|
+
# :rbgem_type => 'class', # not yet
|
89
|
+
# :class_name => 'Hogehoge',
|
90
|
+
# :author => 'mruby-hogehoge developers',
|
91
|
+
|
92
|
+
raise "Base is empty" unless params[:base]
|
93
|
+
@base = params[:base]
|
94
|
+
@modname = params[:name].camelize
|
95
|
+
@gemname = params[:name].underscore.to_sym
|
96
|
+
@params = params
|
97
|
+
@params.merge!(mod_name: @modname, gem_name: @gemname)
|
98
|
+
@params.merge!(git_parameters)
|
99
|
+
@render = Render.new(@params)
|
100
|
+
|
101
|
+
#raise "gem_name is nil" if params[:rbgem_name].nil?
|
102
|
+
end
|
103
|
+
|
104
|
+
def cra(lop=STRUCT,path=[])
|
105
|
+
lop.each do |index|
|
106
|
+
if index[:type] == 'folder' && index.has_key?(:sub)
|
107
|
+
path << index[:name] % @gemname
|
108
|
+
pat = File.join(@base,path)
|
109
|
+
if File.exists?(pat)
|
110
|
+
puts "\033[33mexisting folder: #{pat}\033[0m"
|
111
|
+
else
|
112
|
+
FileUtils.mkdir_p(pat)
|
113
|
+
puts "\033[32mcreating folder: #{pat}\033[0m"
|
114
|
+
end
|
115
|
+
pt = path.dup
|
116
|
+
path = []
|
117
|
+
cra(index[:sub],pt) unless @deep_skip
|
118
|
+
else
|
119
|
+
if index[:type] == 'folder'
|
120
|
+
path << index[:name]
|
121
|
+
pat = File.join(path)
|
122
|
+
FileUtils.mkdir_p(pat)
|
123
|
+
end
|
124
|
+
if index[:type] == 'file'
|
125
|
+
pch = path.dup
|
126
|
+
pch << index[:name] % @gemname
|
127
|
+
pat = File.join(@base,pch)
|
128
|
+
if File.exist?(pat)
|
129
|
+
puts "\033[33mexisting file: #{pat}\033[0m"
|
130
|
+
else
|
131
|
+
FileUtils.touch(pat)
|
132
|
+
puts "\033[32mcreating file: #{pat}\033[0m"
|
133
|
+
end
|
134
|
+
if File.zero?(pat)
|
135
|
+
puts "\033[32m > filling file\033[0m"
|
136
|
+
File.write(pat, self.send(index[:content]))
|
137
|
+
end
|
138
|
+
if index[:mode]
|
139
|
+
puts "\033[32m > chmod file to #{index[:mode]}\033[0m"
|
140
|
+
File.chmod(index[:mode], pat)
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
def create(&block)
|
148
|
+
cra
|
149
|
+
puts
|
150
|
+
print_next
|
151
|
+
end
|
152
|
+
def print_next
|
153
|
+
if bundle?
|
154
|
+
inprintl "Running bundler"
|
155
|
+
`cd #{@base} && bundle install`
|
156
|
+
inprintl "\033[32mBundler complete\033[0m"
|
157
|
+
end
|
158
|
+
puts
|
159
|
+
if File.exists?(File.join(@base, '.git'))
|
160
|
+
inprintl "\033[33mNot executing git init\033[0m"
|
161
|
+
else
|
162
|
+
inprintl "\033[32mExecuting git init\033[0m"
|
163
|
+
git_exec("init .")
|
164
|
+
git_exec("add .")
|
165
|
+
git_exec("commit -am 'initial import'")
|
166
|
+
end
|
167
|
+
inprint "Next create a repository on GitHub"
|
168
|
+
|
169
|
+
end
|
170
|
+
|
171
|
+
def git_exec(cmd)
|
172
|
+
`cd #{@base};git #{cmd}`
|
173
|
+
end
|
174
|
+
|
175
|
+
def inprint(text)
|
176
|
+
puts "\n\t > #{text}"
|
177
|
+
end
|
178
|
+
|
179
|
+
def inprintl(text)
|
180
|
+
print "\r"
|
181
|
+
print "\t > #{text}"
|
182
|
+
end
|
183
|
+
|
184
|
+
def ext?
|
185
|
+
!!@params[:with_ext]
|
186
|
+
end
|
187
|
+
def bin?
|
188
|
+
!!@params[:with_bin]
|
189
|
+
end
|
190
|
+
|
191
|
+
def bundle?
|
192
|
+
!@params[:no_bundle]
|
193
|
+
end
|
194
|
+
|
195
|
+
def git_parameters
|
196
|
+
usr = `git config user.name`.chomp
|
197
|
+
mail = `git config user.email`.chomp
|
198
|
+
{git_user: usr, git_mail: mail}
|
199
|
+
end
|
200
|
+
|
201
|
+
private
|
202
|
+
|
203
|
+
# fill methods
|
204
|
+
def method_missing(name, *args)
|
205
|
+
file = File.expand_path("../templates/#{name}",__FILE__)
|
206
|
+
if File.exists?(file)
|
207
|
+
@render.render(File.read(file))
|
208
|
+
else
|
209
|
+
if self.respond_to?(name)
|
210
|
+
self.send(name, *args)
|
211
|
+
else
|
212
|
+
raise NoMethodError
|
213
|
+
end
|
214
|
+
end
|
215
|
+
|
216
|
+
end
|
217
|
+
end
|
218
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'mkmf'
|
2
|
+
|
3
|
+
|
4
|
+
$CFLAGS << " #{ENV["CFLAGS"]}"
|
5
|
+
$CFLAGS << " -g"
|
6
|
+
$CFLAGS << " -O3" unless $CFLAGS[/-O\d/]
|
7
|
+
$CFLAGS << " -Wall -Wno-comment"
|
8
|
+
|
9
|
+
def sys(cmd)
|
10
|
+
puts " -- #{cmd}"
|
11
|
+
unless ret = xsystem(cmd)
|
12
|
+
raise "ERROR: '#{cmd}' failed"
|
13
|
+
end
|
14
|
+
ret
|
15
|
+
end
|
16
|
+
|
17
|
+
if !(MAKE = find_executable('gmake') || find_executable('make'))
|
18
|
+
abort "ERROR: GNU make is required."
|
19
|
+
end
|
20
|
+
|
21
|
+
CWD = File.expand_path(File.dirname(__FILE__))
|
22
|
+
|
23
|
+
|
24
|
+
#Dir.chdir(LIBICAL_DIR) do
|
25
|
+
# Dir.mkdir("build") if !Dir.exists?("build")
|
26
|
+
# Dir.chdir("build") do
|
27
|
+
# sys("cmake ..")
|
28
|
+
# sys(MAKE)
|
29
|
+
# pcfile = File.join(LIBICAL_DIR,"build","libical.pc")
|
30
|
+
# $LDFLAGS << " " + `pkg-config --libs --static #{pcfile}`.strip
|
31
|
+
# end
|
32
|
+
|
33
|
+
#end
|
34
|
+
#$DEFLIBPATH.unshift("#{LIBICAL_DIR}/build/lib")
|
35
|
+
#dir_config("libical", "#{LIBICAL_DIR}/src/libical", "#{LIBICAL_DIR}/build/lib")
|
36
|
+
dir_config("<%=gem_name%>")
|
37
|
+
|
38
|
+
create_makefile('<%=gem_name%>/<%=gem_name%>')
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "<%=gem_name%>/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "<%=gem_name%>"
|
7
|
+
s.version = <%=mod_name%>::VERSION
|
8
|
+
s.authors = ["<%=git_user%>"]
|
9
|
+
s.email = ["<%=git_mail%>"]
|
10
|
+
s.homepage = "https://github.com/<%=git_user%>/<%=gem_name%>"
|
11
|
+
s.summary = %q{}
|
12
|
+
s.description = %q{}
|
13
|
+
|
14
|
+
s.rubyforge_project = s.name
|
15
|
+
s.license = "GPLv3"
|
16
|
+
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.extensions = ['ext/<%=gem_name%>/extconf.rb']
|
19
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
20
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
21
|
+
s.require_paths = ["lib"]
|
22
|
+
|
23
|
+
|
24
|
+
s.add_development_dependency "rake-compiler", "~> 0.8"
|
25
|
+
s.add_development_dependency "rspec", "~> 3.0"
|
26
|
+
s.add_development_dependency "rake", "~> 10.1"
|
27
|
+
<%if additional_gems && additional_gems.is_a?(Array) %>
|
28
|
+
<% additional_gems.each do |gem| %>
|
29
|
+
s.add_dependency "<%=gem%>"
|
30
|
+
<% end%>
|
31
|
+
<%end%>
|
32
|
+
end
|