planter 0.1.3 → 0.3.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 +17 -7
- data/Rakefile +56 -9
- data/lib/generators/planter/initializer_generator.rb +2 -2
- data/lib/generators/planter/seeder_generator.rb +2 -2
- data/lib/planter/config.rb +2 -2
- data/lib/planter/railtie.rb +4 -4
- data/lib/planter/seeder.rb +7 -7
- data/lib/planter/version.rb +9 -7
- data/lib/planter.rb +14 -12
- data/lib/tasks/planter_tasks.rake +4 -4
- metadata +42 -11
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e17464950e5c9388e88fa5c7567920ec3e71543f67440d8ac2ae61ff5d058f1e
|
|
4
|
+
data.tar.gz: a5ceb84a52cdf6f04f34283ab1fb96dcffbd3c59bf0e84a7926ee7c80ef8a6ae
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 21a073b1fdbbdad594f328ac020382d72fc48d5ceb08103727748eab37b0138ed88e4f07d0e3a40a4dc2d881e7cefce94ef8311fc16d3e87c747e23ca4a229db
|
|
7
|
+
data.tar.gz: 5b45a2c739c47c184b2fc9a3f1dc1b2b766122565e780b77a162a9a5767fca665b972f4f62af88182f51b02a4c031239d1019788ce93462275f80e950d13b420
|
data/README.md
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
# Planter
|
|
2
2
|
[](https://actions-badge.atrox.dev/evanthegrayt/planter/goto?ref=master)
|
|
3
3
|
[](https://badge.fury.io/rb/planter)
|
|
4
|
+

|
|
4
5
|
[](https://opensource.org/licenses/MIT)
|
|
5
6
|
|
|
6
|
-
> Pre-release version! Anything is subject to change in the near future!
|
|
7
|
-
|
|
8
7
|
Seeds for Rails applications can get complicated fast, and Rails doesn't provide
|
|
9
8
|
much for assisting with this process. This plugin seeks to rectify that by
|
|
10
9
|
providing easy ways to seed specific tables.
|
|
@@ -24,7 +23,7 @@ currently a pre-release version, it's recommended to lock it to a specific
|
|
|
24
23
|
version, as breaking changes may occur, even at the minor level.
|
|
25
24
|
|
|
26
25
|
```ruby
|
|
27
|
-
gem 'planter', '0.
|
|
26
|
+
gem 'planter', '0.2.0'
|
|
28
27
|
```
|
|
29
28
|
|
|
30
29
|
And then execute:
|
|
@@ -146,12 +145,23 @@ end
|
|
|
146
145
|
```
|
|
147
146
|
|
|
148
147
|
`ERB` can be used in the CSV files if you end the file name with `.csv.erb` or
|
|
149
|
-
`.erb.csv`. For example, `users.csv.erb`.
|
|
148
|
+
`.erb.csv`. For example, `users.csv.erb`. When using ERB, instance variables set
|
|
149
|
+
in the seeder can be used in the CSV.
|
|
150
|
+
|
|
151
|
+
```ruby
|
|
152
|
+
class UsersSeeder < Planter::Seeder
|
|
153
|
+
seeding_method :csv, csv_name: :people
|
|
154
|
+
|
|
155
|
+
def initialize
|
|
156
|
+
@name_prefix = 'Test User'
|
|
157
|
+
end
|
|
158
|
+
end
|
|
159
|
+
```
|
|
150
160
|
|
|
151
161
|
```
|
|
152
162
|
participant_id,name
|
|
153
|
-
<%= Participant.find_by(email: 'test1@example.com').id
|
|
154
|
-
<%= Participant.find_by(email: 'test2@example.com').id
|
|
163
|
+
<%= Participant.find_by(email: 'test1@example.com').id %>,<%= @name_prefix %> 1
|
|
164
|
+
<%= Participant.find_by(email: 'test2@example.com').id %>,<%= @name_prefix %> 2
|
|
155
165
|
```
|
|
156
166
|
|
|
157
167
|
Note that, if you need to change the trim mode for ERB, you can set a default in
|
|
@@ -277,7 +287,7 @@ class UsersSeeder < Planter::Seeder
|
|
|
277
287
|
}
|
|
278
288
|
|
|
279
289
|
def seed
|
|
280
|
-
USERS.each { |email, attrs| User.where(email).first_or_create!(attrs) }
|
|
290
|
+
USERS.each { |email, attrs| User.where(email: email).first_or_create!(attrs) }
|
|
281
291
|
end
|
|
282
292
|
end
|
|
283
293
|
```
|
data/Rakefile
CHANGED
|
@@ -1,18 +1,65 @@
|
|
|
1
|
-
require
|
|
2
|
-
require
|
|
3
|
-
require
|
|
4
|
-
require
|
|
1
|
+
require "bundler/setup"
|
|
2
|
+
require "bundler/gem_tasks"
|
|
3
|
+
require "rake/testtask"
|
|
4
|
+
require "rdoc/task"
|
|
5
|
+
require "standard/rake"
|
|
5
6
|
|
|
6
7
|
Rake::TestTask.new(:test) do |t|
|
|
7
|
-
t.libs <<
|
|
8
|
-
t.pattern =
|
|
8
|
+
t.libs << "test"
|
|
9
|
+
t.pattern = "test/**/*_test.rb"
|
|
9
10
|
t.verbose = false
|
|
10
11
|
end
|
|
11
12
|
|
|
12
13
|
RDoc::Task.new do |rdoc|
|
|
13
|
-
rdoc.main =
|
|
14
|
-
rdoc.rdoc_dir =
|
|
15
|
-
rdoc.rdoc_files.include(
|
|
14
|
+
rdoc.main = "README.md"
|
|
15
|
+
rdoc.rdoc_dir = "docs"
|
|
16
|
+
rdoc.rdoc_files.include("README.md", "lib/**/*.rb")
|
|
16
17
|
end
|
|
17
18
|
|
|
18
19
|
task default: :test
|
|
20
|
+
|
|
21
|
+
namespace :version do
|
|
22
|
+
desc "Print the current version from the version.rb file"
|
|
23
|
+
task :current do
|
|
24
|
+
puts Planter::VERSION
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
namespace :increment do
|
|
28
|
+
desc "Increment the version's PATCH level"
|
|
29
|
+
task :patch do
|
|
30
|
+
File.join(__dir__, "lib", "planter", "version.rb").then do |version_file|
|
|
31
|
+
File.write(
|
|
32
|
+
version_file,
|
|
33
|
+
File.read(version_file).sub(/(PATCH\s=\s)(\d+)/) { "#{$1}#{$2.next}" }
|
|
34
|
+
)
|
|
35
|
+
end
|
|
36
|
+
system("bundle lock")
|
|
37
|
+
end
|
|
38
|
+
desc "Increment the version's MINOR level"
|
|
39
|
+
task :minor do
|
|
40
|
+
File.join(__dir__, "lib", "planter", "version.rb").then do |version_file|
|
|
41
|
+
File.write(
|
|
42
|
+
version_file,
|
|
43
|
+
File.read(version_file)
|
|
44
|
+
.sub(/(PATCH\s=\s)(\d+)/) { "#{$1}0" }
|
|
45
|
+
.sub(/(MINOR\s=\s)(\d+)/) { "#{$1}#{$2.next}" }
|
|
46
|
+
)
|
|
47
|
+
end
|
|
48
|
+
system("bundle lock")
|
|
49
|
+
end
|
|
50
|
+
desc "Increment the version's MAJOR level"
|
|
51
|
+
task :major do
|
|
52
|
+
File.join(__dir__, "lib", "planter", "version.rb").then do |version_file|
|
|
53
|
+
File.write(
|
|
54
|
+
version_file,
|
|
55
|
+
File.read(version_file)
|
|
56
|
+
.sub(/(PATCH\s=\s)(\d+)/) { "#{$1}0" }
|
|
57
|
+
.sub(/(MINOR\s=\s)(\d+)/) { "#{$1}0" }
|
|
58
|
+
.sub(/(MAJOR\s=\s)(\d+)/) { "#{$1}#{$2.next}" }
|
|
59
|
+
)
|
|
60
|
+
end
|
|
61
|
+
system("bundle lock")
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
module Planter
|
|
2
2
|
module Generators
|
|
3
3
|
class InitializerGenerator < Rails::Generators::Base
|
|
4
|
-
desc
|
|
4
|
+
desc "Genrates an initializer for Planter at config/initializers/planter.rb"
|
|
5
5
|
|
|
6
6
|
def create_initializer_file
|
|
7
|
-
create_file
|
|
7
|
+
create_file "config/initializers/planter.rb", <<~EOF
|
|
8
8
|
require 'planter'
|
|
9
9
|
|
|
10
10
|
Planter.configure do |config|
|
|
@@ -6,7 +6,7 @@ module Planter
|
|
|
6
6
|
desc "Creates a seeder file at #{::Planter.config.seeders_directory}"
|
|
7
7
|
|
|
8
8
|
def generate_seeders
|
|
9
|
-
seeder ==
|
|
9
|
+
(seeder == "ALL") ? tables.each { |t| generate(t) } : generate(seeder)
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
private
|
|
@@ -25,7 +25,7 @@ module Planter
|
|
|
25
25
|
end
|
|
26
26
|
EOF
|
|
27
27
|
|
|
28
|
-
inject_into_file
|
|
28
|
+
inject_into_file "config/initializers/planter.rb",
|
|
29
29
|
" #{seeder}\n",
|
|
30
30
|
before: /^\s*\]\s*$/
|
|
31
31
|
end
|
data/lib/planter/config.rb
CHANGED
|
@@ -55,8 +55,8 @@ module Planter
|
|
|
55
55
|
# Create a new instance of the config.
|
|
56
56
|
def initialize
|
|
57
57
|
@quiet = false
|
|
58
|
-
@seeders_directory = ::File.join(
|
|
59
|
-
@csv_files_directory = ::File.join(
|
|
58
|
+
@seeders_directory = ::File.join("db", "seeds")
|
|
59
|
+
@csv_files_directory = ::File.join("db", "seed_files")
|
|
60
60
|
end
|
|
61
61
|
end
|
|
62
62
|
end
|
data/lib/planter/railtie.rb
CHANGED
|
@@ -4,10 +4,10 @@ module Planter
|
|
|
4
4
|
class Railtie < ::Rails::Railtie # :nodoc:
|
|
5
5
|
rake_tasks do
|
|
6
6
|
load File.join(
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
__dir__,
|
|
8
|
+
"..",
|
|
9
|
+
"tasks",
|
|
10
|
+
"planter_tasks.rake"
|
|
11
11
|
)
|
|
12
12
|
end
|
|
13
13
|
end
|
data/lib/planter/seeder.rb
CHANGED
|
@@ -219,14 +219,14 @@ module Planter
|
|
|
219
219
|
erb_trim_mode: nil
|
|
220
220
|
)
|
|
221
221
|
unless SEEDING_METHODS.include?(seed_method.intern)
|
|
222
|
-
raise ArgumentError, "Method must be: #{SEEDING_METHODS.join(
|
|
222
|
+
raise ArgumentError, "Method must be: #{SEEDING_METHODS.join(", ")}"
|
|
223
223
|
end
|
|
224
224
|
|
|
225
225
|
self.seed_method = seed_method
|
|
226
226
|
self.number_of_records = number_of_records
|
|
227
|
-
self.model = model || to_s.delete_suffix(
|
|
227
|
+
self.model = model || to_s.delete_suffix("Seeder").singularize
|
|
228
228
|
self.parent = parent
|
|
229
|
-
self.csv_name = csv_name || to_s.delete_suffix(
|
|
229
|
+
self.csv_name = csv_name || to_s.delete_suffix("Seeder").underscore
|
|
230
230
|
self.erb_trim_mode = erb_trim_mode || Planter.config.erb_trim_mode
|
|
231
231
|
self.unique_columns =
|
|
232
232
|
case unique_columns
|
|
@@ -275,16 +275,16 @@ module Planter
|
|
|
275
275
|
when :csv
|
|
276
276
|
raise "Couldn't find csv for #{model}" unless full_csv_name
|
|
277
277
|
when :data_array
|
|
278
|
-
raise
|
|
278
|
+
raise "data is not defined in the seeder" if public_send(:data).nil?
|
|
279
279
|
else
|
|
280
|
-
raise
|
|
280
|
+
raise "seeding_method not defined in the seeder"
|
|
281
281
|
end
|
|
282
282
|
end
|
|
283
283
|
|
|
284
284
|
def apply_transformations(record)
|
|
285
285
|
return record if public_send(:transformations).nil?
|
|
286
286
|
|
|
287
|
-
|
|
287
|
+
record.map { |field, value| map_record(field, value, record) }.to_h
|
|
288
288
|
end
|
|
289
289
|
|
|
290
290
|
def map_record(field, value, record)
|
|
@@ -338,7 +338,7 @@ module Planter
|
|
|
338
338
|
|
|
339
339
|
def extract_data_from_csv
|
|
340
340
|
contents = ::File.read(full_csv_name)
|
|
341
|
-
if full_csv_name.include?(
|
|
341
|
+
if full_csv_name.include?(".erb")
|
|
342
342
|
contents = ERB.new(contents, trim_mode: erb_trim_mode).result(binding)
|
|
343
343
|
end
|
|
344
344
|
|
data/lib/planter/version.rb
CHANGED
|
@@ -15,19 +15,21 @@ module Planter
|
|
|
15
15
|
# Minor version.
|
|
16
16
|
#
|
|
17
17
|
# @return [Integer]
|
|
18
|
-
MINOR =
|
|
18
|
+
MINOR = 3
|
|
19
19
|
|
|
20
20
|
##
|
|
21
21
|
# Patch version.
|
|
22
22
|
#
|
|
23
23
|
# @return [Integer]
|
|
24
|
-
PATCH =
|
|
24
|
+
PATCH = 0
|
|
25
|
+
|
|
26
|
+
module_function
|
|
25
27
|
|
|
26
28
|
##
|
|
27
29
|
# Version as +[MAJOR, MINOR, PATCH]+
|
|
28
30
|
#
|
|
29
31
|
# @return [Array]
|
|
30
|
-
def
|
|
32
|
+
def to_a
|
|
31
33
|
[MAJOR, MINOR, PATCH]
|
|
32
34
|
end
|
|
33
35
|
|
|
@@ -35,16 +37,16 @@ module Planter
|
|
|
35
37
|
# Version as +MAJOR.MINOR.PATCH+
|
|
36
38
|
#
|
|
37
39
|
# @return [String]
|
|
38
|
-
def
|
|
39
|
-
to_a.join(
|
|
40
|
+
def to_s
|
|
41
|
+
to_a.join(".")
|
|
40
42
|
end
|
|
41
43
|
|
|
42
44
|
##
|
|
43
45
|
# Version as +{major: MAJOR, minor: MINOR, patch: PATCH}+
|
|
44
46
|
#
|
|
45
47
|
# @return [Hash]
|
|
46
|
-
def
|
|
47
|
-
|
|
48
|
+
def to_h
|
|
49
|
+
%i[major minor patch].zip(to_a).to_h
|
|
48
50
|
end
|
|
49
51
|
end
|
|
50
52
|
|
data/lib/planter.rb
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
4
|
-
require
|
|
5
|
-
require
|
|
6
|
-
require
|
|
7
|
-
require
|
|
8
|
-
require
|
|
3
|
+
require "csv"
|
|
4
|
+
require "erb"
|
|
5
|
+
require "planter/version"
|
|
6
|
+
require "planter/railtie"
|
|
7
|
+
require "planter/config"
|
|
8
|
+
require "planter/seeder"
|
|
9
9
|
|
|
10
10
|
##
|
|
11
11
|
# The main module for the plugin. It nicely wraps the +Planter::Config+ class
|
|
@@ -24,11 +24,13 @@ require 'planter/seeder'
|
|
|
24
24
|
#
|
|
25
25
|
# Planter.seed
|
|
26
26
|
module Planter
|
|
27
|
+
module_function
|
|
28
|
+
|
|
27
29
|
##
|
|
28
30
|
# The seeder configuration.
|
|
29
31
|
#
|
|
30
32
|
# @return [Planter::Config]
|
|
31
|
-
def
|
|
33
|
+
def config
|
|
32
34
|
@config ||= Planter::Config.new
|
|
33
35
|
end
|
|
34
36
|
|
|
@@ -36,7 +38,7 @@ module Planter
|
|
|
36
38
|
# Resets the config back to its initial state.
|
|
37
39
|
#
|
|
38
40
|
# @return [Planter::Config]
|
|
39
|
-
def
|
|
41
|
+
def reset_config
|
|
40
42
|
@config = Planter::Config.new
|
|
41
43
|
end
|
|
42
44
|
|
|
@@ -52,7 +54,7 @@ module Planter
|
|
|
52
54
|
# config.seeders_directory = 'db/seeds'
|
|
53
55
|
# config.csv_files_directory = 'db/seed_files'
|
|
54
56
|
# end
|
|
55
|
-
def
|
|
57
|
+
def configure
|
|
56
58
|
config.tap { |c| yield c }
|
|
57
59
|
end
|
|
58
60
|
|
|
@@ -65,9 +67,9 @@ module Planter
|
|
|
65
67
|
# @example
|
|
66
68
|
# # db/seeds.rb, assuming your +configure+ block is in an initializer.
|
|
67
69
|
# Planter.seed
|
|
68
|
-
def
|
|
69
|
-
seeders = ENV[
|
|
70
|
-
raise
|
|
70
|
+
def seed
|
|
71
|
+
seeders = ENV["SEEDERS"]&.split(",") || config.seeders&.map(&:to_s)
|
|
72
|
+
raise "No seeders specified" if seeders.blank?
|
|
71
73
|
|
|
72
74
|
seeders.each do |s|
|
|
73
75
|
require Rails.root.join(config.seeders_directory, "#{s}_seeder.rb").to_s
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
require
|
|
1
|
+
require "planter"
|
|
2
2
|
|
|
3
3
|
namespace :planter do
|
|
4
|
-
desc
|
|
4
|
+
desc "Seed application. Use this to keep planter separate from db:seed"
|
|
5
5
|
task seed: :environment do
|
|
6
6
|
Planter.configure do |config|
|
|
7
7
|
# NOTE: the seed method already looks for ENV['SEEDERS']
|
|
8
|
-
ENV[
|
|
9
|
-
ENV[
|
|
8
|
+
ENV["SEEDERS_DIRECTORY"] && config.seeders_directory = ENV["SEEDERS_DIRECTORY"]
|
|
9
|
+
ENV["CSV_FILES_DIRECTORY"] && config.csv_files_directory = ENV["CSV_FILES_DIRECTORY"]
|
|
10
10
|
end
|
|
11
11
|
Planter.seed
|
|
12
12
|
end
|
metadata
CHANGED
|
@@ -1,29 +1,62 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: planter
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Evan Gray
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: bin
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
12
|
+
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: csv
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - ">="
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: '0'
|
|
19
|
+
type: :runtime
|
|
20
|
+
prerelease: false
|
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
22
|
+
requirements:
|
|
23
|
+
- - ">="
|
|
24
|
+
- !ruby/object:Gem::Version
|
|
25
|
+
version: '0'
|
|
13
26
|
- !ruby/object:Gem::Dependency
|
|
14
27
|
name: rails
|
|
15
28
|
requirement: !ruby/object:Gem::Requirement
|
|
16
29
|
requirements:
|
|
17
|
-
- - "
|
|
30
|
+
- - ">="
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: 8.1.3
|
|
33
|
+
- - "<"
|
|
18
34
|
- !ruby/object:Gem::Version
|
|
19
|
-
version:
|
|
35
|
+
version: '9.0'
|
|
20
36
|
type: :runtime
|
|
21
37
|
prerelease: false
|
|
22
38
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
39
|
requirements:
|
|
24
|
-
- - "
|
|
40
|
+
- - ">="
|
|
25
41
|
- !ruby/object:Gem::Version
|
|
26
|
-
version:
|
|
42
|
+
version: 8.1.3
|
|
43
|
+
- - "<"
|
|
44
|
+
- !ruby/object:Gem::Version
|
|
45
|
+
version: '9.0'
|
|
46
|
+
- !ruby/object:Gem::Dependency
|
|
47
|
+
name: standard
|
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
|
49
|
+
requirements:
|
|
50
|
+
- - ">="
|
|
51
|
+
- !ruby/object:Gem::Version
|
|
52
|
+
version: '0'
|
|
53
|
+
type: :development
|
|
54
|
+
prerelease: false
|
|
55
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
56
|
+
requirements:
|
|
57
|
+
- - ">="
|
|
58
|
+
- !ruby/object:Gem::Version
|
|
59
|
+
version: '0'
|
|
27
60
|
description: Create a seeder for each table in your database, and easily seed from
|
|
28
61
|
CSV or custom methods
|
|
29
62
|
email:
|
|
@@ -51,7 +84,6 @@ metadata:
|
|
|
51
84
|
homepage_uri: https://github.com/evanthegrayt/planter
|
|
52
85
|
source_code_uri: https://github.com/evanthegrayt/planter
|
|
53
86
|
documentation_uri: https://evanthegrayt.github.io/planter/
|
|
54
|
-
post_install_message:
|
|
55
87
|
rdoc_options: []
|
|
56
88
|
require_paths:
|
|
57
89
|
- lib
|
|
@@ -59,15 +91,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
59
91
|
requirements:
|
|
60
92
|
- - ">="
|
|
61
93
|
- !ruby/object:Gem::Version
|
|
62
|
-
version:
|
|
94
|
+
version: 3.2.0
|
|
63
95
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
64
96
|
requirements:
|
|
65
97
|
- - ">="
|
|
66
98
|
- !ruby/object:Gem::Version
|
|
67
99
|
version: '0'
|
|
68
100
|
requirements: []
|
|
69
|
-
rubygems_version:
|
|
70
|
-
signing_key:
|
|
101
|
+
rubygems_version: 4.0.10
|
|
71
102
|
specification_version: 4
|
|
72
103
|
summary: Framework for seeding rails applications.
|
|
73
104
|
test_files: []
|