jemmyw-sprinkle 0.2.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 (105) hide show
  1. data/CREDITS +21 -0
  2. data/History.txt +4 -0
  3. data/MIT-LICENSE +20 -0
  4. data/Manifest.txt +104 -0
  5. data/README.txt +241 -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/packages/build_essential.rb +9 -0
  11. data/examples/packages/databases/mysql.rb +13 -0
  12. data/examples/packages/databases/sqlite3.rb +16 -0
  13. data/examples/packages/phusion.rb +55 -0
  14. data/examples/packages/ruby/rails.rb +9 -0
  15. data/examples/packages/ruby/ruby.rb +17 -0
  16. data/examples/packages/ruby/rubygems.rb +17 -0
  17. data/examples/packages/scm/git.rb +11 -0
  18. data/examples/packages/scm/subversion.rb +4 -0
  19. data/examples/packages/servers/apache.rb +15 -0
  20. data/examples/rails/README +15 -0
  21. data/examples/rails/deploy.rb +2 -0
  22. data/examples/rails/packages/database.rb +9 -0
  23. data/examples/rails/packages/essential.rb +9 -0
  24. data/examples/rails/packages/rails.rb +28 -0
  25. data/examples/rails/packages/scm.rb +11 -0
  26. data/examples/rails/packages/search.rb +11 -0
  27. data/examples/rails/packages/server.rb +28 -0
  28. data/examples/rails/rails.rb +73 -0
  29. data/examples/sprinkle/sprinkle.rb +38 -0
  30. data/lib/sprinkle/actors/actors.rb +17 -0
  31. data/lib/sprinkle/actors/capistrano.rb +147 -0
  32. data/lib/sprinkle/actors/local.rb +50 -0
  33. data/lib/sprinkle/actors/ssh.rb +81 -0
  34. data/lib/sprinkle/actors/vlad.rb +65 -0
  35. data/lib/sprinkle/configurable.rb +31 -0
  36. data/lib/sprinkle/deployment.rb +77 -0
  37. data/lib/sprinkle/extensions/arbitrary_options.rb +10 -0
  38. data/lib/sprinkle/extensions/array.rb +5 -0
  39. data/lib/sprinkle/extensions/blank_slate.rb +5 -0
  40. data/lib/sprinkle/extensions/dsl_accessor.rb +15 -0
  41. data/lib/sprinkle/extensions/string.rb +10 -0
  42. data/lib/sprinkle/extensions/symbol.rb +7 -0
  43. data/lib/sprinkle/installers/apt.rb +52 -0
  44. data/lib/sprinkle/installers/bsd_port.rb +33 -0
  45. data/lib/sprinkle/installers/custom.rb +28 -0
  46. data/lib/sprinkle/installers/deb.rb +38 -0
  47. data/lib/sprinkle/installers/freebsd_pkg.rb +37 -0
  48. data/lib/sprinkle/installers/gem.rb +63 -0
  49. data/lib/sprinkle/installers/installer.rb +120 -0
  50. data/lib/sprinkle/installers/mac_port.rb +38 -0
  51. data/lib/sprinkle/installers/openbsd_pkg.rb +47 -0
  52. data/lib/sprinkle/installers/opensolaris_pkg.rb +43 -0
  53. data/lib/sprinkle/installers/push_text.rb +45 -0
  54. data/lib/sprinkle/installers/rake.rb +37 -0
  55. data/lib/sprinkle/installers/rpm.rb +37 -0
  56. data/lib/sprinkle/installers/source.rb +179 -0
  57. data/lib/sprinkle/installers/yum.rb +37 -0
  58. data/lib/sprinkle/package.rb +293 -0
  59. data/lib/sprinkle/policy.rb +126 -0
  60. data/lib/sprinkle/script.rb +23 -0
  61. data/lib/sprinkle/verifiers/directory.rb +16 -0
  62. data/lib/sprinkle/verifiers/dpkg.rb +14 -0
  63. data/lib/sprinkle/verifiers/executable.rb +36 -0
  64. data/lib/sprinkle/verifiers/file.rb +26 -0
  65. data/lib/sprinkle/verifiers/process.rb +21 -0
  66. data/lib/sprinkle/verifiers/ruby.rb +25 -0
  67. data/lib/sprinkle/verifiers/symlink.rb +30 -0
  68. data/lib/sprinkle/verifiers/user.rb +11 -0
  69. data/lib/sprinkle/verify.rb +114 -0
  70. data/lib/sprinkle/version.rb +9 -0
  71. data/lib/sprinkle.rb +32 -0
  72. data/script/destroy +14 -0
  73. data/script/generate +14 -0
  74. data/spec/spec.opts +1 -0
  75. data/spec/spec_helper.rb +17 -0
  76. data/spec/sprinkle/actors/capistrano_spec.rb +194 -0
  77. data/spec/sprinkle/actors/local_spec.rb +29 -0
  78. data/spec/sprinkle/configurable_spec.rb +46 -0
  79. data/spec/sprinkle/deployment_spec.rb +80 -0
  80. data/spec/sprinkle/extensions/array_spec.rb +19 -0
  81. data/spec/sprinkle/extensions/string_spec.rb +21 -0
  82. data/spec/sprinkle/installers/apt_spec.rb +70 -0
  83. data/spec/sprinkle/installers/bsd_port_spec.rb +42 -0
  84. data/spec/sprinkle/installers/custom_spec.rb +29 -0
  85. data/spec/sprinkle/installers/freebsd_pkg_spec.rb +49 -0
  86. data/spec/sprinkle/installers/gem_spec.rb +91 -0
  87. data/spec/sprinkle/installers/installer_spec.rb +151 -0
  88. data/spec/sprinkle/installers/mac_port_spec.rb +42 -0
  89. data/spec/sprinkle/installers/openbsd_pkg_spec.rb +49 -0
  90. data/spec/sprinkle/installers/opensolaris_pkg_spec.rb +49 -0
  91. data/spec/sprinkle/installers/push_text_spec.rb +55 -0
  92. data/spec/sprinkle/installers/rake_spec.rb +29 -0
  93. data/spec/sprinkle/installers/rpm_spec.rb +50 -0
  94. data/spec/sprinkle/installers/source_spec.rb +331 -0
  95. data/spec/sprinkle/installers/yum_spec.rb +49 -0
  96. data/spec/sprinkle/package_spec.rb +452 -0
  97. data/spec/sprinkle/policy_spec.rb +133 -0
  98. data/spec/sprinkle/script_spec.rb +51 -0
  99. data/spec/sprinkle/sprinkle_spec.rb +25 -0
  100. data/spec/sprinkle/verify_spec.rb +185 -0
  101. data/sprinkle.gemspec +45 -0
  102. data/tasks/deployment.rake +34 -0
  103. data/tasks/environment.rake +7 -0
  104. data/tasks/rspec.rake +21 -0
  105. metadata +199 -0
