Class: Tanemaki::Seeder

Inherits:
Object show all
Defined in:
lib/tanemaki.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(named_csv, options = {}) ⇒ Seeder

Returns a new instance of Seeder.



67
68
69
70
71
72
73
# 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

Class Method Details

.call(*args) ⇒ Object



62
63
64
# File 'lib/tanemaki.rb', line 62

def self.call(*args)
  new(*args)
end

Instance Method Details

#evaluate(*column_names, eval_scope: nil) ⇒ Object



76
77
78
# 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_csvObject



81
82
83
# File 'lib/tanemaki.rb', line 81

def named_csv
  @named_csv
end

#random(klass = nil, method_name = nil, &block) ⇒ Object



86
87
88
# 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) ⇒ Object



91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# 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) ⇒ Object



110
111
112
113
114
115
116
# 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