Skip to content

Commit

Permalink
CHEF-2879: Add chef_gem resource for installing gems to current gem e…
Browse files Browse the repository at this point in the history
…nvironment
  • Loading branch information
btm committed Jan 23, 2012
1 parent 16b2a65 commit 8856bd5
Show file tree
Hide file tree
Showing 3 changed files with 93 additions and 0 deletions.
43 changes: 43 additions & 0 deletions chef/lib/chef/resource/chef_gem.rb
@@ -0,0 +1,43 @@
#
# Author:: Bryan McLellan <btm@loftninjas.org>
# Copyright:: Copyright (c) 2012 Opscode, Inc.
# License:: Apache License, Version 2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

require 'chef/resource/package'
require 'chef/resource/gem_package'

class Chef
class Resource
class ChefGem < Chef::Resource::Package::GemPackage

def initialize(name, run_context=nil)
super
@resource_name = :chef_gem
@provider = Chef::Provider::Package::Rubygems
end

# The chef_gem resources is for installing gems to the current gem environment only for use by Chef cookbooks.
def gem_binary(arg=nil)
if arg
raise ArgumentError, "The chef_gem resource is restricted to the current gem environment, use gem_package to install to other environments."
end

nil
end

end
end
end
1 change: 1 addition & 0 deletions chef/lib/chef/resources.rb
Expand Up @@ -20,6 +20,7 @@
require 'chef/resource/bash'
require 'chef/resource/breakpoint'
require 'chef/resource/cookbook_file'
require 'chef/resource/chef_gem'
require 'chef/resource/cron'
require 'chef/resource/csh'
require 'chef/resource/deploy'
Expand Down
49 changes: 49 additions & 0 deletions chef/spec/unit/resource/chef_gem_spec.rb
@@ -0,0 +1,49 @@
#
# Author:: Adam Jacob (<adam@opscode.com>)
# Author:: Bryan McLellan <btm@loftninjas.org>
# Copyright:: Copyright (c) 2008, 2012 Opscode, Inc.
# License:: Apache License, Version 2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "spec_helper"))

describe Chef::Resource::ChefGem, "initialize" do

before(:each) do
@resource = Chef::Resource::ChefGem.new("foo")
end

it "should return a Chef::Resource::ChefGem" do
@resource.should be_a_kind_of(Chef::Resource::ChefGem)
end

it "should set the resource_name to :chef_gem" do
@resource.resource_name.should eql(:chef_gem)
end

it "should set the provider to Chef::Provider::Package::Rubygems" do
@resource.provider.should eql(Chef::Provider::Package::Rubygems)
end
end

describe Chef::Resource::ChefGem, "gem_binary" do
before(:each) do
@resource = Chef::Resource::ChefGem.new("foo")
end

it "should raise an exception when gem_binary is set" do
lambda { @resource.gem_binary("/lol/cats/gem") }.should raise_error(ArgumentError)
end
end

0 comments on commit 8856bd5

Please sign in to comment.