necktie 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.
data/bin/necktie ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ $LOAD_PATH.unshift File.expand_path("../lib", File.dirname(__FILE__))
3
+ require "necktie"
4
+ necktie ARGV
@@ -0,0 +1,6 @@
1
+ def fix_file(file, &block)
2
+ text = block.call(File.read(file))
3
+ File.open file, "w" do |out|
4
+ out.write text
5
+ end
6
+ end
@@ -0,0 +1,10 @@
1
+ require "rubygems/dependency_installer"
2
+
3
+ def self.install_gem(name, version = nil)
4
+ installer = Gem::DependencyInstaller.new
5
+ spec = installer.find_spec_by_name_and_version(name, version).first.first
6
+ if Gem::SourceIndex.from_installed_gems.find_name(spec.name, spec.version).empty?
7
+ puts " ** Installing the gem #{spec.name} #{spec.version}"
8
+ installer.install name, version
9
+ end
10
+ end
@@ -0,0 +1,13 @@
1
+ def start_service(name)
2
+ puts " ** Starting service #{name}"
3
+ system "update-rc.d #{name} defaults" and
4
+ system "service #{name} start" or
5
+ fail "failed to start #{name}"
6
+ end
7
+
8
+ def stop_service(name)
9
+ puts " ** Stopping service #{name}"
10
+ system "service #{name} stop" and
11
+ system "update-rc.d -f #{name} remove" or
12
+ fail "failed to shutdown #{name}"
13
+ end
data/lib/necktie.rb ADDED
@@ -0,0 +1,57 @@
1
+ require "fileutils"
2
+ extend FileUtils
3
+ require "necktie/gems"
4
+ require "necktie/services"
5
+ require "necktie/files"
6
+
7
+ def necktie(args)
8
+ etc = "/etc/necktie"
9
+ File.writable?(etc) or File.writable?(File.dirname(etc)) or fail "Can't write to #{etc}. You should be running necktie as sudo."
10
+
11
+ envs, args = args.partition { |a| a[/=/] }
12
+ git_url = args.shift or fail "Usage: necktie git-url role* name=value*"
13
+ roles = args
14
+ # Setup environment variable from name=value arguments.
15
+ envs.each do |env|
16
+ name, value = env.split("=")
17
+ ENV[name] = value
18
+ end
19
+
20
+ # Default role is app. For all rules, execute setup scripts.
21
+ if roles.empty?
22
+ puts " Default role: app"
23
+ roles = ["app"]
24
+ end
25
+
26
+ repo = File.expand_path(".necktie")
27
+ if File.exist?(repo)
28
+ puts " * Pulling latest updates to #{repo}"
29
+ system "cd #{repo.inspect} && git pull #{repo.inspect} #{ENV["branch"] || "master"}" or fail
30
+ else
31
+ puts " * Cloning #{git_url} to #{repo}"
32
+ system "git clone #{git_url} #{repo.inspect}" or fail
33
+ end
34
+
35
+ Dir.chdir repo do
36
+ executed = File.exist?(etc) ? File.read(etc).split("\n") : []
37
+ roles.each do |role|
38
+ tasks = Dir["tasks/#{role}/*.rb"].map { |name| File.basename(name).gsub(/(.*)\.rb$/, "#{role}/\\1") }
39
+ todo = tasks - executed
40
+ if tasks.empty?
41
+ puts " * No tasks for role #{role}"
42
+ elsif todo.empty?
43
+ puts " * All tasks completed for role #{role}"
44
+ else
45
+ puts " * Now in role: #{role}"
46
+ File.open etc, "a" do |f|
47
+ todo.each do |task|
48
+ puts " ** Executing #{task.split("/").last}"
49
+ load "tasks/#{task}.rb"
50
+ f.puts task
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
56
+
57
+ end
data/necktie.gemspec ADDED
@@ -0,0 +1,14 @@
1
+ Gem::Specification.new do |spec|
2
+ spec.name = "necktie"
3
+ spec.version = "0.0.1"
4
+ spec.author = "Assaf Arkin"
5
+ spec.email = "assaf@labnotes.org"
6
+ spec.homepage = ""
7
+ spec.summary = "Dress to impress"
8
+ spec.description = ""
9
+
10
+ spec.files = Dir['{bin,lib}/**/*', '*.{gemspec,rdoc}']
11
+ spec.require_paths = 'lib'
12
+ spec.bindir = 'bin' # Use these for applications.
13
+ spec.executable = 'necktie'
14
+ end
metadata ADDED
@@ -0,0 +1,59 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: necktie
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Assaf Arkin
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-10-08 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: ""
17
+ email: assaf@labnotes.org
18
+ executables:
19
+ - necktie
20
+ extensions: []
21
+
22
+ extra_rdoc_files: []
23
+
24
+ files:
25
+ - bin/necktie
26
+ - lib/necktie/files.rb
27
+ - lib/necktie/gems.rb
28
+ - lib/necktie/services.rb
29
+ - lib/necktie.rb
30
+ - necktie.gemspec
31
+ has_rdoc: true
32
+ homepage: ""
33
+ licenses: []
34
+
35
+ post_install_message:
36
+ rdoc_options: []
37
+
38
+ require_paths: lib
39
+ required_ruby_version: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: "0"
44
+ version:
45
+ required_rubygems_version: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: "0"
50
+ version:
51
+ requirements: []
52
+
53
+ rubyforge_project:
54
+ rubygems_version: 1.3.5
55
+ signing_key:
56
+ specification_version: 3
57
+ summary: Dress to impress
58
+ test_files: []
59
+