grainery 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/CHANGELOG.md +64 -0
- data/README.md +321 -19
- data/lib/grainery/grainer.rb +671 -9
- data/lib/grainery/version.rb +1 -1
- data/lib/tasks/grainery_tasks.rake +60 -3
- data/lib/tasks/test_db_tasks.rake +12 -0
- metadata +27 -7
data/lib/grainery/version.rb
CHANGED
|
@@ -22,7 +22,7 @@ namespace :grainery do
|
|
|
22
22
|
puts "Harvesting data from all tables..."
|
|
23
23
|
|
|
24
24
|
grainery = Grainery::Grainer.new
|
|
25
|
-
grainery.harvest_all(limit: 100) # Default limit of 100 records per table
|
|
25
|
+
grainery.harvest_all(limit: 100, dump_schema: true, anonymize: true) # Default limit of 100 records per table
|
|
26
26
|
|
|
27
27
|
puts "\n✓ Data harvested to db/grainery/"
|
|
28
28
|
end
|
|
@@ -33,15 +33,72 @@ namespace :grainery do
|
|
|
33
33
|
puts " This may take a while and create large files\n\n"
|
|
34
34
|
|
|
35
35
|
grainery = Grainery::Grainer.new
|
|
36
|
-
grainery.harvest_all(limit: nil)
|
|
36
|
+
grainery.harvest_all(limit: nil, dump_schema: true, anonymize: true)
|
|
37
37
|
|
|
38
38
|
puts "\n✓ All data harvested to db/grainery/"
|
|
39
39
|
end
|
|
40
40
|
|
|
41
|
+
desc "Harvest data without schema dump"
|
|
42
|
+
task generate_data_only: :environment do
|
|
43
|
+
puts "Harvesting data from all tables (no schema dump)..."
|
|
44
|
+
|
|
45
|
+
grainery = Grainery::Grainer.new
|
|
46
|
+
grainery.harvest_all(limit: 100, dump_schema: false, anonymize: true)
|
|
47
|
+
|
|
48
|
+
puts "\n✓ Data harvested to db/grainery/"
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
desc "Harvest data without anonymization (raw production data)"
|
|
52
|
+
task generate_raw: :environment do
|
|
53
|
+
puts "⚠ WARNING: Harvesting RAW production data without anonymization!"
|
|
54
|
+
puts " This will include sensitive information (emails, names, etc.)"
|
|
55
|
+
puts " DO NOT commit these files to version control\n\n"
|
|
56
|
+
|
|
57
|
+
grainery = Grainery::Grainer.new
|
|
58
|
+
grainery.harvest_all(limit: 100, dump_schema: true, anonymize: false)
|
|
59
|
+
|
|
60
|
+
puts "\n✓ Raw data harvested to db/grainery/"
|
|
61
|
+
puts "⚠ Remember: This data contains sensitive information!"
|
|
62
|
+
end
|
|
63
|
+
|
|
41
64
|
desc "Load harvested seeds into database (in dependency order)"
|
|
42
65
|
task load: :environment do
|
|
66
|
+
if Rails.env.production?
|
|
67
|
+
puts "❌ ERROR: Cannot load seeds in production environment!"
|
|
68
|
+
puts " This is a destructive operation that could overwrite production data."
|
|
69
|
+
puts "\n If you absolutely must load seeds in production:"
|
|
70
|
+
puts " Set GRAINERY_ALLOW_PRODUCTION=true environment variable"
|
|
71
|
+
puts "\n Example: GRAINERY_ALLOW_PRODUCTION=true rake grainery:load"
|
|
72
|
+
exit 1 unless ENV['GRAINERY_ALLOW_PRODUCTION'] == 'true'
|
|
73
|
+
|
|
74
|
+
puts "⚠️ WARNING: Loading seeds in PRODUCTION environment!"
|
|
75
|
+
puts " Proceeding because GRAINERY_ALLOW_PRODUCTION=true"
|
|
76
|
+
puts " Press Ctrl+C within 5 seconds to cancel..."
|
|
77
|
+
sleep 5
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
grainery = Grainery::Grainer.new
|
|
81
|
+
grainery.load_seeds(load_schema: false)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
desc "Load schemas and seeds into database"
|
|
85
|
+
task load_with_schema: :environment do
|
|
86
|
+
if Rails.env.production?
|
|
87
|
+
puts "❌ ERROR: Cannot load schemas in production environment!"
|
|
88
|
+
puts " This is a destructive operation that could overwrite production data."
|
|
89
|
+
puts "\n If you absolutely must load schemas in production:"
|
|
90
|
+
puts " Set GRAINERY_ALLOW_PRODUCTION=true environment variable"
|
|
91
|
+
puts "\n Example: GRAINERY_ALLOW_PRODUCTION=true rake grainery:load_with_schema"
|
|
92
|
+
exit 1 unless ENV['GRAINERY_ALLOW_PRODUCTION'] == 'true'
|
|
93
|
+
|
|
94
|
+
puts "⚠️ WARNING: Loading schemas and seeds in PRODUCTION environment!"
|
|
95
|
+
puts " Proceeding because GRAINERY_ALLOW_PRODUCTION=true"
|
|
96
|
+
puts " Press Ctrl+C within 5 seconds to cancel..."
|
|
97
|
+
sleep 5
|
|
98
|
+
end
|
|
99
|
+
|
|
43
100
|
grainery = Grainery::Grainer.new
|
|
44
|
-
grainery.load_seeds
|
|
101
|
+
grainery.load_seeds(load_schema: true)
|
|
45
102
|
end
|
|
46
103
|
|
|
47
104
|
desc "Clean grainery directory"
|
|
@@ -2,6 +2,12 @@ namespace :test do
|
|
|
2
2
|
namespace :db do
|
|
3
3
|
desc "Setup clean test database for grainery-based testing"
|
|
4
4
|
task setup_for_grainery: :environment do
|
|
5
|
+
if Rails.env.production?
|
|
6
|
+
puts "❌ ERROR: Cannot run test database setup in production environment!"
|
|
7
|
+
puts " This task is only for test/development environments."
|
|
8
|
+
exit 1
|
|
9
|
+
end
|
|
10
|
+
|
|
5
11
|
puts "Setting up clean test database for grainery-based testing..."
|
|
6
12
|
|
|
7
13
|
# Switch to test environment
|
|
@@ -76,6 +82,12 @@ namespace :test do
|
|
|
76
82
|
|
|
77
83
|
desc "Clean test database (truncate all tables)"
|
|
78
84
|
task clean: :environment do
|
|
85
|
+
if Rails.env.production?
|
|
86
|
+
puts "❌ ERROR: Cannot truncate tables in production environment!"
|
|
87
|
+
puts " This is a destructive operation."
|
|
88
|
+
exit 1
|
|
89
|
+
end
|
|
90
|
+
|
|
79
91
|
Rails.env = 'test'
|
|
80
92
|
ActiveRecord::Base.establish_connection(:test)
|
|
81
93
|
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: grainery
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Michail Pantelelis
|
|
@@ -11,32 +11,52 @@ date: 1980-01-02 00:00:00.000000000 Z
|
|
|
11
11
|
dependencies:
|
|
12
12
|
- !ruby/object:Gem::Dependency
|
|
13
13
|
name: rails
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - ">="
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: '6.1'
|
|
19
|
+
- - "<"
|
|
20
|
+
- !ruby/object:Gem::Version
|
|
21
|
+
version: '9'
|
|
22
|
+
type: :runtime
|
|
23
|
+
prerelease: false
|
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
25
|
+
requirements:
|
|
26
|
+
- - ">="
|
|
27
|
+
- !ruby/object:Gem::Version
|
|
28
|
+
version: '6.1'
|
|
29
|
+
- - "<"
|
|
30
|
+
- !ruby/object:Gem::Version
|
|
31
|
+
version: '9'
|
|
32
|
+
- !ruby/object:Gem::Dependency
|
|
33
|
+
name: faker
|
|
14
34
|
requirement: !ruby/object:Gem::Requirement
|
|
15
35
|
requirements:
|
|
16
36
|
- - "~>"
|
|
17
37
|
- !ruby/object:Gem::Version
|
|
18
|
-
version: '
|
|
38
|
+
version: '3.0'
|
|
19
39
|
type: :runtime
|
|
20
40
|
prerelease: false
|
|
21
41
|
version_requirements: !ruby/object:Gem::Requirement
|
|
22
42
|
requirements:
|
|
23
43
|
- - "~>"
|
|
24
44
|
- !ruby/object:Gem::Version
|
|
25
|
-
version: '
|
|
45
|
+
version: '3.0'
|
|
26
46
|
- !ruby/object:Gem::Dependency
|
|
27
|
-
name:
|
|
47
|
+
name: minitest
|
|
28
48
|
requirement: !ruby/object:Gem::Requirement
|
|
29
49
|
requirements:
|
|
30
50
|
- - "~>"
|
|
31
51
|
- !ruby/object:Gem::Version
|
|
32
|
-
version: '
|
|
52
|
+
version: '5.0'
|
|
33
53
|
type: :development
|
|
34
54
|
prerelease: false
|
|
35
55
|
version_requirements: !ruby/object:Gem::Requirement
|
|
36
56
|
requirements:
|
|
37
57
|
- - "~>"
|
|
38
58
|
- !ruby/object:Gem::Version
|
|
39
|
-
version: '
|
|
59
|
+
version: '5.0'
|
|
40
60
|
- !ruby/object:Gem::Dependency
|
|
41
61
|
name: sqlite3
|
|
42
62
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -82,7 +102,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
82
102
|
requirements:
|
|
83
103
|
- - ">="
|
|
84
104
|
- !ruby/object:Gem::Version
|
|
85
|
-
version: 2.
|
|
105
|
+
version: 3.2.0
|
|
86
106
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
87
107
|
requirements:
|
|
88
108
|
- - ">="
|