5
task :generate_chef_metadata do
7
chef_dsl_metadata = {:dsl_methods => chef_dsl_methods,
8
:node_methods => chef_node_methods,
9
:actions => chef_resource_actions,
10
:attributes => chef_resource_attributes}
11
json = Yajl::Encoder.encode(chef_dsl_metadata, :pretty => true)
12
File.open("chef_#{Chef::VERSION}.json", 'w'){|f| f.write(json)}
17
require 'chef/mixin/convert_to_class_name'
18
include Chef::Mixin::ConvertToClassName
22
(Chef::Node.public_instance_methods +
23
chef_dsl_module.included_modules.map do |mixin|
24
mixin.public_instance_methods
25
end).flatten.sort.uniq
29
Chef::Node.public_instance_methods.flatten.sort.uniq
32
def chef_resource_actions
33
chef_resources do |resource_klazz,resource|
34
instance = resource.new('dsl')
35
if instance.respond_to?(:allowed_actions)
36
[convert_to_snake_case(resource_klazz.to_s),
37
instance.allowed_actions.sort]
42
def chef_resource_attributes
43
chef_resources do |resource_klazz,resource|
44
[convert_to_snake_case(resource_klazz.to_s),
45
resource.public_instance_methods(true).sort]
52
if Chef.const_defined?('DSL')
55
Chef::Mixin::RecipeDefinitionDSLCore
60
resources = Chef::Resource.constants.sort.map do |resource_klazz|
61
resource = Chef::Resource.const_get(resource_klazz)
62
if resource.respond_to?(:public_instance_methods) and
63
resource.ancestors.include?(Chef::Resource) and
64
resource.name != 'Chef::Resource::LWRPBase'
65
yield resource_klazz, resource