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 +4 -4
- data/README.md +63 -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_generator/structure_generator.rb +19 -0
- metadata +8 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d0703abc9a90ae9676b1c1d79553345e09e148b0c5411740779b1157c4d6cbdd
|
4
|
+
data.tar.gz: 1e0966ba4ea675cfdd6b6a28b8bae9457770957251272be352ed44e7db0d2b2b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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:
|
@@ -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,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.
|
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/
|
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
|