Sha256: 5f09f4419ea00e7e3166922b5fd88e9f5cc3e36db20fa37967a75858b4ad1857

Contents?: true

Size: 1.07 KB

Versions: 1

Compression:

Stored size: 1.07 KB

Contents

module Rooler
  class LiquidInspector
    
    def initialize(klass)
      @klass = klass.to_s.downcase
    end
    
    def tree
      add_liquid_methods_as_nodes(::Tree::TreeNode.new(@klass))
    end

    private
      
    # Recursive method. Infers a class name using the name of the provided TreeNode. Creates nodes any liquid methods belonging to that class. If any of those nodes
    # are also associations, it calls itself on that node.
    def add_liquid_methods_as_nodes(tree)
      klass = tree.name.to_s.classify.constantize
      add_nodes_to_tree(tree, liquid_methods(klass))
      (associations(klass) & liquid_methods(klass)).each do |node|
        add_liquid_methods_as_nodes(tree[node])
      end
      return tree
    end
    
    def add_nodes_to_tree(tree, nodes)
      nodes.each {|node| tree << ::Tree::TreeNode.new(node)}
    end
    
    def associations(klass)
      klass.reflect_on_all_associations.map(&:name)
    end
    
    def liquid_methods(klass)
      klass::LiquidDropClass.public_instance_methods - Liquid::Drop.public_instance_methods
    end
    
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rooler-0.0.3 app/models/rooler/liquid_inspector.rb