mitchellh-sprinkle 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (70) hide show
  1. data/CREDITS +16 -0
  2. data/History.txt +4 -0
  3. data/MIT-LICENSE +20 -0
  4. data/Manifest.txt +68 -0
  5. data/README.txt +224 -0
  6. data/Rakefile +4 -0
  7. data/bin/sprinkle +86 -0
  8. data/config/hoe.rb +70 -0
  9. data/config/requirements.rb +17 -0
  10. data/examples/merb/deploy.rb +5 -0
  11. data/examples/rails/README +15 -0
  12. data/examples/rails/deploy.rb +2 -0
  13. data/examples/rails/packages/database.rb +9 -0
  14. data/examples/rails/packages/essential.rb +6 -0
  15. data/examples/rails/packages/rails.rb +28 -0
  16. data/examples/rails/packages/search.rb +11 -0
  17. data/examples/rails/packages/server.rb +28 -0
  18. data/examples/rails/rails.rb +71 -0
  19. data/examples/sprinkle/sprinkle.rb +38 -0
  20. data/lib/sprinkle/actors/actors.rb +17 -0
  21. data/lib/sprinkle/actors/capistrano.rb +117 -0
  22. data/lib/sprinkle/actors/vlad.rb +65 -0
  23. data/lib/sprinkle/configurable.rb +27 -0
  24. data/lib/sprinkle/deployment.rb +73 -0
  25. data/lib/sprinkle/extensions/arbitrary_options.rb +10 -0
  26. data/lib/sprinkle/extensions/array.rb +5 -0
  27. data/lib/sprinkle/extensions/blank_slate.rb +5 -0
  28. data/lib/sprinkle/extensions/dsl_accessor.rb +15 -0
  29. data/lib/sprinkle/extensions/string.rb +10 -0
  30. data/lib/sprinkle/extensions/symbol.rb +7 -0
  31. data/lib/sprinkle/installers/apt.rb +51 -0
  32. data/lib/sprinkle/installers/gem.rb +61 -0
  33. data/lib/sprinkle/installers/installer.rb +120 -0
  34. data/lib/sprinkle/installers/rake.rb +30 -0
  35. data/lib/sprinkle/installers/rpm.rb +37 -0
  36. data/lib/sprinkle/installers/source.rb +179 -0
  37. data/lib/sprinkle/package.rb +127 -0
  38. data/lib/sprinkle/policy.rb +85 -0
  39. data/lib/sprinkle/script.rb +13 -0
  40. data/lib/sprinkle/verifiers/directory.rb +11 -0
  41. data/lib/sprinkle/verifiers/executable.rb +17 -0
  42. data/lib/sprinkle/verifiers/file.rb +11 -0
  43. data/lib/sprinkle/verifiers/symlink.rb +15 -0
  44. data/lib/sprinkle/verify.rb +55 -0
  45. data/lib/sprinkle/version.rb +9 -0
  46. data/lib/sprinkle.rb +32 -0
  47. data/script/destroy +14 -0
  48. data/script/generate +14 -0
  49. data/spec/spec.opts +1 -0
  50. data/spec/spec_helper.rb +17 -0
  51. data/spec/sprinkle/actors/capistrano_spec.rb +170 -0
  52. data/spec/sprinkle/configurable_spec.rb +46 -0
  53. data/spec/sprinkle/deployment_spec.rb +80 -0
  54. data/spec/sprinkle/extensions/array_spec.rb +19 -0
  55. data/spec/sprinkle/extensions/string_spec.rb +21 -0
  56. data/spec/sprinkle/installers/apt_spec.rb +74 -0
  57. data/spec/sprinkle/installers/gem_spec.rb +75 -0
  58. data/spec/sprinkle/installers/installer_spec.rb +151 -0
  59. data/spec/sprinkle/installers/rpm_spec.rb +50 -0
  60. data/spec/sprinkle/installers/source_spec.rb +331 -0
  61. data/spec/sprinkle/package_spec.rb +422 -0
  62. data/spec/sprinkle/policy_spec.rb +126 -0
  63. data/spec/sprinkle/script_spec.rb +51 -0
  64. data/spec/sprinkle/sprinkle_spec.rb +25 -0
  65. data/spec/sprinkle/verify_spec.rb +137 -0
  66. data/sprinkle.gemspec +43 -0
  67. data/tasks/deployment.rake +34 -0
  68. data/tasks/environment.rake +7 -0
  69. data/tasks/rspec.rake +21 -0
  70. metadata +160 -0
