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