pair 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/.rvmrc CHANGED
@@ -1,13 +1,2 @@
1
- rvm 1.9.2-p180@pair-gem --create
2
-
3
- bundler=`gem list bundler | grep bundler`
4
- if [ $? -eq 1 ] ; then
5
- echo "Installing bundler for project:\n\n";
6
- gem install --pre bundler;
7
-
8
- echo; read -s -n 1 -p "Run bundler install y/n" confirm; echo; echo;
9
- if [ "$confirm" == "y" ]; then
10
- bundle install;
11
- fi
12
- fi
1
+ rvm 1.9.3-p125@pair-gem --create
13
2
 
data/CHANGES ADDED
@@ -0,0 +1,9 @@
1
+ rel 0.0.3
2
+
3
+ * Add configuration component that sets config values in yaml
4
+
5
+ rel 0.0.4
6
+
7
+ * Add initial notifications configuration
8
+ * Add growl for notifications on mac, supports lion and gntp
9
+
@@ -1,8 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- pair (0.0.2)
4
+ pair (0.0.4)
5
5
  httparty (~> 0.8.1)
6
+ ruby_gntp (~> 0.3.4)
6
7
 
7
8
  GEM
8
9
  remote: http://rubygems.org/
@@ -11,7 +12,7 @@ GEM
11
12
  httparty (0.8.1)
12
13
  multi_json
13
14
  multi_xml
14
- multi_json (1.0.3)
15
+ multi_json (1.0.4)
15
16
  multi_xml (0.4.1)
16
17
  rake (0.9.2.2)
17
18
  rspec (2.7.0)
@@ -22,6 +23,7 @@ GEM
22
23
  rspec-expectations (2.7.0)
23
24
  diff-lcs (~> 1.1.2)
24
25
  rspec-mocks (2.7.0)
26
+ ruby_gntp (0.3.4)
25
27
 
26
28
  PLATFORMS
27
29
  ruby
@@ -1,9 +1,16 @@
1
1
  module Pair
2
+ APPLICATION_NAME = "Pair"
3
+ APPLICATION_DOMAIN = "www.pairmill.com"
4
+
5
+ ICON_APPLICATION = "http://#{APPLICATION_DOMAIN}/images/emblem-earth.png"
6
+ ICON_SESSION_JOIN = "http://#{APPLICATION_DOMAIN}/images/pair-network-join.png"
7
+ ICON_SESSION_PART = "http://#{APPLICATION_DOMAIN}/images/pair-network-part.png"
2
8
  end
3
9
 
4
10
  require "pair/version"
5
11
 
6
12
  require "pair/os"
7
13
  require "pair/config"
14
+ require "pair/notification"
8
15
  require "pair/api"
9
16
  require "pair/session"
@@ -7,7 +7,7 @@ module Pair
7
7
  extend self
8
8
 
9
9
  def setup
10
- base_uri ENV['BASE_URI'] || 'api.pairmill.com'
10
+ base_uri Pair.config.host
11
11
  default_params :api_token => Pair.config.api_token
12
12
  yield
13
13
  end
@@ -24,14 +24,17 @@ module Pair
24
24
  when 'config'
25
25
  require "pair/cli/config"
26
26
  Config.run!(arguments)
27
+ when 'notify'
28
+ require "pair/cli/notify"
29
+ Notify.run!(arguments)
27
30
  else
28
31
  unknown_command(command)
29
32
  end
30
- rescue ApiTokenMissingError, EnableSSHError => error
33
+ rescue ApiTokenMissingError, EnableSSHError, Pair::Notification::GNTPError => error
31
34
  handle_error error.message, false
32
35
  rescue SystemExit
33
36
  raise
34
- rescue
37
+ rescue Exception => except
35
38
  handle_error " Please contact support@pairmill.com, there\n" +
36
39
  " was an issue creating your session.", $-d
37
40
  end
@@ -14,13 +14,13 @@ module Pair
14
14
  "Options:" +
15
15
  "\n"
16
16
 
17
- opts.on("--api-token KEY") do |key|
17
+ opts.on("-t", "--api-token KEY") do |key|
18
18
  options[:api_token] = key
19
19
  end
20
20
 
21
- # opts.on("--enable-ssh") do
22
- # options[:enable_ssh] = true
23
- # end
21
+ opts.on("-g", "--growl") do
22
+ options[:growl] = true
23
+ end
24
24
  end
25
25
  end
26
26
  end
