Skip to content

Commit

Permalink
Merge pull request #107 from mizzy/explicit-package-subject-type
Browse files Browse the repository at this point in the history
Explicit package subject type
  • Loading branch information
mizzy committed May 17, 2013
2 parents 79d550b + dd7b22c commit 8cec0e6
Show file tree
Hide file tree
Showing 10 changed files with 129 additions and 10 deletions.
7 changes: 5 additions & 2 deletions lib/serverspec/helper/type.rb
@@ -1,10 +1,13 @@
require 'serverspec/type/service'
require 'serverspec/type/package'

module Serverspec
module Helper
module Type
def service name
Serverspec::Type::Service.new(name)
%w( service package ).each do |type|
define_method type do |name|
self.class.const_get('Serverspec').const_get('Type').const_get(type.capitalize).new(name)
end
end
end
end
Expand Down
18 changes: 11 additions & 7 deletions lib/serverspec/matchers/be_installed.rb
@@ -1,15 +1,19 @@
RSpec::Matchers.define :be_installed do
match do |name|
if @provider.nil?
backend.check_installed(example, name)
if name.respond_to?(:installed?)
name.installed?(@provider, @version)
else
check_method = "check_installed_by_#{@provider}".to_sym
if @provider.nil?
backend.check_installed(example, name)
else
check_method = "check_installed_by_#{@provider}".to_sym

unless backend.respond_to?(check_method)
raise ArgumentError.new("`be_installed` matcher doesn't support #{@under}")
end
unless backend.respond_to?(check_method)
raise ArgumentError.new("`be_installed` matcher doesn't support #{@under}")
end

backend.send(check_method, example, name, @version)
backend.send(check_method, example, name, @version)
end
end
end

Expand Down
27 changes: 27 additions & 0 deletions lib/serverspec/type/package.rb
@@ -0,0 +1,27 @@
module Serverspec
module Type
class Package
def initialize name
@name = name
end

def installed?(provider, version)
if provider.nil?
backend.check_installed(nil, @name)
else
check_method = "check_installed_by_#{provider}".to_sym

unless backend.respond_to?(check_method)
raise ArgumentError.new("`be_installed` matcher doesn't support #{provider}")
end

backend.send(check_method, nil, @name, version)
end
end

def to_s
%Q!Package "#{@name}"!
end
end
end
end
2 changes: 1 addition & 1 deletion lib/serverspec/type/service.rb
Expand Up @@ -24,7 +24,7 @@ def running? under
end

def to_s
"Service #{@name}"
%Q!Service "#{@name}"!
end
end
end
Expand Down
8 changes: 8 additions & 0 deletions spec/darwin/package_spec.rb
@@ -0,0 +1,8 @@
require 'spec_helper'

include Serverspec::Helper::Darwin

describe 'Serverspec package matchers of Darwin family' do
it_behaves_like 'support package installed by gem matcher', 'jekyll'
it_behaves_like 'support package installed by gem with version matcher', 'jekyll', '1.1.1'
end
9 changes: 9 additions & 0 deletions spec/debian/package_spec.rb
@@ -0,0 +1,9 @@
require 'spec_helper'

include Serverspec::Helper::Debian

describe 'Serverspec package matchers of Debian family' do
it_behaves_like 'support package installed matcher', 'httpd'
it_behaves_like 'support package installed by gem matcher', 'jekyll'
it_behaves_like 'support package installed by gem with version matcher', 'jekyll', '1.1.1'
end
9 changes: 9 additions & 0 deletions spec/gentoo/package_spec.rb
@@ -0,0 +1,9 @@
require 'spec_helper'

include Serverspec::Helper::Gentoo

describe 'Serverspec package matchers of Gentoo family' do
it_behaves_like 'support package installed matcher', 'httpd'
it_behaves_like 'support package installed by gem matcher', 'jekyll'
it_behaves_like 'support package installed by gem with version matcher', 'jekyll', '1.1.1'
end
9 changes: 9 additions & 0 deletions spec/redhat/package_spec.rb
@@ -0,0 +1,9 @@
require 'spec_helper'

include Serverspec::Helper::RedHat

describe 'Serverspec package matchers of Red Hat family' do
it_behaves_like 'support package installed matcher', 'httpd'
it_behaves_like 'support package installed by gem matcher', 'jekyll'
it_behaves_like 'support package installed by gem with version matcher', 'jekyll', '1.1.1'
end
9 changes: 9 additions & 0 deletions spec/solaris/package_spec.rb
@@ -0,0 +1,9 @@
require 'spec_helper'

include Serverspec::Helper::Solaris

describe 'Serverspec package matchers of Solaris family' do
it_behaves_like 'support package installed matcher', 'httpd'
it_behaves_like 'support package installed by gem matcher', 'jekyll'
it_behaves_like 'support package installed by gem with version matcher', 'jekyll', '1.1.1'
end
41 changes: 41 additions & 0 deletions spec/support/shared_package_examples.rb
@@ -0,0 +1,41 @@
shared_examples_for 'support package installed matcher' do |name|
describe 'be_installed' do
describe package(name) do
it { should be_installed }
end

describe 'invalid-package' do
it { should_not be_installed }
end
end
end

shared_examples_for 'support package installed by gem matcher' do |name|
describe 'installed by gem' do
describe package(name) do
it { should be_installed.by('gem') }
end

describe 'invalid-gem' do
it { should_not be_installed.by('gem') }
end
end
end

shared_examples_for 'support package installed by gem with version matcher' do |name, version|
describe 'installed by gem with version' do
before :all do
RSpec.configure do |c|
c.stdout = "#{name} (#{version})"
end
end

describe package(name) do
it { should be_installed.by('gem').with_version(version) }
end

describe package(name) do
it { should_not be_installed.by('gem').with_version('invalid-version') }
end
end
end

0 comments on commit 8cec0e6

Please sign in to comment.