depo 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.rdoc +71 -0
  3. data/Rakefile +50 -0
  4. data/generators/depo_config/USAGE +5 -0
  5. data/generators/depo_config/depo_config_generator.rb +8 -0
  6. data/generators/depo_config/templates/depo.rb +9 -0
  7. data/generators/dijit/USAGE +0 -0
  8. data/generators/dijit/dijit_generator.rb +34 -0
  9. data/generators/dijit/templates/class.js +30 -0
  10. data/generators/dijit/templates/style.css +4 -0
  11. data/generators/dijit/templates/test.html +15 -0
  12. data/generators/dijit/templates/test.js +11 -0
  13. data/generators/dpage/USAGE +33 -0
  14. data/generators/dpage/dpage_generator.rb +39 -0
  15. data/generators/dpage/templates/app/controllers.js +12 -0
  16. data/generators/dpage/templates/app/models.js +5 -0
  17. data/generators/dpage/templates/app/views.js +4 -0
  18. data/generators/dpage/templates/controller.rb +8 -0
  19. data/generators/dpage/templates/default_stylesheets/all.css +0 -0
  20. data/generators/dpage/templates/default_stylesheets/common.css +11 -0
  21. data/generators/dpage/templates/default_stylesheets/reset.css +51 -0
  22. data/generators/dpage/templates/default_stylesheets/theme_override.css +3 -0
  23. data/generators/dpage/templates/dpage.css +6 -0
  24. data/generators/dpage/templates/dpage.js +4 -0
  25. data/generators/dpage/templates/helper.rb +9 -0
  26. data/generators/dpage/templates/helper_test.rb +5 -0
  27. data/generators/dpage/templates/view.haml +28 -0
  28. data/init.rb +2 -0
  29. data/install.rb +1 -0
  30. data/lib/depo/build.rb +53 -0
  31. data/lib/depo/config.rb +82 -0
  32. data/lib/depo/dijit_conventions.rb +101 -0
  33. data/lib/depo/tasks.rb +1 -0
  34. data/lib/depo/templates/dojo_src.tpl +4 -0
  35. data/lib/depo/templates/profile.js +8 -0
  36. data/lib/depo/view_helpers.rb +32 -0
  37. data/lib/depo.rb +36 -0
  38. data/tasks/depo.rake +29 -0
  39. data/test/action_pack_test.rb +49 -0
  40. data/test/build_profile_test.rb +32 -0
  41. data/test/config_test.rb +55 -0
  42. data/test/database.yml +6 -0
  43. data/test/generators_test.rb +59 -0
  44. data/test/path_utils_test.rb +18 -0
  45. data/test/rails_root/public/ria/src/app/my/Dijit.js +28 -0
  46. data/test/rails_root/public/ria/src/app/tests/my/Dijit.html +16 -0
  47. data/test/rails_root/public/ria/src/app/tests/my/Dijit.js +11 -0
  48. data/test/rails_root/public/ria/src/app/themes/tundra/my/Dijit.css +4 -0
  49. data/test/test_helper.rb +104 -0
  50. data/uninstall.rb +1 -0
  51. metadata +133 -0
