vagrant-notify 0.0.1 → 0.1.0

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/.travis.yml CHANGED
@@ -1,5 +1,6 @@
1
1
  language: ruby
2
2
  before_script:
3
+ - sudo apt-get -y install linux-headers-$(uname -r)
3
4
  - sudo apt-get install virtualbox
4
5
  rvm:
5
6
  - 1.9.3
data/Gemfile.lock CHANGED
@@ -1,8 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- vagrant-notify (0.0.1)
5
- vagrant
4
+ vagrant-notify (0.1.0)
6
5
 
7
6
  GEM
8
7
  remote: https://rubygems.org/
@@ -37,6 +36,8 @@ GEM
37
36
  rspec-expectations (2.11.3)
38
37
  diff-lcs (~> 1.1.3)
39
38
  rspec-mocks (2.11.3)
39
+ rspec-spies (2.1.3)
40
+ rspec (~> 2.0)
40
41
  thor (0.16.0)
41
42
  vagrant (1.0.5)
42
43
  archive-tar-minitar (= 0.5.2)
@@ -57,4 +58,6 @@ DEPENDENCIES
57
58
  rake
58
59
  rb-inotify
59
60
  rspec
61
+ rspec-spies
62
+ vagrant
60
63
  vagrant-notify!
data/README.md CHANGED
@@ -1,23 +1,24 @@
1
1
  # Vagrant::Notify
2
2
 
