reservoir 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/.gitignore ADDED
@@ -0,0 +1,5 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ .rvmrc
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in reservoir.gemspec
4
+ gemspec
data/README ADDED
@@ -0,0 +1,11 @@
1
+ A simple application assets in your public and private cloud.
2
+
3
+ == Usage ==
4
+
5
+ USAGE: reservoir <project_file1> <project_file2> ...
6
+ or reservoir help to see this message
7
+ or reservoir version to see the version
8
+
9
+ == Learn More ==
10
+
11
+ Contact Andrew Forward at aforward@gmail.com for more details and project direction
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,2 @@
1
+ require 'autotest/fsevent'
2
+ Autotest.add_discovery { "rspec2" }
data/bin/reservoir ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ begin
4
+ require 'rubygems'
5
+ gem 'reservoir'
6
+ rescue LoadError
7
+ end
8
+
9
+ require 'reservoir'
10
+ Reservoir::Application.new.run(ARGV)
@@ -0,0 +1,8 @@
1
+ version: 0.0.1
2
+ remote:
3
+ user: deployer
4
+ server: a4word.com
5
+ scripts:
6
+ - name: ruby
7
+ - name: rvm
8
+ - name: node
@@ -0,0 +1,84 @@
1
+ module Reservoir
2
+
3
+ class Application
4
+
5
+ def welcome_message
6
+ "reservoir, version #{Reservoir::VERSION}\n"
7
+ end
8
+
9
+ def usage_message
10
+ "USAGE: reservoir <project_file1> <project_file2> ...\n or reservoir help to see this message\n"
11
+ end
12
+
13
+ def exception_message(error)
14
+ "ERROR: #{error.message}\n\n #{error.backtrace.join('\n ')}"
15
+ end
16
+
17
+ def project_message(filename)
18
+ "\n===\nLoading Project: #{filename}\n===\n"
19
+ end
20
+
21
+ def which_script_message(which_script)
22
+ which_script.to_s
23
+ end
24
+
25
+
26
+ def run(args)
27
+
28
+ if args.nil? || args.empty?
29
+ Application.print usage_message
30
+ return
31
+ end
32
+
33
+ Application.print welcome_message
34
+
35
+ if ["--version","-version","-v","--v","version"].include?(args[0])
36
+ return
37
+ end
38
+
39
+ if ["--help","-help","-h","--h","help"].include?(args[0])
40
+ Application.print usage_message
41
+ return
42
+ end
43
+
44
+ args.each do |filename|
45
+ begin
46
+ p = Project.new(file: filename)
47
+ Application.print project_message(filename)
48
+ which_script = p.which_script_template
49
+ p.scripts.each do |script|
50
+ which_script.go(script)
51
+ Application.print which_script_message(which_script)
52
+ end
53
+ rescue
54
+ Application.print exception_message($!)
55
+ end
56
+ end
57
+
58
+
59
+ Application.print ""
60
+ end
61
+
62
+ # Provide the ability to direct the stdio with a print_mode switch
63
+ @@print_mode = :stdio
64
+ def self.print_mode=(val)
65
+ @@print_mode = val
66
+ end
67
+ def self.print_mode
68
+ @@print_mode
69
+ end
70
+ def self.reset_print_mode
71
+ @@print_mode = :stdio
72
+ end
73
+
74
+ def self.print(output)
75
+ if @@print_mode == :stdio
76
+ STDOUT.puts output
77
+ else
78
+ output
79
+ end
80
+ end
81
+
82
+ end
83
+
84
+ end
@@ -0,0 +1,49 @@
1
+ module Reservoir
2
+
3
+ class Caller
4
+
5
+ attr_accessor :remote_user, :remote_server, :command, :response
6
+
7
+ def initialize(data = {})
8
+ @remote_user = data[:remote_user]
9
+ @remote_server = data[:remote_server]
10
+ @command = data[:command]
11
+ @success = false
12
+ end
13
+
14
+ def success?
15
+ @success
16
+ end
17
+
18
+ def go(command = nil)
19
+ begin
20
+ @command = command unless command.nil?
21
+ @response = `#{full_command}`
22
+ @success = true
23
+ rescue
24
+ @response = "#{$!}"
25
+ @success = false
26
+ end
27
+ @success
28
+ end
29
+
30
+ def go_with_response(command = nil)
31
+ go(command)
32
+ @response
33
+ end
34
+
35
+ def ssh
36
+ return nil if @remote_server.nil?
37
+ return "ssh #{@remote_server}" if @remote_user.nil?
38
+ "ssh #{@remote_user}@#{@remote_server}"
39
+ end
40
+
41
+ def full_command
42
+ return nil if @command.nil?
43
+ return @command if @remote_server.nil?
44
+ "#{ssh} '#{@command}'"
45
+ end
46
+
47
+ end
48
+
49
+ end
@@ -0,0 +1,31 @@
1
+ module Reservoir
2
+
3
+ class Project
4
+
5
+ attr_accessor :scripts, :file, :remote_user, :remote_server
6
+
7
+ def initialize(data = {})
8
+ @file = data[:file]
9
+
10
+ if @file.nil?
11
+ @scripts = []
12
+ return
13
+ end
14
+
15
+ options = YAML::load( File.open( @file ) )
16
+ @scripts = options["scripts"].each.collect { |script| script["name"] }
17
+
18
+ unless options["remote"].nil?
19
+ @remote_user = options["remote"]["user"]
20
+ @remote_server = options["remote"]["server"]
21
+ end
22
+
23
+ end
24
+
25
+ def which_script_template
26
+ WhichScript.new(remote_user: @remote_user, remote_server: @remote_server)
27
+ end
28
+
29
+ end
30
+
31
+ end
@@ -0,0 +1,34 @@
1
+ module Reservoir
2
+
3
+ VERSION = "0.0.1"
4
+
5
+ class Version
6
+
7
+ attr_accessor :version_info, :version, :version_parts
8
+
9
+ def read(version_info)
10
+ @version_info = version_info
11
+
12
+ major_minor_revision_match = /(\d*)\.(\d*)\.(\d*)/
13
+ mmr_patchlevel_match = /(\d*)\.(\d*)\.(\d*).*(patchlevel)\s*(\d*)/
14
+
15
+
16
+ m = version_info.match(mmr_patchlevel_match)
17
+ unless m.nil?
18
+ @version_parts = [ m[1], m[2], m[3], m[5] ]
19
+ @version = @version_parts[0..2].join(".") + "-p" + m[5]
20
+ return
21
+ end
22
+
23
+ m = version_info.match(major_minor_revision_match)
24
+ unless m.nil?
25
+ @version_parts = [ m[1], m[2], m[3] ]
26
+ @version = @version_parts.join(".")
27
+ return
28
+ end
29
+
30
+ end
31
+
32
+ end
33
+
34
+ end
@@ -0,0 +1,46 @@
1
+ module Reservoir
2
+
3
+ class WhichScript
4
+
5
+ attr_accessor :script, :path, :response
6
+
7
+ def initialize(data = {})
8
+ @caller = Caller.new(:remote_server => data[:remote_server], :remote_user => data[:remote_user])
9
+ @success = false
10
+ end
11
+
12
+ def remote_user
13
+ @caller.remote_user
14
+ end
15
+
16
+ def remote_server
17
+ @caller.remote_server
18
+ end
19
+
20
+ def to_s
21
+ return "WhichScript called before any #go(script) was performed" if @script.nil?
22
+ "#{@script} : #{@response}"
23
+ end
24
+
25
+ def go(app_name)
26
+ @script = app_name
27
+ @path = @caller.go_with_response("which #{app_name}")
28
+
29
+ if @path == ''
30
+ @path = nil
31
+ @success = false
32
+ @response = 'script not installed'
33
+ else
34
+ @success = true
35
+ @response = @path
36
+ end
37
+ @success
38
+ end
39
+
40
+ def success?
41
+ @success
42
+ end
43
+
44
+ end
45
+
46
+ end
data/lib/reservoir.rb ADDED
@@ -0,0 +1,7 @@
1
+ require 'yaml'
2
+
3
+ require "reservoir/version"
4
+ require 'reservoir/caller'
5
+ require 'reservoir/which_script'
6
+ require 'reservoir/project'
7
+ require 'reservoir/application'
data/reservoir.gemspec ADDED
@@ -0,0 +1,28 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "reservoir/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "reservoir"
7
+ s.version = Reservoir::VERSION
8
+ s.authors = ["Andrew Forward"]
9
+ s.email = ["aforward@gmail.com"]
10
+ s.homepage = ""
11
+ s.summary = %q{What apps, versions and configurations to you have setup on your server}
12
+ s.description = %q{Helps manage cloud-based server instances by enumerating, comparing and diff'ing application configurations}
13
+
14
+ s.rubyforge_project = "reservoir"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.default_executable = 'bin/reservoir'
20
+ s.require_paths = ["lib"]
21
+
22
+ s.add_development_dependency('rspec')
23
+ s.add_development_dependency('autotest')
24
+ s.add_development_dependency('autotest-fsevent') if RUBY_PLATFORM =~ /darwin/i
25
+ s.add_development_dependency('rb-fsevent') if RUBY_PLATFORM =~ /darwin/i
26
+
27
+
28
+ end
@@ -0,0 +1,143 @@
1
+ require 'spec_helper'
2
+
3
+ module Reservoir
4
+
5
+ describe Application do
6
+
7
+ before (:each) do
8
+ @project_file = File.dirname(__FILE__) + '/sample_project.yml'
9
+ @project_file2 = File.dirname(__FILE__) + '/sample_project2.yml'
10
+ @application = Application.new
11
+ Application.print_mode = :string
12
+ end
13
+
14
+ describe "#run" do
15
+
16
+ describe "no args" do
17
+
18
+ it "should handle nil args" do
19
+ @application.should_receive(:usage_message)
20
+ @application.run(nil)
21
+ end
22
+
23
+ it "should handle empty args" do
24
+ @application.should_receive(:usage_message)
25
+ @application.run([])
26
+ end
27
+
28
+ end
29
+
30
+ describe "help" do
31
+
32
+ ["--help","-help","-h","--h","help"].each do |help_name|
33
+ it "should support --help" do
34
+ @application.should_receive(:welcome_message)
35
+ @application.should_receive(:usage_message)
36
+ @application.run([help_name])
37
+ end
38
+ end
39
+
40
+ end
41
+
42
+ describe "version" do
43
+
44
+ ["--version","-version","-v","--v","version"].each do |help_name|
45
+ it "should support --help" do
46
+ @application.should_receive(:welcome_message)
47
+ @application.should_not_receive(:exception_message)
48
+ @application.run([help_name])
49
+ end
50
+ end
51
+
52
+ end
53
+
54
+ describe "invalid project file" do
55
+
56
+ it "should fail gracefully" do
57
+ @application.should_receive(:welcome_message)
58
+ @application.should_receive(:exception_message)
59
+ @application.run(["blah.yml"])
60
+ end
61
+
62
+ end
63
+
64
+ describe "valid project files" do
65
+
66
+ it "should handle one file" do
67
+ @application.should_receive(:welcome_message)
68
+ @application.should_receive(:project_message).with(@project_file)
69
+ @application.should_receive(:which_script_message).exactly(3).times
70
+ @application.run([@project_file])
71
+ end
72
+
73
+ it "should handle multiple file" do
74
+ @application.should_receive(:welcome_message)
75
+ @application.should_receive(:project_message).with(@project_file)
76
+ @application.should_receive(:project_message).with(@project_file2)
77
+ @application.should_receive(:which_script_message).exactly(4).times
78
+ @application.run([@project_file,@project_file2])
79
+ end
80
+
81
+
82
+ end
83
+
84
+ end
85
+
86
+ describe "#print_mode" do
87
+
88
+ it "should be settable" do
89
+ Application.print_mode = :a
90
+ Application.print_mode.should == :a
91
+ end
92
+
93
+ it "should be resetable" do
94
+ Application.print_mode = :a
95
+ Application.reset_print_mode
96
+ Application.print_mode.should == :stdio
97
+ end
98
+
99
+ end
100
+
101
+ describe "#messages" do
102
+
103
+ it "should welcome_message" do
104
+ @application.welcome_message.should == "reservoir, version 0.0.1\n"
105
+ end
106
+
107
+ it "should usage_message" do
108
+ @application.usage_message.should == "USAGE: reservoir <project_file1> <project_file2> ...\n or reservoir help to see this message\n"
109
+ end
110
+
111
+ it "should project_message" do
112
+ @application.project_message("blah.txt").should == "\n===\nLoading Project: blah.txt\n===\n"
113
+ end
114
+
115
+ it "should exception_message" do
116
+ begin
117
+ File.open("garble.txt")
118
+ rescue
119
+ @application.exception_message($!).split("\n")[0].should == "ERROR: No such file or directory - garble.txt"
120
+ end
121
+ end
122
+
123
+
124
+ end
125
+
126
+ describe "#print" do
127
+
128
+ it "should return a string if print_mode :string" do
129
+ Application.print_mode = :string
130
+ Application.print("x").should == "x"
131
+ end
132
+
133
+ it "should write to output if print_mode :stdio" do
134
+ STDOUT.should_receive(:puts).with("x")
135
+ Application.print_mode = :stdio
136
+ Application.print("x")
137
+ end
138
+
139
+ end
140
+
141
+ end
142
+
143
+ end
@@ -0,0 +1,121 @@
1
+ require 'spec_helper'
2
+
3
+ module Reservoir
4
+
5
+ describe Caller do
6
+
7
+ before (:each) do
8
+ @caller = Caller.new
9
+ end
10
+
11
+ before(:all) do
12
+ File.open("findme.txt", 'w') {|f| f.write("test123") }
13
+ end
14
+
15
+ after(:all) do
16
+ File.delete("findme.txt")
17
+ end
18
+
19
+ describe "#initialize" do
20
+
21
+ it "should set command, remote_server, remote_user" do
22
+ caller = Caller.new(:command => "a", :remote_server => "b", :remote_user => "c")
23
+ caller.command.should == "a"
24
+ caller.remote_server.should == "b"
25
+ caller.remote_user.should == "c"
26
+ end
27
+
28
+ end
29
+
30
+ describe "#go" do
31
+
32
+ it "should capture command as string" do
33
+ @caller.command = "cat findme.txt"
34
+ @caller.go.should == true
35
+ @caller.success?.should == true
36
+ @caller.response.should == "test123"
37
+ end
38
+
39
+ it "should allow command as parameter" do
40
+ @caller.command = "cat blah.txt"
41
+ @caller.go("cat findme.txt").should == true
42
+ @caller.success?.should == true
43
+ @caller.response.should == "test123"
44
+ end
45
+
46
+
47
+ it "should report errors" do
48
+ @caller.command = "garbligook"
49
+ @caller.go.should == false
50
+ @caller.success?.should == false
51
+ @caller.response.should == "No such file or directory - garbligook"
52
+ end
53
+
54
+ end
55
+
56
+
57
+ describe "#go_with_response" do
58
+
59
+ it "should capture command as string" do
60
+ @caller.command = "cat findme.txt"
61
+ @caller.go_with_response.should == "test123"
62
+ end
63
+
64
+ it "should allow command as parameter" do
65
+ @caller.command = "cat blah.txt"
66
+ @caller.go_with_response("cat findme.txt").should == "test123"
67
+ end
68
+
69
+
70
+ end
71
+
72
+
73
+ describe "#ssh" do
74
+
75
+ it "should default ot nil" do
76
+ @caller.ssh.should == nil
77
+ end
78
+
79
+ it "should accept remote_server" do
80
+ @caller.remote_server = "remote.server.com"
81
+ @caller.ssh.should == "ssh remote.server.com"
82
+ end
83
+
84
+ it "should accept user and remote_server" do
85
+ @caller.remote_user = "deployer"
86
+ @caller.remote_server = "remote.server.com"
87
+ @caller.ssh.should == "ssh deployer@remote.server.com"
88
+ end
89
+
90
+
91
+ end
92
+
93
+ describe "#full_command" do
94
+
95
+ it "should default to nil" do
96
+ @caller.full_command.should == nil
97
+ end
98
+
99
+ it "should accept command" do
100
+ @caller.command = "ls -la"
101
+ @caller.full_command.should == "ls -la"
102
+ end
103
+
104
+ it "should accept command with remote_server" do
105
+ @caller.remote_server = "remote.server.com"
106
+ @caller.command = "mkdir blah"
107
+ @caller.full_command.should == "ssh remote.server.com 'mkdir blah'"
108
+ end
109
+
110
+ it "should accept command with user and remote_server" do
111
+ @caller.remote_user = "deployer"
112
+ @caller.remote_server = "remote.server.com"
113
+ @caller.command = "ls -la"
114
+ @caller.full_command.should == "ssh deployer@remote.server.com 'ls -la'"
115
+ end
116
+
117
+ end
118
+
119
+ end
120
+
121
+ end
@@ -0,0 +1,41 @@
1
+ require 'spec_helper'
2
+
3
+ module Reservoir
4
+
5
+ describe Project do
6
+
7
+ before (:each) do
8
+ @project = Project.new
9
+ end
10
+
11
+ describe "#scripts" do
12
+
13
+ it "should load from project file" do
14
+ @project = Project.new(file: File.dirname(__FILE__) + '/sample_project.yml')
15
+ @project.scripts.should == [ "ruby", "rvm", "node"]
16
+ end
17
+
18
+ end
19
+
20
+ describe "#which_script_template" do
21
+
22
+ it "should set the remote_user and remote_server" do
23
+ @project = Project.new(file: File.dirname(__FILE__) + '/sample_project2.yml')
24
+ which_script = @project.which_script_template
25
+ which_script.remote_user.should == 'aforward'
26
+ which_script.remote_server.should == 'a4word.com'
27
+ end
28
+
29
+ it "should ignore remote data if not set" do
30
+ @project = Project.new(file: File.dirname(__FILE__) + '/sample_project.yml')
31
+ which_script = @project.which_script_template
32
+ which_script.remote_user.should == nil
33
+ which_script.remote_server.should == nil
34
+ end
35
+
36
+
37
+ end
38
+
39
+ end
40
+
41
+ end
@@ -0,0 +1,6 @@
1
+ version: 0.0.1
2
+ scripts:
3
+ - name: ruby
4
+ - name: rvm
5
+ - name: node
6
+
@@ -0,0 +1,6 @@
1
+ version: 0.0.1
2
+ remote:
3
+ user: aforward
4
+ server: a4word.com
5
+ scripts:
6
+ - name: ruby
@@ -0,0 +1,30 @@
1
+ # This file is copied to spec/ when you run 'rails generate rspec:install'
2
+ require 'rubygems'
3
+ require 'rspec'
4
+ require File.dirname(__FILE__) + '/../lib/reservoir'
5
+
6
+ # Requires supporting ruby files with custom matchers and macros, etc,
7
+ # in spec/support/ and its subdirectories.
8
+ # Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
9
+
10
+ RSpec.configure do |config|
11
+
12
+ # == Mock Framework
13
+ #
14
+ # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
15
+ #
16
+ # config.mock_with :mocha
17
+ # config.mock_with :flexmock
18
+ # config.mock_with :rr
19
+ config.mock_with :rspec
20
+ # config.before(:each) { Machinist.reset_before_test }
21
+
22
+ # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
23
+ # config.fixture_path = "#{::Rails.root}/spec/fixtures"
24
+
25
+ # If you're not using ActiveRecord, or you'd prefer not to run each of your
26
+ # examples within a transaction, remove the following line or assign false
27
+ # instead of true.
28
+ # config.use_transactional_fixtures = true
29
+
30
+ end
@@ -0,0 +1,55 @@
1
+ require 'spec_helper'
2
+
3
+ module Reservoir
4
+
5
+ describe Version do
6
+
7
+ before (:each) do
8
+ @analyzer = Version.new
9
+ end
10
+
11
+ describe "#analyze" do
12
+
13
+ it "should store version_info" do
14
+ @analyzer.read("blah")
15
+ @analyzer.version_info.should == "blah"
16
+ end
17
+
18
+ describe "#version" do
19
+
20
+ it "should understand RVM" do
21
+ @analyzer.read("rvm 1.2.3 by Wayne E. Seguin (wayneeseguin@gmail.com) [https://rvm.beginrescueend.com/]")
22
+ @analyzer.version_parts.should == ["1","2","3"]
23
+ @analyzer.version.should == "1.2.3"
24
+ end
25
+
26
+ it "should understand node.js" do
27
+ @analyzer.read("v0.4.8")
28
+ @analyzer.version_parts.should == ["0","4","8"]
29
+ @analyzer.version.should == "0.4.8"
30
+ end
31
+
32
+ it "should understand ruby" do
33
+ @analyzer.read("ruby 1.8.7 (2008-08-11 patchlevel 72) [x86_64-linux]")
34
+ @analyzer.version_parts.should == ["1","8","7","72"]
35
+ @analyzer.version.should == "1.8.7-p72"
36
+ end
37
+
38
+ it "should understand nginx" do
39
+ @analyzer.read("nginx: nginx version: nginx/1.4.5")
40
+ @analyzer.version_parts.should == ["1","4","5"]
41
+ @analyzer.version.should == "1.4.5"
42
+ end
43
+
44
+ it "should understand passenger" do
45
+ @analyzer.read("Phusion Passenger version 3.0.7")
46
+ @analyzer.version_parts.should == ["3","0","7"]
47
+ @analyzer.version.should == "3.0.7"
48
+ end
49
+
50
+ end
51
+
52
+ end
53
+
54
+ end
55
+ end
@@ -0,0 +1,65 @@
1
+ require 'spec_helper'
2
+
3
+ module Reservoir
4
+
5
+ describe WhichScript do
6
+
7
+ before (:each) do
8
+ @which_script = WhichScript.new
9
+ @caller = Caller.new
10
+ Caller.stub!(:new).and_return(@caller)
11
+ end
12
+
13
+ describe "#initialize" do
14
+
15
+ it "should support remote" do
16
+ Caller.should_receive(:new).with(remote_user: "a", remote_server: "b")
17
+ which_script = WhichScript.new(remote_user: "a", remote_server: "b")
18
+ end
19
+
20
+ end
21
+
22
+ describe "#go" do
23
+
24
+ it "should set the path" do
25
+ @which_script.go('ruby').should == true
26
+ @which_script.success?.should == true
27
+ @which_script.path.should == `which ruby`
28
+ @which_script.response.should == @which_script.path
29
+ end
30
+
31
+ it "should set path to nil if unknown" do
32
+ @which_script.go('garble_gook_gook').should == false
33
+ @which_script.success?.should == false
34
+ @which_script.path.should == nil
35
+ @which_script.response.should == 'script not installed'
36
+ end
37
+
38
+ it "should analyze on remote server if set in constructor" do
39
+ Caller.should_receive(:new).with(remote_server: 'a', remote_user: 'b')
40
+ @caller.should_receive(:go_with_response).with("which ruby").and_return("blah")
41
+ @which_script = WhichScript.new(remote_server: 'a', remote_user: 'b')
42
+ @which_script.go('ruby').should == true
43
+ @which_script.success?.should == true
44
+ @which_script.path.should == "blah"
45
+ end
46
+
47
+ end
48
+
49
+ describe "#to_s" do
50
+
51
+ it "should say unknown if not known" do
52
+ @which_script.to_s.should == "WhichScript called before any #go(script) was performed"
53
+ end
54
+
55
+ it "should say where the script went" do
56
+ @which_script.script = "a"
57
+ @which_script.response = "b"
58
+ @which_script.to_s.should == "a : b"
59
+ end
60
+
61
+ end
62
+
63
+ end
64
+
65
+ end
metadata ADDED
@@ -0,0 +1,121 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: reservoir
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Andrew Forward
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-08-30 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: &70102825983140 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *70102825983140
25
+ - !ruby/object:Gem::Dependency
26
+ name: autotest
27
+ requirement: &70102825982720 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *70102825982720
36
+ - !ruby/object:Gem::Dependency
37
+ name: autotest-fsevent
38
+ requirement: &70102825982260 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *70102825982260
47
+ - !ruby/object:Gem::Dependency
48
+ name: rb-fsevent
49
+ requirement: &70102825981840 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *70102825981840
58
+ description: Helps manage cloud-based server instances by enumerating, comparing and
59
+ diff'ing application configurations
60
+ email:
61
+ - aforward@gmail.com
62
+ executables:
63
+ - reservoir
64
+ extensions: []
65
+ extra_rdoc_files: []
66
+ files:
67
+ - .gitignore
68
+ - Gemfile
69
+ - README
70
+ - Rakefile
71
+ - autotest/discover.rb
72
+ - bin/reservoir
73
+ - examples/rails_server.yml
74
+ - lib/reservoir.rb
75
+ - lib/reservoir/application.rb
76
+ - lib/reservoir/caller.rb
77
+ - lib/reservoir/project.rb
78
+ - lib/reservoir/version.rb
79
+ - lib/reservoir/which_script.rb
80
+ - reservoir.gemspec
81
+ - spec/application_spec.rb
82
+ - spec/caller_spec.rb
83
+ - spec/project_spec.rb
84
+ - spec/sample_project.yml
85
+ - spec/sample_project2.yml
86
+ - spec/spec_helper.rb
87
+ - spec/version_spec.rb
88
+ - spec/which_script_spec.rb
89
+ homepage: ''
90
+ licenses: []
91
+ post_install_message:
92
+ rdoc_options: []
93
+ require_paths:
94
+ - lib
95
+ required_ruby_version: !ruby/object:Gem::Requirement
96
+ none: false
97
+ requirements:
98
+ - - ! '>='
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
101
+ required_rubygems_version: !ruby/object:Gem::Requirement
102
+ none: false
103
+ requirements:
104
+ - - ! '>='
105
+ - !ruby/object:Gem::Version
106
+ version: '0'
107
+ requirements: []
108
+ rubyforge_project: reservoir
109
+ rubygems_version: 1.8.6
110
+ signing_key:
111
+ specification_version: 3
112
+ summary: What apps, versions and configurations to you have setup on your server
113
+ test_files:
114
+ - spec/application_spec.rb
115
+ - spec/caller_spec.rb
116
+ - spec/project_spec.rb
117
+ - spec/sample_project.yml
118
+ - spec/sample_project2.yml
119
+ - spec/spec_helper.rb
120
+ - spec/version_spec.rb
121
+ - spec/which_script_spec.rb