create_new_gem 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/bin/gemnew +138 -0
- data/lib/create_new_gem/helptext.rb +30 -0
- data/lib/create_new_gem/templates/bin.template +3 -0
- data/lib/create_new_gem/templates/gemspec.rb.template +18 -0
- data/lib/create_new_gem/templates/mainfile.rb.template +32 -0
- data/lib/create_new_gem/templates.rb +58 -0
- data/lib/create_new_gem.rb +32 -0
- metadata +77 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: bfdf40c9d1834b734abb30345e7ee2d261fa83ff0b2d8e257cd0258cb85cd778
|
4
|
+
data.tar.gz: 691249f8cb26026f5495bcb768968163e7f436b15c5b72ab107114a9b79bbc15
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 89f38e810feec9e7ec20458db837f3e754b5ca68efcd8255e2bc16beffea77b4b14846234b9f56ced1620d78c22c13fb2293a2ea5dbba08b34be6fbca220419c
|
7
|
+
data.tar.gz: 597c37be169c2598044f849d64f7d61f091fd548458db9d3c6bcf40dc378712bd21fc551fdaaab3f31b4d5e894ef9ece07501264ec5357a4f1ace07b07b0434e
|
data/bin/gemnew
ADDED
@@ -0,0 +1,138 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require_relative "../lib/create_new_gem.rb"
|
3
|
+
|
4
|
+
def getprefs
|
5
|
+
if File.exist?(Dir.home+"/.gemnewcfg")
|
6
|
+
x = File.read(Dir.home+"/.gemnewcfg").split("\n")
|
7
|
+
else
|
8
|
+
x = [nil, (Etc.getpwnam Etc.getlogin).gecos.match(/[\sA-z0-9_-]*/).to_s]
|
9
|
+
end
|
10
|
+
|
11
|
+
return [x[0],x[1]]
|
12
|
+
end
|
13
|
+
|
14
|
+
o = {
|
15
|
+
add_depends:{has_argument:true},
|
16
|
+
add_requires:{has_argument:true},
|
17
|
+
add_executables:{has_argument:true},
|
18
|
+
summary:{has_argument:true},
|
19
|
+
description:{has_argument:true},
|
20
|
+
authors:{has_argument:true},
|
21
|
+
email:{has_argument:true},
|
22
|
+
homepage:{has_argument:true},
|
23
|
+
license:{has_argument:true},
|
24
|
+
prefs:{has_argument:true},
|
25
|
+
no_git:{},
|
26
|
+
help:{}
|
27
|
+
}
|
28
|
+
|
29
|
+
s = {}
|
30
|
+
|
31
|
+
args = ArgsParser::Args.new(options: o, switches: s)
|
32
|
+
|
33
|
+
# Help menu
|
34
|
+
if args.options[:help]
|
35
|
+
puts CreateNewGem::HelpText.helptext
|
36
|
+
exit 0
|
37
|
+
end
|
38
|
+
|
39
|
+
if args.options[:prefs]
|
40
|
+
prefs = getprefs
|
41
|
+
mprefs = args.options[:prefs].split ?,
|
42
|
+
mprefs.each do |p|
|
43
|
+
p1 = p.split ?:
|
44
|
+
if p1[0] == "email"
|
45
|
+
prefs[0] = p1[1]
|
46
|
+
elsif p1[0] == "name"
|
47
|
+
prefs[1] = p1[1]
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
File.write(Dir.home+"/.gemnewcfg", "#{prefs[0]}\n#{prefs[1]}")
|
52
|
+
|
53
|
+
exit 0
|
54
|
+
end
|
55
|
+
|
56
|
+
gemname = (args.data[0] || (STDERR.puts "Gem name required";exit 1))
|
57
|
+
classname = (args.data[1] || (STDERR.puts "Gem class name required";exit 1))
|
58
|
+
dependencies = {} # Set later
|
59
|
+
requires = args.options[:add_requires].to_s.split(?,)
|
60
|
+
executables = args.options[:add_executables].to_s.split(?,)
|
61
|
+
summary = (args.options[:summary] || (print "Gem summary: ";STDIN.gets.chomp) )
|
62
|
+
description = (args.options[:description] || (print "Gem description: ";STDIN.gets.chomp) )
|
63
|
+
authors = (begin;args.options[:authors].split(?,);rescue;nil;end || [getprefs[1]] || [(Etc.getpwnam Etc.getlogin).gecos.match(/[\sA-z0-9_-]*/).to_s])
|
64
|
+
email = (args.options[:email] || getprefs[0] || "#{Etc.getlogin}@example.invalid")
|
65
|
+
homepage = (args.options[:homepage] || (print "Gem homepage: ";STDIN.gets.chomp) )
|
66
|
+
license = (args.options[:license] || "CC-BY-NC-SA-4.0")
|
67
|
+
no_git = args.options[:no_git]
|
68
|
+
|
69
|
+
args.options[:add_depends].to_s.split(?,).each do |dep|
|
70
|
+
dep = dep.split(?:)
|
71
|
+
depend_gem = dep[0]
|
72
|
+
version = dep[1]
|
73
|
+
dependencies[depend_gem] = version
|
74
|
+
end
|
75
|
+
|
76
|
+
puts <<A
|
77
|
+
Gem Settings:
|
78
|
+
Name: #{gemname}
|
79
|
+
Class name: #{classname}
|
80
|
+
Dependencies:
|
81
|
+
#{dependencies.map{|a|"#{a[0]} #{a[1]}"}.join "\n"}
|
82
|
+
Requires: #{requires.join ", "}
|
83
|
+
Executables: #{executables.join ", "}
|
84
|
+
Summary: #{summary}
|
85
|
+
Description: #{description}
|
86
|
+
Authors: #{authors.join ", "}
|
87
|
+
Email: #{email}
|
88
|
+
Homepage: #{homepage}
|
89
|
+
License: #{license}
|
90
|
+
Inititalize Git: #{no_git ? "no" : "yes"}
|
91
|
+
A
|
92
|
+
|
93
|
+
# Change to user's directory
|
94
|
+
Dir.chdir Dir.pwd
|
95
|
+
|
96
|
+
# Make dirs for gem
|
97
|
+
Dir.mkdir gemname
|
98
|
+
Dir.chdir gemname
|
99
|
+
Dir.mkdir "bin"
|
100
|
+
Dir.mkdir "lib"
|
101
|
+
Dir.mkdir "lib/#{gemname}"
|
102
|
+
|
103
|
+
# Write files
|
104
|
+
File.write("#{gemname}.gemspec", # Gemspec
|
105
|
+
CreateNewGem::Templates::Gemspec.new(
|
106
|
+
gemname: gemname,
|
107
|
+
gemclass: classname,
|
108
|
+
summary: summary,
|
109
|
+
description: description,
|
110
|
+
authors: authors,
|
111
|
+
email: email,
|
112
|
+
dependencies: dependencies,
|
113
|
+
homepage: homepage,
|
114
|
+
license: license
|
115
|
+
)
|
116
|
+
)
|
117
|
+
|
118
|
+
executables.each do |exe| # Executables
|
119
|
+
File.write("bin/#{exe}",
|
120
|
+
CreateNewGem::Templates::Bin.new(
|
121
|
+
gemname: gemname
|
122
|
+
)
|
123
|
+
)
|
124
|
+
end
|
125
|
+
|
126
|
+
File.write("lib/#{gemname}.rb", # Main file
|
127
|
+
CreateNewGem::Templates::Mainfile.new(
|
128
|
+
gemname: gemname,
|
129
|
+
gemclass: classname,
|
130
|
+
requires: requires,
|
131
|
+
executables: executables.to_s
|
132
|
+
)
|
133
|
+
)
|
134
|
+
|
135
|
+
unless no_git
|
136
|
+
`git init`
|
137
|
+
File.write(".gitignore", "*.gem")
|
138
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module CreateNewGem
|
2
|
+
module HelpText
|
3
|
+
def self.helptext
|
4
|
+
v = CreateNewGem.version
|
5
|
+
|
6
|
+
text = <<A
|
7
|
+
Create New Gem v#{v}
|
8
|
+
Matthias Lee <matthias@matthiasclee.com>
|
9
|
+
|
10
|
+
Usage: gemnew [gem name] [class name] (opts)
|
11
|
+
gem name: Name of the gem. All lowercase, [a-z 0-9 _ -] EX: coolgem, create_new_gem
|
12
|
+
class name: Gem class name. [A-z 0-9 _] EX: CoolGem, CreateNewGem
|
13
|
+
|
14
|
+
Options:
|
15
|
+
--add_depends '<dependencies>': Adds dependencies. Use form "rbtext:>=0.3.3,argparse:>=0.0.3"
|
16
|
+
--add_requires '<requires>': Adds require statements. Use form "rbtext,rbtext/string_methods,argparse"
|
17
|
+
--add_executables '<executables>': Adds executables to the gem. Use form "exe1,exe2"
|
18
|
+
--summary '<summary>': Adds summary
|
19
|
+
--description '<description>': Adds description
|
20
|
+
--authors '<authors>': Adds authors. Use form "Matthias Lee,John Doe"
|
21
|
+
--email '<email>': Adds email address
|
22
|
+
--homepage '<homepage>': Adds homepage
|
23
|
+
--license '<license>': Adds license
|
24
|
+
--no_git: Doesn't initialize git
|
25
|
+
--prefs '<prefs>': Modifies preferences. Use form "email:matthias@matthiasclee.com,name:Matthias Lee"
|
26
|
+
--help: Shows the help menu
|
27
|
+
A
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# Created with create_new_gem by Matthias Lee
|
2
|
+
|
3
|
+
require_relative "lib/<<!gemname!>>.rb"
|
4
|
+
|
5
|
+
Gem::Specification.new do |<<!gemname!>>|
|
6
|
+
<<!gemname!>>.name = '<<!gemname!>>'
|
7
|
+
<<!gemname!>>.version = <<!gemclass!>>.version
|
8
|
+
<<!gemname!>>.summary = "<<!summary!>>"
|
9
|
+
<<!gemname!>>.description = "<<!description!>>"
|
10
|
+
<<!gemname!>>.authors = <<!authors!>>
|
11
|
+
<<!gemname!>>.email = '<<!email!>>'
|
12
|
+
<<!gemname!>>.files = <<!gemclass!>>.file_paths + <<!gemclass!>>.executables.map{|i|"bin/#{i}"}
|
13
|
+
<<!gemname!>>.executables = <<!gemclass!>>.executables
|
14
|
+
<<!gemname!>>.require_paths = <<!require_paths!>>
|
15
|
+
<<!runtime_dependencies!>>
|
16
|
+
<<!gemname!>>.homepage = '<<!homepage!>>'
|
17
|
+
<<!gemname!>>.license = '<<!license!>>'
|
18
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module <<!gemclass!>>
|
2
|
+
@@files = [] # All gem files
|
3
|
+
@@exe = <<!executables!>> # All executables
|
4
|
+
|
5
|
+
def self.version
|
6
|
+
"0.0.1"
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.executables
|
10
|
+
@@exe
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.file_paths(relative:false)
|
14
|
+
x = @@files.map do |f|
|
15
|
+
"#{"lib/" unless relative}<<!gemname!>>/#{f}"
|
16
|
+
end
|
17
|
+
|
18
|
+
if relative
|
19
|
+
return x
|
20
|
+
else
|
21
|
+
return x + ['lib/<<!gemname!>>.rb']
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# Additional Requires
|
27
|
+
<<!requires!>>
|
28
|
+
|
29
|
+
<<!gemclass!>>.file_paths(relative:true).each do |f|
|
30
|
+
require_relative f
|
31
|
+
end
|
32
|
+
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module CreateNewGem
|
2
|
+
module Templates
|
3
|
+
class Gemspec
|
4
|
+
def initialize(gemname:,gemclass:,summary:,description:,authors:,email:,require_path:"['lib']",dependencies:,homepage:,license:)
|
5
|
+
added_runtime_dependencies = []
|
6
|
+
dependencies.each do |dep|
|
7
|
+
added_runtime_dependencies << "#{gemname}.add_runtime_dependency '#{dep[0]}', '#{dep[1]}'"
|
8
|
+
end
|
9
|
+
|
10
|
+
@template = File.read("#{File.dirname __FILE__}/templates/gemspec.rb.template")
|
11
|
+
.gsub("<<!gemname!>>", gemname)
|
12
|
+
.gsub("<<!gemclass!>>", gemclass)
|
13
|
+
.gsub("<<!summary!>>", summary)
|
14
|
+
.gsub("<<!description!>>", description)
|
15
|
+
.gsub("<<!authors!>>", authors.to_s)
|
16
|
+
.gsub("<<!email!>>", email)
|
17
|
+
.gsub("<<!require_paths!>>", require_path.to_s)
|
18
|
+
.gsub("<<!homepage!>>", homepage)
|
19
|
+
.gsub("<<!license!>>", license)
|
20
|
+
.gsub("<<!runtime_dependencies!>>", added_runtime_dependencies.join("\n"))
|
21
|
+
end
|
22
|
+
|
23
|
+
def to_s
|
24
|
+
return @template
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
class Bin
|
29
|
+
def initialize(gemname:)
|
30
|
+
@template = File.read("#{File.dirname __FILE__}/templates/bin.template")
|
31
|
+
.gsub("<<!gemname!>>", gemname)
|
32
|
+
end
|
33
|
+
|
34
|
+
def to_s
|
35
|
+
return @template
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
class Mainfile
|
40
|
+
def initialize(gemname:,gemclass:,requires:,executables:)
|
41
|
+
require_statements = []
|
42
|
+
requires.each do |req|
|
43
|
+
require_statements << "require '#{req}'"
|
44
|
+
end
|
45
|
+
|
46
|
+
@template = File.read("#{File.dirname __FILE__}/templates/mainfile.rb.template")
|
47
|
+
.gsub("<<!gemclass!>>", gemclass)
|
48
|
+
.gsub("<<!gemname!>>", gemname)
|
49
|
+
.gsub("<<!requires!>>", require_statements.join("\n"))
|
50
|
+
.gsub("<<!executables!>>", executables)
|
51
|
+
end
|
52
|
+
|
53
|
+
def to_s
|
54
|
+
return @template
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module CreateNewGem
|
2
|
+
@@files = ['helptext.rb', 'templates.rb'] # All gem files
|
3
|
+
@@exe = ['gemnew'] # All executables
|
4
|
+
|
5
|
+
def self.version
|
6
|
+
"0.0.1"
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.executables
|
10
|
+
@@exe
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.file_paths(relative:false)
|
14
|
+
x = @@files.map do |f|
|
15
|
+
"#{"lib/" unless relative}create_new_gem/#{f}"
|
16
|
+
end
|
17
|
+
|
18
|
+
if relative
|
19
|
+
return x
|
20
|
+
else
|
21
|
+
return x + ['lib/create_new_gem.rb']
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# Additional Requires
|
27
|
+
require "argparse"
|
28
|
+
require "etc"
|
29
|
+
|
30
|
+
CreateNewGem.file_paths(relative:true).each do |f|
|
31
|
+
require_relative f
|
32
|
+
end
|
metadata
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: create_new_gem
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Matthias Lee
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2023-11-21 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: argparse
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.0.4
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.0.4
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: etc
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.2.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.2.0
|
41
|
+
description: Create a blank gem
|
42
|
+
email: matthias@matthiasclee.com
|
43
|
+
executables:
|
44
|
+
- gemnew
|
45
|
+
extensions: []
|
46
|
+
extra_rdoc_files: []
|
47
|
+
files:
|
48
|
+
- bin/gemnew
|
49
|
+
- lib/create_new_gem.rb
|
50
|
+
- lib/create_new_gem/helptext.rb
|
51
|
+
- lib/create_new_gem/templates.rb
|
52
|
+
- lib/create_new_gem/templates/bin.template
|
53
|
+
- lib/create_new_gem/templates/gemspec.rb.template
|
54
|
+
- lib/create_new_gem/templates/mainfile.rb.template
|
55
|
+
homepage: https://github.com/Matthiasclee/createnewgem
|
56
|
+
licenses: []
|
57
|
+
metadata: {}
|
58
|
+
post_install_message:
|
59
|
+
rdoc_options: []
|
60
|
+
require_paths:
|
61
|
+
- lib
|
62
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: '0'
|
67
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
68
|
+
requirements:
|
69
|
+
- - ">="
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: '0'
|
72
|
+
requirements: []
|
73
|
+
rubygems_version: 3.2.3
|
74
|
+
signing_key:
|
75
|
+
specification_version: 4
|
76
|
+
summary: Create a blank gem
|
77
|
+
test_files: []
|