class Sprig::Reap::Inputs::Model

Attributes

input[R]

Public Class Methods

default() click to toggle source
# File lib/sprig/reap/inputs/model.rb, line 12
def self.default
  valid_classes.map(&to_model_inputs)
end
new(input) click to toggle source
# File lib/sprig/reap/inputs/model.rb, line 28
def initialize(input)
  @input = input.is_a?(String) ? eval(input) : input

  validate!
end
parse(input) click to toggle source
# File lib/sprig/reap/inputs/model.rb, line 16
def self.parse(input)
  collection = if input.is_a? String
    input.split(',').map { |string| string.strip }
  elsif input.is_a? ActiveRecord::Relation
    [input]
  else
    Array(input)
  end

  collection.map(&to_model_inputs)
end
valid_classes() click to toggle source
# File lib/sprig/reap/inputs/model.rb, line 5
def self.valid_classes
  @@valid_classes ||= begin
    Rails.application.eager_load!
    ActiveRecord::Base.subclasses
  end
end

Private Class Methods

to_model_inputs() click to toggle source
# File lib/sprig/reap/inputs/model.rb, line 44
def self.to_model_inputs
  proc { |input| new(input) }
end

Public Instance Methods

klass() click to toggle source
# File lib/sprig/reap/inputs/model.rb, line 34
def klass
  @klass ||= relation? ? input.klass : input
end
records() click to toggle source
# File lib/sprig/reap/inputs/model.rb, line 38
def records
  relation? ? input : input.all
end

Private Instance Methods

relation?() click to toggle source
# File lib/sprig/reap/inputs/model.rb, line 58
def relation?
  input.is_a? ActiveRecord::Relation
end
valid_classes() click to toggle source
# File lib/sprig/reap/inputs/model.rb, line 48
def valid_classes
  self.class.valid_classes
end
validate!() click to toggle source
# File lib/sprig/reap/inputs/model.rb, line 52
def validate!
  if valid_classes.exclude? klass
    raise ArgumentError, "Cannot create a seed file for #{klass} because it is not a subclass of ActiveRecord::Base."
  end
end