@@ -16,7 +16,7 @@ module Pair
16
16
  raise ApiTokenMissingError.new("api-token is required. try --help to understand how")
17
17
  end
18
18
 
19
- unless config.ssh_enabled?
19
+ unless config.ssh_on?
20
20
  raise EnableSSHError.new("ssh is not enabled, turn on ssh daemon to continue")
21
21
  end
22
22
 
@@ -0,0 +1,40 @@
1
+ module Pair
2
+ class Cli
3
+ class Notify < self
4
+ def run!
5
+ parse!
6
+
7
+ Notification.dispatcher.gntp_notify(options)
8
+ end
9
+
10
+ def parse!
11
+ opts = parse do |opts|
12
+ opts.banner = "Usage #{$0.split("/").last} notify" +
13
+ "\n\n" +
14
+ "Options:" +
15
+ "\n"
16
+
17
+ opts.on("-t", "--title title") do |title|
18
+ options[:title] = title
19
+ end
20
+
21
+ opts.on("-n", "--notification name") do |name|
22
+ options[:name] = name
23
+ end
24
+
25
+ opts.on("-m", "--message text") do |text|
26
+ options[:text] = text
27
+ end
28
+
29
+ opts.on("-i", "--icon url") do |url|
30
+ options[:icon] = url
31
+ end
32
+
33
+ opts.on("-s", "--sticky") do
34
+ options[:sticky] = true
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -18,13 +18,6 @@ module Pair
18
18
  self.output = output
19
19
  end
20
20
 
21
- # def api_token
22
- # self[:api_token] ||= begin
23
- # print "Please input your API token for Pair: "
24
- # gets.chomp
25
- # end
26
- # end
27
-
28
21
  def method_missing(method, *args, &block)
29
22
  method = method.to_s
30
23
 
@@ -39,27 +32,33 @@ module Pair
39
32
  self[:api_token]
40
33
  end
41
34
 
42
- def enable_ssh
43
- self[:enable_ssh]
35
+ def ssh_enabled?
36
+ self[:ssh_enabled]
44
37
  end
45
38
 
46
- def ssh_enabled?
47
- if Pair::OS.x?
39
+ def growl_enabled?
40
+ self[:growl_enabled]
41
+ end
42
+
43
+ # FIXME: Does this belong in config?
44
+ def ssh_on?
45
+ if Pair::OS.os_x?
48
46
  `systemsetup -getremotelogin`.match("Remote Login: On")
47
+ elsif Pair::OS.linux?
48
+ `ps aux | grep sshd | grep -v grep` != ""
49
49
  end
50
50
  end
51
51
 
52
52
  def update(options = {})
53
53
  if options.is_a? Hash
54
- options.each do |k,v|
55
- config.transaction do
56
- host_config[k] = v
57
- end
54
+ options.each do |key, value|
55
+ self[key] = value
58
56
  end
59
57
  end
60
58
  end
61
59
 
62
60
  protected
61
+
63
62
  def [](key)
64
63
  config.transaction do
65
64
  host_config[key]
