project_generator 0.3.0 → 0.4.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: 7a1dcab66058a6cd84b61ccd208951a9e877d7f69c5eebfab360cba3e3d42a71
4
+ data.tar.gz: '003292eaf64344e334f168e58de549c15137bcc265265fdf459fb7f469212800'
5
5
  SHA512:
6
- metadata.gz: edbcfdb661acac2dd0350dc62d0e21311017efb97603d0b8fe7c2ac67107acd239d728a1163e31b7828febe95f9ef2affedc762ed2759fa235a4d192b491ee34
7
- data.tar.gz: 7336c7f6866bd627889fecce51d50a555ce2d5ae714f3a5b77d841b58bdbc9154b25274ffdcfa596625625e9cb6c79b7186b11d0ccb3631de8f6cc431f8066a4
6
+ metadata.gz: 0464c7d19cd2225af883d7767960b690c62cc6e35586a6eb1f6a89675525c9f7da3bd15e75408232cbb9c1cc56214613878b8d2c19c1fe963d362f5a6329201b
7
+ data.tar.gz: 51a6dffa735d66d0ca8c2ca1fdedd8ca1780f9a0d80dba2422defff43d7b3d21d4b77362cdd58d83a1d0c1ecd9d453ad01d5c8fcbdbb2605b019d72a0d59da5e
data/CHANGELOG.md CHANGED
@@ -2,6 +2,14 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 0.4.0 (2024-05-16)
6
+
7
+ * Replace indentation not only for template (ERB) files.
8
+ * Improve specs.
9
+ * Add Ruby 3.2 and 3.3 support.
10
+ * Move development dependencies from `gemspec` into `Gemfile`.
11
+ * Update development dependencies.
12
+
5
13
  ## 0.3.0 (2022-09-29)
6
14
 
7
15
  * 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 = '0.4.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
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: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexander Popov
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-09-28 00:00:00.000000000 Z
11
+ date: 2024-05-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: alt_memery
@@ -66,174 +66,6 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
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'
237
69
  description: 'Base for various CLI generation tools.
238
70
 
239
71
  '
@@ -257,12 +89,12 @@ licenses:
257
89
  metadata:
258
90
  rubygems_mfa_required: 'true'
259
91
  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
92
+ changelog_uri: https://github.com/AlexWayfer/project_generator/blob/v0.4.0/CHANGELOG.md
93
+ documentation_uri: http://www.rubydoc.info/gems/project_generator/0.4.0
262
94
  homepage_uri: https://github.com/AlexWayfer/project_generator
263
95
  source_code_uri: https://github.com/AlexWayfer/project_generator
264
96
  wiki_uri: https://github.com/AlexWayfer/project_generator/wiki
265
- post_install_message:
97
+ post_install_message:
266
98
  rdoc_options: []
267
99
  require_paths:
268
100
  - lib
@@ -277,8 +109,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
277
109
  - !ruby/object:Gem::Version
278
110
  version: '0'
279
111
  requirements: []
280
- rubygems_version: 3.3.7
281
- signing_key:
112
+ rubygems_version: 3.5.10
113
+ signing_key:
282
114
  specification_version: 4
283
115
  summary: Base for various CLI generation tools
284
116
  test_files: []