gtl 0.9.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.
- 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
|