diff options
author | Ezra Zygmuntowicz <ez@engineyard.com> | 2008-10-08 14:19:52 -0700 |
---|---|---|
committer | Ezra Zygmuntowicz <ez@engineyard.com> | 2008-10-08 14:19:52 -0700 |
commit | c5d33c1298834ce40b8fbf344f281045771b5371 (patch) | |
tree | 1f0d4c7eab1eb379b544282a7ce48052acf719a5 /lib/chef/resource_collection.rb | |
parent | 3d14601aea23dee3899d097324875274da419d84 (diff) | |
download | chef-c5d33c1298834ce40b8fbf344f281045771b5371.tar.gz |
big refactor of the repo layout. move to a chef gem and a chef-server gem all with proper deps
Diffstat (limited to 'lib/chef/resource_collection.rb')
-rw-r--r-- | lib/chef/resource_collection.rb | 174 |
1 files changed, 0 insertions, 174 deletions
diff --git a/lib/chef/resource_collection.rb b/lib/chef/resource_collection.rb deleted file mode 100644 index 5278b15c72..0000000000 --- a/lib/chef/resource_collection.rb +++ /dev/null @@ -1,174 +0,0 @@ -# -# Author:: Adam Jacob (<adam@hjksolutions.com>) -# Copyright:: Copyright (c) 2008 HJK Solutions, LLC -# 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. -# - -class Chef - class ResourceCollection - include Enumerable - - def initialize - @resources = Array.new - @resources_by_name = Hash.new - end - - def [](index) - @resources[index] - end - - def []=(index, arg) - is_chef_resource(arg) - @resources[index] = arg - @resources_by_name[arg.to_s] = index - end - - def <<(*args) - args.flatten.each do |a| - is_chef_resource(a) - @resources << a - @resources_by_name[a.to_s] = @resources.length - 1 - end - end - - def push(*args) - args.flatten.each do |a| - is_chef_resource(a) - @resources.push(a) - @resources_by_name[a.to_s] = @resources.length - 1 - end - end - - def each - @resources.each do |r| - yield r - end - end - - def each_index - @resources.each_index do |i| - yield i - end - end - - def lookup(resource) - lookup_by = nil - if resource.kind_of?(Chef::Resource) - lookup_by = resource.to_s - elsif resource.kind_of?(String) - lookup_by = resource - else - raise ArgumentError, "Must pass a Chef::Resource or String to lookup" - end - res = @resources_by_name[lookup_by] - unless res - raise ArgumentError, "Cannot find a resource matching #{lookup_by} (did you define it first?)" - end - @resources[res] - end - - # Find existing resources by searching the list of existing resources. Possible - # forms are: - # - # resources(:file => "foobar") - # resources(:file => [ "foobar", "baz" ]) - # resources("file[foobar]", "file[baz]") - # resources("file[foobar,baz]") - # - # Returns the matching resource, or an Array of matching resources. - # - # Raises an ArgumentError if you feed it bad lookup information - # Raises a Runtime Error if it can't find the resources you are looking for. - def resources(*args) - results = Array.new - args.each do |arg| - case arg - when Hash - results << find_resource_by_hash(arg) - when String - results << find_resource_by_string(arg) - else - raise ArgumentError, "resources takes arguments as a hash or strings!" - end - end - flat_results = results.flatten - flat_results.length == 1 ? flat_results[0] : flat_results - end - - # Serialize this object as a hash - def to_json(*a) - instance_vars = Hash.new - self.instance_variables.each do |iv| - instance_vars[iv] = self.instance_variable_get(iv) - end - results = { - 'json_class' => self.class.name, - 'instance_vars' => instance_vars - } - results.to_json(*a) - end - - def self.json_create(o) - collection = self.new() - o["instance_vars"].each do |k,v| - collection.instance_variable_set(k.to_sym, v) - end - collection - end - - private - - def find_resource_by_hash(arg) - results = Array.new - arg.each do |resource_name, name_list| - names = name_list.kind_of?(Array) ? name_list : [ name_list ] - names.each do |name| - res_name = "#{resource_name.to_s}[#{name}]" - results << lookup(res_name) - end - end - return results - end - - def find_resource_by_string(arg) - results = Array.new - case arg - when /^(.+)\[(.+?),(.+)\]$/ - resource_type = $1 - arg =~ /^.+\[(.+)\]$/ - resource_list = $1 - resource_list.split(",").each do |name| - resource_name = "#{resource_type}[#{name}]" - results << lookup(resource_name) - end - when /^(.+)\[(.+)\]$/ - resource_type = $1 - name = $2 - resource_name = "#{resource_type}[#{name}]" - results << lookup(resource_name) - else - raise ArgumentError, "You must have a string like resource_type[name]!" - end - return results - end - - def is_chef_resource(arg) - unless arg.kind_of?(Chef::Resource) - raise ArgumentError, "Members must be Chef::Resource's" - end - true - end - end -end
\ No newline at end of file |