gem_generator 0.2.0 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +11 -0
- data/lib/gem_generator/command/process_files/render_variables.rb +149 -0
- data/lib/gem_generator/command/process_files.rb +76 -0
- data/lib/gem_generator/command.rb +9 -64
- data/lib/gem_generator/version.rb +1 -1
- metadata +21 -20
- data/lib/gem_generator/render_variables.rb +0 -141
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7f3a231a663b783f7bf00b7faecbe2e0ba9a83758889f737850464d8787417b1
|
4
|
+
data.tar.gz: 284e0c140d77a1601e7c4c0d8ede966761de87252ea4bdede6a40fdeddf3da80
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8c93e384412e88394adf30eb9dd7e4ad80ef8d1b4cd6206d77cb46d4fe75e01fc9fab8086a91c7710fb6ee680dd9816b99f3f0785fb95da01b295d6f7859084c
|
7
|
+
data.tar.gz: 16b39763cafaa19b5fe6f760d6106d0e0df9d898bfba0197ce883a1c4f0a5d352a64e60984daf34b8d24e4333dbfec636352181e944885cfcf9d976f131df82c
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,17 @@
|
|
2
2
|
|
3
3
|
## Unreleased
|
4
4
|
|
5
|
+
## 0.3.1 (2021-11-07)
|
6
|
+
|
7
|
+
* Require runtime depepndencies.
|
8
|
+
|
9
|
+
## 0.3.0 (2021-11-01)
|
10
|
+
|
11
|
+
* Install Bundler template dependencies from unbundled environment.
|
12
|
+
It should fix issues with templates specs, [example](https://github.com/lostisland/faraday-middleware-template/pull/3).
|
13
|
+
* Speed up tests about `--git` option.
|
14
|
+
* Update development dependencies.
|
15
|
+
|
5
16
|
## 0.2.0 (2021-10-18)
|
6
17
|
|
7
18
|
* Add `--git` option.
|
@@ -0,0 +1,149 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'yaml'
|
4
|
+
require 'memery'
|
5
|
+
require 'gorilla_patch/blank'
|
6
|
+
require 'gorilla_patch/inflections'
|
7
|
+
|
8
|
+
module GemGenerator
|
9
|
+
## Main CLI command for Gem Generator
|
10
|
+
class Command < Clamp::Command
|
11
|
+
## Private instance methods for processing template files (copying, renaming, rendering)
|
12
|
+
module ProcessFiles
|
13
|
+
## Class for a single object which should be a scope in render
|
14
|
+
class RenderVariables
|
15
|
+
include Memery
|
16
|
+
|
17
|
+
using GorillaPatch::Blank
|
18
|
+
using GorillaPatch::Inflections
|
19
|
+
|
20
|
+
attr_reader :name, :indentation, :summary
|
21
|
+
|
22
|
+
def initialize(name, namespace_option, indentation, summary)
|
23
|
+
@name = name
|
24
|
+
@namespace_option = namespace_option
|
25
|
+
@indentation = indentation
|
26
|
+
@summary = summary
|
27
|
+
|
28
|
+
## Call to be sure that this is checked before author fields
|
29
|
+
github_namespace
|
30
|
+
end
|
31
|
+
|
32
|
+
## `public :binding` and `send :binding` return caller binding
|
33
|
+
## This is from ERB documentation: https://ruby-doc.org/core-2.7.2/Binding.html
|
34
|
+
# rubocop:disable Naming/AccessorMethodName
|
35
|
+
def get_binding
|
36
|
+
binding
|
37
|
+
end
|
38
|
+
# rubocop:enable Naming/AccessorMethodName
|
39
|
+
|
40
|
+
memoize def summary_string
|
41
|
+
quote = summary.include?("'") ? '"' : "'"
|
42
|
+
"#{quote}#{summary}#{quote}"
|
43
|
+
end
|
44
|
+
|
45
|
+
memoize def description
|
46
|
+
summary.match?(/[.?!]$/) ? summary : "#{summary}."
|
47
|
+
end
|
48
|
+
|
49
|
+
memoize def path
|
50
|
+
name.tr('-', '/')
|
51
|
+
end
|
52
|
+
|
53
|
+
memoize def title
|
54
|
+
name.split(/[-_]/).map(&:camelize).join(' ')
|
55
|
+
end
|
56
|
+
|
57
|
+
memoize def module_name
|
58
|
+
path.camelize
|
59
|
+
end
|
60
|
+
|
61
|
+
memoize def modules
|
62
|
+
module_name.split('::')
|
63
|
+
end
|
64
|
+
|
65
|
+
memoize def version_constant
|
66
|
+
"#{module_name}::VERSION"
|
67
|
+
end
|
68
|
+
|
69
|
+
memoize def github_path
|
70
|
+
"#{github_namespace}/#{name}"
|
71
|
+
end
|
72
|
+
|
73
|
+
memoize def github_namespace_uri
|
74
|
+
"https://github.com/#{github_namespace}"
|
75
|
+
end
|
76
|
+
|
77
|
+
memoize def github_uri
|
78
|
+
"https://github.com/#{github_path}"
|
79
|
+
end
|
80
|
+
|
81
|
+
EXAMPLE_VALUES = {
|
82
|
+
name: 'My Name',
|
83
|
+
email: 'my.email@example.com'
|
84
|
+
}.freeze
|
85
|
+
private_constant :EXAMPLE_VALUES
|
86
|
+
|
87
|
+
%i[name email].each do |property|
|
88
|
+
method_name = "author_#{property}"
|
89
|
+
|
90
|
+
define_method method_name do
|
91
|
+
result = config.dig(:author, property) || `git config --get user.#{property}`.chomp
|
92
|
+
|
93
|
+
return result unless result.blank?
|
94
|
+
|
95
|
+
abort <<~TEXT
|
96
|
+
You have to specify project's author #{property}.
|
97
|
+
You can use `git config user.#{property} "#{EXAMPLE_VALUES[property]}"`, or create a configuration file.
|
98
|
+
Check the README.
|
99
|
+
TEXT
|
100
|
+
end
|
101
|
+
|
102
|
+
memoize method_name
|
103
|
+
end
|
104
|
+
|
105
|
+
memoize def author_name_string
|
106
|
+
quote = author_name.include?("'") ? '"' : "'"
|
107
|
+
"#{quote}#{author_name}#{quote}"
|
108
|
+
end
|
109
|
+
|
110
|
+
private
|
111
|
+
|
112
|
+
memoize def github_namespace
|
113
|
+
result = @namespace_option || config[:namespace]
|
114
|
+
|
115
|
+
return result unless result.blank?
|
116
|
+
|
117
|
+
abort <<~TEXT
|
118
|
+
You have to specify project's namespace on GitHub.
|
119
|
+
You can use `--namespace` option, or create a configuration file.
|
120
|
+
Check the README.
|
121
|
+
TEXT
|
122
|
+
end
|
123
|
+
|
124
|
+
memoize def config
|
125
|
+
config_file = find_config_file
|
126
|
+
return {} unless config_file
|
127
|
+
|
128
|
+
YAML.load_file config_file
|
129
|
+
end
|
130
|
+
|
131
|
+
def find_config_file
|
132
|
+
config_lookup_directory = Dir.getwd
|
133
|
+
|
134
|
+
until (
|
135
|
+
config_file = Dir.glob(
|
136
|
+
File.join(config_lookup_directory, '.gem_generator.y{a,}ml'), File::FNM_DOTMATCH
|
137
|
+
).first
|
138
|
+
) || config_lookup_directory == '/'
|
139
|
+
config_lookup_directory = File.dirname config_lookup_directory
|
140
|
+
end
|
141
|
+
|
142
|
+
config_file
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
private_constant :RenderVariables
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'process_files/render_variables'
|
4
|
+
|
5
|
+
module GemGenerator
|
6
|
+
## Main CLI command for Gem Generator
|
7
|
+
class Command < Clamp::Command
|
8
|
+
## Private instance methods for processing template files (copying, renaming, rendering)
|
9
|
+
module ProcessFiles
|
10
|
+
private
|
11
|
+
|
12
|
+
def process_files
|
13
|
+
copy_files
|
14
|
+
|
15
|
+
begin
|
16
|
+
@render_variables = RenderVariables.new name, namespace, indentation, @summary
|
17
|
+
|
18
|
+
rename_files
|
19
|
+
|
20
|
+
render_files
|
21
|
+
rescue SystemExit => e
|
22
|
+
FileUtils.rm_r @directory
|
23
|
+
raise e
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def copy_files
|
28
|
+
puts 'Copying files...'
|
29
|
+
|
30
|
+
FileUtils.cp_r template, @directory
|
31
|
+
|
32
|
+
FileUtils.rm_rf "#{@directory}/.git"
|
33
|
+
end
|
34
|
+
|
35
|
+
def rename_files
|
36
|
+
puts 'Renaming files...'
|
37
|
+
|
38
|
+
{ 'gem_name' => @render_variables.name, 'gem_path' => @render_variables.path }
|
39
|
+
.each do |template_name, real_name|
|
40
|
+
Dir["#{@directory}/**/*#{template_name}*"].each do |file_name|
|
41
|
+
new_file_name =
|
42
|
+
@directory + file_name.delete_prefix(@directory).gsub(template_name, real_name)
|
43
|
+
|
44
|
+
FileUtils.mkdir_p File.dirname new_file_name
|
45
|
+
|
46
|
+
File.rename file_name, new_file_name
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def render_files
|
52
|
+
puts 'Rendering files...'
|
53
|
+
|
54
|
+
Dir.glob("#{@directory}/**/*.erb", File::FNM_DOTMATCH).each do |template_file|
|
55
|
+
## Read a template file content and render it
|
56
|
+
content =
|
57
|
+
ERB.new(File.read(template_file), trim_mode: '-').result(@render_variables.get_binding)
|
58
|
+
|
59
|
+
## Replace tabs with spaces if necessary
|
60
|
+
content.gsub!(/^\t+/) { |tabs| ' ' * tabs.count("\t") } if indentation == 'spaces'
|
61
|
+
|
62
|
+
## Render variables in file name
|
63
|
+
real_pathname = Pathname.new(template_file).sub_ext('')
|
64
|
+
|
65
|
+
## Rename template file
|
66
|
+
File.rename template_file, real_pathname
|
67
|
+
|
68
|
+
## Update file content
|
69
|
+
File.write real_pathname, content
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
private_constant :ProcessFiles
|
75
|
+
end
|
76
|
+
end
|
@@ -1,11 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'bundler'
|
3
4
|
require 'clamp'
|
4
5
|
require 'erb'
|
5
6
|
require 'fileutils'
|
6
7
|
require 'pathname'
|
8
|
+
require 'tmpdir'
|
7
9
|
|
8
|
-
require_relative '
|
10
|
+
require_relative 'command/process_files'
|
9
11
|
|
10
12
|
## https://github.com/mdub/clamp#allowing-options-after-parameters
|
11
13
|
Clamp.allow_options_after_parameters = true
|
@@ -13,6 +15,8 @@ Clamp.allow_options_after_parameters = true
|
|
13
15
|
module GemGenerator
|
14
16
|
## Main CLI command for Gem Generator
|
15
17
|
class Command < Clamp::Command
|
18
|
+
include ProcessFiles
|
19
|
+
|
16
20
|
parameter 'NAME', 'name of a new gem'
|
17
21
|
parameter 'TEMPLATE', 'template path of a new gem'
|
18
22
|
|
@@ -90,68 +94,6 @@ module GemGenerator
|
|
90
94
|
self.template = File.join @git_tmp_dir, 'template'
|
91
95
|
end
|
92
96
|
|
93
|
-
def process_files
|
94
|
-
copy_files
|
95
|
-
|
96
|
-
begin
|
97
|
-
@render_variables = RenderVariables.new name, namespace, indentation, @summary
|
98
|
-
|
99
|
-
rename_files
|
100
|
-
|
101
|
-
render_files
|
102
|
-
rescue SystemExit => e
|
103
|
-
FileUtils.rm_r @directory
|
104
|
-
raise e
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
def copy_files
|
109
|
-
puts 'Copying files...'
|
110
|
-
|
111
|
-
FileUtils.cp_r template, @directory
|
112
|
-
|
113
|
-
FileUtils.rm_rf "#{@directory}/.git"
|
114
|
-
end
|
115
|
-
|
116
|
-
def rename_files
|
117
|
-
puts 'Renaming files...'
|
118
|
-
|
119
|
-
{ 'gem_name' => @render_variables.name, 'gem_path' => @render_variables.path }
|
120
|
-
.each do |template_name, real_name|
|
121
|
-
Dir["#{@directory}/**/*#{template_name}*"].each do |file_name|
|
122
|
-
new_file_name =
|
123
|
-
@directory + file_name.delete_prefix(@directory).gsub(template_name, real_name)
|
124
|
-
|
125
|
-
FileUtils.mkdir_p File.dirname new_file_name
|
126
|
-
|
127
|
-
File.rename file_name, new_file_name
|
128
|
-
end
|
129
|
-
end
|
130
|
-
end
|
131
|
-
|
132
|
-
def render_files
|
133
|
-
puts 'Rendering files...'
|
134
|
-
|
135
|
-
Dir.glob("#{@directory}/**/*.erb", File::FNM_DOTMATCH).each do |template_file|
|
136
|
-
## Read a template file content and render it
|
137
|
-
content =
|
138
|
-
ERB.new(File.read(template_file), trim_mode: '-').result(@render_variables.get_binding)
|
139
|
-
|
140
|
-
## Replace tabs with spaces if necessary
|
141
|
-
## TODO: Get spaces count from `.editorconfig` file
|
142
|
-
content.gsub!(/^\t+/) { |tabs| ' ' * tabs.count("\t") } if indentation == 'spaces'
|
143
|
-
|
144
|
-
## Render variables in file name
|
145
|
-
real_pathname = Pathname.new(template_file).sub_ext('')
|
146
|
-
|
147
|
-
## Rename template file
|
148
|
-
File.rename template_file, real_pathname
|
149
|
-
|
150
|
-
## Update file content
|
151
|
-
File.write real_pathname, content
|
152
|
-
end
|
153
|
-
end
|
154
|
-
|
155
97
|
def initialize_git
|
156
98
|
puts 'Initializing git...'
|
157
99
|
|
@@ -165,7 +107,10 @@ module GemGenerator
|
|
165
107
|
puts 'Installing dependencies...'
|
166
108
|
|
167
109
|
Dir.chdir name do
|
168
|
-
|
110
|
+
## Helpful for specs of templates, probably somewhere else
|
111
|
+
Bundler.with_unbundled_env do
|
112
|
+
system 'bundle update'
|
113
|
+
end
|
169
114
|
|
170
115
|
system 'npm install' if File.exist? 'package.json'
|
171
116
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gem_generator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexander Popov
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-11-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: alt_memery
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '2.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '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: '2.0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: clamp
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,20 +94,6 @@ dependencies:
|
|
80
94
|
- - "~>"
|
81
95
|
- !ruby/object:Gem::Version
|
82
96
|
version: '3.0'
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: bundler
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - "~>"
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '2.0'
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - "~>"
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: '2.0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: bundler-audit
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -114,14 +114,14 @@ dependencies:
|
|
114
114
|
requirements:
|
115
115
|
- - "~>"
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: 0.
|
117
|
+
version: 0.11.0
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
122
|
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version: 0.
|
124
|
+
version: 0.11.0
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: toys
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -249,14 +249,15 @@ files:
|
|
249
249
|
- README.md
|
250
250
|
- exe/gem_generator
|
251
251
|
- lib/gem_generator/command.rb
|
252
|
-
- lib/gem_generator/
|
252
|
+
- lib/gem_generator/command/process_files.rb
|
253
|
+
- lib/gem_generator/command/process_files/render_variables.rb
|
253
254
|
- lib/gem_generator/version.rb
|
254
255
|
homepage: https://github.com/AlexWayfer/gem_generator
|
255
256
|
licenses:
|
256
257
|
- MIT
|
257
258
|
metadata:
|
258
259
|
bug_tracker_uri: https://github.com/AlexWayfer/gem_generator/issues
|
259
|
-
changelog_uri: https://github.com/AlexWayfer/gem_generator/blob/v0.
|
260
|
+
changelog_uri: https://github.com/AlexWayfer/gem_generator/blob/v0.3.1/CHANGELOG.md
|
260
261
|
homepage_uri: https://github.com/AlexWayfer/gem_generator
|
261
262
|
source_code_uri: https://github.com/AlexWayfer/gem_generator
|
262
263
|
post_install_message:
|
@@ -1,141 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'yaml'
|
4
|
-
require 'memery'
|
5
|
-
require 'gorilla_patch/blank'
|
6
|
-
require 'gorilla_patch/inflections'
|
7
|
-
|
8
|
-
module GemGenerator
|
9
|
-
## Class for a single object which should be a scope in render
|
10
|
-
class RenderVariables
|
11
|
-
include Memery
|
12
|
-
|
13
|
-
using GorillaPatch::Blank
|
14
|
-
using GorillaPatch::Inflections
|
15
|
-
|
16
|
-
attr_reader :name, :indentation, :summary
|
17
|
-
|
18
|
-
def initialize(name, namespace_option, indentation, summary)
|
19
|
-
@name = name
|
20
|
-
@namespace_option = namespace_option
|
21
|
-
@indentation = indentation
|
22
|
-
@summary = summary
|
23
|
-
|
24
|
-
## Call to be sure that this is checked before author fields
|
25
|
-
github_namespace
|
26
|
-
end
|
27
|
-
|
28
|
-
## `public :binding` and `send :binding` return caller binding
|
29
|
-
## This is from ERB documentation: https://ruby-doc.org/core-2.7.2/Binding.html
|
30
|
-
# rubocop:disable Naming/AccessorMethodName
|
31
|
-
def get_binding
|
32
|
-
binding
|
33
|
-
end
|
34
|
-
# rubocop:enable Naming/AccessorMethodName
|
35
|
-
|
36
|
-
memoize def summary_string
|
37
|
-
quote = summary.include?("'") ? '"' : "'"
|
38
|
-
"#{quote}#{summary}#{quote}"
|
39
|
-
end
|
40
|
-
|
41
|
-
memoize def description
|
42
|
-
summary.match?(/[.?!]$/) ? summary : "#{summary}."
|
43
|
-
end
|
44
|
-
|
45
|
-
memoize def path
|
46
|
-
name.tr('-', '/')
|
47
|
-
end
|
48
|
-
|
49
|
-
memoize def title
|
50
|
-
name.split(/[-_]/).map(&:camelize).join(' ')
|
51
|
-
end
|
52
|
-
|
53
|
-
memoize def module_name
|
54
|
-
path.camelize
|
55
|
-
end
|
56
|
-
|
57
|
-
memoize def modules
|
58
|
-
module_name.split('::')
|
59
|
-
end
|
60
|
-
|
61
|
-
memoize def version_constant
|
62
|
-
"#{module_name}::VERSION"
|
63
|
-
end
|
64
|
-
|
65
|
-
memoize def github_path
|
66
|
-
"#{github_namespace}/#{name}"
|
67
|
-
end
|
68
|
-
|
69
|
-
memoize def github_namespace_uri
|
70
|
-
"https://github.com/#{github_namespace}"
|
71
|
-
end
|
72
|
-
|
73
|
-
memoize def github_uri
|
74
|
-
"https://github.com/#{github_path}"
|
75
|
-
end
|
76
|
-
|
77
|
-
EXAMPLE_VALUES = {
|
78
|
-
name: 'My Name',
|
79
|
-
email: 'my.email@example.com'
|
80
|
-
}.freeze
|
81
|
-
private_constant :EXAMPLE_VALUES
|
82
|
-
|
83
|
-
%i[name email].each do |property|
|
84
|
-
method_name = "author_#{property}"
|
85
|
-
|
86
|
-
define_method method_name do
|
87
|
-
result = config.dig(:author, property) || `git config --get user.#{property}`.chomp
|
88
|
-
|
89
|
-
return result unless result.blank?
|
90
|
-
|
91
|
-
abort <<~TEXT
|
92
|
-
You have to specify project's author #{property}.
|
93
|
-
You can use `git config user.#{property} "#{EXAMPLE_VALUES[property]}"`, or create a configuration file.
|
94
|
-
Check the README.
|
95
|
-
TEXT
|
96
|
-
end
|
97
|
-
|
98
|
-
memoize method_name
|
99
|
-
end
|
100
|
-
|
101
|
-
memoize def author_name_string
|
102
|
-
quote = author_name.include?("'") ? '"' : "'"
|
103
|
-
"#{quote}#{author_name}#{quote}"
|
104
|
-
end
|
105
|
-
|
106
|
-
private
|
107
|
-
|
108
|
-
memoize def github_namespace
|
109
|
-
result = @namespace_option || config[:namespace]
|
110
|
-
|
111
|
-
return result unless result.blank?
|
112
|
-
|
113
|
-
abort <<~TEXT
|
114
|
-
You have to specify project's namespace on GitHub.
|
115
|
-
You can use `--namespace` option, or create a configuration file.
|
116
|
-
Check the README.
|
117
|
-
TEXT
|
118
|
-
end
|
119
|
-
|
120
|
-
memoize def config
|
121
|
-
config_file = find_config_file
|
122
|
-
return {} unless config_file
|
123
|
-
|
124
|
-
YAML.load_file config_file
|
125
|
-
end
|
126
|
-
|
127
|
-
def find_config_file
|
128
|
-
config_lookup_directory = Dir.getwd
|
129
|
-
|
130
|
-
until (
|
131
|
-
config_file = Dir.glob(
|
132
|
-
File.join(config_lookup_directory, '.gem_generator.y{a,}ml'), File::FNM_DOTMATCH
|
133
|
-
).first
|
134
|
-
) || config_lookup_directory == '/'
|
135
|
-
config_lookup_directory = File.dirname config_lookup_directory
|
136
|
-
end
|
137
|
-
|
138
|
-
config_file
|
139
|
-
end
|
140
|
-
end
|
141
|
-
end
|