3
3
  [![Build Status](https://travis-ci.org/fgrehm/vagrant-notify.png)](https://travis-ci.org/fgrehm/vagrant-notify)
4
+ [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/fgrehm/vagrant-notify)
4
5
 
5
6
  A Vagrant plugin that forwards `notify-send` from guest to host machine, tested
6
7
  using Ubuntu as guest and host machine.
7
8
 
8
9
  ## Installation
9
10
 
10
- Add this line to your application's Gemfile:
11
+ If you use the gem version of Vagrant, use:
11
12
 
12
- gem 'vagrant-notify'
13
-
14
- And then execute:
15
-
16
- $ bundle
13
+ ```terminal
14
+ $ gem install vagrant-notify
15
+ ```
17
16
 
18
- Or install it yourself as:
17
+ otherwise, use:
19
18
 
20
- $ gem install vagrant-notify
19
+ ```terminal
20
+ $ vagrant gem install vagrant-notify
21
+ ```
21
22
 
22
23
  ## Usage
23
24
 
@@ -27,22 +28,12 @@ will fire up on `8081` port and a [script](https://github.com/fgrehm/vagrant-not
27
28
  will be installed on the guest machine to replace the original `notify-send`
28
29
  command.
29
30
 
30
- If by any change your IP changes, you can run `vagrant provision` in order to
31
+ If by any chance your IP changes, you can run `vagrant provision` in order to
31
32
  update the guest script with the new IP.
32
33
 
33
- In case you need to run the notification server on a different port, you can set
34
- it from your `Vagrantfile`:
35
34
 
36
- ```ruby
37
- Vagrant::Notify::server_port = 8888
38
- ```
39
35
 
40
- ## TODO
41
36
 
42
- * Display guest machine icons
43
- * Support for Multi-VM environments
44
- * Notify provisioning status
45
- * Support for Mac OS
46
37
 
47
38
  ## Contributing
48
39
 
@@ -25,7 +25,9 @@ module Vagrant
25
25
  private
26
26
 
27
27
  def compile_command(env)
28
- host_port = Vagrant::Notify::server_port
28
+ uuid = env[:vm].uuid.to_s
29
+ local_data = env[:vm].env.local_data
30
+ host_port = local_data['vagrant-notify'][uuid]['port']
29
31
  template_binding = OpenStruct.new(:host_ip => host_ip(env), :host_port => host_port)
30
32
  command = ERB.new(File.read(@command_template_file)).result(template_binding.instance_eval { binding })
31
33
  File.open(env[:vm].env.tmp_path + 'vagrant-notify-send', 'w') { |f| f.write(command) }
@@ -7,11 +7,12 @@ module Vagrant
7
7
  end
8
8
 
9
9
  def call(env)
10
- if pid = server_is_running?(env)
10
+ @env = env
11
+ if pid = server_is_running?
11
12
  env[:ui].info "Notification server is already running (#{pid})"
12
13
  else
13
- pid = run_server(env)
14
- env[:ui].info "Notification server fired up (#{pid})"
14
+ port, pid = run_server
15
+ env[:ui].info "Notification server is listening on #{port} (#{pid})"
15
16
  end
16
17
 
17
18
  @app.call(env)
@@ -19,21 +20,50 @@ module Vagrant
19
20
 
20
21
  private
21
22
 
22
- def run_server(env)
23
- pid = Server.run
23
+ def run_server
24
+ port = next_available_port
25
+ uuid = @env[:vm].uuid.to_s
26
+ pid = Server.run(@env, port)
24
27
 
25
- local_data = env[:vm].env.local_data
26
- local_data['vagrant-notify'] ||= Vagrant::Util::HashWithIndifferentAccess.new
27
- local_data['vagrant-notify']['pid'] = pid
28
+ local_data = @env[:vm].env.local_data
29
+ config = local_data['vagrant-notify'] ||= Vagrant::Util::HashWithIndifferentAccess.new
30
+ config.merge!(uuid => {'pid' => pid, 'port' => port })
28
31
  local_data.commit
29
32
 
30
- pid
33
+ [port, pid]
34
+ end
35
+
36
+ def next_available_port
37
+ range = @env[:vm].config.vm.auto_port_range.to_a
38
+ range -= @env[:vm].config.vm.forwarded_ports.collect { |opts| opts[:hostport].to_i }
39
+ range -= used_ports
40
+
41
+ if range.empty?
42
+ raise 'Unable to find a port to bind the notification server to'
43
+ end
44
+
45
+ # Set the port up to be the last one since vagrant's port collision handler
46
+ # will use the first as in:
47
+ # https://github.com/mitchellh/vagrant/blob/1-0-stable/lib/vagrant/action/vm/check_port_collisions.rb#L51
48
+ port = range.pop
49
+ end
50
+
51
+ def used_ports
52
+ local_data = @env[:vm].env.local_data
53
+ local_data['vagrant-notify'] ||= Vagrant::Util::HashWithIndifferentAccess.new
54
+ local_data['vagrant-notify'].values.map do |settings|
55
+ settings['port'].to_i if settings['port']
56
+ end.compact
31
57
  end
32
58
 
33
59
  # REFACTOR: This is duplicated on Middleware::StopServer
34
- def server_is_running?(env)
60
+ def server_is_running?
61
+ uuid = @env[:vm].uuid.to_s
35
62
  begin
36
- pid = env[:vm].env.local_data.fetch('vagrant-notify', {}).fetch('pid', nil)
63
+ pid = @env[:vm].env.local_data.
64
+ fetch('vagrant-notify', {}).
65
+ fetch(uuid, {}).
66
+ fetch('pid', nil)
37
67
  return false unless pid
38
68
 
39
69
  Process.getpgid(pid)
@@ -25,16 +25,21 @@ module Vagrant
25
25
  end
26
26
 
27
27
  def cleanup_local_data(env)
28
+ uuid = env[:vm].uuid.to_s
28
29
  local_data = env[:vm].env.local_data
29
30
  local_data['vagrant-notify'] ||= Vagrant::Util::HashWithIndifferentAccess.new
30
- local_data['vagrant-notify'].delete('pid')
31
+ local_data['vagrant-notify'].delete(uuid)
31
32
  local_data.commit
32
33
  end
33
34
 
34
35
  # REFACTOR: This is duplicated on Middleware::StartServer
35
36
  def server_is_running?(env)
37
+ uuid = env[:vm].uuid.to_s
36
38
  begin
37
- pid = env[:vm].env.local_data.fetch('vagrant-notify', {}).fetch('pid', nil)
39
+ pid = env[:vm].env.local_data.
40
+ fetch('vagrant-notify', {}).
41
+ fetch(uuid, {}).
42
+ fetch('pid', nil)
38
43
  return false unless pid
39
44
 
40
45
  Process.getpgid(pid.to_i)
@@ -1,21 +1,14 @@
1
1
  module Vagrant
2
2
  module Notify
3
3
  class Server
4
- def receive_data(client)
5
- args = ''
6
- while tmp = client.gets
7
- args << tmp
8
- end
9
- client.close
4
+ HTTP_RESPONSE = "Hi! You just reached the vagrant notification server"
10
5
 
11
- system("notify-send #{args}")
12
- end
13
-
14
- def self.run
6
+ def self.run(env, port)
7
+ uuid = env[:vm].uuid
15
8
  fork do
16
- $0 = 'vagrant-notify-server'
17
- tcp_server = TCPServer.open(Vagrant::Notify::server_port)
18
- server = self.new
9
+ $0 = "vagrant-notify-server (#{port})"
10
+ tcp_server = TCPServer.open(port)
11
+ server = self.new(uuid)
19
12
  loop {
20
13
  Thread.start(tcp_server.accept) do |client|
21
14
  server.receive_data(client)
@@ -23,6 +16,49 @@ module Vagrant
23
16
  }
24
17
  end
25
18
  end
19
+
20
+ def initialize(uuid, env = Vagrant::Environment.new)
21
+ @uuid = uuid
22
+ @env = env
23
+ end
24
+
25
+ def receive_data(client)
26
+ args = read_args(client)
27
+ if http_request?(args)
28
+ client.puts HTTP_RESPONSE
29
+ else
30
+ download_icon!(args)
31
+ system("notify-send #{args}")
32
+ end
33
+ client.close
34
+ end
35
+
36
+ private
37
+
38
+ def read_args(client)
39
+ ''.tap do |args|
40
+ while tmp = client.gets and tmp !~ /^\s*$/
41
+ args << tmp
42
+ end
43
+ end
44
+ end
45
+
46
+ def http_request?(args)
47
+ args =~ /^GET/
48
+ end
49
+
50
+ def download_icon!(args)
51
+ return unless args =~ /-i '([^']+)'/
52
+ icon = $1
53
+ # TODO: Handle system icons
54
+ host_file = "/tmp/vagrant-notify-#{@uuid}-#{icon.gsub('/', '-')}"
55
+ download(icon, host_file) unless File.exists?(host_file)
56
+ args.gsub!(icon, host_file)
57
+ end
58
+
59
+ def download(icon, host_file)
60
+ @env.vms[:default].channel.download(icon, host_file)
61
+ end
26
62
  end
27
63
  end
28
64
  end
@@ -0,0 +1,22 @@
1
+ require 'vagrant/communication/ssh'
2
+
3
+ module VagrantSshExt
4
+ # Based on https://github.com/mitchellh/vagrant/blob/1-0-stable/lib/vagrant/communication/ssh.rb#L75-L90
5
+ def download(from, to)
6
+ @logger.debug("Downloading: #{from} to #{to}")
7
+
8
+ connect do |connection|
9
+ scp = Net::SCP.new(connection)
10
+ scp.download!(from, to)
11
+ end
12
+ rescue Net::SCP::Error => e
13
+ # If we get the exit code of 127, then this means SCP is unavailable.
14
+ raise Errors::SCPUnavailable if e.message =~ /\(127\)/
15
+ # Otherwise, just raise the error up
16
+ raise
17
+ end
18
+ end
19
+
20
+ unless Vagrant::Communication::SSH.public_methods.include?('download')
21
+ Vagrant::Communication::SSH.send :include, VagrantSshExt
22
+ end
@@ -1,5 +1,5 @@
1
1
  module Vagrant
2
2
  module Notify
3
- VERSION = "0.0.1"
3
+ VERSION = "0.1.0"
4
4
  end
5
5
  end
@@ -3,20 +3,18 @@ require 'socket'
3
3
  require 'erb'
4
4
  require 'ostruct'
5
5
 
6
+ if File.exists?(File.join(File.expand_path('../../', __FILE__), '.git'))
7
+ $:.unshift(File.expand_path('../../lib', __FILE__))
8
+ end
9
+
6
10
  require 'vagrant-notify/middleware'
7
11
  require 'vagrant-notify/server'
12
+ require 'vagrant-notify/vagrant_ssh_ext'
8
13
  require "vagrant-notify/version"
9
14
 
10
15
  module Vagrant
11
16
  module Notify
12
17
  class << self
13
- def server_port
14
- @@server_port ||= 8081
15
- end
16
- def server_port=(server_port)
17
- @@server_port = server_port
18
- end
19
-
20
18
  def files_path
21
19
  @file_path ||= File.expand_path(File.dirname(__FILE__) + '/../files')
22
20
  end
@@ -25,8 +23,13 @@ module Vagrant
25
23
  end
26
24
 
27
25
  Vagrant.actions[:start].tap do |start|
28
- start.use Vagrant::Notify::Middleware::StartServer
29
- start.insert_after Vagrant::Action::VM::Boot, Vagrant::Notify::Middleware::InstallCommand
26
+ start.insert_after Vagrant::Action::VM::Boot, Vagrant::Notify::Middleware::StartServer
27
+ start.insert_after Vagrant::Notify::Middleware::StartServer, Vagrant::Notify::Middleware::InstallCommand
28
+ end
29
+ Vagrant.actions[:resume].tap do |start|
30
+ start.use Vagrant::Notify::Middleware::StartServer
31
+ start.use Vagrant::Notify::Middleware::InstallCommand
30
32
  end
31
- Vagrant.actions[:halt].use Vagrant::Notify::Middleware::StopServer
33
+ Vagrant.actions[:halt].use Vagrant::Notify::Middleware::StopServer
34
+ Vagrant.actions[:suspend].use Vagrant::Notify::Middleware::StopServer
32
35
  Vagrant.actions[:provision].use Vagrant::Notify::Middleware::InstallCommand
@@ -1,20 +1,25 @@
1
1
  describe Vagrant::Notify::Middleware::InstallCommand do
2
2
  let(:start_stack) { Vagrant.actions[:start].send(:stack) }
3
3
  let(:provision_stack) { Vagrant.actions[:provision].send(:stack) }
4
+ let(:resume_stack) { Vagrant.actions[:resume].send(:stack) }
4
5
  let(:host_ip) { 'host-ip' }
5
- let(:host_port) { Vagrant::Notify::server_port }
6
+ let(:host_port) { 789 }
6
7
  let(:template) { ERB.new('<%= host_ip %> <%= host_port %>') }
7
8
  let(:compiled_command_path) { @env[:vm].env.tmp_path + 'vagrant-notify-send' }
8
9
  let(:target_tmp_path) { '/tmp/notify-send' }
9
10
  let(:target_path) { '/usr/bin/notify-send' }
10
11
  let(:channel) { mock(:channel, :sudo => true, :upload => true, :execute => true) }
11
12
  let(:get_ip_command) { 'echo -n $SSH_CLIENT | cut -d" " -f1' }
13
+ let(:uuid) { @env[:vm].uuid.to_s }
14
+ let(:local_data) { Hash.new }
12
15
 
13
16
  subject { described_class.new(@app, @env) }
14
17
 
15
18
  before do
16
19
  @app, @env = action_env(vagrant_env.vms.values.first.env)
17
20
  @env[:vm].stub(:channel => channel)
21
+ @env[:vm].env.stub(:local_data => local_data)
22
+ local_data['vagrant-notify'] = { uuid => {'port' => host_port } }
18
23
  ERB.stub(:new => template)
19
24
  end
20
25
 
@@ -25,6 +30,10 @@ describe Vagrant::Notify::Middleware::InstallCommand do
25
30
  boot_index.should < middleware_index
26
31
  end
27
32
 
33
+ it 'gets called when resuming machine' do
34
+ resume_stack.should include([described_class, [], nil])
35
+ end
36
+
28
37
  it 'gets called when provisioning machine' do
29
38
  provision_stack.should include([described_class, [], nil])
30
39
  end
@@ -1,7 +1,10 @@
1
1
  describe Vagrant::Notify::Middleware::StartServer do
2
- let(:start_stack) { Vagrant.actions[:start].send(:stack) }
3
- let(:server_pid) { 1234 }
4
- let(:local_data) { Hash.new }
2
+ let(:start_stack) { Vagrant.actions[:start].send(:stack) }
3
+ let(:resume_stack) { Vagrant.actions[:resume].send(:stack) }
4
+ let(:server_pid) { 1234 }
5
+ let(:available_port) { 8080 }
6
+ let(:uuid) { @env[:vm].uuid.to_s }
7
+ let(:local_data) { Hash.new }
5
8
 
6
9
  subject { described_class.new(@app, @env) }
7
10
 
@@ -16,23 +19,36 @@ describe Vagrant::Notify::Middleware::StartServer do
16
19
  start_stack.should include([described_class, [], nil])
17
20
  end
18
21
 
22
+ it 'gets called when resuming machine' do
23
+ resume_stack.should include([described_class, [], nil])
24
+ end
25
+
19
26
  context 'server is down' do
20
- before { Process.stub(:getpgid).and_raise(Errno::ESRCH) }
27
+ before do
28
+ Process.stub(:getpgid).and_raise(Errno::ESRCH)
29
+ subject.stub(:next_available_port => available_port)
30
+ end
21
31
 
22
32
  it 'fires up notification server when called' do
23
- Vagrant::Notify::Server.should_receive(:run)
33
+ Vagrant::Notify::Server.should_receive(:run).with(@env, available_port)
24
34
  subject.call(@env)
25
35
  end
26
36
 
27
37
  it 'notifies user about server start' do
28
- @env[:ui].should_receive(:info).with("Notification server fired up (#{server_pid})")
38
+ @env[:ui].should_receive(:info).with("Notification server is listening on #{available_port} (#{server_pid})")
29
39
  subject.call(@env)
30
40
  end
31
41
 
32
42
  it "persists server PID on local data" do
33
43
  local_data.should_receive(:commit)
34
44
  subject.call(@env)
35
- local_data['vagrant-notify']['pid'].should == server_pid
45
+ local_data['vagrant-notify'][uuid]['pid'].should == server_pid
46
+ end
47
+
48
+ it "persists server port on local data" do
49
+ local_data.should_receive(:commit)
50
+ subject.call(@env)
51
+ local_data['vagrant-notify'][uuid]['port'].should == available_port
36
52
  end
37
53
 
38
54
  context "and a PID is present on Vagrant's local data" do
@@ -40,12 +56,12 @@ describe Vagrant::Notify::Middleware::StartServer do
40
56
 
41
57
  before do
42
58
  Vagrant::Notify::Server.stub(:run => new_pid)
43
- local_data['vagrant-notify'] = { 'pid' => server_pid }
59
+ local_data['vagrant-notify'] = { uuid => { 'pid' => server_pid } }
44
60
  end
45
61
 
46
62
  it 'updates server PID' do
47
63
  subject.call(@env)
48
- local_data['vagrant-notify']['pid'].should == new_pid
64
+ local_data['vagrant-notify'][uuid]['pid'].should == new_pid
49
65
  end
50
66
  end
51
67
  end
@@ -53,7 +69,7 @@ describe Vagrant::Notify::Middleware::StartServer do
53
69
  context 'server is up' do
54
70
  before do
55
71
  Process.stub(:getpgid => true)
56
- local_data['vagrant-notify'] = { 'pid' => server_pid }
72
+ local_data['vagrant-notify'] = { uuid => { 'pid' => server_pid } }
57
73
  end
58
74
 
59
75
  it 'does not start a new server instance' do
@@ -1,7 +1,9 @@
1
1
  describe Vagrant::Notify::Middleware::StopServer do
2
- let(:halt_stack) { Vagrant.actions[:halt].send(:stack) }
3
- let(:server_pid) { '1234' }
4
- let(:local_data) { { 'vagrant-notify' => { 'pid' => server_pid } } }
2
+ let(:halt_stack) { Vagrant.actions[:halt].send(:stack) }
3
+ let(:suspend_stack) { Vagrant.actions[:halt].send(:stack) }
4
+ let(:server_pid) { '1234' }
5
+ let(:uuid) { @env[:vm].uuid.to_s }
6
+ let(:local_data) { { 'vagrant-notify' => { uuid => { 'pid' => server_pid } } } }
5
7
 
6
8
  subject { described_class.new(@app, @env) }
7
9
 
@@ -15,6 +17,10 @@ describe Vagrant::Notify::Middleware::StopServer do
15
17
  halt_stack.should include([described_class, [], nil])
16
18
  end
17
19
 
20
+ it 'gets called when suspending machine' do
21
+ suspend_stack.should include([described_class, [], nil])
22
+ end
23
+
18
24
  context 'server is down' do
19
25
  before { Process.stub(:getpgid).and_raise(Errno::ESRCH) }
20
26
 
@@ -27,7 +33,7 @@ describe Vagrant::Notify::Middleware::StopServer do
27
33
  context 'server is up' do
28
34
  before do
29
35
  Process.stub(:getpgid => true)
30
- local_data['vagrant-notify'] = { 'pid' => server_pid }
36
+ local_data['vagrant-notify'] = { uuid => { 'pid' => server_pid } }
31
37
  end
32
38
 
33
39
  it 'notifies user that server is stopping' do
data/spec/server_spec.rb CHANGED
@@ -2,9 +2,9 @@ describe Vagrant::Notify::Server do
2
2
  let(:arguments) { "-- '20 examples, 1 failure\n10 seconds'" }
3
3
  let(:client) { StringIO.new(arguments) }
4
4
 
5
- before do
6
- subject.stub(:system => true)
7
- end
5
+ subject { described_class.new('uuid') }
6
+
7
+ before { subject.stub(:system => true, :download => true) }
8
8
 
9
9
  it 'runs notify-send with received data from client' do
10
10
  subject.should_receive(:system).with("notify-send #{arguments}")
@@ -15,4 +15,53 @@ describe Vagrant::Notify::Server do
15
15
  client.should_receive(:close)
16
16
  subject.receive_data(client)
17
17
  end
18
+
19
+ context 'notification with an icon' do
20
+ let(:arguments) { "-i 'foo/bar.jpg'" }
21
+
22
+ context 'icon hasnt been downloaded before' do
23
+ before { subject.receive_data(client) }
24
+
25
+ it 'downloads icon file to host machine' do
26
+ subject.should have_received(:download)
27
+ end
28
+
29
+ it 'rewrites icon path before sending the notification' do
30
+ subject.should have_received(:system).with("notify-send -i '/tmp/vagrant-notify-uuid-foo-bar.jpg'")
31
+ end
32
+ end
33
+
34
+ context 'icon file cache is present' do
35
+ before do
36
+ File.stub(:exists? => true)
37
+ subject.receive_data(client)
38
+ end
39
+
40
+ it 'does not download icon if was already downloaded' do
41
+ subject.should_not have_received(:download)
42
+ end
43
+ end
44
+ end
45
+
46
+ context 'incoming HTTP connections' do
47
+ let(:client) do
48
+ StringIO.new("GET some/path\n\n").tap { |s|
49
+ s.stub(:close => true, :puts => true)
50
+ }
51
+ end
52
+
53
+ before { subject.receive_data(client) }
54
+
55
+ it 'responds with a friendly message' do
56
+ client.should have_received(:puts).with(described_class::HTTP_RESPONSE)
57
+ end
58
+
59
+ it 'does not issue system commands' do
60
+ subject.should_not have_received(:system)
61
+ end
62
+
63
+ it 'closes connection' do
64
+ client.should have_received(:close)
65
+ end
66
+ end
18
67
  end
data/spec/spec_helper.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'vagrant-notify'
2
+ require 'rspec-spies'
2
3
 
3
4
  RSpec.configure do |config|
4
5
  config.treat_symbols_as_metadata_keys_with_true_values = true
@@ -17,8 +17,8 @@ Gem::Specification.new do |gem|
17
17
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
18
  gem.require_paths = ["lib"]
19
19
 
20
- gem.add_dependency 'vagrant'
21
-
20
+ gem.add_development_dependency 'vagrant'
22
21
  gem.add_development_dependency 'rake'
23
22
  gem.add_development_dependency 'rspec'
23
+ gem.add_development_dependency 'rspec-spies'
24
24
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-notify
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,56 +9,72 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-26 00:00:00.000000000 Z
12
+ date: 2013-02-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
+ prerelease: false
15
16
  name: vagrant
16
- requirement: !ruby/object:Gem::Requirement
17
- none: false
17
+ version_requirements: !ruby/object:Gem::Requirement
18
18
  requirements:
19
19
  - - ! '>='
20
20
  - !ruby/object:Gem::Version
21
21
  version: '0'
22
- type: :runtime
23
- prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
22
  none: false
23
+ requirement: !ruby/object:Gem::Requirement
26
24
  requirements:
27
25
  - - ! '>='
28
26
  - !ruby/object:Gem::Version
29
27
  version: '0'
28
+ none: false
29
+ type: :development
30
30
  - !ruby/object:Gem::Dependency
31
+ prerelease: false
31
32
  name: rake
32
- requirement: !ruby/object:Gem::Requirement
33
+ version_requirements: !ruby/object:Gem::Requirement
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
33
38
  none: false
39
+ requirement: !ruby/object:Gem::Requirement
34
40
  requirements:
35
41
  - - ! '>='
36
42
  - !ruby/object:Gem::Version
37
43
  version: '0'
44
+ none: false
38
45
  type: :development
46
+ - !ruby/object:Gem::Dependency
39
47
  prerelease: false
48
+ name: rspec
40
49
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
50
  requirements:
43
51
  - - ! '>='
44
52
  - !ruby/object:Gem::Version
45
53
  version: '0'
46
- - !ruby/object:Gem::Dependency
47
- name: rspec
48
- requirement: !ruby/object:Gem::Requirement
49
54
  none: false
55
+ requirement: !ruby/object:Gem::Requirement
50
56
  requirements:
51
57
  - - ! '>='
52
58
  - !ruby/object:Gem::Version
53
59
  version: '0'
60
+ none: false
54
61
  type: :development
62
+ - !ruby/object:Gem::Dependency
55
63
  prerelease: false
64
+ name: rspec-spies
56
65
  version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
57
70
  none: false
71
+ requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
73
  - - ! '>='
60
74
  - !ruby/object:Gem::Version
61
75
  version: '0'
76
+ none: false
77
+ type: :development
62
78
  description: A Vagrant plugin that redirects system notifications from guest to host
63
79
  machine.
64
80
  email:
@@ -83,6 +99,7 @@ files:
83
99
  - lib/vagrant-notify/middleware/start_server.rb
84
100
  - lib/vagrant-notify/middleware/stop_server.rb
85
101
  - lib/vagrant-notify/server.rb
102
+ - lib/vagrant-notify/vagrant_ssh_ext.rb
86
103
  - lib/vagrant-notify/version.rb
87
104
  - lib/vagrant_init.rb
88
105
  - spec/middleware/install_command_spec.rb
@@ -98,23 +115,23 @@ rdoc_options: []
98
115
  require_paths:
99
116
  - lib
100
117
  required_ruby_version: !ruby/object:Gem::Requirement
101
- none: false
102
118
  requirements:
103
119
  - - ! '>='
104
120
  - !ruby/object:Gem::Version
105
121
  version: '0'
106
122
  segments:
107
123
  - 0
108
- hash: -675474948593784751
109
- required_rubygems_version: !ruby/object:Gem::Requirement
124
+ hash: -2874098481974869093
110
125
  none: false
126
+ required_rubygems_version: !ruby/object:Gem::Requirement
111
127
  requirements:
112
128
  - - ! '>='
113
129
  - !ruby/object:Gem::Version
114
130
  version: '0'
115
131
  segments:
116
132
  - 0
117
- hash: -675474948593784751
133
+ hash: -2874098481974869093
134
+ none: false
118
135
  requirements: []
119
136
  rubyforge_project:
120
137
  rubygems_version: 1.8.23