Sha256: a9f9412384daad0bd336da23e317579e8600947ef569ca17d5ebddd79eafa327

Contents?: true

Size: 1.57 KB

Versions: 18

Compression:

Stored size: 1.57 KB

Contents

require 'jsonpath'

module Krikri
  ##
  # JsonParser
  # @see Krikri::Parser
  class JsonParser < Krikri::Parser
    ##
    # @param record [Krikri::OriginalRecord] a record whose properties can
    # be parsed by the parser instance.
    # @param root_path [String] JsonPath that identifies the root path for
    # the desired parse root.
    # @see http://goessner.net/articles/JsonPath/ JsonPath
    def initialize(record, root_path = '$')
      @root = Value.new(JsonPath.on(record.content, root_path).first)
      super(record)
    end

    ##
    # JsonParser::Value
    # @see Krikri::Parser::Value
    class Value < Krikri::Parser::Value
      attr_accessor :node

      def initialize(node)
        @node = node
      end

      def attributes
        raise NotImplementedError, 'Attributes are not supported for JSON'
      end

      def children
        @node.is_a?(Hash) ? @node.keys : []
      end

      def value
        @node.is_a?(Hash) ? nil : @node
      end

      def values?
        !select_values.empty?
      end

      private

      def get_child_nodes(name)
        if @node[name].is_a?(Array)
          vals = @node[name].map { |node| self.class.new(node) }
        else
          vals = Array(self.class.new(@node[name]))
        end
        vals.reject! { |n| n.node.nil? }
        Krikri::Parser::ValueArray.new(vals)
      end

      def attribute(name)
        msg = "Attributes are not supported for JSON; got attribute `#{name}`"
        raise NotImplementedError, msg
      end

      def select_values
        @node.is_a?(Hash) ? [] : @node
      end
    end
  end
end

Version data entries

18 entries across 18 versions & 1 rubygems

Version Path
krikri-0.5.7 lib/krikri/parsers/json_parser.rb
krikri-0.5.6 lib/krikri/parsers/json_parser.rb
krikri-0.5.5 lib/krikri/parsers/json_parser.rb
krikri-0.5.4 lib/krikri/parsers/json_parser.rb
krikri-0.5.3 lib/krikri/parsers/json_parser.rb
krikri-0.5.2 lib/krikri/parsers/json_parser.rb
krikri-0.5.1 lib/krikri/parsers/json_parser.rb
krikri-0.5.0 lib/krikri/parsers/json_parser.rb
krikri-0.4.0 lib/krikri/parsers/json_parser.rb
krikri-0.3.3 lib/krikri/parsers/json_parser.rb
krikri-0.3.2 lib/krikri/parsers/json_parser.rb
krikri-0.3.1 lib/krikri/parsers/json_parser.rb
krikri-0.2.1 lib/krikri/parsers/json_parser.rb
krikri-0.2.0 lib/krikri/parsers/json_parser.rb
krikri-0.1.3 lib/krikri/parsers/json_parser.rb
krikri-0.1.2 lib/krikri/parsers/json_parser.rb
krikri-0.1.1 lib/krikri/parsers/json_parser.rb
krikri-0.1.0 lib/krikri/parsers/json_parser.rb