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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 00a297242f14876555e7908681645d3be91b5bfc694c2e1ac5e19e72d3c7637b
4
- data.tar.gz: 8382faf2d92341771bab8f65c1c01f0c9bb866b03a7f47a983b578649f3646e5
3
+ metadata.gz: 84e440897d9e35697c2dd710cdbd856b1e37012555135d2e1653a813ea7ae99a
4
+ data.tar.gz: 96f5b2b587396a5626ede60b93f059e473ad18f6f7bc5c3e627f8abb4dcbd731
5
5
  SHA512:
6
- metadata.gz: edbcfdb661acac2dd0350dc62d0e21311017efb97603d0b8fe7c2ac67107acd239d728a1163e31b7828febe95f9ef2affedc762ed2759fa235a4d192b491ee34
7
- data.tar.gz: 7336c7f6866bd627889fecce51d50a555ce2d5ae714f3a5b77d841b58bdbc9154b25274ffdcfa596625625e9cb6c79b7186b11d0ccb3631de8f6cc431f8066a4
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
  [![Cirrus CI - Base Branch Build Status](https://img.shields.io/cirrus/github/AlexWayfer/project_generator?style=flat-square)](https://cirrus-ci.com/github/AlexWayfer/project_generator)
4
4
  [![Codecov branch](https://img.shields.io/codecov/c/github/AlexWayfer/project_generator/main.svg?style=flat-square)](https://codecov.io/gh/AlexWayfer/project_generator)
5
5
  [![Code Climate](https://img.shields.io/codeclimate/maintainability/AlexWayfer/project_generator.svg?style=flat-square)](https://codeclimate.com/github/AlexWayfer/project_generator)
6
- [![Depfu](https://img.shields.io/depfu/AlexWayfer/project_generator?style=flat-square)](https://depfu.com/repos/github/AlexWayfer/project_generator)
7
6
  [![Inline docs](https://inch-ci.org/github/AlexWayfer/project_generator.svg?branch=main)](https://inch-ci.org/github/AlexWayfer/project_generator)
8
7
  [![Gem](https://img.shields.io/gem/v/project_generator.svg?style=flat-square)](https://rubygems.org/gems/project_generator)
9
8
  [![License](https://img.shields.io/github/license/AlexWayfer/project_generator.svg?style=flat-square)](LICENSE.txt)
@@ -12,32 +11,51 @@ Base for various CLI generation tools.
12
11
 
13
12
  ## Installation
14
13
 
15
- Add this line to your application's Gemfile:
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
- gem 'project_generator'
19
- ```
22
+ require 'project_generator'
20
23
 
21
- And then execute:
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
- ```shell
24
- bundle install
25
- ```
32
+ def execute
33
+ ## You can execute logic of a specific generator wherever you want
26
34
 
27
- Or install it yourself as:
35
+ check_target_directory
28
36
 
29
- ```shell
30
- gem install project_generator
31
- ```
37
+ refine_template_parameter if git?
32
38
 
33
- ## Usage
39
+ process_files
34
40
 
35
- ```ruby
36
- require 'project_generator'
41
+ initialize_git
42
+
43
+ FileUtils.rm_r @git_tmp_dir if git?
37
44
 
38
- # TODO
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}/**/*.erb", File::FNM_DOTMATCH).each do |template_file|
65
- ## Read a template file content and render it
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
- ## Replace tabs with spaces if necessary
70
- ## TODO: Take it out of `.erb` files
71
- ## TODO: Take number of spaces from `.editorconfig` file
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
- ## Render variables in file name
77
- real_pathname = Pathname.new(template_file).sub_ext('')
71
+ def render_file(file_path)
72
+ ## Read file content
73
+ content = File.read file_path
78
74
 
79
- ## Rename template file
80
- File.rename template_file, real_pathname
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
- ## Update file content
83
- File.write real_pathname, content
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ProjectGenerator
4
- VERSION = '0.3.0'
4
+ VERSION = '1.0.0'
5
5
  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.3.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: 2022-09-28 00:00:00.000000000 Z
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: '2.0'
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: '2.0'
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: '5.0'
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: '5.0'
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/v0.3.0/CHANGELOG.md
261
- documentation_uri: http://www.rubydoc.info/gems/project_generator/0.3.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: '3.0'
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: 3.3.7
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: []