@@ -0,0 +1,27 @@
1
+ require "pair/notification/custom_errors"
2
+ require "pair/notification/dispatcher"
3
+ require "pair/notification/o_s_x_dispatcher"
4
+ require "pair/notification/linux_dispatcher"
5
+
6
+ module Pair
7
+ class Notification
8
+ attr_reader :dispatch
9
+
10
+ class << self
11
+ def dispatcher(options = {})
12
+ if Pair::OS.os_x?
13
+ dispatch = OSXDispatcher.new(options)
14
+ else
15
+ dispatch = LinuxDispatcher.new(options)
16
+ end
17
+
18
+ if block_given?
19
+ yield dispatch
20
+ else
21
+ dispatch
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+
@@ -0,0 +1,5 @@
1
+ module Pair
2
+ class Notification
3
+ class GNTPError < StandardError; end
4
+ end
5
+ end
@@ -0,0 +1,24 @@
1
+ module Pair
2
+ class Notification
3
+ class Dispatcher
4
+ attr_accessor :logger, :enabled
5
+
6
+ def initialize(options = {})
7
+ @enabled = Pair.config.growl_enabled?
8
+ @logger = options[:logger] || STDOUT
9
+ end
10
+
11
+ def session_join(user, session)
12
+ raise NotImplementedError
13
+ end
14
+
15
+ def session_part(user, session)
16
+ raise NotImplementedError
17
+ end
18
+
19
+ def gntp_notify
20
+ raise NotImplementedError
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,6 @@
1
+ require 'growl'
2
+
3
+ module Pair
4
+ class Notification
5
+ end
6
+ end
@@ -0,0 +1,8 @@
1
+ module Pair
2
+ class Notification
3
+ class LinuxDispatcher < Dispatcher
4
+ def initialize(options)
5
+ end
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,66 @@
1
+ require 'ruby_gntp'
2
+
3
+ module Pair
4
+ class Notification
5
+ class OSXDispatcher < Dispatcher
6
+ attr_reader :growl, :app_icon
7
+
8
+ NOTIFICATIONS = [{:name => "Session Events", :enabled => true}]
9
+
10
+ def initialize(options = {})
11
+ @app_icon = options.delete(:app_icon)
12
+ super
13
+
14
+ register_growl if Pair.config.growl_enabled?
15
+
16
+ rescue Errno::ECONNREFUSED => except
17
+ raise Pair::Notification::GNTPError.new("Growl notification transfer protocol is not enabled, either start growl or disable growl via pair config")
18
+ end
19
+
20
+ def register_growl
21
+ @growl = GNTP.new(Pair::APPLICATION_NAME)
22
+ @growl.register application_hash
23
+ end
24
+
25
+ def session_join(user, session)
26
+ gntp_notify({
27
+ :name => "Session Events", :title => "Pair Message",
28
+ :text => "#{user} joined session \"#{session}\"",
29
+ :icon => Pair::ICON_SESSION_JOIN, :sticky => true
30
+ })
31
+ end
32
+
33
+ def session_part(user, session)
34
+ gntp_notify({
35
+ :name => "Session Events", :title => "Pair Message",
36
+ :text => "#{user} parted session \"#{session}\"",
37
+ :icon => Pair::ICON_SESSION_JOIN, :sticky => true
38
+ })
39
+ end
40
+
41
+
42
+ def gntp_notify(options)
43
+ if enabled
44
+ if block_given?
45
+ yield @growl
46
+ end
47
+
48
+ if options[:text]
49
+ options = {
50
+ :name => "Session Events", :title => "",
51
+ :icon => @app_icon, :sticky => false
52
+ }.merge(options)
53
+
54
+ @growl.notify(options)
55
+ end
56
+ end
57
+ end
58
+
59
+ private
60
+
61
+ def application_hash
62
+ { :app_icon => Pair::ICON_APPLICATION, :notifications => NOTIFICATIONS }
63
+ end
64
+ end
65
+ end
66
+ end
@@ -1,13 +1,11 @@
1
- require 'rbconfig'
2
-
3
1
  module Pair
4
2
  module OS
5
- def linux?
6
- !RbConfig::CONFIG['target_os'].match("linux").nil?
3
+ def self.linux?
4
+ RUBY_PLATFORM =~ /linux/
7
5
  end
8
6
 
9
- def self.x?
10
- !RbConfig::CONFIG['target_os'].match("darwin").nil?
7
+ def self.os_x?
8
+ RUBY_PLATFORM =~ /darwin/
11
9
  end
12
10
  end
13
11
  end
@@ -1,3 +1,3 @@
1
1
  module Pair
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -16,6 +16,7 @@ Gem::Specification.new do |gem|
16
16
  gem.version = Pair::VERSION
17
17
 
18
18
  gem.add_dependency("httparty", "~> 0.8.1")
19
+ gem.add_dependency("ruby_gntp", "~> 0.3.4")
19
20
 
20
21
  gem.add_development_dependency("rake")
21
22
  gem.add_development_dependency("rspec", "~> 2.7.0")
@@ -0,0 +1,5 @@
1
+ ---
2
+ api.pairmill.com:
3
+ :api_token: XXXXXXXXXXXXXXXXXXXX
4
+ :growl_enabled: true
5
+ :ssh_enabled: true
@@ -0,0 +1,4 @@
1
+ ---
2
+ api.pairmill.com:
3
+ :api_token: XXXXXXXXXXXXXXXXXXXX
4
+ :ssh_enabled: true
@@ -0,0 +1,4 @@
1
+ ---
2
+ api.pairmill.com:
3
+ :api_token: XXXXXXXXXXXXXXXXXXXX
4
+ :growl_enabled: true
@@ -9,15 +9,58 @@ describe Pair::Config do
9
9
 
