dpkg-tools 0.3.3

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 (100) hide show
  1. data/CHANGES +198 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README +17 -0
  4. data/Rakefile +1 -0
  5. data/bin/dpkg-etc +6 -0
  6. data/bin/dpkg-gem +6 -0
  7. data/bin/dpkg-rails +6 -0
  8. data/lib/dpkg-tools.rb +6 -0
  9. data/lib/dpkg-tools/command_line.rb +142 -0
  10. data/lib/dpkg-tools/package.rb +30 -0
  11. data/lib/dpkg-tools/package/builder.rb +112 -0
  12. data/lib/dpkg-tools/package/config.rb +96 -0
  13. data/lib/dpkg-tools/package/control_files.rb +24 -0
  14. data/lib/dpkg-tools/package/control_files/base.rb +75 -0
  15. data/lib/dpkg-tools/package/control_files/changelog.rb +23 -0
  16. data/lib/dpkg-tools/package/control_files/control.rb +148 -0
  17. data/lib/dpkg-tools/package/control_files/copyright.rb +27 -0
  18. data/lib/dpkg-tools/package/control_files/rakefile.rb +28 -0
  19. data/lib/dpkg-tools/package/control_files/rules.rb +29 -0
  20. data/lib/dpkg-tools/package/data.rb +125 -0
  21. data/lib/dpkg-tools/package/etc.rb +26 -0
  22. data/lib/dpkg-tools/package/etc/builder.rb +19 -0
  23. data/lib/dpkg-tools/package/etc/control_files.rb +22 -0
  24. data/lib/dpkg-tools/package/etc/control_files/changelog.rb +30 -0
  25. data/lib/dpkg-tools/package/etc/control_files/rakefile.rb +18 -0
  26. data/lib/dpkg-tools/package/etc/data.rb +48 -0
  27. data/lib/dpkg-tools/package/etc/rake.rb +31 -0
  28. data/lib/dpkg-tools/package/etc/setup.rb +30 -0
  29. data/lib/dpkg-tools/package/fs_methods.rb +10 -0
  30. data/lib/dpkg-tools/package/gem.rb +43 -0
  31. data/lib/dpkg-tools/package/gem/builder.rb +77 -0
  32. data/lib/dpkg-tools/package/gem/control_files.rb +23 -0
  33. data/lib/dpkg-tools/package/gem/control_files/changelog.rb +19 -0
  34. data/lib/dpkg-tools/package/gem/control_files/copyright.rb +24 -0
  35. data/lib/dpkg-tools/package/gem/control_files/rakefile.rb +19 -0
  36. data/lib/dpkg-tools/package/gem/data.rb +115 -0
  37. data/lib/dpkg-tools/package/gem/gem_format.rb +10 -0
  38. data/lib/dpkg-tools/package/gem/rake.rb +37 -0
  39. data/lib/dpkg-tools/package/gem/setup.rb +159 -0
  40. data/lib/dpkg-tools/package/rails.rb +26 -0
  41. data/lib/dpkg-tools/package/rails/builder.rb +77 -0
  42. data/lib/dpkg-tools/package/rails/cap.rb +30 -0
  43. data/lib/dpkg-tools/package/rails/control_files.rb +22 -0
  44. data/lib/dpkg-tools/package/rails/control_files/changelog.rb +19 -0
  45. data/lib/dpkg-tools/package/rails/control_files/rakefile.rb +24 -0
  46. data/lib/dpkg-tools/package/rails/data.rb +160 -0
  47. data/lib/dpkg-tools/package/rails/rake.rb +40 -0
  48. data/lib/dpkg-tools/package/rails/setup.rb +84 -0
  49. data/lib/dpkg-tools/package/rake.rb +90 -0
  50. data/lib/dpkg-tools/package/setup.rb +145 -0
  51. data/lib/dpkg-tools/version.rb +23 -0
  52. data/spec/dpkg-tools/command_line_spec.rb +9 -0
  53. data/spec/dpkg-tools/package/builder_spec.rb +159 -0
  54. data/spec/dpkg-tools/package/config_spec.rb +150 -0
  55. data/spec/dpkg-tools/package/control_files/base_spec.rb +111 -0
  56. data/spec/dpkg-tools/package/control_files/changelog_spec.rb +22 -0
  57. data/spec/dpkg-tools/package/control_files/control_spec.rb +131 -0
  58. data/spec/dpkg-tools/package/control_files/copyright_spec.rb +29 -0
  59. data/spec/dpkg-tools/package/control_files/rakefile_spec.rb +37 -0
  60. data/spec/dpkg-tools/package/control_files/rules_spec.rb +16 -0
  61. data/spec/dpkg-tools/package/control_files_spec.rb +12 -0
  62. data/spec/dpkg-tools/package/data_spec.rb +115 -0
  63. data/spec/dpkg-tools/package/etc/builder_spec.rb +28 -0
  64. data/spec/dpkg-tools/package/etc/control_files/changelog_spec.rb +21 -0
  65. data/spec/dpkg-tools/package/etc/control_files/rakefile_spec.rb +16 -0
  66. data/spec/dpkg-tools/package/etc/control_files_spec.rb +12 -0
  67. data/spec/dpkg-tools/package/etc/data_spec.rb +74 -0
  68. data/spec/dpkg-tools/package/etc/rake_spec.rb +71 -0
  69. data/spec/dpkg-tools/package/etc/setup_spec.rb +62 -0
  70. data/spec/dpkg-tools/package/etc_spec.rb +39 -0
  71. data/spec/dpkg-tools/package/fs_methods_spec.rb +33 -0
  72. data/spec/dpkg-tools/package/gem/builder_spec.rb +84 -0
  73. data/spec/dpkg-tools/package/gem/control_files/changelog_spec.rb +25 -0
  74. data/spec/dpkg-tools/package/gem/control_files/copyright_spec.rb +28 -0
  75. data/spec/dpkg-tools/package/gem/control_files/rakefile_spec.rb +17 -0
  76. data/spec/dpkg-tools/package/gem/control_files_spec.rb +12 -0
  77. data/spec/dpkg-tools/package/gem/data_spec.rb +176 -0
  78. data/spec/dpkg-tools/package/gem/gem_format_spec.rb +26 -0
  79. data/spec/dpkg-tools/package/gem/rake_spec.rb +102 -0
  80. data/spec/dpkg-tools/package/gem/setup_spec.rb +274 -0
  81. data/spec/dpkg-tools/package/gem_spec.rb +68 -0
  82. data/spec/dpkg-tools/package/rails/builder_spec.rb +113 -0
  83. data/spec/dpkg-tools/package/rails/cap_spec.rb +37 -0
  84. data/spec/dpkg-tools/package/rails/control_files/changelog_spec.rb +25 -0
  85. data/spec/dpkg-tools/package/rails/control_files/rakefile_spec.rb +24 -0
  86. data/spec/dpkg-tools/package/rails/control_files_spec.rb +12 -0
  87. data/spec/dpkg-tools/package/rails/data_spec.rb +178 -0
  88. data/spec/dpkg-tools/package/rails/rake_spec.rb +78 -0
  89. data/spec/dpkg-tools/package/rails/setup_spec.rb +152 -0
  90. data/spec/dpkg-tools/package/rails_spec.rb +27 -0
  91. data/spec/dpkg-tools/package/rake_spec.rb +87 -0
  92. data/spec/dpkg-tools/package/setup_spec.rb +247 -0
  93. data/spec/dpkg-tools/package_spec.rb +34 -0
  94. data/spec/fixtures/BlueCloth-1.0.0.gem +1190 -0
  95. data/spec/fixtures/database.yml +33 -0
  96. data/spec/spec.opts +1 -0
  97. data/spec/spec_helper.rb +52 -0
  98. data/tasks/dist.rake +118 -0
  99. data/tasks/rspec.rake +21 -0
  100. metadata +165 -0
