Renamed helpers to correspond to renamed Controller classes.
[merb_radiant.git] / radiant_extensions_plugins / plugins / scenarios / testing / .svn / text-base / library.rb.svn-base
blobf16723064a044dbc24e8c8288688eaf020b5676a
1 require 'fileutils'
2 require 'yaml'
4 module TestingLibrary
5   class Environment
6     attr_accessor :name, :root, :db_config, :db_schema, :packages
7     
8     def initialize(name, root, db_config_file, db_schema, &block)
9       self.name = name
10       self.root = root
11       self.db_config = YAML.load(IO.read(db_config_file))
12       self.db_schema = db_schema
13       self.packages = []
14       block.call self
15     end
16     
17     def load(database = nil)
18       return if @loaded
19       packages.each {|pkg| pkg.load}
20       if database
21         database_name = db_config[database][:database]
22         case database
23         when "mysql"
24           system "mysqladmin -uroot drop #{database_name} --force"
25           system "mysqladmin -uroot create #{database_name}"
26         when "sqlite3"
27           rm_rf database_name
28           touch database_name
29         else
30           raise "Unknown database #{database}"
31         end
32         
33         ActiveRecord::Base.silence do
34           ActiveRecord::Base.configurations = db_config
35           ActiveRecord::Base.establish_connection database
36           Kernel.load db_schema
37         end
38       end
39       @loaded = true
40     end
41     
42     def databases
43       db_config.keys
44     end
45     
46     # name  , scmroot,                            scmpath
47     # :rails, "http://svn.rubyonrails.org/rails", "trunk"
48     def package(name, *args, &block)
49       packages << Package.new(name, root, *args, &block)
50     end
51   end
52   
53   class Package
54     attr_accessor :name, :root, :scmroot, :scmpath, :scmrev, :libraries
55     
56     def initialize(*args, &block)
57       self.name, self.root, self.scmroot, self.scmpath, self.scmrev = args
58       self.scmrev ||= "HEAD"
59       self.libraries = []
60       block.call self
61     end
62     
63     def add_library(name, options = {})
64       library_config = {
65         :requires => [],
66         :root     => root,
67         :scmroot  => scmroot,
68         :scmpath  => scmpath,
69         :scmrev   => scmrev
70       }.merge(options)
71       libraries << Library.new(name, library_config)
72     end
73     
74     def after_load(&block)
75       @after_load = block
76     end
77     
78     def load
79       libraries.each {|lib| lib.load}
80       @after_load.call if @after_load
81     end
82   end
83   
84   class Library
85     attr_accessor :name, :root, :scmroot, :scmpath, :scmrev, :requires
86     
87     def initialize(name, config)
88       self.name     = name
89       self.root     = config[:root]
90       self.scmroot  = config[:scmroot]
91       self.scmpath  = config[:scmpath]
92       self.scmrev   = config[:scmrev]
93       self.requires = config[:requires]
94       @after_update = config[:after_update]
95     end
96     
97     # #{root}/trunk/HEAD/activerecord
98     def support_directory
99       File.expand_path(File.join(root, scmpath, scmrev, name))
100     end
101     
102     def load
103       unless File.directory?(support_directory)
104         update
105         @after_update.call self if @after_update
106       end
107       $LOAD_PATH << load_path
108       requires.each { |r| require r }
109     end
110     
111     def load_path
112       File.join(support_directory, "lib")
113     end
114     
115     def update
116       system "svn co -r#{scmrev} #{scmuri} #{support_directory}"
117     end
118     
119     # http://dev.rubyonrails.org/rails/trunk/activerecord
120     def scmuri
121       File.join(scmroot, scmpath, name)
122     end
123     
124     def ==(other)
125       scmroot == other.scmroot
126     end
127   end