public
Description: A ruby client for freebase
Clone URL: git://github.com/dustin/ruby-freebase.git
ruby-freebase / test / test_helper.rb
100644 66 lines (60 sloc) 2.239 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
require 'test/unit'
require 'md5'
 
rails_env = File.expand_path(File.join(File.dirname(__FILE__), '../../../../config/environment.rb'))
if File.exist? rails_env
  require rails_env
  require 'active_record/fixtures'
  require 'active_support/core_ext/module/aliasing'
else
  require 'rubygems'
  $:.unshift(File.dirname(__FILE__) + '/../lib')
  RAILS_ROOT = File.dirname(__FILE__)
  require 'active_record'
  require 'active_support/core_ext/module/aliasing'
  #require 'active_record/fixtures'
  require init_file if File.exist?(init_file = "#{File.dirname(__FILE__)}/../init")
  ActiveRecord::Base.logger = Logger.new(File.dirname(__FILE__) + "/debug.log")
end
 
require File.dirname(__FILE__)+'/../lib/freebase'
 
module Freebase::Api
  mattr_accessor :quiesced
  @@quiesced = []
  def http_request_with_test_support(query, parameters = {})
    raise ArgumentError.new("This object is Quiesced. Cannot call http_request: #{parameters.inspect}") if Freebase::Api.quiesced.include?(:all)
    fname = "#{File.dirname(__FILE__)}/fixtures/responses/#{MD5.md5(params_to_string(parameters))}.mql"
    unless File.exists?(fname)
      open(fname, "w") do |file|
        puts "WARNING: Couldn't find response file. Creating #{fname}"
        file << http_request_without_test_support(query, parameters)
      end
    end
    open(fname,"r").read
  end
  alias_method_chain :http_request, :test_support
end
 
class Freebase::Base < Freebase::Api::FreebaseResult
  class << self
    def find_with_quiesce(*args)
      raise ArgumentError.new("This object is Quiesced. Cannot call find: #{args.inspect}") if Freebase::Api.quiesced.include?(:find)
      find_without_quiesce(*args)
    end
    alias_method_chain :find, :quiesce
  end
  
  def reload_with_quiesce(*args)
    raise ArgumentError.new("This object is Quiesced. Cannot call reload: #{args.inspect}") if Freebase::Api.quiesced.include?(:reload)
    reload_without_quiesce(*args)
  end
  alias_method_chain :reload, :quiesce
end
 
class Test::Unit::TestCase
  def quiesce(*types)
    types << :all if types.blank?
    orig_quiesced = Freebase::Api.quiesced.dup
    Freebase::Api.quiesced += types
    begin
      yield
    ensure
      Freebase::Api.quiesced = orig_quiesced
    end
  end
end