def self.cdb_load_filtered_cookbook_versions(name, couchdb=nil)
version_constraints = cdb_load(name, couchdb).cookbook_versions.inject({}) {|res, (k,v)| res[k] = Chef::VersionConstraint.new(v); res}
cookbook_list = Chef::CookbookVersion.cdb_list(true, couchdb)
filtered_list = cookbook_list.inject({}) do |res, cookbook|
version = Chef::Version.new(cookbook.version)
requirement_satisfied = version_constraints.has_key?(cookbook.name) ? version_constraints[cookbook.name].include?(version) : true
res[cookbook.name] ||= []
res[cookbook.name] << cookbook if requirement_satisfied
res
end
sorted_list = filtered_list.inject({}) do |res, (cookbook_name, versions)|
res[cookbook_name] = versions.sort.reverse
res
end
sorted_list
end