better_seeder 0.1.1 → 0.2.1
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/README.md +64 -0
- data/lib/better_seeder/{generators/data_generator.rb → farms/farmer.rb} +2 -2
- data/lib/better_seeder/generators/structure.rb +79 -0
- data/lib/better_seeder/version.rb +1 -1
- data/lib/better_seeder.rb +6 -2
- data/lib/generators/better_seeder/structure/structure_generator.rb +17 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9d73544e7817771707d5e7f1421767992e3c3f87d69ff5605268cd1be22cb98c
|
4
|
+
data.tar.gz: 1c6306a91c0f338c57b1cbc60b2d5046cd2e11e7d4774e6d38aa52e50d035a84
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c579ee578d90e816e920651a5576f29884f3cbc2b8b5663cba2eee5499e3ca661655592c8ad81d6edc42f7c5aefd054ad3fdeebe714be4d8a0c67c5c8337cdc9
|
7
|
+
data.tar.gz: cd5e076bc6b252d29c8cde4a530d887eddc9bf582236364b42130e74ce5340dd47520ec0d10fa4ec9fd62341ae9d7c94d4a249775ff0261b436eb7109b148bc8
|
data/README.md
CHANGED
@@ -199,6 +199,70 @@ This command processes each model by:
|
|
199
199
|
|
200
200
|
---
|
201
201
|
|
202
|
+
## Structure Generator
|
203
|
+
|
204
|
+
BetterSeeder now provides a custom Rails generator to scaffold a structure file template for your models. You can generate a structure file automatically using the following command:
|
205
|
+
|
206
|
+
```bash
|
207
|
+
rails generate better_seeder:structure MyNamespace::MyModel
|
208
|
+
```
|
209
|
+
|
210
|
+
This command creates a structure file template in the appropriate subdirectory under `db/seed/structure`. The generated file includes placeholders for:
|
211
|
+
|
212
|
+
- Attribute generators (via the `structure` method)
|
213
|
+
- Validation schema (via the `seed_schema` method)
|
214
|
+
- Seeding configuration (via the `seed_config` method)
|
215
|
+
- Uniqueness constraints (via the `unique_keys` method)
|
216
|
+
|
217
|
+
### Example Generated Template
|
218
|
+
|
219
|
+
```ruby
|
220
|
+
module MyNamespace
|
221
|
+
class MyModelStructure < BetterSeeder::StructureBase
|
222
|
+
# Defines generators for each attribute.
|
223
|
+
def self.structure
|
224
|
+
{
|
225
|
+
attribute_name: [:string, -> { "your value" }]
|
226
|
+
}
|
227
|
+
end
|
228
|
+
|
229
|
+
# Optional: Validate generated records using Dry-schema.
|
230
|
+
def self.seed_schema
|
231
|
+
Dry::Schema.Params do
|
232
|
+
required(:attribute_name).filled(:string)
|
233
|
+
end
|
234
|
+
end
|
235
|
+
|
236
|
+
# Specific seeding configuration for MyModel.
|
237
|
+
def self.seed_config
|
238
|
+
{
|
239
|
+
file_name: 'my_model_seed',
|
240
|
+
columns: { excluded: [] },
|
241
|
+
generate_data: true,
|
242
|
+
count: 10,
|
243
|
+
load_data: true,
|
244
|
+
parent: nil
|
245
|
+
}
|
246
|
+
end
|
247
|
+
|
248
|
+
# Optional: Uniqueness constraints.
|
249
|
+
def self.unique_keys
|
250
|
+
[]
|
251
|
+
end
|
252
|
+
end
|
253
|
+
end
|
254
|
+
```
|
255
|
+
|
256
|
+
This generator streamlines the setup of new structure files, ensuring consistency and saving time when defining your seed data configuration.
|
257
|
+
|
258
|
+
### Benefits
|
259
|
+
|
260
|
+
- **Automated Scaffolding:** Quickly generate a complete structure file template for any model.
|
261
|
+
- **Consistency:** All generated files adhere to a standard format, ensuring consistency across your seeding logic.
|
262
|
+
- **Customization:** Easily modify the generated file to fine-tune attribute generators, validation rules, seeding configuration, and uniqueness constraints.
|
263
|
+
|
264
|
+
---
|
265
|
+
|
202
266
|
## Conclusion
|
203
267
|
|
204
268
|
BetterSeeder provides a modular, configurable, and extensible system for seeding your Rails application's data:
|
@@ -0,0 +1,79 @@
|
|
1
|
+
# lib/better_seeder/generators/structure_generator.rb
|
2
|
+
require 'fileutils'
|
3
|
+
|
4
|
+
module BetterSeeder
|
5
|
+
module Generators
|
6
|
+
class Structure
|
7
|
+
TEMPLATE = <<~RUBY
|
8
|
+
module %{module_name}
|
9
|
+
class %{class_name}Structure < ::BetterSeeder::Structure::Utils
|
10
|
+
# Defines generators for each attribute.
|
11
|
+
def self.structure
|
12
|
+
{
|
13
|
+
# Replace with your attribute generators:
|
14
|
+
attribute_name: [:string, -> { "your value" }]
|
15
|
+
}
|
16
|
+
end
|
17
|
+
|
18
|
+
# Optional: Validate generated records using Dry-schema.
|
19
|
+
def self.seed_schema
|
20
|
+
Dry::Schema.Params do
|
21
|
+
# Replace with your validations:
|
22
|
+
required(:attribute_name).filled(:string)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# Specific seeding configuration for %{class_name}.
|
27
|
+
def self.seed_config
|
28
|
+
{
|
29
|
+
file_name: '%{file_name}',
|
30
|
+
columns: { excluded: [] },
|
31
|
+
generate_data: true,
|
32
|
+
count: 10,
|
33
|
+
load_data: true,
|
34
|
+
parent: nil
|
35
|
+
}
|
36
|
+
end
|
37
|
+
|
38
|
+
# Optional: Uniqueness constraints.
|
39
|
+
def self.unique_keys
|
40
|
+
[]
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
RUBY
|
45
|
+
|
46
|
+
# Generates a structure file for the given model name.
|
47
|
+
#
|
48
|
+
# @param model_name [String] The full model name (e.g., "MyNamespace::MyModel")
|
49
|
+
# @return [String] The full path to the generated file.
|
50
|
+
def self.generate(model_name)
|
51
|
+
# Split the model name into module parts and the actual class name.
|
52
|
+
parts = model_name.split("::")
|
53
|
+
class_name = parts.pop
|
54
|
+
module_name = parts.empty? ? "Main" : parts.join("::")
|
55
|
+
|
56
|
+
# Determine the file path.
|
57
|
+
# For example, for "MyNamespace::MyModel", the file will be placed in:
|
58
|
+
# lib/better_seeder/generators/my_namespace/my_model_structure.rb
|
59
|
+
folder_path = File.join(BetterSeeder.configuration.structure_path, *parts.map(&:underscore))
|
60
|
+
file_name = "#{class_name.underscore}_structure.rb"
|
61
|
+
full_path = File.join(folder_path, file_name)
|
62
|
+
|
63
|
+
# Ensure the target directory exists.
|
64
|
+
FileUtils.mkdir_p(folder_path) unless Dir.exist?(folder_path)
|
65
|
+
|
66
|
+
# Prepare the file content.
|
67
|
+
content = TEMPLATE % {
|
68
|
+
module_name: module_name,
|
69
|
+
class_name: class_name,
|
70
|
+
file_name: "#{class_name.underscore}_seed"
|
71
|
+
}
|
72
|
+
|
73
|
+
# Write the template to the file.
|
74
|
+
File.write(full_path, content)
|
75
|
+
full_path
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
data/lib/better_seeder.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require_relative "better_seeder/utils"
|
2
2
|
require_relative "better_seeder/configuration"
|
3
3
|
require_relative "better_seeder/structure/utils"
|
4
|
-
require_relative "better_seeder/
|
4
|
+
require_relative "better_seeder/farms/farmer"
|
5
5
|
require_relative "better_seeder/exporters/base"
|
6
6
|
require_relative "better_seeder/exporters/json"
|
7
7
|
require_relative "better_seeder/exporters/csv"
|
@@ -109,6 +109,10 @@ module BetterSeeder
|
|
109
109
|
log_statistics(stats, total_time)
|
110
110
|
end
|
111
111
|
|
112
|
+
def self.generate_structure(model_name: )
|
113
|
+
BetterSeeder::Generators::Structure.generate(model_name)
|
114
|
+
end
|
115
|
+
|
112
116
|
private
|
113
117
|
|
114
118
|
# Processa la configurazione per un singolo modello.
|
@@ -167,7 +171,7 @@ module BetterSeeder
|
|
167
171
|
|
168
172
|
# Recupera o genera i record.
|
169
173
|
records = if generate_data
|
170
|
-
|
174
|
+
Farms::Farmer.generate(model: model_name, count: count)
|
171
175
|
else
|
172
176
|
model_class.all.map(&:attributes)
|
173
177
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# lib/generators/better_seeder/structure/structure_generator.rb
|
2
|
+
require "rails/generators"
|
3
|
+
|
4
|
+
module BetterSeeder
|
5
|
+
module Structure
|
6
|
+
class StructureGenerator < Rails::Generators::NamedBase
|
7
|
+
# Optionally, if you have a template directory, you can set it here:
|
8
|
+
# source_root File.expand_path("templates", __dir__)
|
9
|
+
|
10
|
+
def create_structure_file
|
11
|
+
say_status("info", "Generating structure file for #{name}", :green)
|
12
|
+
file_path = BetterSeeder.generate_structure(model_name: name)
|
13
|
+
say_status("info", "Structure file created at #{file_path}", :green)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: better_seeder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- alessio_bussolari
|
@@ -138,10 +138,12 @@ files:
|
|
138
138
|
- lib/better_seeder/exporters/csv.rb
|
139
139
|
- lib/better_seeder/exporters/json.rb
|
140
140
|
- lib/better_seeder/exporters/sql.rb
|
141
|
-
- lib/better_seeder/
|
141
|
+
- lib/better_seeder/farms/farmer.rb
|
142
|
+
- lib/better_seeder/generators/structure.rb
|
142
143
|
- lib/better_seeder/structure/utils.rb
|
143
144
|
- lib/better_seeder/utils.rb
|
144
145
|
- lib/better_seeder/version.rb
|
146
|
+
- lib/generators/better_seeder/structure/structure_generator.rb
|
145
147
|
homepage: https://github.com/alessiobussolari/better_seeder
|
146
148
|
licenses:
|
147
149
|
- MIT
|