planter 0.1.1 → 0.1.2

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: b346415e35c538e46222ced2131792a27f778fafe169143116c6908ddca88aac
4
- data.tar.gz: ed3952a7fd92566b2acb31e0fee881549675f40aa579ebe9115db2f86f302eb0
3
+ metadata.gz: 39fe6b05679379fdcf8c619b1db28fdac6a6f89eec521b3e8cf3f3667a471c49
4
+ data.tar.gz: 42693cdccc9239a069996c74455edc658b339a894eff5b984ec00bba47a88797
5
5
  SHA512:
6
- metadata.gz: d07501dd0544476e04b768277d870f035626f6c00218a9f248e6fe6f7dcae833757162b688a269066bc8daa5dae1d2fb6f20db7c45273245da60f900cde80f3f
7
- data.tar.gz: '09e7ba1054d15f7aa68aedaac7915fdda444eac1bff9630402e5f5999f872283e978b5e60b9581310cdd2bbc9ea4688d73b3fd7d6c8781b802b8bb21cee7fb8c'
6
+ metadata.gz: c3ffd760187e67c1f57b7daf7a1bba7f019470f1324ddaf72d1412c34930ea520eea449aebd0cea43b6b48de948f93ba80f47bafe6de782f550c35daf0bb8508
7
+ data.tar.gz: cfd8daff8e7d45a9d72411c195b31be7d1ddde9b562a03397b43f0848360c701d569289ab32e3260bf03f765752cd81fa123f3b597d9b08cc69ac9a6cab7bb6f
data/README.md CHANGED
@@ -144,8 +144,8 @@ class UsersSeeder < Planter::Seeder
144
144
  end
145
145
  ```
146
146
 
147
- `ERB` can be used in the CSV files if you end the file name with `.csv.erb`.
148
- For example, `users.csv.erb`.
147
+ `ERB` can be used in the CSV files if you end the file name with `.csv.erb` or
148
+ `.erb.csv`. For example, `users.csv.erb`.
149
149
 
150
150
  ```
151
151
  participant_id,name
@@ -142,7 +142,7 @@ module Planter
142
142
  # The csv file corresponding to the model.
143
143
  #
144
144
  # @return [String]
145
- class_attribute :csv_file
145
+ class_attribute :csv_name
146
146
 
147
147
  ##
148
148
  # The seeding method specified.
@@ -151,79 +151,59 @@ module Planter
151
151
  class_attribute :seed_method
152
152
 
153
153
  ##
154
- # Access the metaclass so we can define public and private class methods.
155
- class << self
156
- ##
157
- # If your class is going to use the inherited +seed+ method, you must tell
158
- # it which +seeding_method+ to use. The argument to this method must be
159
- # included in the +SEEDING_METHODS+ array.
160
- #
161
- # @param [Symbol] seed_method
162
- #
163
- # @kwarg [Integer] number_of_records
164
- #
165
- # @kwarg [String] model
166
- #
167
- # @kwarg [String] parent
168
- #
169
- # @kwarg [Symbol, String] parent
170
- #
171
- # @kwarg [Symbol, String] csv_name
172
- #
173
- # @kwarg [Symbol, String] unique_columns
174
- #
175
- # @kwarg [String] erb_trim_mode
176
- #
177
- # @example
178
- # require 'planter'
179
- # class UsersSeeder < Planter::Seeder
180
- # seeding_method :csv,
181
- # number_of_records: 2,
182
- # model: 'User'
183
- # parent: :person,
184
- # csv_name: :awesome_users,
185
- # unique_columns %i[username email],
186
- # erb_trim_mode: '<>'
187
- # end
188
- def seeding_method(
189
- seed_method,
190
- number_of_records: 1,
191
- model: nil,
192
- parent: nil,
193
- csv_name: nil,
194
- unique_columns: nil,
195
- erb_trim_mode: nil
196
- )
197
- if !SEEDING_METHODS.include?(seed_method.intern)
198
- raise ArgumentError, "Method must be: #{SEEDING_METHODS.join(', ')}"
199
- end
200
-
201
- self.seed_method = seed_method
202
- self.number_of_records = number_of_records
203
- self.model = model || to_s.delete_suffix('Seeder').singularize
204
- self.parent = parent
205
- self.csv_file = determine_csv_filename(csv_name) if seed_method == :csv
206
- self.erb_trim_mode = erb_trim_mode || Planter.config.erb_trim_mode
207
- self.unique_columns =
208
- case unique_columns
209
- when String, Symbol then [unique_columns.intern]
210
- when Array then unique_columns.map(&:intern)
211
- end
154
+ # If your class is going to use the inherited +seed+ method, you must tell
155
+ # it which +seeding_method+ to use. The argument to this method must be
156
+ # included in the +SEEDING_METHODS+ array.
157
+ #
158
+ # @param [Symbol] seed_method
159
+ #
160
+ # @kwarg [Integer] number_of_records
161
+ #
162
+ # @kwarg [String] model
163
+ #
164
+ # @kwarg [Symbol, String] parent
165
+ #
166
+ # @kwarg [Symbol, String] csv_name
167
+ #
168
+ # @kwarg [Symbol, String] unique_columns
169
+ #
170
+ # @kwarg [String] erb_trim_mode
171
+ #
172
+ # @example
173
+ # require 'planter'
174
+ # class UsersSeeder < Planter::Seeder
175
+ # seeding_method :csv,
176
+ # number_of_records: 2,
177
+ # model: 'User'
178
+ # parent: :person,
179
+ # csv_name: :awesome_users,
180
+ # unique_columns %i[username email],
181
+ # erb_trim_mode: '<>'
182
+ # end
183
+ def self.seeding_method(
184
+ seed_method,
185
+ number_of_records: 1,
186
+ model: nil,
187
+ parent: nil,
188
+ csv_name: nil,
189
+ unique_columns: nil,
190
+ erb_trim_mode: nil
191
+ )
192
+ if !SEEDING_METHODS.include?(seed_method.intern)
193
+ raise ArgumentError, "Method must be: #{SEEDING_METHODS.join(', ')}"
212
194
  end
