class Tanemaki::Seeder
Public Class Methods
call(*args)
click to toggle source
# File lib/tanemaki.rb, line 62 def self.call(*args) new(*args) end
new(named_csv, options = {})
click to toggle source
# File lib/tanemaki.rb, line 67 def initialize(named_csv, options = {}) @named_csv = named_csv @evaluate = options[:evaluatable] || [] @eval_scope = options[:eval_scope] @klass = options[:klass] @method = options[:method] || :create end
Public Instance Methods
evaluate(*column_names, eval_scope: nil)
click to toggle source
# File lib/tanemaki.rb, line 76 def evaluate(*column_names, eval_scope: nil) Seeder.(@named_csv, for_chain.merge(eval_scope: eval_scope || @eval_scope, evaluatable: column_names)) end
named_csv()
click to toggle source
# File lib/tanemaki.rb, line 81 def named_csv @named_csv end
random(klass = nil, method_name = nil, &block)
click to toggle source
# File lib/tanemaki.rb, line 86 def random(klass = nil, method_name = nil, &block) Seeder.(@named_csv.shuffle, for_chain).seed(klass, method_name, &block) end
seed(klass = nil, method = nil, &block)
click to toggle source
# File lib/tanemaki.rb, line 91 def seed(klass = nil, method = nil, &block) @named_csv.map do |row| readiness, nameless = begin result = evaluated(row.dup) [result, result.delete(:namelass_parameter_array)] end begin (klass || @klass).send((method || @method), *nameless, **readiness) rescue => e raise e unless block_given? block.(e, row) nil end end.compact end
select(*column_names)
click to toggle source
# File lib/tanemaki.rb, line 110 def select(*column_names) Seeder.(@named_csv.map do |row| column_names.each_with_object({}) do |name, new_row| new_row[name] = row[name] end.merge(namelass_parameter_array: row[:namelass_parameter_array]) end, for_chain) end
Private Instance Methods
do_eval(value)
click to toggle source
# File lib/tanemaki.rb, line 137 def do_eval(value) return eval(value) unless @eval_scope @eval_scope.instance_eval do eval(value) end rescue value end
evaluated(row)
click to toggle source
# File lib/tanemaki.rb, line 120 def evaluated(row) return row if @evaluate.size == 0 row[:namelass_parameter_array].map!.with_index do |value, index| next value unless @evaluate.include?(index) do_eval(value) end row.each_pair.each_with_object({}) do |(key, value), result| next result[key] = value unless @evaluate.include?(key) result[key] = do_eval(value) end end
for_chain()
click to toggle source
# File lib/tanemaki.rb, line 148 def for_chain { evaluatable: @evaluate, eval_scope: @eval_scope, klass: @klass, method: @method } end