create_new_gem 0.0.1
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/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: []
|