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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b9aae14d62a0773d4feb44b44b3100975b9553bcf6fb4f4236a19a9aff170918
4
- data.tar.gz: a1d099172e14308d76187c63ae5596f84bf21859ecfae7d109d081e876b9c950
3
+ metadata.gz: 9d73544e7817771707d5e7f1421767992e3c3f87d69ff5605268cd1be22cb98c
4
+ data.tar.gz: 1c6306a91c0f338c57b1cbc60b2d5046cd2e11e7d4774e6d38aa52e50d035a84
5
5
  SHA512:
6
- metadata.gz: ed17059f5eb6791783c32e9b0beca47d9c231b0d6d37c2864472a6c8bea34bbfe099d4ac212cdc95b3b7c88960c8258ad170cfd6798b84ae786b66250630cdd2
7
- data.tar.gz: 1e58946159f5c8c01991774084bf5967325ccaf6a71474ba4d4123e215bd794408e61ab0ad6bf15f21b5fd76bc3fc082b895d71bb490094c33c8c0a1dcdb5494
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:
@@ -1,6 +1,6 @@
1
1
  module BetterSeeder
2
- module Generators
3
- class DataGenerator
2
+ module Farms
3
+ class Farmer
4
4
  # Genera dati fittizi per il modello specificato utilizzando il file di structure.
5
5
  #
6
6
  # Opzioni attese (Hash):
@@ -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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module BetterSeeder
4
- VERSION = "0.1.1"
4
+ VERSION = "0.2.1"
5
5
  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/generators/data_generator"
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
- Generators::DataGenerator.generate(model: model_name, count: count)
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.1.1
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/generators/data_generator.rb
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