@@ -0,0 +1,137 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe Sprinkle::Verify do
4
+ before do
5
+ @name = :package
6
+ @package = package @name do
7
+ gem 'nonexistent'
8
+ verify 'moo' do
9
+ # Check a file exists
10
+ has_file 'my_file.txt'
11
+
12
+ # Check a directory exists
13
+ has_directory 'mydir'
14
+
15
+ # Check a symlink exists
16
+ has_symlink 'mypointer'
17
+
18
+ # Check a symlink points to a certain file
19
+ has_symlink 'mypointer', 'myfile'
20
+
21
+ # Check if an executable exists
22
+ has_executable '/usr/bin/ruby'
23
+
24
+ # Check if a global executable exists (in PATH)
25
+ has_executable 'rails'
26
+ end
27
+ end
28
+ @verification = @package.verifications[0]
29
+ @delivery = mock(Sprinkle::Deployment, :process => true)
30
+ @verification.delivery = @delivery
31
+ end
32
+
33
+ describe 'when created' do
34
+ it 'should raise error without a block' do
35
+ lambda { Verify.new(nil, '') }.should raise_error
36
+ end
37
+ end
38
+
39
+ describe 'with checks' do
40
+ it 'should do a "test -f" on the has_file check' do
41
+ @verification.commands.should include('test -f my_file.txt')
42
+ end
43
+
44
+ it 'should do a "test -d" on the has_directory check' do
45
+ @verification.commands.should include('test -d mydir')
46
+ end
47
+
48
+ it 'should do a "test -L" to check something is a symbolic link' do
49
+ @verification.commands.should include('test -L mypointer')
50
+ end
51
+
52
+ it 'should do a test equality to check a symlink points to a specific file' do
53
+ @verification.commands.should include("test 'myfile' = `readlink mypointer`")
54
+ end
55
+
56
+ it 'should do a "test -x" to check for an executable' do
57
+ @verification.commands.should include("test -x /usr/bin/ruby")
58
+ end
59
+
60
+ it 'should test the "which" command to look for a global executable' do
61
+ @verification.commands.should include('[ -n "`which rails`"]')
62
+ end
63
+ end
64
+
65
+ describe 'with configurations' do
66
+ # Make sure it includes Sprinkle::Configurable
67
+ it 'should respond to configurable methods' do
68
+ @verification.should respond_to(:defaults)
69
+ end
70
+
71
+ it 'should default padding option to 4' do
72
+ @verification.padding.should eql(4)
73
+ end
74
+ end
75
+
76
+ describe 'with process' do
77
+ it 'should raise an error when no delivery mechanism is set' do
78
+ @verification.instance_variable_set(:@delivery, nil)
79
+ lambda { @verification.process([]) }.should raise_error
80
+ end
81
+
82
+ describe 'when not testing' do
83
+ before do
84
+ # To be explicit
85
+ Sprinkle::OPTIONS[:testing] = false
86
+ end
87
+
88
+ it 'should call process on the delivery with the correct parameters' do
89
+ @delivery.should_receive(:process).with(@name, @verification.commands, [:app], true).once.and_return(true)
90
+ @verification.process([:app])
91
+ end
92
+
93
+ it 'should raise Sprinkle::VerificationFailed exception when commands fail' do
94
+ @delivery.should_receive(:process).once.and_return(false)
95
+ lambda { @verification.process([:app]) }.should raise_error(Sprinkle::VerificationFailed) do |error|
96
+ error.package.should eql(@package)
97
+ error.description.should eql('moo')
98
+ end
99
+ end
100
+ end
101
+
102
+ describe 'when testing' do
103
+ before do
104
+ Sprinkle::OPTIONS[:testing] = true
105
+ @logger = mock(ActiveSupport::BufferedLogger, :debug => true, :debug? => true)
106
+ end
107
+
108
+ it 'should not call process on the delivery' do
109
+ @delivery.should_not_receive(:process)
110
+ end
111
+
112
+ it 'should print the install sequence to the console' do
113
+ @verification.should_receive(:logger).twice.and_return(@logger)
114
+ end
115
+
116
+ after do
117
+ @verification.process([:app])
118
+ Sprinkle::OPTIONS[:testing] = false
119
+ end
120
+ end
121
+ end
122
+
123
+ describe 'with registering new verification modules' do
124
+ module MyModule
125
+ def rawr; end
126
+ end
127
+
128
+ it 'should not respond to rawr initially' do
129
+ @verification.should_not respond_to(:rawr)
130
+ end
131
+
132
+ it 'should respond to rawr after registering the module' do
133
+ Sprinkle::Verify.register(MyModule)
134
+ @verification.should respond_to(:rawr)
135
+ end
136
+ end
137
+ end
data/sprinkle.gemspec ADDED
@@ -0,0 +1,43 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = %q{sprinkle}
3
+ s.version = "0.1.5"
4
+
5
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
6
+ s.authors = ["Marcus Crafter"]
7
+ s.date = %q{2008-07-16}
8
+ s.default_executable = %q{sprinkle}
9
+ s.description = %q{Ruby DSL based software provisioning tool}
10
+ s.email = ["crafterm@redartisan.com"]
11
+ s.executables = ["sprinkle"]
12
+ s.extra_rdoc_files = ["History.txt", "Manifest.txt", "README.txt"]
13
+ s.files = ["CREDITS", "History.txt", "MIT-LICENSE", "Manifest.txt", "README.txt", "Rakefile", "bin/sprinkle", "config/hoe.rb", "config/requirements.rb", "examples/merb/deploy.rb", "examples/rails/README", "examples/rails/deploy.rb", "examples/rails/packages/database.rb", "examples/rails/packages/essential.rb", "examples/rails/packages/rails.rb", "examples/rails/packages/search.rb", "examples/rails/packages/server.rb", "examples/rails/rails.rb", "examples/sprinkle/sprinkle.rb", "lib/sprinkle.rb", "lib/sprinkle/actors/actors.rb", "lib/sprinkle/actors/capistrano.rb", "lib/sprinkle/actors/vlad.rb", "lib/sprinkle/configurable.rb", "lib/sprinkle/deployment.rb", "lib/sprinkle/extensions/arbitrary_options.rb", "lib/sprinkle/extensions/array.rb", "lib/sprinkle/extensions/blank_slate.rb", "lib/sprinkle/extensions/dsl_accessor.rb", "lib/sprinkle/extensions/string.rb", "lib/sprinkle/extensions/symbol.rb", "lib/sprinkle/installers/apt.rb", "lib/sprinkle/installers/gem.rb", "lib/sprinkle/installers/installer.rb", "lib/sprinkle/installers/rake.rb", "lib/sprinkle/installers/rpm.rb", "lib/sprinkle/installers/source.rb", "lib/sprinkle/package.rb", "lib/sprinkle/policy.rb", "lib/sprinkle/script.rb", "lib/sprinkle/verifiers/directory.rb", "lib/sprinkle/verifiers/executable.rb", "lib/sprinkle/verifiers/file.rb", "lib/sprinkle/verifiers/symlink.rb", "lib/sprinkle/verify.rb", "lib/sprinkle/version.rb", "script/destroy", "script/generate", "spec/spec.opts", "spec/spec_helper.rb", "spec/sprinkle/actors/capistrano_spec.rb", "spec/sprinkle/configurable_spec.rb", "spec/sprinkle/deployment_spec.rb", "spec/sprinkle/extensions/array_spec.rb", "spec/sprinkle/extensions/string_spec.rb", "spec/sprinkle/installers/apt_spec.rb", "spec/sprinkle/installers/gem_spec.rb", "spec/sprinkle/installers/installer_spec.rb", "spec/sprinkle/installers/rpm_spec.rb", "spec/sprinkle/installers/source_spec.rb", "spec/sprinkle/package_spec.rb", "spec/sprinkle/policy_spec.rb", "spec/sprinkle/script_spec.rb", "spec/sprinkle/sprinkle_spec.rb", "spec/sprinkle/verify_spec.rb", "sprinkle.gemspec", "tasks/deployment.rake", "tasks/environment.rake", "tasks/rspec.rake"]
14
+ s.has_rdoc = true
15
+ s.homepage = %q{http://sprinkle.rubyforge.org}
16
+ s.rdoc_options = ["--main", "README.txt"]
17
+ s.require_paths = ["lib"]
18
+ s.rubyforge_project = %q{sprinkle}
19
+ s.rubygems_version = %q{1.2.0}
20
+ s.summary = %q{Ruby DSL based software provisioning tool}
21
+
22
+ if s.respond_to? :specification_version then
23
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
24
+ s.specification_version = 2
25
+
26
+ if current_version >= 3 then
27
+ s.add_runtime_dependency(%q<activesupport>, [">= 2.0.2"])
28
+ s.add_runtime_dependency(%q<highline>, [">= 1.4.0"])
29
+ s.add_runtime_dependency(%q<capistrano>, [">= 2.2.0"])
30
+ s.add_development_dependency(%q<hoe>, [">= 1.7.0"])
31
+ else
32
+ s.add_dependency(%q<activesupport>, [">= 2.0.2"])
33
+ s.add_dependency(%q<highline>, [">= 1.4.0"])
34
+ s.add_dependency(%q<capistrano>, [">= 2.2.0"])
35
+ s.add_dependency(%q<hoe>, [">= 1.7.0"])
36
+ end
37
+ else
38
+ s.add_dependency(%q<activesupport>, [">= 2.0.2"])
39
+ s.add_dependency(%q<highline>, [">= 1.4.0"])
40
+ s.add_dependency(%q<capistrano>, [">= 2.2.0"])
41
+ s.add_dependency(%q<hoe>, [">= 1.7.0"])
42
+ end
43
+ end
@@ -0,0 +1,34 @@
1
+ desc 'Release the website and new gem version'
2
+ task :deploy => [:check_version, :website, :release] do
3
+ puts "Remember to create SVN tag:"
4
+ puts "svn copy svn+ssh://#{rubyforge_username}@rubyforge.org/var/svn/#{PATH}/trunk " +
5
+ "svn+ssh://#{rubyforge_username}@rubyforge.org/var/svn/#{PATH}/tags/REL-#{VERS} "
6
+ puts "Suggested comment:"
7
+ puts "Tagging release #{CHANGES}"
8
+ end
9
+
10
+ desc 'Runs tasks website_generate and install_gem as a local deployment of the gem'
11
+ task :local_deploy => [:website_generate, :install_gem]
12
+
13
+ task :check_version do
14
+ unless ENV['VERSION']
15
+ puts 'Must pass a VERSION=x.y.z release version'
16
+ exit
17
+ end
18
+ unless ENV['VERSION'] == VERS
19
+ puts "Please update your version.rb to match the release version, currently #{VERS}"
20
+ exit
21
+ end
22
+ end
23
+
24
+ desc 'Install the package as a gem, without generating documentation(ri/rdoc)'
25
+ task :install_gem_no_doc => [:clean, :package] do
26
+ sh "#{'sudo ' unless Hoe::WINDOZE }gem install pkg/*.gem --no-rdoc --no-ri"
27
+ end
28
+
29
+ namespace :manifest do
30
+ desc 'Recreate Manifest.txt to include ALL files'
31
+ task :refresh do
32
+ `rake check_manifest | patch -p0 > Manifest.txt`
33
+ end
34
+ end
@@ -0,0 +1,7 @@
1
+ task :ruby_env do
2
+ RUBY_APP = if RUBY_PLATFORM =~ /java/
3
+ "jruby"
4
+ else
5
+ "ruby"
6
+ end unless defined? RUBY_APP
7
+ end
data/tasks/rspec.rake ADDED
@@ -0,0 +1,21 @@
1
+ begin
2
+ require 'spec'
3
+ rescue LoadError
4
+ require 'rubygems'
5
+ require 'spec'
6
+ end
7
+ begin
8
+ require 'spec/rake/spectask'
9
+ rescue LoadError
10
+ puts <<-EOS
11
+ To use rspec for testing you must install rspec gem:
12
+ gem install rspec
13
+ EOS
14
+ exit(0)
15
+ end
16
+
17
+ desc "Run the specs under spec"
18
+ Spec::Rake::SpecTask.new do |t|
19
+ t.spec_opts = ['--options', "spec/spec.opts"]
20
+ t.spec_files = FileList['spec/**/*_spec.rb']
21
+ end
metadata ADDED
@@ -0,0 +1,160 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mitchellh-sprinkle
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.5
5
+ platform: ruby
6
+ authors:
7
+ - Marcus Crafter
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-07-16 00:00:00 -07:00
13
+ default_executable: sprinkle
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: activesupport
17
+ version_requirement:
18
+ version_requirements: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 2.0.2
23
+ version:
24
+ - !ruby/object:Gem::Dependency
25
+ name: highline
26
+ version_requirement:
27
+ version_requirements: !ruby/object:Gem::Requirement
28
+ requirements:
29
+ - - ">="
30
+ - !ruby/object:Gem::Version
31
+ version: 1.4.0
32
+ version:
33
+ - !ruby/object:Gem::Dependency
34
+ name: capistrano
35
+ version_requirement:
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 2.2.0
41
+ version:
42
+ - !ruby/object:Gem::Dependency
43
+ name: hoe
44
+ version_requirement:
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: 1.7.0
50
+ version:
51
+ description: Ruby DSL based software provisioning tool
52
+ email:
53
+ - crafterm@redartisan.com
54
+ executables:
55
+ - sprinkle
56
+ extensions: []
57
+
58
+ extra_rdoc_files:
59
+ - History.txt
60
+ - Manifest.txt
61
+ - README.txt
62
+ files:
63
+ - CREDITS
64
+ - History.txt
65
+ - MIT-LICENSE
66
+ - Manifest.txt
67
+ - README.txt
68
+ - Rakefile
69
+ - bin/sprinkle
70
+ - config/hoe.rb
71
+ - config/requirements.rb
72
+ - examples/merb/deploy.rb
73
+ - examples/rails/README
74
+ - examples/rails/deploy.rb
75
+ - examples/rails/packages/database.rb
76
+ - examples/rails/packages/essential.rb
77
+ - examples/rails/packages/rails.rb
78
+ - examples/rails/packages/search.rb
79
+ - examples/rails/packages/server.rb
80
+ - examples/rails/rails.rb
81
+ - examples/sprinkle/sprinkle.rb
82
+ - lib/sprinkle.rb
83
+ - lib/sprinkle/actors/actors.rb
84
+ - lib/sprinkle/actors/capistrano.rb
85
+ - lib/sprinkle/actors/vlad.rb
86
+ - lib/sprinkle/configurable.rb
87
+ - lib/sprinkle/deployment.rb
88
+ - lib/sprinkle/extensions/arbitrary_options.rb
89
+ - lib/sprinkle/extensions/array.rb
90
+ - lib/sprinkle/extensions/blank_slate.rb
91
+ - lib/sprinkle/extensions/dsl_accessor.rb
92
+ - lib/sprinkle/extensions/string.rb
93
+ - lib/sprinkle/extensions/symbol.rb
94
+ - lib/sprinkle/installers/apt.rb
95
+ - lib/sprinkle/installers/gem.rb
96
+ - lib/sprinkle/installers/installer.rb
97
+ - lib/sprinkle/installers/rake.rb
98
+ - lib/sprinkle/installers/rpm.rb
99
+ - lib/sprinkle/installers/source.rb
100
+ - lib/sprinkle/package.rb
101
+ - lib/sprinkle/policy.rb
102
+ - lib/sprinkle/script.rb
103
+ - lib/sprinkle/verifiers/directory.rb
104
+ - lib/sprinkle/verifiers/executable.rb
105
+ - lib/sprinkle/verifiers/file.rb
106
+ - lib/sprinkle/verifiers/symlink.rb
107
+ - lib/sprinkle/verify.rb
108
+ - lib/sprinkle/version.rb
109
+ - script/destroy
110
+ - script/generate
111
+ - spec/spec.opts
112
+ - spec/spec_helper.rb
113
+ - spec/sprinkle/actors/capistrano_spec.rb
114
+ - spec/sprinkle/configurable_spec.rb
115
+ - spec/sprinkle/deployment_spec.rb
116
+ - spec/sprinkle/extensions/array_spec.rb
117
+ - spec/sprinkle/extensions/string_spec.rb
118
+ - spec/sprinkle/installers/apt_spec.rb
119
+ - spec/sprinkle/installers/gem_spec.rb
120
+ - spec/sprinkle/installers/installer_spec.rb
121
+ - spec/sprinkle/installers/rpm_spec.rb
122
+ - spec/sprinkle/installers/source_spec.rb
123
+ - spec/sprinkle/package_spec.rb
124
+ - spec/sprinkle/policy_spec.rb
125
+ - spec/sprinkle/script_spec.rb
126
+ - spec/sprinkle/sprinkle_spec.rb
127
+ - spec/sprinkle/verify_spec.rb
128
+ - sprinkle.gemspec
129
+ - tasks/deployment.rake
130
+ - tasks/environment.rake
131
+ - tasks/rspec.rake
132
+ has_rdoc: true
133
+ homepage: http://sprinkle.rubyforge.org
134
+ post_install_message:
135
+ rdoc_options:
136
+ - --main
137
+ - README.txt
138
+ require_paths:
139
+ - lib
140
+ required_ruby_version: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ version: "0"
145
+ version:
146
+ required_rubygems_version: !ruby/object:Gem::Requirement
147
+ requirements:
148
+ - - ">="
149
+ - !ruby/object:Gem::Version
150
+ version: "0"
151
+ version:
152
+ requirements: []
153
+
154
+ rubyforge_project: sprinkle
155
+ rubygems_version: 1.2.0
156
+ signing_key:
157
+ specification_version: 2
158
+ summary: Ruby DSL based software provisioning tool
159
+ test_files: []
160
+