10
10
  let(:config) { described_class.new(host, stdin, stdout) }
11
11
 
12
- before do
13
- config_hash = {}
14
- YAML::Store.stub!(:new => config_hash)
15
- def config_hash.transaction
16
- yield
12
+ describe "when accessing a proper configuration yml" do
13
+ before do
14
+ yaml_store = YAML::Store.new("spec/fixtures/config/rspec.pair.yml")
15
+ YAML::Store.stub!(:new).and_return(yaml_store)
16
+ end
17
+
18
+ it "returns the api_token" do
19
+ Pair::Config.new.api_token.should == "XXXXXXXXXXXXXXXXXXXX"
20
+ end
21
+
22
+ it "is growl enabled" do
23
+ Pair::Config.new.should be_growl_enabled
24
+ end
25
+
26
+ it "is ssh enabled" do
27
+ Pair::Config.new.should be_ssh_enabled
28
+ end
29
+ end
30
+
31
+ describe "when missing growl_enabled in the config" do
32
+ before do
33
+ yaml_store = YAML::Store.new("spec/fixtures/config/rspec_no_growl_enabled.pair.yml")
34
+ YAML::Store.stub!(:new).and_return(yaml_store)
35
+ end
36
+
37
+ it "is not growl enabled" do
38
+ config = Pair::Config.new
39
+ config.should_not be_growl_enabled
40
+ end
41
+ end
42
+
43
+ describe "when missing ssh_enabled in the config" do
44
+ before do
45
+ yaml_store = YAML::Store.new("spec/fixtures/config/rspec_no_ssh_enabled.pair.yml")
46
+ YAML::Store.stub!(:new).and_return(yaml_store)
47
+ end
48
+
49
+ it "is not ssh enabled" do
50
+ config = Pair::Config.new
51
+ config.should_not be_ssh_enabled
17
52
  end
18
53
  end
19
54
 
20
55
  context "for different hosts" do
56
+ before do
57
+ config_hash = {}
58
+ YAML::Store.stub!(:new => config_hash)
59
+ def config_hash.transaction
60
+ yield
61
+ end
62
+ end
63
+
21
64
  it "has a different set of configs for each host" do
22
65
  host1, host2 = "api.domain.com", "api.beta.domain.com"
23
66
  config1 = described_class.new(host1)
@@ -34,24 +77,13 @@ describe Pair::Config do
34
77
  end
35
78
 
36
79
  describe '#api_token' do
37
- # context "when none is saved" do
38
- # it "prompts for key to be entered" do
39
- # response = "abc123"
40
- # stdin << "#{response}\n"
41
- # stdin.rewind
42
- #
43
- # config.api_token.should == response
44
- #
45
- # stdout.rewind
46
- # stdout.read.should == "Please input your API token for Pair: "
47
- # end
48
- #
49
- # it "saves the key" do
50
- # stdin.should_receive(:gets).once.and_return("abc123\n")
51
- # config.api_token
52
- # config.api_token
53
- # end
54
- # end
80
+ before do
81
+ config_hash = {}
82
+ YAML::Store.stub!(:new => config_hash)
83
+ def config_hash.transaction
84
+ yield
85
+ end
86
+ end
55
87
 
56
88
  context "when one is already saved" do
57
89
  it "returns the saved value" do