@@ -0,0 +1,68 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe DpkgTools::Package::Gem do
4
+ before(:each) do
5
+ @setup = mock('mock DpkgTools::Package::Gem::Setup')
6
+ end
7
+
8
+ it "should be able to create package structure from a path to a gem file" do
9
+ DpkgTools::Package::Gem::Setup.expects(:from_path).with('path/to/stub.gem').returns(@setup)
10
+ @setup.expects(:create_structure)
11
+
12
+ DpkgTools::Package::Gem.setup_from_path('path/to/stub.gem', {:ignore_dependencies => true})
13
+ end
14
+
15
+ it "should be able to create package structure from a path to a gem file, ignoring dependency-related options" do
16
+ DpkgTools::Package::Gem::Setup.expects(:from_path).with('path/to/stub.gem').returns(@setup)
17
+ @setup.expects(:create_structure)
18
+
19
+ DpkgTools::Package::Gem.setup_from_path('path/to/stub.gem', {:ignore_dependencies => false})
20
+ end
21
+
22
+ it "should be able to create package structure from the name of a gem" do
23
+ DpkgTools::Package::Gem::Setup.expects(:from_name).with('stub_gem').returns(@setup)
24
+ @setup.expects(:create_structure)
25
+
26
+ DpkgTools::Package::Gem.setup_from_name('stub_gem', {:ignore_dependencies => true})
27
+ end
28
+
29
+ it "should be able to create package structure and fetch dependencies" do
30
+ DpkgTools::Package::Gem::Setup.expects(:from_name).with('stub_gem').returns(@setup)
31
+ mock_dependency_setup = mock('mock DpkgTools::Package::Gem::Setup for dependency')
32
+ mock_dependency_setup.expects(:create_structure)
33
+
34
+ @setup.expects(:fetch_dependencies).returns([mock_dependency_setup])
35
+ @setup.expects(:create_structure)
36
+
37
+ DpkgTools::Package::Gem.setup_from_name('stub_gem', {})
38
+ end
39
+ end
40
+
41
+ describe DpkgTools::Package::Gem, ".config_cache method" do
42
+ before(:each) do
43
+ DpkgTools::Package::Gem.instance_variable_set(:@config_cache, {})
44
+ end
45
+
46
+ it "should create and return a DpkgTools::Package::Config instance corresponding to the given full name key" do
47
+ DpkgTools::Package::Config.expects(:new).with('gem_name', '1.0.8', {:suffix => 'rubygem'}).returns(:config)
48
+ DpkgTools::Package::Gem.config_cache(['gem_name', '1.0.8']).should == :config
49
+ end
50
+
51
+ it "should only create and return a single DpkgTools::Package::Config instance" do
52
+ DpkgTools::Package::Gem.config_cache(['gem_name', '1.0.8']).should === DpkgTools::Package::Gem.config_cache(['gem_name', '1.0.8'])
53
+ end
54
+
55
+ it "should yield the Config instance if passed a block" do
56
+ result = nil
57
+ DpkgTools::Package::Gem.config_cache(['gem_name', '1.0.8']) {|cfg| result = cfg}
58
+ result.should == DpkgTools::Package::Gem.config_cache(['gem_name', '1.0.8'])
59
+ end
60
+ end
61
+
62
+ describe DpkgTools::Package::Gem, ".create_builder" do
63
+ it "should instantiate a Package::Gem::Data and a Package::Gem::Builder and make 'em work" do
64
+ DpkgTools::Package::Gem::Builder.expects(:from_file_path).with('a/path/to/stub_gem-1.1.0/stub_gem-1.1.0.gem').returns(:builder)
65
+
66
+ DpkgTools::Package::Gem.create_builder('a/path/to/stub_gem-1.1.0/stub_gem-1.1.0.gem').should == :builder
67
+ end
68
+ end
@@ -0,0 +1,113 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper'
2
+
3
+ describe DpkgTools::Package::Rails::Builder do
4
+ it "should be able to grab all needed config stuff and create a DpkgTools::Package::Rails::Data and a Builder instance" do
5
+ DpkgTools::Package::Rails::Data.expects(:new).with('/path/to/app').returns(:data)
6
+ DpkgTools::Package::Rails::Builder.expects(:new).with(:data).returns(:instance)
7
+
8
+ DpkgTools::Package::Rails::Builder.from_path('/path/to/app').should == :instance
9
+ end
10
+ end
11
+
12
+ describe DpkgTools::Package::Rails::Builder, "instances" do
13
+ before(:each) do
14
+ @config = DpkgTools::Package::Config.new('rails-app', '1.0.8')
15
+ DpkgTools::Package::Rails::Data.expects(:load_package_data).with('/a/path/to/rails-app/working/dir', 'deb.yml').
16
+ returns({'name' => 'rails-app', 'version' => '1.0.8', 'server_name' => 'rails-app.org'}, 'mongrel_cluster' => {'port' => '8000', 'servers' => 3})
17
+ DpkgTools::Package::Rails::Data.expects(:load_package_data).with('/a/path/to/rails-app/working/dir', 'database.yml').
18
+ returns({'development' => {'database' => 'db_name'}})
19
+ @data = DpkgTools::Package::Rails::Data.new('/a/path/to/rails-app/working/dir')
20
+
21
+ @builder = DpkgTools::Package::Rails::Builder.new(@data)
22
+ end
23
+
24
+ it "should provide the correct options for DpkgTools::Package::Config " do
25
+ @builder.config_options.should == {:base_path => "/a/path/to/rails-app/working/dir"}
26
+ end
27
+
28
+ it "should be able to create the needed install dirs" do
29
+ @builder.expects(:create_dir_if_needed).with('/a/path/to/rails-app/working/dir/debian/tmp/etc/init.d')
30
+ @builder.expects(:create_dir_if_needed).with('/a/path/to/rails-app/working/dir/debian/tmp/etc/apache2/sites-available')
31
+ @builder.expects(:create_dir_if_needed).with('/a/path/to/rails-app/working/dir/debian/tmp/etc/logrotate.d')
32
+ @builder.expects(:create_dir_if_needed).with('/a/path/to/rails-app/working/dir/debian/tmp/var/lib/rails-app')
33
+ @builder.expects(:create_dir_if_needed).with('/a/path/to/rails-app/working/dir/debian/tmp/var/log/rails-app/apache2')
34
+
35
+ @builder.create_install_dirs
36
+ end
37
+
38
+ it "should be able to generate a config file from @data, an erb template and a destination path" do
39
+ File.expects(:read).with('template_path').returns('template')
40
+
41
+ @builder.expects(:render_template).with('template').returns('conf file')
42
+
43
+ mock_file = mock('File')
44
+ mock_file.expects(:write).with('conf file')
45
+ File.expects(:open).with('target_path', 'w').yields(mock_file)
46
+
47
+ @builder.generate_conf_file('template_path', 'target_path')
48
+ end
49
+
50
+ it "should generate all the needed config files" do
51
+ @builder.expects(:generate_conf_file).with('/a/path/to/rails-app/working/dir/config/apache.conf.erb',
52
+ '/a/path/to/rails-app/working/dir/debian/tmp/etc/apache2/sites-available/rails-app')
53
+
54
+ @builder.expects(:generate_conf_file).with('/a/path/to/rails-app/working/dir/config/logrotate.conf.erb',
55
+ '/a/path/to/rails-app/working/dir/debian/tmp/etc/logrotate.d/rails-app')
56
+
57
+ @builder.expects(:generate_conf_file).with('/a/path/to/rails-app/working/dir/config/mongrel_cluster_init.erb',
58
+ '/a/path/to/rails-app/working/dir/debian/tmp/etc/init.d/rails-app')
59
+
60
+ @builder.generate_conf_files
61
+ end
62
+
63
+ it "should be able to read the public ssh keys in deployers_ssh_keys" do
64
+ @data.stubs(:deployers_ssh_keys_dir).returns('/path/to/keys')
65
+ Dir.stubs(:entries).with('/path/to/keys').returns(['key1', 'key2'])
66
+ File.stubs(:file?).returns(true)
67
+ File.expects(:read).with('/path/to/keys/key1').returns('key1')
68
+ File.expects(:read).with('/path/to/keys/key2').returns('key2')
69
+
70
+ @builder.read_deployers_ssh_keys.should == ['key1', 'key2']
71
+ end
72
+
73
+ it "should be able to read the public ssh keys in deployers_ssh_keys, ignoring any directories there" do
74
+ @data.stubs(:deployers_ssh_keys_dir).returns('/path/to/keys')
75
+ Dir.stubs(:entries).with('/path/to/keys').returns(['is_a_dir', 'key1', 'key2'])
76
+ File.stubs(:file?).returns(true)
77
+ File.expects(:file?).with('/path/to/keys/is_a_dir').returns(false)
78
+ File.expects(:read).with('/path/to/keys/key1').returns('key1')
79
+ File.expects(:read).with('/path/to/keys/key2').returns('key2')
80
+
81
+ @builder.read_deployers_ssh_keys.should == ['key1', 'key2']
82
+ end
83
+
84
+ it "should be able to write out an authorized_keys file from a list of keys" do
85
+ mock_file = mock('File')
86
+ mock_file.expects(:write).with("key1\nkey2")
87
+ File.expects(:open).with('/a/path/to/rails-app/working/dir/debian/tmp/var/lib/rails-app/.ssh/authorized_keys', 'w').
88
+ yields(mock_file)
89
+ @builder.expects(:sh).with('chmod 600 "/a/path/to/rails-app/working/dir/debian/tmp/var/lib/rails-app/.ssh/authorized_keys"')
90
+
91
+ @builder.write_authorized_keys(['key1', 'key2'])
92
+ end
93
+
94
+ it "should be able to generate the authorized_keys file from the public keys in deployers_ssh_keys" do
95
+ @builder.expects(:create_dir_if_needed).with('/a/path/to/rails-app/working/dir/debian/tmp/var/lib/rails-app/.ssh')
96
+ @builder.expects(:sh).with('chmod 700 "/a/path/to/rails-app/working/dir/debian/tmp/var/lib/rails-app/.ssh"')
97
+
98
+ @builder.expects(:read_deployers_ssh_keys).returns(['key1', 'key2'])
99
+ @builder.expects(:write_authorized_keys).with(['key1', 'key2'])
100
+
101
+ @builder.generate_authorized_keys
102
+ end
103
+
104
+ it "should be able to perform all the needed steps to put install the package's files " do
105
+ @builder.expects(:generate_conf_files)
106
+ @builder.expects(:sh).with('chown -R root:root "/a/path/to/rails-app/working/dir/debian/tmp"')
107
+ @builder.expects(:sh).with('chmod 755 "/a/path/to/rails-app/working/dir/debian/tmp/etc/init.d/rails-app"')
108
+
109
+ @builder.expects(:generate_authorized_keys)
110
+
111
+ @builder.install_package_files
112
+ end
113
+ end
@@ -0,0 +1,37 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper'
2
+
3
+ describe DpkgTools::Package::Rails::Cap, "variables for use in Cap 2 recipes" do
4
+ it "should be able to tell if the current dir has the app's config dir in it" do
5
+ Dir.stubs(:entries).with('path').returns(['.', '..', 'app', 'config'])
6
+ DpkgTools::Package::Rails::Cap.dir_contains_config?('path').should be_true
7
+ end
8
+
9
+ it "should be able to work out where the root of the app is" do
10
+ Dir.stubs(:pwd).returns('/a/path/to/rails-app')
11
+ DpkgTools::Package::Rails::Cap.stubs(:dir_contains_config?).returns(true)
12
+ DpkgTools::Package::Rails::Cap.located_app_root.should == '/a/path/to/rails-app'
13
+ end
14
+
15
+ it "should be able to hunt back up the path if necessary" do
16
+ Dir.stubs(:pwd).returns('/a/path/to/rails-app/app/models')
17
+ DpkgTools::Package::Rails::Cap.stubs(:dir_contains_config?).with('/a/path/to/rails-app/app/models').returns(false)
18
+ DpkgTools::Package::Rails::Cap.stubs(:dir_contains_config?).with('/a/path/to/rails-app/app').returns(false)
19
+ DpkgTools::Package::Rails::Cap.stubs(:dir_contains_config?).with('/a/path/to/rails-app').returns(true)
20
+
21
+ DpkgTools::Package::Rails::Cap.located_app_root.should == '/a/path/to/rails-app'
22
+ end
23
+
24
+ it "should raise an error if it has to hunt back to / for the app's root" do
25
+ Dir.stubs(:pwd).returns('/a/path/to/rails-app')
26
+ DpkgTools::Package::Rails::Cap.stubs(:dir_contains_config?).returns(false)
27
+
28
+ lambda { DpkgTools::Package::Rails::Cap.located_app_root }.should raise_error(DpkgTools::Package::Rails::CannotLocateAppDir)
29
+ end
30
+
31
+ it "should be able to return a DpkgTools::Package::Rails::Data instance" do
32
+ DpkgTools::Package::Rails::Cap.stubs(:located_app_root).returns('/a/path/to/rails-app')
33
+ DpkgTools::Package::Rails::Data.expects(:new).with('/a/path/to/rails-app').returns(:data)
34
+
35
+ DpkgTools::Package::Rails.cap.should == :data
36
+ end
37
+ end
@@ -0,0 +1,25 @@
1
+ require File.dirname(__FILE__) + '/../../../../spec_helper'
2
+
3
+ describe DpkgTools::Package::Rails::ControlFiles::Changelog, "#changelog" do
4
+ before(:each) do
5
+ config = DpkgTools::Package::Config.new('rails-app', '1.0.8')
6
+ stub_data = stub('DpkgTools::Package::Rails::Data', :full_name => 'rails-app-1.0.8', :debian_revision => '1')
7
+ @metadata = DpkgTools::Package::Rails::ControlFiles::Changelog.new(stub_data, config)
8
+ end
9
+
10
+ it "should be able to generate the current time formatted as per RFC 822" do
11
+ mock_time = mock('Time')
12
+ mock_time.expects(:rfc822).returns('rfc_time')
13
+ Time.expects(:now).returns(mock_time)
14
+
15
+ @metadata.change_time.should == 'rfc_time'
16
+ end
17
+
18
+ it "should be able to generate a changelog" do
19
+ @metadata.expects(:change_time).returns('RFC 822 change time')
20
+
21
+ @metadata.changelog.should == "rails-app (1.0.8-1) cp-gutsy; urgency=low\n"\
22
+ " * Packaged up rails-app-1.0.8\n"\
23
+ " -- Matt Patterson <matt@reprocessed.org> RFC 822 change time\n"
24
+ end
25
+ end
@@ -0,0 +1,24 @@
1
+ require File.dirname(__FILE__) + '/../../../../spec_helper'
2
+
3
+ describe DpkgTools::Package::Rails::ControlFiles::Rakefile do
4
+ before(:each) do
5
+ config = DpkgTools::Package::Config.new("rails-app", "1.0.8", :base_path => '/a/path/to/app')
6
+ stub_data = stub("DpkgTools::Package::Rails::Data", :full_name => "rails-app-1.0.8")
7
+ @control_file = DpkgTools::Package::Rails::ControlFiles::Rakefile.new(stub_data, config)
8
+ end
9
+
10
+ it "should be able to generate the contents of the Rakefile" do
11
+ @control_file.rakefile.should == "require 'rubygems'\n" \
12
+ "begin\n" \
13
+ " require 'dpkg-tools'\n" \
14
+ "rescue LoadError\n" \
15
+ " # dpkg-tools not available (because we don't really need it on deployment targets)\n" \
16
+ "end\n" \
17
+ "\n" \
18
+ "if defined?(DpkgTools::Package::Rails)\n" \
19
+ " DpkgTools::Package::Rails::BuildTasks.new do |t|\n" \
20
+ " t.base_path = Rake.original_dir\n" \
21
+ " end\n" \
22
+ "end\n"
23
+ end
24
+ end
@@ -0,0 +1,12 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper'
2
+
3
+ describe DpkgTools::Package::Rails::ControlFiles do
4
+ it "should provide access to the list of control file classes" do
5
+ DpkgTools::Package::Rails::ControlFiles.classes.
6
+ should == [DpkgTools::Package::Rails::ControlFiles::Changelog,
7
+ DpkgTools::Package::ControlFiles::Control,
8
+ DpkgTools::Package::ControlFiles::Copyright,
9
+ DpkgTools::Package::Rails::ControlFiles::Rakefile,
10
+ DpkgTools::Package::ControlFiles::Rules]
11
+ end
12
+ end
@@ -0,0 +1,178 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper'
2
+
3
+ describe DpkgTools::Package::Rails::Data, ".load_package_data" do
4
+ it "should be able to read in the config/*.yml file" do
5
+ File.expects(:exist?).with('base_path/config/deb.yml').returns(true)
6
+ YAML.expects(:load_file).with('base_path/config/deb.yml').returns({"name" => 'rails-app'})
7
+ DpkgTools::Package::Rails::Data.load_package_data('base_path', 'deb.yml').should == {"name" => 'rails-app'}
8
+ end
9
+ end
10
+
11
+ describe DpkgTools::Package::Rails::Data, "base dependencies" do
12
+ it "should return a sensible list of base gem dependencies" do
13
+ DpkgTools::Package::Rails::Data.base_gem_deps.
14
+ should == [{:name => 'rails-rubygem', :requirements => ['>= 1.2.5-1']},
15
+ {:name => 'rake-rubygem', :requirements => ['>= 0.7.3-1']},
16
+ {:name => 'mysql-rubygem', :requirements => ['>= 2.7-1']},
17
+ {:name => 'mongrel-cluster-rubygem', :requirements => ['>= 1.0.1-1']}]
18
+ end
19
+
20
+ it "should return a sensible list of base package dependencies" do
21
+ DpkgTools::Package::Rails::Data.base_deps.
22
+ should == [{:name => 'mysql-client'}, {:name => 'mysql-server'}, {:name => 'apache2'},
23
+ {:name => 'ruby', :requirements => ['>= 1.8.2']}]
24
+ end
25
+ end
26
+
27
+ describe DpkgTools::Package::Rails::Data, ".new" do
28
+ it "should raise an error without any arguments" do
29
+ lambda { DpkgTools::Package::Gem::Data.new }.should raise_error
30
+ end
31
+
32
+ it "should take the rails app base path, then read in the config/deb.yml" do
33
+ DpkgTools::Package::Rails::Data.expects(:load_package_data).with('base_path', 'deb.yml').returns({'name' => 'rails-app', 'version' => '1.0.8'})
34
+ DpkgTools::Package::Rails::Data.expects(:load_package_data).with('base_path', 'database.yml').returns({'development' => {'database' => 'db_name'}})
35
+ DpkgTools::Package::Rails::Data.expects(:process_dependencies).with({'name' => 'rails-app', 'version' => '1.0.8'}).returns(:deps)
36
+ DpkgTools::Package::Rails::Data.new('base_path').should be_an_instance_of(DpkgTools::Package::Rails::Data)
37
+ end
38
+ end
39
+
40
+ describe DpkgTools::Package::Rails::Data, "instances" do
41
+ before(:each) do
42
+ @mongrel_cluster_config_data = {'port' => '8000', 'servers' => 3}
43
+ package_data = {'name' => 'rails-app', 'version' => '1.0.8', 'license' => '(c) Matt 4evah',
44
+ 'summary' => "Matt's great Rails app", 'server_name' => 'test.host',
45
+ 'server_aliases' => ['www.test.host'],
46
+ 'mongrel_cluster' => @mongrel_cluster_config_data}
47
+ DpkgTools::Package::Rails::Data.stubs(:load_package_data).with('base_path', 'deb.yml').
48
+ returns(package_data)
49
+ @database_configurations = YAML.load_file(File.dirname(__FILE__) + '/../../../fixtures/database.yml')
50
+ DpkgTools::Package::Rails::Data.stubs(:load_package_data).with('base_path', 'database.yml').returns(@database_configurations)
51
+ DpkgTools::Package::Rails::Data.expects(:process_dependencies).with(package_data).returns(:deps)
52
+ @data = DpkgTools::Package::Rails::Data.new('base_path')
53
+ end
54
+
55
+ it "should provide access to its name" do
56
+ @data.name.should == 'rails-app'
57
+ end
58
+
59
+ it "should convert the Gem::Version object to a string" do
60
+ @data.version.should == '1.0.8'
61
+ end
62
+
63
+ it "should provide access to the changelog-derived debian_revision" do
64
+ @data.debian_revision.should == "1"
65
+ end
66
+
67
+ it "should provide access to the debian architecture name" do
68
+ @data.debian_arch.should == "all"
69
+ end
70
+
71
+ it "should provide access to its license" do
72
+ @data.license.should == "(c) Matt 4evah"
73
+ end
74
+
75
+ it "should provide access to its install-time deps" do
76
+ @data.dependencies.should == :deps
77
+ end
78
+
79
+ it "should provide access to its build-time deps" do
80
+ @data.build_dependencies.should == :deps
81
+ end
82
+
83
+ it "should provide access to its summary" do
84
+ @data.summary.should == "Matt's great Rails app"
85
+ end
86
+
87
+ it "should provide access to its 'full_name' equivalent" do
88
+ @data.full_name.should == 'rails-app-1.0.8'
89
+ end
90
+
91
+ it "should provide access to its base_path" do
92
+ @data.base_path.should == 'base_path'
93
+ end
94
+
95
+ it "should provide the rakefile_location information so the rakefile can be generated in the right place" do
96
+ @data.rakefile_location.should == [:base_path, 'lib/tasks/dpkg-tools.rake']
97
+ end
98
+
99
+ it "should provide access to its mongrel starting port" do
100
+ @data.mongrel_cluster_start_port.should == '8000'
101
+ end
102
+
103
+ it "should provide access to the number of mongrels specified" do
104
+ @data.number_of_mongrels.should == 3
105
+ end
106
+
107
+ it "should provide access to an array of the port numbers to be used by the mongrels" do
108
+ @data.mongrel_ports.should == ['8000', '8001', '8002']
109
+ end
110
+
111
+ it "should provide access to the path of the resources dir in the gem" do
112
+ DpkgTools::Package::Rails::Data.resources_path.should == File.expand_path(File.dirname(__FILE__) + '/../../../../resources/rails')
113
+ end
114
+
115
+ it "should provide access to the target installation path for the app (i.e. /var/lib/blah)" do
116
+ @data.app_install_path.should == '/var/lib/rails-app'
117
+ end
118
+
119
+ it "should provide access to the server's main DNS name" do
120
+ @data.server_name.should == 'test.host'
121
+ end
122
+
123
+ it "should provide access to any DNS aliases the server will have" do
124
+ @data.server_aliases.should == ['www.test.host']
125
+ end
126
+
127
+ it "should provide access to the apps' databases" do
128
+ @data.database_configurations.should == @database_configurations
129
+ end
130
+
131
+ it "should provide the system user name for the app" do
132
+ @data.username.should == 'rails-app'
133
+ end
134
+
135
+ it "should provide the path to the cluster's PIDfile dir" do
136
+ @data.pidfile_dir_path.should == '/var/run/rails-app'
137
+ end
138
+
139
+ it "should provide the path to the logfile dirs" do
140
+ @data.logfile_path.should == '/var/log/rails-app'
141
+ end
142
+
143
+ it "should provide the path to the cluster's config root in /etc" do
144
+ @data.conf_dir_path.should == '/var/lib/rails-app/current/config'
145
+ end
146
+
147
+ it "should provide the capistrano application name" do
148
+ @data.application.should == @data.name
149
+ end
150
+
151
+ it "should provide the name of the user to ssh into servers as" do
152
+ @data.user.should == @data.name
153
+ end
154
+
155
+ it "should provide the path to the capistrano deploy_to location" do
156
+ @data.deploy_to.should == @data.app_install_path
157
+ end
158
+
159
+ it "should provide the path to the deployer's ssh keys dir in the package dir" do
160
+ @data.deployers_ssh_keys_dir.should == 'base_path/config/deployers_ssh_keys'
161
+ end
162
+
163
+ it "should provide access to the init script's path" do
164
+ @data.init_script_path.should == '/etc/init.d/rails-app'
165
+ end
166
+
167
+ it "should provide access to the app user's .ssh path" do
168
+ @data.dot_ssh_path.should == '/var/lib/rails-app/.ssh'
169
+ end
170
+
171
+ it "should provide access to the app user's ssh authorized_keys file" do
172
+ @data.authorized_keys_path.should == '/var/lib/rails-app/.ssh/authorized_keys'
173
+ end
174
+
175
+ it "should provide access to the raw hash for mongrel_cluster data" do
176
+ @data.mongrel_cluster_config_hash.should == @mongrel_cluster_config_data
177
+ end
178
+ end