213
195
 
214
- private
215
-
216
- def determine_csv_filename(csv_name) # :nodoc:
217
- file = (
218
- csv_name || "#{to_s.delete_suffix('Seeder').underscore}"
219
- ).to_s + '.csv'
220
- [file, "#{file}.erb"].each do |f|
221
- fname = Rails.root.join(Planter.config.csv_files_directory, f).to_s
222
- return fname if ::File.file?(fname)
196
+ self.seed_method = seed_method
197
+ self.number_of_records = number_of_records
198
+ self.model = model || to_s.delete_suffix('Seeder').singularize
199
+ self.parent = parent
200
+ self.csv_name = csv_name || to_s.delete_suffix('Seeder').underscore
201
+ self.erb_trim_mode = erb_trim_mode || Planter.config.erb_trim_mode
202
+ self.unique_columns =
203
+ case unique_columns
204
+ when String, Symbol then [unique_columns.intern]
205
+ when Array then unique_columns.map(&:intern)
223
206
  end
224
-
225
- raise ArgumentError, "Couldn't find csv for #{model}"
226
- end
227
207
  end
228
208
 
229
209
  ##
@@ -231,6 +211,7 @@ module Planter
231
211
  # valid +seeding_method+, and not implement its own +seed+ method.
232
212
  def seed
233
213
  validate_attributes
214
+ extract_data_from_csv if seed_method == :csv
234
215
 
235
216
  parent ? create_records_from_parent : create_records
236
217
  end
@@ -263,18 +244,11 @@ module Planter
263
244
  def validate_attributes # :nodoc:
264
245
  case seed_method.intern
265
246
  when :csv
266
- contents = ::File.read(csv_file)
267
- if csv_file.end_with?('.erb')
268
- contents = ERB.new(contents, trim_mode: erb_trim_mode).result(binding)
269
- end
270
-
271
- @data ||= ::CSV.parse(
272
- contents, headers: true, header_converters: :symbol
273
- ).map(&:to_hash)
247
+ raise "Couldn't find csv for #{model}" unless full_csv_name
274
248
  when :data_array
275
- raise "Must define '@data'" if public_send(:data).nil?
249
+ raise 'data is not defined in the seeder' if public_send(:data).nil?
276
250
  else
277
- raise("Must set 'seeding_method'")
251
+ raise 'seeding_method not defined in the seeder'
278
252
  end
279
253
  end
280
254
 
@@ -304,5 +278,25 @@ module Planter
304
278
  @parent_model ||=
305
279
  association_options.fetch(:class_name, parent.to_s.classify)
306
280
  end
281
+
282
+ def full_csv_name
283
+ @full_csv_name ||=
284
+ %W[#{csv_name}.csv #{csv_name}.csv.erb #{csv_name}.erb.csv]
285
+ .map { |f| Rails.root.join(Planter.config.csv_files_directory, f).to_s }
286
+ .find { |f| ::File.file?(f) }
287
+ end
288
+
289
+ def extract_data_from_csv
290
+ contents = ::File.read(full_csv_name)
291
+ if full_csv_name.include?('.erb')
292
+ contents = ERB.new(contents, trim_mode: erb_trim_mode).result(binding)
293
+ end
294
+
295
+ @data ||= ::CSV.parse(
296
+ contents,
297
+ headers: true,
298
+ header_converters: :symbol
299
+ ).map(&:to_hash)
300
+ end
307
301
  end
308
302
  end
@@ -21,7 +21,7 @@ module Planter
21
21
  # Patch version.
22
22
  #
23
23
  # @return [Integer]
24
- PATCH = 1
24
+ PATCH = 2
25
25
 
26
26
  ##
27
27
  # Version as +[MAJOR, MINOR, PATCH]+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: planter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Evan Gray