| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- require 'yajl/json_gem'
- module Docs
- class EntryIndex
- attr_reader :entries, :types
- def initialize
- @entries = []
- @index = Set.new
- @types = Hash.new { |hash, key| hash[key] = Type.new key }
- end
- def add(entry)
- if entry.is_a? Array
- entry.each(&method(:add))
- else
- add_entry(entry) unless entry.root?
- end
- end
- def empty?
- @entries.empty?
- end
- alias_method :blank?, :empty?
- def length
- @entries.length
- end
- def as_json
- { entries: entries_as_json, types: types_as_json }
- end
- def to_json
- JSON.generate(as_json)
- end
- private
- def add_entry(entry)
- if @index.add?(entry.as_json.to_s)
- @entries << entry.dup
- @types[entry.type].count += 1 if entry.type
- end
- end
- def entries_as_json
- @entries.sort!.map { |entry| entry.as_json }
- end
- def types_as_json
- @types.values.sort!.map { |type| type.as_json }
- end
- end
- end
|