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 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: []