SpontaneousCMS/spontaneous

View on GitHub
lib/spontaneous/box_style.rb

Summary

Maintainability
A
0 mins
Test Coverage
# encoding: UTF-8


module Spontaneous
  class BoxStyle < Style
    attr_reader :box

    def self.to_directory_name(klass)
      return nil if excluded_classes.include?(klass)
      super
    end

    def initialize(box, owner = nil)
      @box = box
      @owner = box.owner.class
    end

    def inline_template(format)
      nil
    end

    def try_supertype_styles(renderer)
      []
    end




    def name
      box._name.to_s
    end

    def try_paths
      prototype = box._prototype
      box_name = box._name.to_s

      paths = owner_directory_paths(box_name)

      if style_name = prototype.default_style
        name = style_name.to_s
        paths.concat(owner_directory_paths(name))
        paths.concat(box_directory_paths(name))
      end

      if box.styles.empty?
        paths.concat(box_directory_names)
      else
        unless style_name = prototype.default_style
          box.styles.each do |style|
            name = style.name.to_s
            paths.concat(owner_directory_paths(name))
            paths.concat(box_directory_paths(name))
          end
        end
      end
      paths
    end

    def box_directory_names
      box_class = box._prototype.box_base_class
      box_supertypes = [box_class].concat(class_ancestors(box_class)).reject { |type| excluded_classes.include?(type) }
      return [nil] if box_supertypes.empty?
      box_supertypes.map { |type| to_directory_name(type) }
    end

    def excluded_classes
      model = box.model.content_model
      [Spontaneous::Box, model::Box].tap do |classes|
        classes.push(::Box) if defined?(::Box)
      end
    end

    def to_directory_name(klass)
      return nil if excluded_classes.include?(klass)
      super
    end

    def box_directory_paths(name)
      box_directory_names.map { |d| [d, name] }
    end

    def anonymous_template
      Proc.new { '${ render_content }' }
    end
  end
end