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 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,3 @@
1
+ #!/usr/bin/env ruby
2
+ require_relative "../lib/<<!gemname!>>.rb"
3
+
@@ -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: []