@@ -0,0 +1,18 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+
3
+ describe Pair::Notification::Dispatcher do
4
+ before do
5
+ Pair.stub_chain(:config, :growl_enabled?).and_return(false)
6
+ end
7
+
8
+ describe "when initializing" do
9
+ it "uses the STDOUT for logging by default" do
10
+ Pair::Notification.dispatcher.logger == STDOUT
11
+ end
12
+
13
+ it "uses the logger provided as a parameter" do
14
+ logger = mock('a logger')
15
+ Pair::Notification::Dispatcher.new(:logger => logger).logger.should == logger
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,50 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+
3
+ describe Pair::Notification::OSXDispatcher do
4
+ describe "when using lion" do
5
+ before do
6
+ @growl = mock('gntp', :register => true, :notify => true)
7
+ GNTP.stub!(:new).and_return(@growl)
8
+ Pair.stub_chain(:config, :growl_enabled?).and_return(true)
9
+ Pair::OS.stub!(:os_x?).and_return(true)
10
+ end
11
+
12
+ describe "when initializing" do
13
+ it "is an OSXDispatcher" do
14
+ Pair::Notification.dispatcher.class.should be(Pair::Notification::OSXDispatcher)
15
+ end
16
+
17
+ it "registers the application" do
18
+ @growl.should_receive(:register)
19
+ Pair::Notification.dispatcher
20
+ end
21
+ end
22
+
23
+ describe "notifications" do
24
+ it "includes session events" do
25
+ Pair::Notification::OSXDispatcher::NOTIFICATIONS.should == [
26
+ {:name => "Session Events", :enabled => true}
27
+ ]
28
+ end
29
+ end
30
+
31
+ describe "when registering an application" do
32
+ it "creates a growl network transfer protocol object" do
33
+ GNTP.should_receive(:new).and_return(@growl)
34
+ Pair::Notification.dispatcher
35
+ end
36
+ end
37
+
38
+ describe "sending a growl network notification" do
39
+ it "calls gntp notify" do
40
+ a_message_hash = {
41
+ :text => "some text", :name => "Session Events", :title => "a title",
42
+ :icon => "http://#{Pair::APPLICATION_DOMAIN}/test.png", :sticky => false
43
+ }
44
+
45
+ @growl.should_receive(:notify).with(a_message_hash)
46
+ dispatcher = Pair::Notification.dispatcher.gntp_notify(a_message_hash)
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,48 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe Pair::Notification do
4
+ describe "when using OSX lion" do
5
+ before do
6
+ @gntp = mock(GNTP, :register => true, :notify => true)
7
+ GNTP.stub!(:new).and_return(@gntp)
8
+
9
+ Pair::OS.stub!(:os_x?).and_return(true)
10
+ Pair.stub!(:config => stub(:growl_enabled? => true))
11
+ end
12
+
13
+ describe "when initializing" do
14
+ it "returns an OSXDispatcher class" do
15
+ Pair::Notification.dispatcher.class.should == Pair::Notification::OSXDispatcher
16
+ end
17
+
18
+ it "yields the OSXDispatcher class" do
19
+ Pair::Notification.dispatcher do |dispatcher|
20
+ dispatcher.should == dispatcher
21
+ end
22
+ end
23
+ end
24
+
25
+ describe "joining a session" do
26
+ it "notifies via growl notification transfer protocol" do
27
+ @gntp.should_receive(:notify).with({
28
+ :name => "Session Events", :title => "Pair Message",
29
+ :text => "chadwpry joined session \"SESSION_NAME\"",
30
+ :icon => Pair::ICON_SESSION_JOIN, :sticky => true
31
+ })
32
+ Pair::Notification.dispatcher.session_join("chadwpry", "SESSION_NAME")
33
+ end
34
+ end
35
+
36
+ describe "parting a session" do
37
+ it "notifies via growl notification transfer protocol" do
38
+ @gntp.should_receive(:notify).with({
39
+ :name => "Session Events", :title => "Pair Message",
40
+ :text => "chadwpry parted session \"SESSION_NAME\"",
41
+ :icon => Pair::ICON_SESSION_JOIN, :sticky => true
42
+ })
43
+ Pair::Notification.dispatcher.session_part("chadwpry", "SESSION_NAME")
44
+ end
45
+ end
46
+ end
47
+ end
48
+
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(File.dirname(__FILE__))
4
4
  require 'rspec'
5
5
  require 'fixture_helper'
6
6
 
7
- require 'pair/config'
7
+ require 'pair'
8
8
 
9
9
  # Requires supporting files with custom matchers and macros, etc,
10
10
  # in ./support/ and its subdirectories.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pair
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,12 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2011-12-08 00:00:00.000000000 -06:00
14
- default_executable:
13
+ date: 2012-03-26 00:00:00.000000000 Z
15
14
  dependencies:
16
15
  - !ruby/object:Gem::Dependency
17
16
  name: httparty
18
- requirement: &2157594700 !ruby/object:Gem::Requirement
17
+ requirement: &70264343889540 !ruby/object:Gem::Requirement
19
18
  none: false
20
19
  requirements:
21
20
  - - ~>
@@ -23,10 +22,21 @@ dependencies:
23
22
  version: 0.8.1
24
23
  type: :runtime
25
24
  prerelease: false
26
- version_requirements: *2157594700
25
+ version_requirements: *70264343889540
26
+ - !ruby/object:Gem::Dependency
27
+ name: ruby_gntp
28
+ requirement: &70264343888060 !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 0.3.4
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: *70264343888060
27
37
  - !ruby/object:Gem::Dependency
