project_generator 0.3.0 → 1.0.0
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 +4 -4
- data/CHANGELOG.md +15 -0
- data/README.md +34 -16
- data/lib/project_generator/command/process_files.rb +29 -16
- data/lib/project_generator/version.rb +1 -1
- metadata +22 -184
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 84e440897d9e35697c2dd710cdbd856b1e37012555135d2e1653a813ea7ae99a
|
|
4
|
+
data.tar.gz: 96f5b2b587396a5626ede60b93f059e473ad18f6f7bc5c3e627f8abb4dcbd731
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 045e09b87ae4d08b6572b576412b7fc6554ed45e08ffe0342c5a92b361f36062d5f2f41bfbcaa619ec371e7ef963bf5a21d502a8ae861ea94a003bb316d9ac8a
|
|
7
|
+
data.tar.gz: 9f9c64130d0c7e6561425600bd5a2ef8830f60b2bf45a957ccbe3d413bf29a10cdd53fb23cf43d3a860df2f3068ddf2f2c233c734028a3ddedec412cff52af6e
|
data/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,21 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 1.0.0 (2026-02-09)
|
|
6
|
+
|
|
7
|
+
* Drop Ruby 3.0 and 3.1 support.
|
|
8
|
+
* Add Ruby 3.4 and 4.0 support.
|
|
9
|
+
* Update dependencies.
|
|
10
|
+
* Resolve new RuboCop offenses.
|
|
11
|
+
|
|
12
|
+
## 0.4.0 (2024-05-16)
|
|
13
|
+
|
|
14
|
+
* Replace indentation not only for template (ERB) files.
|
|
15
|
+
* Improve specs.
|
|
16
|
+
* Add Ruby 3.2 and 3.3 support.
|
|
17
|
+
* Move development dependencies from `gemspec` into `Gemfile`.
|
|
18
|
+
* Update development dependencies.
|
|
19
|
+
|
|
5
20
|
## 0.3.0 (2022-09-29)
|
|
6
21
|
|
|
7
22
|
* Drop Ruby 2.6 and 2.7.
|
data/README.md
CHANGED
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
[](https://cirrus-ci.com/github/AlexWayfer/project_generator)
|
|
4
4
|
[](https://codecov.io/gh/AlexWayfer/project_generator)
|
|
5
5
|
[](https://codeclimate.com/github/AlexWayfer/project_generator)
|
|
6
|
-
[](https://depfu.com/repos/github/AlexWayfer/project_generator)
|
|
7
6
|
[](https://inch-ci.org/github/AlexWayfer/project_generator)
|
|
8
7
|
[](https://rubygems.org/gems/project_generator)
|
|
9
8
|
[](LICENSE.txt)
|
|
@@ -12,32 +11,51 @@ Base for various CLI generation tools.
|
|
|
12
11
|
|
|
13
12
|
## Installation
|
|
14
13
|
|
|
15
|
-
|
|
14
|
+
It's designed as a base for developers to build specific generation CLIs,
|
|
15
|
+
so the common way is to add this gem as a runtime gem dependency.
|
|
16
|
+
|
|
17
|
+
For now it even has no executables.
|
|
18
|
+
|
|
19
|
+
## Usage
|
|
16
20
|
|
|
17
21
|
```ruby
|
|
18
|
-
|
|
19
|
-
```
|
|
22
|
+
require 'project_generator'
|
|
20
23
|
|
|
21
|
-
|
|
24
|
+
## Your specific generator, like a gem generator
|
|
25
|
+
module GemGenerator
|
|
26
|
+
## Inherit it's `Command` (`clamp`s CLI) from `ProjectGenerator::Command`
|
|
27
|
+
class Command < ProjectGenerator::Command
|
|
28
|
+
## You have to define `NAME` and `TEMPLATE` parameters
|
|
29
|
+
parameter 'NAME', 'name of a new gem'
|
|
30
|
+
parameter 'TEMPLATE', 'template path of a new gem'
|
|
22
31
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
```
|
|
32
|
+
def execute
|
|
33
|
+
## You can execute logic of a specific generator wherever you want
|
|
26
34
|
|
|
27
|
-
|
|
35
|
+
check_target_directory
|
|
28
36
|
|
|
29
|
-
|
|
30
|
-
gem install project_generator
|
|
31
|
-
```
|
|
37
|
+
refine_template_parameter if git?
|
|
32
38
|
|
|
33
|
-
|
|
39
|
+
process_files
|
|
34
40
|
|
|
35
|
-
|
|
36
|
-
|
|
41
|
+
initialize_git
|
|
42
|
+
|
|
43
|
+
FileUtils.rm_r @git_tmp_dir if git?
|
|
37
44
|
|
|
38
|
-
|
|
45
|
+
done
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
39
49
|
```
|
|
40
50
|
|
|
51
|
+
Built-in options:
|
|
52
|
+
|
|
53
|
+
* `-i`, `--indentation`: indentation type in generated project (`tabs` or `spaces`).
|
|
54
|
+
|
|
55
|
+
_Note: please, write templates with tabs to have this option working,
|
|
56
|
+
because we can't safely transform number of spaces into tabs,
|
|
57
|
+
but we can transform tabs into spaces._
|
|
58
|
+
|
|
41
59
|
## Development
|
|
42
60
|
|
|
43
61
|
After checking out the repo, run `bundle install` to install dependencies.
|
|
@@ -61,27 +61,40 @@ module ProjectGenerator
|
|
|
61
61
|
def render_files
|
|
62
62
|
puts 'Rendering files...'
|
|
63
63
|
|
|
64
|
-
Dir.glob("#{@directory}
|
|
65
|
-
|
|
66
|
-
content =
|
|
67
|
-
ERB.new(File.read(template_file), trim_mode: '-').result(@render_variables.get_binding)
|
|
64
|
+
Dir.glob("#{@directory}/**/*", File::FNM_DOTMATCH).each do |file_path|
|
|
65
|
+
next unless File.file? file_path
|
|
68
66
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
## TODO: Don't convert files refined in `.editorconfig`
|
|
73
|
-
## TODO: Convert spaces to tabs
|
|
74
|
-
content.gsub!(/^\t+/) { |tabs| ' ' * tabs.count("\t") } if indentation == 'spaces'
|
|
67
|
+
render_file file_path
|
|
68
|
+
end
|
|
69
|
+
end
|
|
75
70
|
|
|
76
|
-
|
|
77
|
-
|
|
71
|
+
def render_file(file_path)
|
|
72
|
+
## Read file content
|
|
73
|
+
content = File.read file_path
|
|
78
74
|
|
|
79
|
-
|
|
80
|
-
|
|
75
|
+
pathname = Pathname.new file_path
|
|
76
|
+
|
|
77
|
+
if pathname.extname == '.erb'
|
|
78
|
+
## Read a template file content and render it
|
|
79
|
+
content = ERB.new(content, trim_mode: '-').result(@render_variables.get_binding)
|
|
81
80
|
|
|
82
|
-
|
|
83
|
-
|
|
81
|
+
new_file_path = pathname.sub_ext('')
|
|
82
|
+
|
|
83
|
+
## Remove template file, save owner and permissions
|
|
84
|
+
File.rename file_path, new_file_path
|
|
85
|
+
|
|
86
|
+
## Remove `.erb` ext from file name
|
|
87
|
+
file_path = new_file_path
|
|
84
88
|
end
|
|
89
|
+
|
|
90
|
+
## Replace tabs with spaces if necessary
|
|
91
|
+
## TODO: Take number of spaces from `.editorconfig` file
|
|
92
|
+
## TODO: Don't convert files refined in `.editorconfig`
|
|
93
|
+
## TODO: Convert spaces to tabs
|
|
94
|
+
content.gsub!(/^\t+/) { |tabs| ' ' * tabs.count("\t") } if indentation == 'spaces'
|
|
95
|
+
|
|
96
|
+
## Update file content
|
|
97
|
+
File.write file_path, content
|
|
85
98
|
end
|
|
86
99
|
end
|
|
87
100
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: project_generator
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 1.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Alexander Popov
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: bin
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
13
|
name: alt_memery
|
|
@@ -16,28 +15,34 @@ dependencies:
|
|
|
16
15
|
requirements:
|
|
17
16
|
- - "~>"
|
|
18
17
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '
|
|
18
|
+
version: '3.0'
|
|
20
19
|
type: :runtime
|
|
21
20
|
prerelease: false
|
|
22
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
22
|
requirements:
|
|
24
23
|
- - "~>"
|
|
25
24
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: '
|
|
25
|
+
version: '3.0'
|
|
27
26
|
- !ruby/object:Gem::Dependency
|
|
28
27
|
name: bundler
|
|
29
28
|
requirement: !ruby/object:Gem::Requirement
|
|
30
29
|
requirements:
|
|
31
|
-
- - "
|
|
30
|
+
- - ">="
|
|
32
31
|
- !ruby/object:Gem::Version
|
|
33
32
|
version: '2.0'
|
|
33
|
+
- - "<"
|
|
34
|
+
- !ruby/object:Gem::Version
|
|
35
|
+
version: '5.0'
|
|
34
36
|
type: :runtime
|
|
35
37
|
prerelease: false
|
|
36
38
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
39
|
requirements:
|
|
38
|
-
- - "
|
|
40
|
+
- - ">="
|
|
39
41
|
- !ruby/object:Gem::Version
|
|
40
42
|
version: '2.0'
|
|
43
|
+
- - "<"
|
|
44
|
+
- !ruby/object:Gem::Version
|
|
45
|
+
version: '5.0'
|
|
41
46
|
- !ruby/object:Gem::Dependency
|
|
42
47
|
name: clamp
|
|
43
48
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -58,182 +63,14 @@ dependencies:
|
|
|
58
63
|
requirements:
|
|
59
64
|
- - "~>"
|
|
60
65
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: '
|
|
66
|
+
version: '6.0'
|
|
62
67
|
type: :runtime
|
|
63
68
|
prerelease: false
|
|
64
69
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
70
|
requirements:
|
|
66
71
|
- - "~>"
|
|
67
72
|
- !ruby/object:Gem::Version
|
|
68
|
-
version: '
|
|
69
|
-
- !ruby/object:Gem::Dependency
|
|
70
|
-
name: pry-byebug
|
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
|
72
|
-
requirements:
|
|
73
|
-
- - "~>"
|
|
74
|
-
- !ruby/object:Gem::Version
|
|
75
|
-
version: '3.9'
|
|
76
|
-
type: :development
|
|
77
|
-
prerelease: false
|
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
-
requirements:
|
|
80
|
-
- - "~>"
|
|
81
|
-
- !ruby/object:Gem::Version
|
|
82
|
-
version: '3.9'
|
|
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
|
-
- !ruby/object:Gem::Dependency
|
|
98
|
-
name: bundler-audit
|
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
|
100
|
-
requirements:
|
|
101
|
-
- - "~>"
|
|
102
|
-
- !ruby/object:Gem::Version
|
|
103
|
-
version: 0.9.0
|
|
104
|
-
type: :development
|
|
105
|
-
prerelease: false
|
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
107
|
-
requirements:
|
|
108
|
-
- - "~>"
|
|
109
|
-
- !ruby/object:Gem::Version
|
|
110
|
-
version: 0.9.0
|
|
111
|
-
- !ruby/object:Gem::Dependency
|
|
112
|
-
name: gem_toys
|
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
|
114
|
-
requirements:
|
|
115
|
-
- - "~>"
|
|
116
|
-
- !ruby/object:Gem::Version
|
|
117
|
-
version: 0.12.1
|
|
118
|
-
type: :development
|
|
119
|
-
prerelease: false
|
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
121
|
-
requirements:
|
|
122
|
-
- - "~>"
|
|
123
|
-
- !ruby/object:Gem::Version
|
|
124
|
-
version: 0.12.1
|
|
125
|
-
- !ruby/object:Gem::Dependency
|
|
126
|
-
name: toys
|
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
|
128
|
-
requirements:
|
|
129
|
-
- - "~>"
|
|
130
|
-
- !ruby/object:Gem::Version
|
|
131
|
-
version: 0.13.0
|
|
132
|
-
type: :development
|
|
133
|
-
prerelease: false
|
|
134
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
135
|
-
requirements:
|
|
136
|
-
- - "~>"
|
|
137
|
-
- !ruby/object:Gem::Version
|
|
138
|
-
version: 0.13.0
|
|
139
|
-
- !ruby/object:Gem::Dependency
|
|
140
|
-
name: inifile
|
|
141
|
-
requirement: !ruby/object:Gem::Requirement
|
|
142
|
-
requirements:
|
|
143
|
-
- - "~>"
|
|
144
|
-
- !ruby/object:Gem::Version
|
|
145
|
-
version: '3.0'
|
|
146
|
-
type: :development
|
|
147
|
-
prerelease: false
|
|
148
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
149
|
-
requirements:
|
|
150
|
-
- - "~>"
|
|
151
|
-
- !ruby/object:Gem::Version
|
|
152
|
-
version: '3.0'
|
|
153
|
-
- !ruby/object:Gem::Dependency
|
|
154
|
-
name: rspec
|
|
155
|
-
requirement: !ruby/object:Gem::Requirement
|
|
156
|
-
requirements:
|
|
157
|
-
- - "~>"
|
|
158
|
-
- !ruby/object:Gem::Version
|
|
159
|
-
version: '3.9'
|
|
160
|
-
type: :development
|
|
161
|
-
prerelease: false
|
|
162
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
163
|
-
requirements:
|
|
164
|
-
- - "~>"
|
|
165
|
-
- !ruby/object:Gem::Version
|
|
166
|
-
version: '3.9'
|
|
167
|
-
- !ruby/object:Gem::Dependency
|
|
168
|
-
name: simplecov
|
|
169
|
-
requirement: !ruby/object:Gem::Requirement
|
|
170
|
-
requirements:
|
|
171
|
-
- - "~>"
|
|
172
|
-
- !ruby/object:Gem::Version
|
|
173
|
-
version: 0.21.0
|
|
174
|
-
type: :development
|
|
175
|
-
prerelease: false
|
|
176
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
177
|
-
requirements:
|
|
178
|
-
- - "~>"
|
|
179
|
-
- !ruby/object:Gem::Version
|
|
180
|
-
version: 0.21.0
|
|
181
|
-
- !ruby/object:Gem::Dependency
|
|
182
|
-
name: simplecov-cobertura
|
|
183
|
-
requirement: !ruby/object:Gem::Requirement
|
|
184
|
-
requirements:
|
|
185
|
-
- - "~>"
|
|
186
|
-
- !ruby/object:Gem::Version
|
|
187
|
-
version: '2.1'
|
|
188
|
-
type: :development
|
|
189
|
-
prerelease: false
|
|
190
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
191
|
-
requirements:
|
|
192
|
-
- - "~>"
|
|
193
|
-
- !ruby/object:Gem::Version
|
|
194
|
-
version: '2.1'
|
|
195
|
-
- !ruby/object:Gem::Dependency
|
|
196
|
-
name: rubocop
|
|
197
|
-
requirement: !ruby/object:Gem::Requirement
|
|
198
|
-
requirements:
|
|
199
|
-
- - "~>"
|
|
200
|
-
- !ruby/object:Gem::Version
|
|
201
|
-
version: 1.36.0
|
|
202
|
-
type: :development
|
|
203
|
-
prerelease: false
|
|
204
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
205
|
-
requirements:
|
|
206
|
-
- - "~>"
|
|
207
|
-
- !ruby/object:Gem::Version
|
|
208
|
-
version: 1.36.0
|
|
209
|
-
- !ruby/object:Gem::Dependency
|
|
210
|
-
name: rubocop-performance
|
|
211
|
-
requirement: !ruby/object:Gem::Requirement
|
|
212
|
-
requirements:
|
|
213
|
-
- - "~>"
|
|
214
|
-
- !ruby/object:Gem::Version
|
|
215
|
-
version: '1.0'
|
|
216
|
-
type: :development
|
|
217
|
-
prerelease: false
|
|
218
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
219
|
-
requirements:
|
|
220
|
-
- - "~>"
|
|
221
|
-
- !ruby/object:Gem::Version
|
|
222
|
-
version: '1.0'
|
|
223
|
-
- !ruby/object:Gem::Dependency
|
|
224
|
-
name: rubocop-rspec
|
|
225
|
-
requirement: !ruby/object:Gem::Requirement
|
|
226
|
-
requirements:
|
|
227
|
-
- - "~>"
|
|
228
|
-
- !ruby/object:Gem::Version
|
|
229
|
-
version: '2.0'
|
|
230
|
-
type: :development
|
|
231
|
-
prerelease: false
|
|
232
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
233
|
-
requirements:
|
|
234
|
-
- - "~>"
|
|
235
|
-
- !ruby/object:Gem::Version
|
|
236
|
-
version: '2.0'
|
|
73
|
+
version: '6.0'
|
|
237
74
|
description: 'Base for various CLI generation tools.
|
|
238
75
|
|
|
239
76
|
'
|
|
@@ -257,28 +94,29 @@ licenses:
|
|
|
257
94
|
metadata:
|
|
258
95
|
rubygems_mfa_required: 'true'
|
|
259
96
|
bug_tracker_uri: https://github.com/AlexWayfer/project_generator/issues
|
|
260
|
-
changelog_uri: https://github.com/AlexWayfer/project_generator/blob/
|
|
261
|
-
documentation_uri: http://www.rubydoc.info/gems/project_generator/0.
|
|
97
|
+
changelog_uri: https://github.com/AlexWayfer/project_generator/blob/v1.0.0/CHANGELOG.md
|
|
98
|
+
documentation_uri: http://www.rubydoc.info/gems/project_generator/1.0.0
|
|
262
99
|
homepage_uri: https://github.com/AlexWayfer/project_generator
|
|
263
100
|
source_code_uri: https://github.com/AlexWayfer/project_generator
|
|
264
101
|
wiki_uri: https://github.com/AlexWayfer/project_generator/wiki
|
|
265
|
-
post_install_message:
|
|
266
102
|
rdoc_options: []
|
|
267
103
|
require_paths:
|
|
268
104
|
- lib
|
|
269
105
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
270
106
|
requirements:
|
|
271
|
-
- - "
|
|
107
|
+
- - ">="
|
|
108
|
+
- !ruby/object:Gem::Version
|
|
109
|
+
version: '3.2'
|
|
110
|
+
- - "<"
|
|
272
111
|
- !ruby/object:Gem::Version
|
|
273
|
-
version: '
|
|
112
|
+
version: '5'
|
|
274
113
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
275
114
|
requirements:
|
|
276
115
|
- - ">="
|
|
277
116
|
- !ruby/object:Gem::Version
|
|
278
117
|
version: '0'
|
|
279
118
|
requirements: []
|
|
280
|
-
rubygems_version:
|
|
281
|
-
signing_key:
|
|
119
|
+
rubygems_version: 4.0.3
|
|
282
120
|
specification_version: 4
|
|
283
121
|
summary: Base for various CLI generation tools
|
|
284
122
|
test_files: []
|