class Popularity::MultiSearch

Attributes

searches[RW]
sources[RW]

Public Class Methods

new(options = {}) click to toggle source
# File lib/popularity.rb, line 36
def initialize(options = {})
  @searches = options[:urls].collect { |url| Search.new(url) }

  @searches.each do |search|
    search.results.each do |result|
      add_search_result(result)
    end
  end
end

Public Instance Methods

as_json(options = {}) click to toggle source
# File lib/popularity.rb, line 50
def as_json(options = {})
  json = {}
  self.searches.collect do |search|
    json[search.url] = search.as_json
  end

  self.sources.collect do |source|
    json[source.to_s] = self.send(source.to_sym).as_json
  end

  json["total"] = total

  json
end
results() click to toggle source
# File lib/popularity.rb, line 46
def results
  searches.collect(&:results).reduce(:+)
end
total() click to toggle source
# File lib/popularity.rb, line 65
def total
  self.searches.collect(&:total).compact.reduce(:+)
end

Protected Instance Methods

add_search_result(result) click to toggle source
# File lib/popularity.rb, line 71
def add_search_result(result)
  container = self.instance_variable_get("@#{result.name}")

  unless container
    @sources ||= []
    @sources << result.name.to_sym
    container = Popularity::ResultsContainer.new
    self.instance_variable_set "@#{result.name}", container
    self.define_singleton_method(result.name.to_sym) { container }
  end

  container.add_result(result)
end