better_seeder 0.1.0 → 0.2.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: 7d791cd07db093b5651fff8ee43c8a9b04360efd6ad7aaa83978f9233f53f7a2
4
- data.tar.gz: 4b4ca980a85b832b9261750db2742a89f61a18bc6a33f253a6486076a9a572ea
3
+ metadata.gz: d0703abc9a90ae9676b1c1d79553345e09e148b0c5411740779b1157c4d6cbdd
4
+ data.tar.gz: 1e0966ba4ea675cfdd6b6a28b8bae9457770957251272be352ed44e7db0d2b2b
5
5
  SHA512:
6
- metadata.gz: 765e67ac2cac0af3e1b3a443f9896ce1212a0a6e0e6815b4bd7e7e148f75aabab3b6da279f2b5dc32c5a070c02024567524e175c710a5604e297221aa70157e8
7
- data.tar.gz: a87f473eb71a6156dfdb829435323b67bcfe5645ebb30e32143071ba94107cdd99d730452032b6360c870212967d4d8e8c8b4f6fb496d6ba723384aa1e52e03e
6
+ metadata.gz: 83d3b209222d0a44824c7795a2ca3b041177e7d01d12277d89a3c5b39fd194157da4764e9d6a185759348c74d8d0bc10b6a2ac3587fcb607cdc5711d87bd339a
7
+ data.tar.gz: e11c9bf4bc617d3d588464eb0661811bfd198d8ccf9188421c95eff5437117f50ee542f3a894cff50bb99a3709d0211d8a822c708034588517bea6d4eddf2420
data/README.md CHANGED
@@ -199,6 +199,69 @@ This command processes each model by:
199
199
 
200
200
  ---
201
201
 
202
+ ## Structure Generator
203
+
204
+ `BetterSeeder.generate_structure(model_name: 'MyModel')` method. This functionality automatically creates a structure file template for a given model name. The generated file is saved in the appropriate subdirectory under `db/seed/structure` and includes placeholders for attribute generators, a validation schema, seed configuration, and uniqueness constraints.
205
+
206
+ ### How to Use
207
+
208
+ Simply call the method with your model name. For example:
209
+
210
+ ```ruby
211
+ BetterSeeder.generate_structure(model_name: 'MyNamespace::MyModel')
212
+ ```
213
+
214
+ This command will generate a file at `db/seed/structure/my_namespace/my_model_structure.rb`.
215
+
216
+ ### Example Generated File
217
+
218
+ The generated file will contain a template similar to the following:
219
+
220
+ ```ruby
221
+ module MyNamespace
222
+ class MyModelStructure < BetterSeeder::StructureBase
223
+ # Defines generators for each attribute.
224
+ def self.structure
225
+ {
226
+ attribute_name: [:string, -> { "your value" }]
227
+ }
228
+ end
229
+
230
+ # Optional: Validate generated records using Dry-schema.
231
+ def self.seed_schema
232
+ Dry::Schema.Params do
233
+ required(:attribute_name).filled(:string)
234
+ end
235
+ end
236
+
237
+ # Specific seeding configuration for MyModel.
238
+ def self.seed_config
239
+ {
240
+ file_name: 'my_model_seed',
241
+ columns: { excluded: [] },
242
+ generate_data: true,
243
+ count: 10,
244
+ load_data: true,
245
+ parent: nil
246
+ }
247
+ end
248
+
249
+ # Optional: Uniqueness constraints.
250
+ def self.unique_keys
251
+ []
252
+ end
253
+ end
254
+ end
255
+ ```
256
+
257
+ ### Benefits
258
+
259
+ - **Automated Scaffolding:** Quickly generate a complete structure file template for any model.
260
+ - **Consistency:** All generated files adhere to a standard format, ensuring consistency across your seeding logic.
261
+ - **Customization:** Easily modify the generated file to fine-tune attribute generators, validation rules, seeding configuration, and uniqueness constraints.
262
+
263
+ ---
264
+
202
265
  ## Conclusion
203
266
 
204
267
  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.0"
4
+ VERSION = "0.2.0"
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,19 @@
1
+ # lib/generators/better_seeder/structure_generator/structure_generator.rb
2
+ require 'rails/generators'
3
+ require 'better_seeder'
4
+
5
+ module BetterSeeder
6
+ module Generators
7
+ class StructureGenerator < Rails::Generators::NamedBase
8
+ # No template file is needed as our method generates the file content.
9
+ # Instead, we call the BetterSeeder.generate_structure method.
10
+ def create_structure_file
11
+ say_status("info", "Generating structure file for #{name}", :green)
12
+ # Call the generator method from your gem.
13
+ # It expects a keyword argument :model_name.
14
+ file_path = BetterSeeder.generate_structure(model_name: name)
15
+ say_status("info", "Structure file created at #{file_path}", :green)
16
+ end
17
+ end
18
+ end
19
+ 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.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - alessio_bussolari
@@ -70,28 +70,28 @@ dependencies:
70
70
  name: activesupport
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - "~>"
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
75
  version: '4.2'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - "~>"
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '4.2'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: activerecord
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - "~>"
87
+ - - ">="
88
88
  - !ruby/object:Gem::Version
89
89
  version: '4.2'
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - "~>"
94
+ - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '4.2'
97
97
  - !ruby/object:Gem::Dependency
@@ -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_generator/structure_generator.rb
145
147
  homepage: https://github.com/alessiobussolari/better_seeder
146
148
  licenses:
147
149
  - MIT