28
38
  name: rake
29
- requirement: &2157594280 !ruby/object:Gem::Requirement
39
+ requirement: &70264343887120 !ruby/object:Gem::Requirement
30
40
  none: false
31
41
  requirements:
32
42
  - - ! '>='
@@ -34,10 +44,10 @@ dependencies:
34
44
  version: '0'
35
45
  type: :development
36
46
  prerelease: false
37
- version_requirements: *2157594280
47
+ version_requirements: *70264343887120
38
48
  - !ruby/object:Gem::Dependency
39
49
  name: rspec
40
- requirement: &2157593740 !ruby/object:Gem::Requirement
50
+ requirement: &70264343885680 !ruby/object:Gem::Requirement
41
51
  none: false
42
52
  requirements:
43
53
  - - ~>
@@ -45,7 +55,7 @@ dependencies:
45
55
  version: 2.7.0
46
56
  type: :development
47
57
  prerelease: false
48
- version_requirements: *2157593740
58
+ version_requirements: *70264343885680
49
59
  description: Effortless remote pairing
50
60
  email:
51
61
  - me@bjeanes.com
@@ -59,6 +69,7 @@ files:
59
69
  - .rspec
60
70
  - .rvmrc
61
71
  - .travis.yml
72
+ - CHANGES
62
73
  - Gemfile
63
74
  - Gemfile.lock
64
75
  - README.rdoc
@@ -70,7 +81,14 @@ files:
70
81
  - lib/pair/cli/config.rb
71
82
  - lib/pair/cli/custom_errors.rb
72
83
  - lib/pair/cli/host.rb
84
+ - lib/pair/cli/notify.rb
73
85
  - lib/pair/config.rb
86
+ - lib/pair/notification.rb
87
+ - lib/pair/notification/custom_errors.rb
88
+ - lib/pair/notification/dispatcher.rb
89
+ - lib/pair/notification/growl_logger.rb
90
+ - lib/pair/notification/linux_dispatcher.rb
91
+ - lib/pair/notification/o_s_x_dispatcher.rb
74
92
  - lib/pair/os.rb
75
93
  - lib/pair/session.rb
76
94
  - lib/pair/session/authorized_keys_file.rb
@@ -82,11 +100,16 @@ files:
82
100
  - spec/fixture_helper.rb
83
101
  - spec/fixtures/api_hosted_session.yml
84
102
  - spec/fixtures/api_joined_session.yml
103
+ - spec/fixtures/config/rspec.pair.yml
104
+ - spec/fixtures/config/rspec_no_growl_enabled.pair.yml
105
+ - spec/fixtures/config/rspec_no_ssh_enabled.pair.yml
85
106
  - spec/fixtures/user_keys.yml
86
107
  - spec/pair/config_spec.rb
108
+ - spec/pair/notification/dispatcher_spec.rb
109
+ - spec/pair/notification/o_s_x_dispatcher_spec.rb
110
+ - spec/pair/notification_spec.rb
87
111
  - spec/pair/session/authorized_keys_file_spec.rb
88
112
  - spec/spec_helper.rb
89
- has_rdoc: true
90
113
  homepage: http://www.pairmill.com
91
114
  licenses: []
92
115
  post_install_message:
@@ -107,7 +130,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
107
130
  version: '0'
108
131
  requirements: []
109
132
  rubyforge_project:
110
- rubygems_version: 1.6.2
133
+ rubygems_version: 1.8.15
111
134
  signing_key:
112
135
  specification_version: 3
113
136
  summary: Pair with remote programmers with a single command.
@@ -115,7 +138,13 @@ test_files:
115
138
  - spec/fixture_helper.rb
116
139
  - spec/fixtures/api_hosted_session.yml
117
140
  - spec/fixtures/api_joined_session.yml
141
+ - spec/fixtures/config/rspec.pair.yml
142
+ - spec/fixtures/config/rspec_no_growl_enabled.pair.yml
143
+ - spec/fixtures/config/rspec_no_ssh_enabled.pair.yml
118
144
  - spec/fixtures/user_keys.yml
119
145
  - spec/pair/config_spec.rb
146
+ - spec/pair/notification/dispatcher_spec.rb
147
+ - spec/pair/notification/o_s_x_dispatcher_spec.rb
148
+ - spec/pair/notification_spec.rb
120
149
  - spec/pair/session/authorized_keys_file_spec.rb
121
150
  - spec/spec_helper.rb