Sha256: f3508e16f28a55092bb626e4a9b087b8f00ddffc4fd8cc612d6cb35c806a73bb

Contents?: true

Size: 1.66 KB

Versions: 3

Compression:

Stored size: 1.66 KB

Contents

module Schofield
  
  module Generators

    class Levels
      
      class << self; attr_reader :all, :hierarchy, :sortables end
      
      @all       = []
      @names     = {}
      @sortables = {}
      
      
      
      def self.models= models
        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
      
      def self.sortables
        @sortables.keys
      end
  
      def self.sortable=sortable
        @sortables[sortable] = true
      end
      
      def self.find name
        @all[@names[name]]
      end

      
      
      private
      
      
      def self.polymorphic_model? model
        model.columns.find { |c| c.name == 'type' }.present?
      end
      
      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
        
      def self.add_level model, superclass=nil
        level = Level.new(model, superclass)
        @all << level
        @names[model.name.underscore] = @all.length - 1
        level
      end
      
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
schofield-0.2.2 lib/generators/schofield/levels.rb
schofield-0.2.1 lib/generators/schofield/levels.rb
schofield-0.2.0 lib/generators/schofield/levels.rb