@@ -0,0 +1,126 @@
1
+ require 'highline/import'
2
+
3
+ module Sprinkle
4
+ # = Policies
5
+ #
6
+ # A policy defines a set of packages which are required for a certain
7
+ # role (app, database, etc.). All policies defined will be run and all
8
+ # packages required by the policy will be installed. So whereas defining
9
+ # a Sprinkle::Package merely defines it, defining a Sprinkle::Policy
10
+ # actually causes those packages to install.
11
+ #
12
+ # == A Basic Example
13
+ #
14
+ # policy :blog, :roles => :app do
15
+ # require :webserver
16
+ # require :database
17
+ # require :rails
18
+ # end
19
+ #
20
+ # This says that for the blog on the app role, it requires certain
21
+ # packages. The :roles option is <em>exactly</em> the same as a capistrano
22
+ # or vlad role. A role merely defines what server the commands are run
23
+ # on. This way, a single Sprinkle script can provision an entire group
24
+ # of servers.
25
+ #
26
+ # To define a role, put in your actor specific configuration file (recipe or
27
+ # script file):
28
+ #
29
+ # role :app, "208.28.38.44"
30
+ #
31
+ # The capistrano and vlad syntax is the same for that. If you're using a
32
+ # custom actor, you may have to do it differently.
33
+ #
34
+ # == Multiple Policies
35
+ #
36
+ # You may specify as many policies as you'd like. If the packages you're
37
+ # requiring are properly defined with verification blocks, then
38
+ # no software will be installed twice, so you may require a webserver on
39
+ # multiple packages within the same role without having to wait for
40
+ # that package to install repeatedly.
41
+ module Policy
42
+ POLICIES = [] #:nodoc:
43
+
44
+ # Defines a single policy. Currently the only option, which is also
45
+ # required, is :roles, which defines which servers a policy is
46
+ # used on.
47
+ def policy(name, options = {}, &block)
48
+ p = Policy.new(name, options, &block)
49
+ POLICIES << p
50
+ p
51
+ end
52
+
53
+ class Policy #:nodoc:
54
+ attr_reader :name, :packages
55
+
56
+ def initialize(name, metadata = {}, &block)
57
+ raise 'No name provided' unless name
58
+ raise 'No roles provided' unless metadata[:roles]
59
+
60
+ @name = name
61
+ @roles = metadata[:roles]
62
+ @packages = []
63
+ self.instance_eval(&block)
64
+ end
65
+
66
+ def requires(package, options = {})
67
+ @packages << package
68
+ end
69
+ alias_method :configures, :requires
70
+
71
+ def to_s; name; end
72
+
73
+ def process(deployment)
74
+ all = []
75
+
76
+ cloud_info "--> Cloud hierarchy for policy #{@name}"
77
+
78
+ @packages.each do |p|
79
+ cloud_info "\nPolicy #{@name} requires package #{p}"
80
+
81
+ package = Sprinkle::Package::PACKAGES[p]
82
+ raise "Package definition not found for key: #{p}" unless package
83
+ package = select_package(p, package) if package.is_a? Array # handle virtual package selection
84
+
85
+ tree = package.tree do |parent, child, depth|
86
+ indent = "\t" * depth; cloud_info "#{indent}Package #{parent.name} requires #{child.name}"
87
+ end
88
+
89
+ all << tree
90
+ end
91
+
92
+ normalize(all) do |package|
93
+ package.process(deployment, @roles)
94
+ end
95
+ end
96
+
97
+ private
98
+
99
+ def cloud_info(message)
100
+ logger.info(message) if Sprinkle::OPTIONS[:cloud] or logger.debug?
101
+ end
102
+
103
+ def select_package(name, packages)
104
+ if packages.size <= 1
105
+ package = packages.first
106
+ else
107
+ package = choose do |menu|
108
+ menu.prompt = "Multiple choices exist for virtual package #{name}"
109
+ menu.choices *packages.collect(&:to_s)
110
+ end
111
+ package = Sprinkle::Package::PACKAGES[package]
112
+ end
113
+
114
+ cloud_info "Selecting #{package.to_s} for virtual package #{name}"
115
+
116
+ package
117
+ end
118
+
119
+ def normalize(all, &block)
120
+ all = all.flatten.uniq
121
+ cloud_info "\n--> Normalized installation order for all packages: #{all.collect(&:name).join(', ')}"
122
+ all.each &block
123
+ end
124
+ end
125
+ end
126
+ end
@@ -0,0 +1,23 @@
1
+ module Sprinkle
2
+ # = Programmatically Run Sprinkle
3
+ #
4
+ # Sprinkle::Script gives you a way to programatically run a given
5
+ # sprinkle script.
6
+ class Script
7
+ # Run a given sprinkle script. This method is <b>blocking</b> so
8
+ # it will not return until the sprinkling is complete or fails.
9
+ #--
10
+ # FIXME: Improve documentation, possibly notify user how to tell
11
+ # if a sprinkling failed.
12
+ #++
13
+ def self.sprinkle(script, filename = '__SCRIPT__')
14
+ powder = new
15
+ powder.instance_eval script, filename
16
+ powder.sprinkle
17
+ end
18
+
19
+ def sprinkle #:nodoc:
20
+ @deployment.process if @deployment
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,16 @@
1
+ module Sprinkle
2
+ module Verifiers
3
+ # = Directory Verifier
4
+ #
5
+ # Defines a verify which can be used to test the existence of a
6
+ # directory.
7
+ module Directory
8
+ Sprinkle::Verify.register(Sprinkle::Verifiers::Directory)
9
+
10
+ # Tests that the directory <tt>dir</tt> exists.
11
+ def has_directory(dir)
12
+ @commands << "test -d #{dir}"
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,14 @@
1
+ module Sprinkle
2
+ module Verifiers
3
+ # = Dpkg Verifiers
4
+ #
5
+ # This verifier checks if a dpkg package is installed
6
+ module Dpkg
7
+ Sprinkle::Verify.register(Sprinkle::Verifiers::Dpkg)
8
+
9
+ def has_dpkg(name)
10
+ @commands << "dpkg -s #{name} 2>&1 | grep -e '^Status:.* installed'"
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,36 @@
1
+ module Sprinkle
2
+ module Verifiers
3
+ # = Executable Verifier
4
+ #
5
+ # Contains a verifier to check the existance of an executable
6
+ # script on your server.
7
+ #
8
+ # == Example Usage
9
+ #
10
+ # First, absolute path to an executable:
11
+ #
12
+ # verify { has_executable '/usr/special/secret/bin/scipt' }
13
+ #
14
+ # Second, a global executable which would be available anywhere on the
15
+ # command line:
16
+ #
17
+ # verify { has_executable 'grep' }
18
+ module Executable
19
+ Sprinkle::Verify.register(Sprinkle::Verifiers::Executable)
20
+
21
+ # Checks if <tt>path</tt> is an executable script. This verifier is "smart" because
22
+ # if the path contains a forward slash '/' then it assumes you're checking an
23
+ # absolute path to an executable. If no '/' is in the path, it assumes you're
24
+ # checking for a global executable that would be available anywhere on the command line.
25
+ def has_executable(path)
26
+ # Be smart: If the path includes a forward slash, we're checking
27
+ # an absolute path. Otherwise, we're checking a global executable
28
+ if path.include?('/')
29
+ @commands << "test -x #{path}"
30
+ else
31
+ @commands << "[ -n \"`echo \\`which #{path}\\``\" ]"
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,26 @@
1
+ module Sprinkle
2
+ module Verifiers
3
+ # = File Verifier
4
+ #
5
+ # Contains a verifier to check the existance of a file.
6
+ #
7
+ # == Example Usage
8
+ #
9
+ # verify { has_file '/etc/apache2/apache2.conf' }
10
+ #
11
+ # verify { file_contains '/etc/apache2/apache2.conf', 'mod_gzip'}
12
+ #
13
+ module File
14
+ Sprinkle::Verify.register(Sprinkle::Verifiers::File)
15
+
16
+ # Checks to make sure <tt>path</tt> is a file on the remote server.
17
+ def has_file(path)
18
+ @commands << "test -f #{path}"
19
+ end
20
+
21
+ def file_contains(path, text)
22
+ @commands << "grep '#{text}' #{path}"
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,21 @@
1
+ module Sprinkle
2
+ module Verifiers
3
+ # = Process Verifier
4
+ #
5
+ # Contains a verifier to check that a process is running.
6
+ #
7
+ # == Example Usage
8
+ #
9
+ # verify { has_process 'httpd' }
10
+ #
11
+ module Process
12
+ Sprinkle::Verify.register(Sprinkle::Verifiers::Process)
13
+
14
+ # Checks to make sure <tt>process</tt> is a process running
15
+ # on the remote server.
16
+ def has_process(process)
17
+ @commands << "ps aux | grep '#{process}' | grep -v grep"
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,25 @@
1
+ module Sprinkle
2
+ module Verifiers
3
+ # = Ruby Verifiers
4
+ #
5
+ # The verifiers in this module are ruby specific.
6
+ module Ruby
7
+ Sprinkle::Verify.register(Sprinkle::Verifiers::Ruby)
8
+
9
+ # Checks if ruby can require the <tt>files</tt> given. <tt>rubygems</tt>
10
+ # is always included first.
11
+ def ruby_can_load(*files)
12
+ # Always include rubygems first
13
+ files = files.unshift('rubygems').collect { |x| "require '#{x}'" }
14
+
15
+ @commands << "ruby -e \"#{files.join(';')}\""
16
+ end
17
+
18
+ # Checks if a gem exists by calling "sudo gem list" and grepping against it.
19
+ def has_gem(name, version=nil)
20
+ version = version.nil? ? '' : version.gsub('.', '\.')
21
+ @commands << "gem list | grep -e '^#{name} (.*#{version}.*)$'"
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,30 @@
1
+ module Sprinkle
2
+ module Verifiers
3
+ # = Symlink Verifier
4
+ #
5
+ # Contains a verifier to check the existance of a symbolic link.
6
+ #
7
+ # == Example Usage
8
+ #
9
+ # First, checking for the existence of a symlink:
10
+ #
11
+ # verify { has_symlink '/usr/special/secret/pointer' }
12
+ #
13
+ # Second, checking that the symlink points to a specific place:
14
+ #
15
+ # verify { has_symlink '/usr/special/secret/pointer', '/usr/local/realfile' }
16
+ module Symlink
17
+ Sprinkle::Verify.register(Sprinkle::Verifiers::Symlink)
18
+
19
+ # Checks that <tt>symlink</tt> is a symbolic link. If <tt>file</tt> is
20
+ # given, it checks that <tt>symlink</tt> points to <tt>file</tt>
21
+ def has_symlink(symlink, file = nil)
22
+ if file.nil?
23
+ @commands << "test -L #{symlink}"
24
+ else
25
+ @commands << "test '#{file}' = `readlink #{symlink}`"
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,11 @@
1
+ module Sprinkle
2
+ module Verifiers
3
+ module User
4
+ Sprinkle::Verify.register(Sprinkle::Verifiers::User)
5
+
6
+ def has_user(name)
7
+ @commands << "cat /etc/passwd | grep -q ^#{name}"
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,114 @@
1
+ module Sprinkle
2
+ # = Verification Methods
3
+ #
4
+ # As documented in Sprinkle::Package, you may define a block on a package
5
+ # which verifies that a package was installed correctly. If this verification
6
+ # block fails, Sprinkle will stop the script gracefully, raising the error.
7
+ #
8
+ # In addition to checking post install if it was successfully, verification
9
+ # blocks are also ran before an install to see if a package is <em>already</em>
10
+ # installed. If this is the case, the package is skipped and Sprinkle continues
11
+ # with the next package. This behavior can be overriden by setting the -f flag on
12
+ # the sprinkle script or setting Sprinkle::OPTIONS[:force] to true if you're
13
+ # using sprinkle programmatically.
14
+ #
15
+ # == An Example
16
+ #
17
+ # The following verifies that rails was installed correctly be checking to see
18
+ # if the 'rails' command is available on the command line:
19
+ #
20
+ # package :rails do
21
+ # gem 'rails'
22
+ #
23
+ # verify do
24
+ # has_executable 'rails'
25
+ # end
26
+ # end
27
+ #
28
+ # == Available Verifiers
29
+ #
30
+ # There are a variety of available methods for use in the verification block.
31
+ # The standard methods are defined in the Sprinkle::Verifiers module, so see
32
+ # their corresponding documentation.
33
+ #
34
+ # == Custom Verifiers
35
+ #
36
+ # If you feel that the built-in verifiers do not offer a certain aspect of
37
+ # verification which you need, you may create your own verifier! Simply wrap
38
+ # any method in a module which you want to use:
39
+ #
40
+ # module MagicBeansVerifier
41
+ # def has_magic_beans(sauce)
42
+ # @commands << '[ -z "`echo $' + sauce + '`"]'
43
+ # end
44
+ # end
45
+ #
46
+ # The method can append as many commands as it wishes to the @commands array.
47
+ # These commands will be run on the remote server and <b>MUST</b> give an
48
+ # exit status of 0 if successful or other if unsuccessful.
49
+ #
50
+ # To register your verifier, call the register method on Sprinkle::Verify:
51
+ #
52
+ # Sprinle::Verify.register(MagicBeansVerifier)
53
+ #
54
+ # And now you may use it like any other verifier:
55
+ #
56
+ # package :magic_beans do
57
+ # gem 'magic_beans'
58
+ #
59
+ # verify { has_magic_beans('ranch') }
60
+ # end
61
+ class Verify
62
+ include Sprinkle::Configurable
63
+ attr_accessor :package, :description, :commands #:nodoc:
64
+
65
+ class <<self
66
+ # Register a verification module
67
+ def register(new_module)
68
+ class_eval { include new_module }
69
+ end
70
+ end
71
+
72
+ def initialize(package, description = '', &block) #:nodoc:
73
+ raise 'Verify requires a block.' unless block
74
+
75
+ @package = package
76
+ @description = description
77
+ @commands = []
78
+ @options ||= {}
79
+ @options[:padding] = 4
80
+
81
+ self.instance_eval(&block)
82
+ end
83
+
84
+ def process(server, pre = false) #:nodoc:
85
+ assert_delivery
86
+
87
+ description = @description.empty? ? @package.name : @description
88
+
89
+ if logger.debug?
90
+ logger.debug "#{@package.name}#{description} verification sequence: #{@commands.join('; ')} for server: #{server}\n"
91
+ end
92
+
93
+ unless Sprinkle::OPTIONS[:testing]
94
+ logger.info "#{" " * @options[:padding]}--> Verifying #{description}..."
95
+
96
+ unless @delivery.process(@package.name, @commands, server, true)
97
+ # Verification failed, halt sprinkling gracefully.
98
+ raise Sprinkle::VerificationFailed.new(@package, description)
99
+ end
100
+ end
101
+ end
102
+ end
103
+
104
+ class VerificationFailed < Exception #:nodoc:
105
+ attr_accessor :package, :description
106
+
107
+ def initialize(package, description)
108
+ super("Verifying #{package.name}#{description} failed.")
109
+
110
+ @package = package
111
+ @description = description
112
+ end
113
+ end
114
+ end
@@ -0,0 +1,9 @@
1
+ module Sprinkle #:nodoc:
2
+ module VERSION #:nodoc:
3
+ MAJOR = 0
4
+ MINOR = 2
5
+ TINY = 3
6
+
7
+ STRING = [MAJOR, MINOR, TINY].join('.')
8
+ end
9
+ end
data/lib/sprinkle.rb ADDED
@@ -0,0 +1,32 @@
1
+ require 'rubygems'
2
+ require 'active_support'
3
+
4
+ # Use active supports auto load mechanism
5
+ ActiveSupport::Dependencies.load_paths << File.dirname(__FILE__)
6
+
7
+ # Configure active support to log auto-loading of dependencies
8
+ #ActiveSupport::Dependencies::RAILS_DEFAULT_LOGGER = Logger.new($stdout)
9
+ #ActiveSupport::Dependencies.log_activity = true
10
+
11
+ # Load up extensions to existing classes
12
+ Dir[File.dirname(__FILE__) + '/sprinkle/extensions/*.rb'].each { |e| require e }
13
+ # Load up the verifiers so they can register themselves
14
+ Dir[File.dirname(__FILE__) + '/sprinkle/verifiers/*.rb'].each { |e| require e }
15
+
16
+ # Configuration options
17
+ module Sprinkle
18
+ OPTIONS = { :testing => false, :verbose => false, :force => false }
19
+ end
20
+
21
+ # Object is extended to give the package, policy, and deployment methods. To
22
+ # read about each method, see the corresponding module which is included.
23
+ #--
24
+ # Define a logging target and understand packages, policies and deployment DSL
25
+ #++
26
+ class Object
27
+ include Sprinkle::Package, Sprinkle::Policy, Sprinkle::Deployment
28
+
29
+ def logger # :nodoc:
30
+ @@__log__ ||= ActiveSupport::BufferedLogger.new($stdout, ActiveSupport::BufferedLogger::Severity::INFO)
31
+ end
32
+ end
data/script/destroy ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
3
+
4
+ begin
5
+ require 'rubigen'
6
+ rescue LoadError
7
+ require 'rubygems'
8
+ require 'rubigen'
9
+ end
10
+ require 'rubigen/scripts/destroy'
11
+
12
+ ARGV.shift if ['--help', '-h'].include?(ARGV[0])
13
+ RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
14
+ RubiGen::Scripts::Destroy.new.run(ARGV)
data/script/generate ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
3
+
4
+ begin
5
+ require 'rubigen'
6
+ rescue LoadError
7
+ require 'rubygems'
8
+ require 'rubigen'
9
+ end
10
+ require 'rubigen/scripts/generate'
11
+
12
+ ARGV.shift if ['--help', '-h'].include?(ARGV[0])
13
+ RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
14
+ RubiGen::Scripts::Generate.new.run(ARGV)
data/spec/spec.opts ADDED
@@ -0,0 +1 @@
1
+ --colour
@@ -0,0 +1,17 @@
1
+ begin
2
+ require 'spec'
3
+ rescue LoadError
4
+ require 'rubygems'
5
+ gem 'rspec'
6
+ require 'spec'
7
+ end
8
+
9
+ $:.unshift(File.dirname(__FILE__) + '/../lib')
10
+ require 'sprinkle'
11
+
12
+ module Kernel
13
+ def logger
14
+ @@__log_file__ ||= StringIO.new
15
+ @@__log__ = ActiveSupport::BufferedLogger.new @@__log_file__
16
+ end
17
+ end