@@ -0,0 +1,101 @@
1
+ require 'ostruct'
2
+ module Depo
3
+ class DijitConventions
4
+ class << self
5
+ attr :props
6
+ def prop(key,&block)
7
+ @props||=[]
8
+ @props<< key
9
+ define_method key,&block
10
+ end
11
+ end
12
+
13
+ attr :cmp
14
+ def initialize(dijit_full_name)
15
+ @dijit_full_name= dijit_full_name
16
+ from_full_name(dijit_full_name)
17
+ end
18
+
19
+ def from_full_name(dijit_full_name)
20
+ parts = @dijit_full_name.split('.')
21
+ cmps ={:base_module=>parts[0],:class_name=>parts[-1]}
22
+ if parts.length > 2
23
+ cmps[:modules] = parts[1..-2]
24
+ end
25
+ cmps[:dijit_full_name]=dijit_full_name
26
+ @cmp_hash=cmps
27
+ @cmp = OpenStruct.new(cmps)
28
+ end
29
+
30
+ prop :dijit_full_name do
31
+ @dijit_full_name
32
+ end
33
+
34
+ prop :dijit_base_class do
35
+ 'null'
36
+ end
37
+
38
+ prop :dijit_package_name do
39
+ @dijit_full_name.split('.')[0..-2].join('.')
40
+ end
41
+
42
+ prop :dijit_class_name do
43
+ cmp.class_name
44
+ end
45
+
46
+ prop :dijit_base_module do
47
+ cmp.base_module
48
+ end
49
+
50
+ prop :dijit_modules do
51
+ cmp.modules
52
+ end
53
+
54
+ def from_src(*args)
55
+ File.join(*args.flatten.unshift(Depo.config.src_path))
56
+ end
57
+
58
+ def j(*args)
59
+ File.join(*args)
60
+ end
61
+
62
+ prop :package_path do
63
+ from_src cmp.base_module, cmp.modules
64
+ end
65
+
66
+ prop :style_dir_path do
67
+ from_src cmp.base_module,'themes', Depo.config.default_theme, cmp.modules
68
+ end
69
+
70
+ prop :test_dir_path do
71
+ from_src cmp.base_module,'tests', cmp.modules
72
+ end
73
+
74
+ prop :class_path do
75
+ j(package_path,"#{cmp.class_name}.js")
76
+ end
77
+
78
+ prop :style_path do
79
+ j(style_dir_path,"#{cmp.class_name}.css")
80
+ end
81
+
82
+ prop :test_code_path do
83
+ j(test_dir_path,"#{cmp.class_name}.js")
84
+ end
85
+
86
+ prop :test_page_path do
87
+ j(test_dir_path,"#{cmp.class_name}.html")
88
+ end
89
+
90
+ prop :dijit_style_class_name do
91
+ @dijit_full_name.split('.').map{|c| c.capitalize}.join('')
92
+ end
93
+
94
+
95
+ def to_hash
96
+ self.class.props.inject({}) do |hash,prp|
97
+ hash[prp] = send(prp); hash;
98
+ end
99
+ end
100
+ end
101
+ end
data/lib/depo/tasks.rb ADDED
@@ -0,0 +1 @@
1
+ load File.join(File.dirname(__FILE__),'..','..','tasks','depo.rake')
@@ -0,0 +1,4 @@
1
+ <script type="text/javascript" src="<%= webroot %>/dojo/dojo.js" djConfig="<%= djConfig %>">
2
+ </script>
3
+ <link rel="stylesheet" href="<%= css %>" type="text/css" />
4
+ <script type="text/javascript" src="<%= app_js %>"></script>
@@ -0,0 +1,8 @@
1
+ dependencies = {
2
+ stripConsole: "normal",
3
+
4
+ layers: [
5
+ <%= layers %>
6
+ ],
7
+ prefixes: [<%= prefixes %>]
8
+ };
@@ -0,0 +1,32 @@
1
+ module Depo
2
+ module ViewHelpers
3
+ def webroot
4
+ Depo.config.env_root_webpath(@opts[:env])
5
+ end
6
+ def djConfig
7
+ Depo.config.env_dj_config(@opts[:env])
8
+ end
9
+ #check if ext presented and add if not
10
+ def add_ext(str,ext)
11
+ ( str.strip=~/\.#{ext}$/ ) ? str.strip : "#{str.strip}.#{ext}"
12
+ end
13
+ def css
14
+ %Q[#{webroot}/app/themes/#{theme}/#{add_ext(@opts[:app],'css')}]
15
+ end
16
+ def dojo(opts)
17
+ return @dojo_tpl if @dojo_tpl
18
+ raise "You must provide :app name in opts" unless opts[:app]
19
+ @opts = opts
20
+ @opts[:env] = (defined? RAILS_ENV && !opts[:env])? RAILS_ENV : opts[:env]
21
+ tpl_string = IO.readlines("#{File.dirname(__FILE__)}/templates/dojo_src.tpl",'').to_s
22
+ @dojo_tpl = ERB.new(tpl_string).result(binding)
23
+ end
24
+ def theme
25
+ Depo.config.default_theme
26
+ end
27
+ def app_js
28
+ %Q[#{webroot}/app/pages/#{@opts[:app]}.js]
29
+ end
30
+ end
31
+
32
+ end
data/lib/depo.rb ADDED
@@ -0,0 +1,36 @@
1
+ $:.unshift(File.dirname(__FILE__)) unless
2
+ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
+ require 'kung_figure'
4
+ require 'active_support'
5
+
6
+ module Depo
7
+ VERSION = '0.0.1'
8
+ autoload :Config, 'depo/config'
9
+ autoload :Build, 'depo/build'
10
+ autoload :DijitConventions, 'depo/dijit_conventions'
11
+ autoload :ViewHelpers, 'depo/view_helpers'
12
+ include KungFigure
13
+ class << self
14
+ alias_method :old_configure, :configure
15
+ def configure(&block)
16
+ old_configure(&block)
17
+ dojofy if Depo.config.enable_dojofy
18
+ end
19
+ def dojofy
20
+ Dir.chdir(RAILS_ROOT) do
21
+ version = Depo.config.dojo_version
22
+ system "dojofy _#{version}_ #{Depo.config.src_path}"
23
+ end
24
+ end
25
+ def enable
26
+ return if ActionView::Base.instance_methods.include? 'dojo'
27
+ if defined?(ActionController::Base)
28
+ ActionView::Base.send :include, ViewHelpers
29
+ end
30
+ end
31
+ end
32
+ end
33
+
34
+ if defined?(Rails) and defined?(ActionView)
35
+ Depo.enable
36
+ end
data/tasks/depo.rake ADDED
@@ -0,0 +1,29 @@
1
+ require 'fileutils'
2
+ require 'depo'
3
+
4
+ namespace :dojo do
5
+ desc "Install dojo"
6
+ task :install=>:environment do
7
+ Depo.dojofy
8
+ end
9
+
10
+ desc "Generate build profile"
11
+ task :build_profile=>:environment do
12
+ Depo::Build.generate_profile(:rails_root=>RAILS_ROOT)
13
+ end
14
+
15
+ desc "Build dojo"
16
+ task :build=>:build_profile do
17
+ profile_file = File.join(RAILS_ROOT,Depo.config.profile_path)
18
+ Dir.chdir File.join(RAILS_ROOT,Depo.config.buildscripts_path)
19
+ release_dir=File.join(RAILS_ROOT,Depo.config.builds_path)
20
+ FileUtils.mkdir_p(release_dir) unless File.exists? release_dir
21
+
22
+ options=Depo.config.build_options.get_options.map{ |key, val| "#{key}=#{val}"}.join ' '
23
+ build_name='build_'+DateTime.now.to_s.gsub(/[^A-Za-z0-9_]/, '_')
24
+ puts "Start building to #{release_dir}/#{build_name}."
25
+ cmd= "./build.sh profileFile=#{profile_file} releaseDir=#{release_dir} releaseName=#{build_name} #{options} action=release"
26
+ puts cmd
27
+ system cmd
28
+ end
29
+ end
@@ -0,0 +1,49 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class ActionView
4
+ include Depo::ViewHelpers
5
+ end
6
+
7
+ class ActionViewEnv
8
+ attr_accessor :av_values
9
+ def css
10
+ @av_values[:css]
11
+ end
12
+ def app_js
13
+ @av_values[:app_js]
14
+ end
15
+ def webroot
16
+ @av_values[:webroot]
17
+ end
18
+ def djConfig
19
+ @av_values[:djConfig]
20
+ end
21
+ def get_template(v)
22
+ @av_values = v
23
+ tpl_string = IO.readlines(File.dirname(__FILE__) + '/../lib/depo/templates/dojo_src.tpl').to_s
24
+ tpl = ERB.new(tpl_string).result(binding)
25
+ end
26
+ end
27
+
28
+ class ActionPackTest < GeneratorTest
29
+ def test_dojo_helper_development
30
+ assert_equal ActionView.new.dojo(:app => 'app', :env => 'development'), ActionViewEnv.new.get_template({
31
+ :webroot => "/ria/src",
32
+ :app_js => "/ria/src/app/pages/app.js",
33
+ :djConfig => "parseOnLoad:true,isDebug:true",
34
+ :css => "/ria/src/app/themes/tundra/app.css"
35
+ })
36
+ Depo.clear_config!
37
+ end
38
+
39
+ def test_dojo_helper_production
40
+ create_if_missing(File.join(Depo.config.builds_path, 'builddir'))
41
+ assert_equal ActionView.new.dojo(:app => 'app', :env => 'production'), ActionViewEnv.new.get_template({
42
+ :webroot => "/ria/builds/builddir",
43
+ :app_js => "/ria/builds/builddir/app/pages/app.js",
44
+ :djConfig => "parseOnLoad:true,isDebug:false",
45
+ :css => "/ria/builds/builddir/app/themes/tundra/app.css"
46
+ })
47
+ Depo.clear_config!
48
+ end
49
+ end
@@ -0,0 +1,32 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ Depo.configure {
4
+ author 'niquola@gmail.com'
5
+ themes ['tundra','verdugo']
6
+
7
+ build_options {
8
+ cssOptimize 'comments.keepLines'
9
+ optimize 'shrinksafe.keepLines'
10
+ cssImportIgnore '../dijit.css'
11
+ internStrings 'true'
12
+ }
13
+
14
+ build_profile {
15
+ libs<< 'mylib'
16
+
17
+ pages<< 'app.pages.admin'
18
+ pages<< 'app.pages.chart'
19
+ pages<< 'app.pages.nurse'
20
+ pages<< 'app.pages.dashboard'
21
+ }
22
+ }
23
+
24
+ class BuildProfileTest < GeneratorTest
25
+ def test_basics
26
+ Depo::Build.generate_profile(:rails_root=>fake_rails_root)
27
+ assert_file 'tmp/dojo_build_profile.js'
28
+ result = read('tmp/dojo_build_profile.js')
29
+ assert_match(/test\/rails_root\/public\/ria\/src\/mylib/, result)
30
+ Depo.clear_config!
31
+ end
32
+ end
@@ -0,0 +1,55 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class DepoConfigureTest < GeneratorTest
4
+ def test_roots
5
+ Depo.clear_config!
6
+ Depo.configure {
7
+ author 'niquola@gmail.com'
8
+ themes ['tundra','verdugo']
9
+ dojo_version '1.4.2'
10
+
11
+ environments {
12
+ developmentDjConfig 'parseOnLoad:true;isDebug:true;'
13
+ productionDjConfig 'parseOnLoad:true;isDebug:false;'
14
+ }
15
+
16
+ build_options {
17
+ cssOptimize 'comments.keepLines'
18
+ optimize 'shrinksafe.keepLines'
19
+ cssImportIgnore '../dijit.css'
20
+ internStrings 'true'
21
+ }
22
+
23
+ build_profile {
24
+ libs<< 'mylib'
25
+
26
+ pages<< 'app.pages.admin'
27
+ pages<< 'app.pages.chart'
28
+ pages<< 'app.pages.nurse'
29
+ pages<< 'app.pages.dashboard'
30
+ }
31
+
32
+ generators {
33
+ head_of_test_page <<-HTML
34
+ <link rel="stylesheet" href="#{Depo.config.src_path}/common.css" type="text/css" />
35
+ HTML
36
+ }
37
+ }
38
+
39
+ config=Depo.config
40
+ assert_equal('1.4.2', config.dojo_version)
41
+ assert_equal('public/ria', config.root)
42
+ assert_equal('/ria', config.root_webpath)
43
+ assert_equal('public/ria/src', config.src_path)
44
+ assert_equal('public/ria/builds', config.builds_path)
45
+ assert_equal('niquola@gmail.com', config.author)
46
+
47
+ assert_equal(['tundra','verdugo'],config.themes)
48
+ assert_equal('parseOnLoad:true;isDebug:true;',config.environments.developmentDjConfig)
49
+ assert(config.build_profile.pages.include?('app.pages.admin'))
50
+ assert(config.build_profile.libs.include?('mylib'))
51
+
52
+ assert_match(/common.css/, config.generators.head_of_test_page )
53
+ Depo.clear_config!
54
+ end
55
+ end
data/test/database.yml ADDED
@@ -0,0 +1,6 @@
1
+ adapter: postgresql
2
+ host: localhost
3
+ database: unittest_dojo_on_rails
4
+ username: postgres
5
+ password: postgres
6
+ encoding: utf8
@@ -0,0 +1,59 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+
4
+ class GeneratorsTest < GeneratorTest
5
+ def test_config_generator
6
+ generate 'depo_config'
7
+ assert_file 'config/depo.rb'
8
+ result = read 'config/depo.rb'
9
+ assert_match(/Depo.config/, result)
10
+ end
11
+
12
+ def from_src(path)
13
+ File.join(Depo.config.src_path,path)
14
+ end
15
+
16
+ def test_widget_generator
17
+ Depo.clear_config!
18
+ Depo.configure do
19
+ author 'niquola@gmail.com'
20
+ generators do
21
+ head_of_test_page <<-HTML
22
+ <link rel="stylesheet" href="#{Depo.config.src_path}/common.css" type="text/css" />
23
+ HTML
24
+ end
25
+ end
26
+ generate 'dijit','app.my.Dijit'
27
+
28
+ file = from_src("app/my/Dijit.js")
29
+ assert_file file
30
+ result = read file
31
+ assert_match(/dojo.provide/, result)
32
+ assert_match(/dojo.declare/, result)
33
+
34
+ file = from_src("app/tests/my/Dijit.js")
35
+ assert_file file
36
+ result = read file
37
+ assert_match(/dojo.require/, result)
38
+
39
+ file = from_src("app/tests/my/Dijit.html")
40
+ assert_file file
41
+ result = read file
42
+ assert_match(/common.css/, result)
43
+
44
+ file = from_src("app/themes/tundra/my/Dijit.css")
45
+ assert_file file
46
+ result = read file
47
+ assert_match(/.AppMyDijit/, result)
48
+ Depo.clear_config!
49
+ end
50
+
51
+ def test_page_generator
52
+ generate 'dpage','controller_name', 'pagename'
53
+ assert_file 'app/controllers/controller_name_controller.rb'
54
+ assert_file 'app/views/controller_name/pagename.haml'
55
+ assert_file 'app/helpers/controller_name_helper.rb'
56
+ assert_file 'test/unit/helpers/controller_name_helper_test.rb'
57
+ assert_file = from_src("app/pages/pagename.js")
58
+ end
59
+ end
@@ -0,0 +1,18 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class DijitConventionsTest < GeneratorTest
4
+ def test_basics
5
+ dijit=Depo::DijitConventions.new('app.my.Dijit')
6
+
7
+ assert_equal('public/ria/src/app/my', dijit.package_path)
8
+ assert_equal('public/ria/src/app/themes/tundra/my', dijit.style_dir_path)
9
+ assert_equal('public/ria/src/app/tests/my', dijit.test_dir_path)
10
+
11
+ assert_equal('public/ria/src/app/my/Dijit.js', dijit.class_path)
12
+ assert_equal('public/ria/src/app/themes/tundra/my/Dijit.css', dijit.style_path)
13
+ assert_equal('public/ria/src/app/tests/my/Dijit.js', dijit.test_code_path)
14
+ assert_equal('public/ria/src/app/tests/my/Dijit.html', dijit.test_page_path)
15
+
16
+ assert_not_nil(dijit.to_hash)
17
+ end
18
+ end
@@ -0,0 +1,28 @@
1
+ /**
2
+ * app.my.Dijit
3
+ * Created by niquola@gmail.com
4
+ **/
5
+ dojo.provide("app.my.Dijit");
6
+
7
+ (function () {
8
+ //here go private vars and functions
9
+ dojo.declare("app.my.Dijit",null, {
10
+ // summary:
11
+ // HERE WIDGET SUMMARY
12
+
13
+ // baseClass: [protected] String
14
+ baseClass: "AppMyDijit",
15
+ //templateString: dojo.cache("app.my", "templates/Dijit.html"),
16
+ //widgetsInTemplate: true,
17
+ //buildRendering: function () {
18
+ //this.inherited(arguments);
19
+ //},
20
+ //layout: function () {
21
+ //var cb = this._contentBox;
22
+ //dojo.marginBox(this.containerNode, cb);
23
+ //},
24
+ //postCreate: function () {
25
+ //this.inherited(arguments);
26
+ //}
27
+ });
28
+ });
@@ -0,0 +1,16 @@
1
+ <?xml version='1.0' encoding='utf-8' ?>
2
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
+ <html>
4
+ <head>
5
+ <title>app.my.Dijit</title>
6
+
7
+ <script type="text/javascript" src="/ria/src/dojo/dojo.js" djConfig="isDebug:false,parseOnLoad:true"> </script>
8
+ <script src="Dijit.js"></script>
9
+ <link rel="stylesheet" href="public/ria/src/common.css" type="text/css" />
10
+
11
+ <link rel="stylesheet" href="/public/ria/src/app/themes/tundra/my/Dijit.css" type="text/css" />
12
+ </head>
13
+ <body class="app">
14
+ </body>
15
+ </html>
16
+
@@ -0,0 +1,11 @@
1
+ dojo.require("doh.runner");
2
+ //dojo.require("dojo.robot");
3
+ dojo.require("app.my.Dijit");
4
+
5
+ dojo.addOnLoad(function () {
6
+ doh.register("app.my.Dijit", [
7
+ function test(t) {
8
+ t.t(false,"not implemented");
9
+ }]);
10
+ doh.run();
11
+ });
@@ -0,0 +1,4 @@
1
+ .AppMyDijit {
2
+ }
3
+ .AppMyDijitContainer {
4
+ }
@@ -0,0 +1,104 @@
1
+ C_DIR = File.dirname(__FILE__)
2
+ def path(p)
3
+ File.join(C_DIR,p)
4
+ end
5
+
6
+ $:.unshift(path('../lib'))
7
+ require 'rubygems'
8
+ require 'test/unit'
9
+ require 'depo'
10
+ require 'active_support'
11
+ require 'active_support/test_case'
12
+ require "rails_generator"
13
+ require "active_record"
14
+ require 'rails_generator/scripts/generate'
15
+ require 'ftools'
16
+
17
+
18
+ gem_root= path('..')
19
+ Rails::Generator::Base.default_options :collision => :ask, :quiet => false
20
+ Rails::Generator::Base.reset_sources
21
+ Rails::Generator::Base.append_sources(Rails::Generator::PathSource.new(:plugin, "#{gem_root}/generators/"))
22
+
23
+ RAILS_ROOT = path('rails_root')
24
+
25
+ class GeneratorTest < ActiveSupport::TestCase
26
+ def generate(*args)
27
+ Rails::Generator::Scripts::Generate.new.run(args, :destination=>fake_rails_root)
28
+ end
29
+
30
+ def read(path)
31
+ IO.readlines("#{fake_rails_root}/#{path}",'').to_s
32
+ end
33
+
34
+ def assert_file(file)
35
+ assert_block "File #{file} not exists, as not expected" do
36
+ File.exists? "#{fake_rails_root}/#{file}"
37
+ end
38
+ end
39
+
40
+ def create_if_missing *names
41
+ names.each do |name|
42
+ File.makedirs(name) unless File.directory?(name)
43
+ end
44
+ end
45
+
46
+ def setup
47
+ FileUtils.rm_r(fake_rails_root)
48
+ FileUtils.mkdir_p(fake_rails_root)
49
+ end
50
+
51
+ protected
52
+ def fake_rails_root
53
+ RAILS_ROOT
54
+ end
55
+ end
56
+
57
+ class TestDbUtils
58
+ class<< self
59
+ def config
60
+ @config ||= YAML::load(IO.read(path('/database.yml'))).symbolize_keys
61
+ end
62
+
63
+ #create test database
64
+ def ensure_test_database
65
+ connect_to_test_db
66
+ rescue
67
+ create_database
68
+ end
69
+
70
+ def load_schema
71
+ ensure_test_database
72
+ load(path('db/schema.rb'))
73
+ end
74
+
75
+ def ensure_schema
76
+ load_schema
77
+ rescue
78
+ puts "tests database exists: skip schema loading"
79
+ end
80
+
81
+ def create_database
82
+ connect_to_postgres_db
83
+ ActiveRecord::Base.connection.create_database(config[:database], config)
84
+ connect_to_test_db
85
+ rescue
86
+ $stderr.puts $!, *($!.backtrace)
87
+ $stderr.puts "Couldn't create database for #{config.inspect}"
88
+ end
89
+
90
+ def connect_to_test_db
91
+ ActiveRecord::Base.establish_connection(config)
92
+ ActiveRecord::Base.connection
93
+ end
94
+
95
+ def connect_to_postgres_db
96
+ ActiveRecord::Base.establish_connection(config.merge(:database => 'postgres', :schema_search_path => 'public'))
97
+ end
98
+
99
+ def drop_database
100
+ connect_to_postgres_db
101
+ ActiveRecord::Base.connection.drop_database config[:database]
102
+ end
103
+ end
104
+ end
data/uninstall.rb ADDED
@@ -0,0 +1 @@
1
+ # Uninstall hook code here