Sha256: 96c7d861253081e2184b6dfa51b93c9ac3d3951160792f1b657c92a5dd9e6f05

Contents?: true

Size: 1.21 KB

Versions: 16

Compression:

Stored size: 1.21 KB

Contents

require 'active_model_serializers'
require 'active_support/core_ext'

module Xing
  module Services
    class JsonTreeLister

      class TreeNode
        include ActiveModel::SerializerSupport

        def initialize(node, children)
          @node = node
          @children = children
        end

        attr_reader :node, :children
      end

      def initialize(nodes, node_serializer)
        @nodes = nodes
        @node_serializer = node_serializer
        @stack = [[]]
        @path = []
      end

      def render_node(node, children)
        @node_serializer.new(TreeNode.new(node, children)).as_json
      end

      def pop_level
        children = @stack.pop
        @stack.last << render_node(@path.pop, children)
      end

      def render
        (@nodes + [nil]).each_cons(2) do |this, after|
          until @path.empty? or @path.last.is_ancestor_of?(this)
            pop_level
          end
          if after.nil? or !this.is_ancestor_of?(after)
            @stack.last << render_node(this, [])
          else
            @path << this
            @stack << []
          end
        end
        until @path.empty?
          pop_level
        end
        return @stack.last.first
      end


    end
  end
end

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
xing-backend-1.0.0.pre.beta lib/xing/services/json_tree_lister.rb
xing-backend-0.0.25 lib/xing/services/json_tree_lister.rb
xing-backend-0.0.23 lib/xing/services/json_tree_lister.rb
xing-backend-0.0.22 lib/xing/services/json_tree_lister.rb
xing-backend-0.0.21 lib/xing/services/json_tree_lister.rb
xing-backend-0.0.20 lib/xing/services/json_tree_lister.rb
xing-backend-0.0.19 lib/xing/services/json_tree_lister.rb
xing-backend-0.0.18 lib/xing/services/json_tree_lister.rb
xing-backend-0.0.17 lib/xing/services/json_tree_lister.rb
xing-backend-0.0.16 lib/xing/services/json_tree_lister.rb
xing-backend-0.0.15 lib/xing/services/json_tree_lister.rb
xing-backend-0.0.14 lib/xing/services/json_tree_lister.rb
xing-backend-0.0.13 lib/xing/services/json_tree_lister.rb
xing-backend-0.0.12 lib/xing/services/json_tree_lister.rb
xing-backend-0.0.11 lib/xing/services/json_tree_lister.rb
xing-backend-0.0.10 lib/xing/services/json_tree_lister.rb