Sha256: a51b78afcee7e7133c534f0dbb146dae73739582995fdfafd877a6626115a6af

Contents?: true

Size: 1.13 KB

Versions: 1

Compression:

Stored size: 1.13 KB

Contents

module Lurker
  module Json
    class List < Schema
      def merge!(schema)
        if schema.is_a?(Array)
          schema.each { |payload| @schema[Json::ITEMS].merge!(payload) }
        else
          @schema[Json::ITEMS].merge!(schema)
        end
      end

      def replace!(property, schema)
        if @schema[Json::ITEMS].is_a?(Lurker::Json::Attribute)
          @schema[Json::ITEMS] = schema
        else
          @schema[Json::ITEMS].replace!(property, schema)
        end
      end

      private

      def parse_schema(schema)
        @schema = {}
        initialize_properties

        return if schema.empty?

        schema = schema.dup
        if schema.is_a?(Array)
          @schema[Json::ITEMS] = @parser.typed.parse(schema.shift)

          schema.each { |payload| @schema[Json::ITEMS].merge!(payload) }
        else
          @schema[Json::ITEMS] = @parser.typed.parse(schema.delete Json::ITEMS) if schema.key?(Json::ITEMS)
          @schema.merge!(schema)
        end

        @schema
      end

      def initialize_properties
        @schema[Json::TYPE] ||= Json::ARRAY
        @schema[Json::ITEMS] ||= []
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
lurker-0.6.4 lib/lurker/json/schema/list.rb