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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a542b8919dda44137996b078e0ac3f773fc8b85bed2225193de3f2a36bdfe099
4
- data.tar.gz: '058271874209001fd8de03630c2e3f162959621769225bb354060f1ed8848354'
3
+ metadata.gz: e17464950e5c9388e88fa5c7567920ec3e71543f67440d8ac2ae61ff5d058f1e
4
+ data.tar.gz: a5ceb84a52cdf6f04f34283ab1fb96dcffbd3c59bf0e84a7926ee7c80ef8a6ae
5
5
  SHA512:
6
- metadata.gz: c9728b99a23877a7f96f4267b963dd7f4e15f4c385303759476937f7f3f33bd6335ec0e6b89fde733ecfd7f5380386ba86ca26bfbdb9ac70f587b8a05efc8812
7
- data.tar.gz: 1af8f9af55ca77f91f2ef7c01b8cb2c1919166be12f8785d779137d68237050b1ab259726da9546dea7dd2184f85431930e9ec8785d269c16ee1ba6add884b92
6
+ metadata.gz: 21a073b1fdbbdad594f328ac020382d72fc48d5ceb08103727748eab37b0138ed88e4f07d0e3a40a4dc2d881e7cefce94ef8311fc16d3e87c747e23ca4a229db
7
+ data.tar.gz: 5b45a2c739c47c184b2fc9a3f1dc1b2b766122565e780b77a162a9a5767fca665b972f4f62af88182f51b02a4c031239d1019788ce93462275f80e950d13b420
data/README.md CHANGED
@@ -1,10 +1,9 @@
1
1
  # Planter
2
2
  [![Build Status](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Factions-badge.atrox.dev%2Fevanthegrayt%2Fplanter%2Fbadge%3Fref%3Dmaster&style=flat)](https://actions-badge.atrox.dev/evanthegrayt/planter/goto?ref=master)
3
3
  [![Gem Version](https://badge.fury.io/rb/planter.svg)](https://badge.fury.io/rb/planter)
4
+ ![Language: Ruby](https://img.shields.io/static/v1?label=language&message=Ruby&color=CC342D&style=flat&logo=ruby&logoColor=CC342D)
4
5
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](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.1.3'
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 %>,"Test User1"
154
- <%= Participant.find_by(email: 'test2@example.com').id %>,"Test User2"
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 'bundler/setup'
2
- require 'bundler/gem_tasks'
3
- require 'rake/testtask'
4
- require 'rdoc/task'
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 << 'test'
8
- t.pattern = 'test/**/*_test.rb'
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 = 'README.md'
14
- rdoc.rdoc_dir = 'docs'
15
- rdoc.rdoc_files.include('README.md', 'lib/**/*.rb')
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 'Genrates an initializer for Planter at config/initializers/planter.rb'
4
+ desc "Genrates an initializer for Planter at config/initializers/planter.rb"
5
5
 
6
6
  def create_initializer_file
7
- create_file 'config/initializers/planter.rb', <<~EOF
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 == 'ALL' ? tables.each { |t| generate(t) } : generate(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 'config/initializers/planter.rb',
28
+ inject_into_file "config/initializers/planter.rb",
29
29
  " #{seeder}\n",
30
30
  before: /^\s*\]\s*$/
31
31
  end
@@ -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('db', 'seeds')
59
- @csv_files_directory = ::File.join('db', 'seed_files')
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
@@ -4,10 +4,10 @@ module Planter
4
4
  class Railtie < ::Rails::Railtie # :nodoc:
5
5
  rake_tasks do
6
6
  load File.join(
7
- File.expand_path(File.dirname(__FILE__)),
8
- '..',
9
- 'tasks',
10
- 'planter_tasks.rake'
7
+ __dir__,
8
+ "..",
9
+ "tasks",
10
+ "planter_tasks.rake"
11
11
  )
12
12
  end
13
13
  end
@@ -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('Seeder').singularize
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('Seeder').underscore
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 'data is not defined in the seeder' if public_send(:data).nil?
278
+ raise "data is not defined in the seeder" if public_send(:data).nil?
279
279
  else
280
- raise 'seeding_method not defined in the seeder'
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
- Hash[record.map { |field, value| map_record(field, value, record) }]
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?('.erb')
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
 
@@ -15,19 +15,21 @@ module Planter
15
15
  # Minor version.
16
16
  #
17
17
  # @return [Integer]
18
- MINOR = 1
18
+ MINOR = 3
19
19
 
20
20
  ##
21
21
  # Patch version.
22
22
  #
23
23
  # @return [Integer]
24
- PATCH = 3
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 self.to_a
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 self.to_s
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 self.to_h
47
- Hash[%i[major minor patch].zip(to_a)]
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 'csv'
4
- require 'erb'
5
- require 'planter/version'
6
- require 'planter/railtie'
7
- require 'planter/config'
8
- require 'planter/seeder'
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 self.config
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 self.reset_config
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 self.configure
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 self.seed
69
- seeders = ENV['SEEDERS']&.split(',') || config.seeders&.map(&:to_s)
70
- raise RuntimeError, 'No seeders specified' if seeders.blank?
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 'planter'
1
+ require "planter"
2
2
 
3
3
  namespace :planter do
4
- desc 'Seed application. Use this to keep planter separate from db:seed'
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['SEEDERS_DIRECTORY'] && config.seeders_directory = ENV['SEEDERS_DIRECTORY']
9
- ENV['CSV_FILES_DIRECTORY'] && config.csv_files_directory = ENV['CSV_FILES_DIRECTORY']
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.1.3
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: 2022-01-05 00:00:00.000000000 Z
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: 6.1.4.4
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: 6.1.4.4
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: '0'
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: 3.2.22
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: []