class Schofield::Generators::Levels

Attributes

all[R]
hierarchy[R]
sortables[R]

Public Class Methods

exists?(name) click to toggle source
# File lib/generators/schofield/levels.rb, line 42
def self.exists? name
  @model_names.include?(name.to_s)
end
find(name) click to toggle source
# File lib/generators/schofield/levels.rb, line 38
def self.find name
  @all[@names[name]]
end
models=(models) click to toggle source
# File lib/generators/schofield/levels.rb, line 15
def self.models= models
  @model_names = models.map{ |m| m.name.underscore }
  models.each do |model|
    if polymorphic_model?(model)
      superclass = add_level(model)
      subclasses(model).each do |subclass|
        add_level(subclass, superclass)
        superclass.subclasses << subclass
      end
    else
      add_level(model)
    end
  end
end
sortable=(sortable) click to toggle source
# File lib/generators/schofield/levels.rb, line 34
def self.sortable=sortable
  @sortables[sortable] = true
end

Private Class Methods

add_level(model, superclass=nil) click to toggle source
# File lib/generators/schofield/levels.rb, line 70
def self.add_level model, superclass=nil
  level = Level.new(model, superclass)
  @all << level
  @names[model.name.underscore] = @all.length - 1
  level
end
polymorphic_model?(model) click to toggle source
# File lib/generators/schofield/levels.rb, line 51
def self.polymorphic_model? model
  model.columns.find { |c| c.name == 'type' }.present?
end
subclasses(model) click to toggle source
# File lib/generators/schofield/levels.rb, line 55
def self.subclasses model
  begin
    answer = Responses.get "Which models extend #{model.name}?"
    subclasses = answer.split(/[^\w]+/).map{ |a| a.camelize.constantize }
    raise StandardError if subclasses.blank?
  rescue NameError => error
    Responses.say "Could not find models: #{error}"
    retry
  rescue StandardError
    Responses.say "You must answer!"
    retry
  end
  subclasses
end