summaryrefslogtreecommitdiff
path: root/lib/chef/cookbook/metadata.rb
diff options
context:
space:
mode:
authorLamont Granquist <lamont@scriptkiddie.org>2016-03-03 17:48:19 -0800
committerLamont Granquist <lamont@scriptkiddie.org>2016-03-03 17:48:19 -0800
commit5759ef3960095f74f74d41f02870fe31c3793580 (patch)
treefc296c077289047792289d1d8b6e5d47188a4459 /lib/chef/cookbook/metadata.rb
parent0b835a0a92509c5d9ad4123d320024da0005dac3 (diff)
parentb9eb98b827a892f1737194ae02a7887cf491e21a (diff)
downloadchef-5759ef3960095f74f74d41f02870fe31c3793580.tar.gz
Merge pull request #4478 from chef/lcg/rfc-060-gem-metadata
RFC-060 gem metadata MVP
Diffstat (limited to 'lib/chef/cookbook/metadata.rb')
-rw-r--r--lib/chef/cookbook/metadata.rb20
1 files changed, 19 insertions, 1 deletions
diff --git a/lib/chef/cookbook/metadata.rb b/lib/chef/cookbook/metadata.rb
index 1cad526b65..603f80748c 100644
--- a/lib/chef/cookbook/metadata.rb
+++ b/lib/chef/cookbook/metadata.rb
@@ -58,12 +58,14 @@ class Chef
PRIVACY = "privacy".freeze
CHEF_VERSIONS = "chef_versions".freeze
OHAI_VERSIONS = "ohai_versions".freeze
+ GEMS = "gems".freeze
COMPARISON_FIELDS = [ :name, :description, :long_description, :maintainer,
:maintainer_email, :license, :platforms, :dependencies,
:recommendations, :suggestions, :conflicting, :providing,
:replacing, :attributes, :groupings, :recipes, :version,
- :source_url, :issues_url, :privacy, :chef_versions, :ohai_versions ]
+ :source_url, :issues_url, :privacy, :chef_versions, :ohai_versions,
+ :gems ]
VERSION_CONSTRAINTS = { :depends => DEPENDENCIES,
:recommends => RECOMMENDATIONS,
@@ -93,6 +95,8 @@ class Chef
attr_reader :chef_versions
# @return [Array<Gem::Dependency>] Array of supported Ohai versions
attr_reader :ohai_versions
+ # @return [Array<Array>] Array of gems to install with *args as an Array
+ attr_reader :gems
# Builds a new Chef::Cookbook::Metadata object.
#
@@ -130,6 +134,7 @@ class Chef
@privacy = false
@chef_versions = []
@ohai_versions = []
+ @gems = []
@errors = []
end
@@ -420,6 +425,17 @@ class Chef
@ohai_versions
end
+ # Metadata DSL to set a gem to install from the cookbook metadata. May be declared
+ # multiple times. All the gems from all the cookbooks are combined into one Gemfile
+ # and depsolved together. Uses Bundler's DSL for its implementation.
+ #
+ # @param args [Array<String>] Gem name and options to pass to Bundler's DSL
+ # @return [Array<Array>] Array of gem statements as args
+ def gem(*args)
+ @gems << args unless args.empty?
+ @gems
+ end
+
# Adds a description for a recipe.
#
# === Parameters
@@ -573,6 +589,7 @@ class Chef
PRIVACY => self.privacy,
CHEF_VERSIONS => gem_requirements_to_array(*self.chef_versions),
OHAI_VERSIONS => gem_requirements_to_array(*self.ohai_versions),
+ GEMS => self.gems,
}
end
@@ -609,6 +626,7 @@ class Chef
@privacy = o[PRIVACY] if o.has_key?(PRIVACY)
@chef_versions = gem_requirements_from_array("chef", o[CHEF_VERSIONS]) if o.has_key?(CHEF_VERSIONS)
@ohai_versions = gem_requirements_from_array("ohai", o[OHAI_VERSIONS]) if o.has_key?(OHAI_VERSIONS)
+ @gems = o[GEMS] if o.has_key?(GEMS)
self
end