knife-cookbook-doc 0.9.0 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ v0.10.0 (Mar 3 2014)
2
+ --------------------
3
+
4
+ * Add support for generating documentation for definitions. Submitted by zhelyan.
5
+ * Remove end of line whitespace in generated README
6
+
1
7
  v0.9.0 (Feb 24 2014)
2
8
  --------------------
3
9
 
data/README.md CHANGED
@@ -80,6 +80,28 @@ to the end of the LWRP documentation.
80
80
 
81
81
  #### Step 4
82
82
 
83
+ In each definition add documentation like:
84
+
85
+ =begin
86
+ #<
87
+ This definition does something useful.
88
+
89
+ @param user User to run as.
90
+ @param group User group to run as.
91
+
92
+ @section Examples
93
+
94
+ # An example of my awesome service
95
+ mycookbook_awesome_definition "app resources" do
96
+ user 'appuser'
97
+ group 'appgroup'
98
+ end
99
+ #>
100
+ =end
101
+
102
+
103
+ #### Step 5
104
+
83
105
  Finally the user should add some documentation fragments into the `doc/` dir.
84
106
  Most importantly you should add `doc/overview.md` which will replace the first
85
107
  `Description` section of the readme. You should also add a `doc/credit.md` which
@@ -73,6 +73,35 @@
73
73
  <% else -%>
74
74
  *No recipes defined*
75
75
 
76
+ <% end -%>
77
+ <% unless definitions.empty? -%>
78
+ # Definitions
79
+
80
+ <% definitions.each do |definition| -%>
81
+ * [<%= definition.name %>](#<%= definition.name %>)<% if definition.short_description %> - <%= definition.short_description %><% end %>
82
+ <% end -%>
83
+
84
+ <% definitions.each do |definition| -%>
85
+ ## <%= definition.name %>
86
+
87
+ <% if definition.top_level_description('main') != '' -%>
88
+ <%= definition.top_level_description('main') -%>
89
+ <% end -%>
90
+
91
+ <% unless definition.params.empty? -%>
92
+ ### Parameters
93
+
94
+ <% definition.params.each do |param, data| -%>
95
+ - <%= param %>: <%= data['descr'] %>.<% if data['default']%> Defaults to: <%=data['default']%><%end%>
96
+ <% end -%>
97
+ <% end -%>
98
+ <% definition.top_level_descriptions.keys.select{|k| k != 'main'}.each do |key| -%>
99
+
100
+ ### <%= key -%>
101
+
102
+ <%= definition.top_level_description(key) -%>
103
+ <% end -%>
104
+ <% end -%>
76
105
  <% end -%>
77
106
  <% unless resources.empty? -%>
78
107
  # Resources
@@ -6,6 +6,9 @@ module KnifeCookbookDoc
6
6
  deps do
7
7
  require 'chef/cookbook/metadata'
8
8
  require 'erubis'
9
+ require 'knife_cookbook_doc/base_model'
10
+ require 'knife_cookbook_doc/documenting_lwrp_base'
11
+ require 'knife_cookbook_doc/definitions_model'
9
12
  require 'knife_cookbook_doc/readme_model'
10
13
  require 'knife_cookbook_doc/recipe_model'
11
14
  require 'knife_cookbook_doc/resource_model'
@@ -15,22 +18,22 @@ module KnifeCookbookDoc
15
18
  banner 'knife cookbook doc DIR (options)'
16
19
 
17
20
  option :constraints,
18
- :short => '-c',
19
- :long => '--constraints',
20
- :boolean => true,
21
- :default => true,
21
+ :short => '-c',
22
+ :long => '--constraints',
23
+ :boolean => true,
24
+ :default => true,
22
25
  :description => 'Include version constraints for platforms and dependencies'
23
26
 
24
27
  option :output_file,
25
- :short => '-o',
26
- :long => '--output-file FILE',
27
- :default => 'README.md',
28
+ :short => '-o',
29
+ :long => '--output-file FILE',
30
+ :default => 'README.md',
28
31
  :description => 'Set the output file to render to relative to cookbook dir. Defaults to README.md'
29
32
 
30
33
  option :template_file,
31
- :short => '-t',
32
- :long => '--template FILE',
33
- :default => Pathname.new("#{File.dirname(__FILE__)}/README.md.erb").realpath,
34
+ :short => '-t',
35
+ :long => '--template FILE',
36
+ :default => Pathname.new("#{File.dirname(__FILE__)}/README.md.erb").realpath,
34
37
  :description => 'Set template file used to render README.md'
35
38
 
36
39
  def run
@@ -47,8 +50,11 @@ module KnifeCookbookDoc
47
50
  eruby = Erubis::Eruby.new(template)
48
51
  result = eruby.result(model.get_binding)
49
52
 
50
- File.open("#{cookbook_dir}/#{config[:output_file]}",'wb') do |f|
51
- f.write result
53
+ File.open("#{cookbook_dir}/#{config[:output_file]}", 'wb') do |f|
54
+ result.each_line do |line|
55
+ f.write line.gsub(/[ \t\r\n]*$/,'')
56
+ f.write "\n"
57
+ end
52
58
  end
53
59
  end
54
60
  end
@@ -0,0 +1,44 @@
1
+ module KnifeCookbookDoc
2
+ module BaseModel
3
+
4
+ def top_level_description(section)
5
+ (top_level_descriptions[section.to_s] || []).join("\n").gsub(/\n+$/m,"\n")
6
+ end
7
+
8
+ def top_level_descriptions
9
+ @top_level_descriptions ||= {}
10
+ end
11
+
12
+ def short_description
13
+ unless @short_description
14
+ @short_description = first_sentence(top_level_description('main'))
15
+ end
16
+ @short_description
17
+ end
18
+
19
+ private
20
+
21
+ def first_sentence(string)
22
+ string.gsub(/^(.*?\.(\z|\s))/m) do |match|
23
+ return $1.gsub("\n",' ').strip
24
+ end
25
+ return nil
26
+ end
27
+
28
+ def extract_description
29
+ description = []
30
+ IO.read(@filename).gsub(/^=begin *\n *\#\<\n(.*?)^ *\#\>\n=end *\n/m) do
31
+ description << $1
32
+ ""
33
+ end.gsub(/^ *\#\<\n(.*?)^ *\#\>\n/m) do
34
+ description << $1.gsub(/^ *\# ?/, '')
35
+ ""
36
+ end.gsub(/^ *\#\<\> (.*?)$/) do
37
+ description << $1
38
+ ""
39
+ end
40
+ description.join("\n")
41
+ end
42
+
43
+ end
44
+ end
@@ -0,0 +1,51 @@
1
+ module KnifeCookbookDoc
2
+ class DefinitionsModel
3
+ include KnifeCookbookDoc::BaseModel
4
+ attr_reader :name
5
+
6
+ def initialize(name, filename)
7
+ @name = name
8
+ @filename = filename
9
+ load_descriptions
10
+ end
11
+
12
+ def params
13
+ @params ||= {}
14
+ end
15
+
16
+ private
17
+
18
+ def load_descriptions
19
+ description = extract_description
20
+ current_section = 'main'
21
+ description.each_line do |line|
22
+ if /^ *\@param *([^ ]*) (.*)$/ =~ line
23
+ params[$1] = {}
24
+ params[$1]['descr'] = $2.strip
25
+ elsif /^ *\@section (.*)$/ =~ line
26
+ current_section = $1.strip
27
+ else
28
+ lines = (top_level_descriptions[current_section] || [])
29
+ lines << line.gsub("\n", '')
30
+ top_level_descriptions[current_section] = lines
31
+ end
32
+ end
33
+ load_properties
34
+ end
35
+
36
+ def load_properties
37
+ code = IO.read(@filename)
38
+ code.gsub(/^ *define (.*?) (?=do)/m) do
39
+ all = $1.split(' ', 2)
40
+ @name = all.shift.gsub(/:/, '')
41
+ next if all.empty?
42
+ all = eval("{#{all.last}}") rescue {}
43
+ all.each do |k, v|
44
+ p_name = k.to_s
45
+ params[p_name] ||= {}
46
+ params[p_name]['default'] = v ? v : 'nil'
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -27,6 +27,11 @@ module KnifeCookbookDoc
27
27
  @resources << ResourceModel.new(@metadata.name, resource_filename)
28
28
  end
29
29
 
30
+ @definitions = []
31
+ Dir["#{cookbook_dir}/definitions/*.rb"].sort.each do |def_filename|
32
+ @definitions << DefinitionsModel.new(File.basename(def_filename, '.*'), def_filename)
33
+ end
34
+
30
35
  @fragments = {}
31
36
  Dir["#{cookbook_dir}/doc/*.md"].sort.each do |resource_filename|
32
37
  @fragments[::File.basename(resource_filename,'.md')] = IO.read(resource_filename)
@@ -57,6 +62,10 @@ module KnifeCookbookDoc
57
62
  @resources
58
63
  end
59
64
 
65
+ def definitions
66
+ @definitions
67
+ end
68
+
60
69
  def description
61
70
  @metadata.description
62
71
  end
@@ -1,5 +1,6 @@
1
1
  module KnifeCookbookDoc
2
2
  class RecipeModel
3
+ include KnifeCookbookDoc::BaseModel
3
4
 
4
5
  attr_reader :name
5
6
  attr_reader :short_description
@@ -11,14 +12,6 @@ module KnifeCookbookDoc
11
12
  load_descriptions
12
13
  end
13
14
 
14
- def top_level_description(section)
15
- (top_level_descriptions[section.to_s] || []).join("\n").gsub(/\n+$/m,"\n")
16
- end
17
-
18
- def top_level_descriptions
19
- @top_level_descriptions ||= {}
20
- end
21
-
22
15
  private
23
16
 
24
17
  def load_descriptions
@@ -39,27 +32,5 @@ module KnifeCookbookDoc
39
32
  end
40
33
 
41
34
  include ::Chef::Mixin::ConvertToClassName
42
-
43
- def extract_description
44
- description = []
45
- IO.read(@filename).gsub(/^=begin *\n *\#\<\n(.*?)^ *\#\>\n=end *\n/m) do
46
- description << $1
47
- ""
48
- end.gsub(/^ *\#\<\n(.*?)^ *\#\>\n/m) do
49
- description << $1.gsub(/^ *\# ?/, '')
50
- ""
51
- end.gsub(/^ *\#\<\> (.*?)$/) do
52
- description << $1
53
- ""
54
- end
55
- description.join("\n")
56
- end
57
-
58
- def first_sentence(string)
59
- string.gsub(/^(.*?\.(\z|\s))/m) do |match|
60
- return $1.gsub("\n",' ').strip
61
- end
62
- return nil
63
- end
64
35
  end
65
36
  end
@@ -1,7 +1,6 @@
1
- require 'knife_cookbook_doc/documenting_lwrp_base'
2
-
3
1
  module KnifeCookbookDoc
4
2
  class ResourceModel
3
+ include KnifeCookbookDoc::BaseModel
5
4
 
6
5
  attr_reader :native_resource
7
6
 
@@ -59,28 +58,6 @@ module KnifeCookbookDoc
59
58
  @attribute_descriptions ||= {}
60
59
  end
61
60
 
62
- def short_description
63
- unless @short_description
64
- @short_description = first_sentence(top_level_description('main'))
65
- end
66
- @short_description
67
- end
68
-
69
- def first_sentence(string)
70
- string.gsub(/^(.*?\.(\z|\s))/m) do |match|
71
- return $1.gsub("\n",' ').strip
72
- end
73
- return nil
74
- end
75
-
76
- def top_level_description(section)
77
- (top_level_descriptions[section.to_s] || []).join("\n").gsub(/\n+$/m,"\n")
78
- end
79
-
80
- def top_level_descriptions
81
- @top_level_descriptions ||= {}
82
- end
83
-
84
61
  private
85
62
 
86
63
  def load_descriptions
@@ -1,3 +1,3 @@
1
1
  module KnifeCookbookDoc
2
- VERSION = '0.9.0'
2
+ VERSION = '0.10.0'
3
3
  end
metadata CHANGED
@@ -1,7 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: knife-cookbook-doc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.10.0
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - Mathias Lafeldt
@@ -9,11 +10,12 @@ authors:
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2014-02-24 00:00:00.000000000 Z
13
+ date: 2014-03-02 00:00:00.000000000 Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: chef
16
17
  requirement: !ruby/object:Gem::Requirement
18
+ none: false
17
19
  requirements:
18
20
  - - ! '>='
19
21
  - !ruby/object:Gem::Version
@@ -21,6 +23,7 @@ dependencies:
21
23
  type: :runtime
22
24
  prerelease: false
23
25
  version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
24
27
  requirements:
25
28
  - - ! '>='
26
29
  - !ruby/object:Gem::Version
@@ -28,6 +31,7 @@ dependencies:
28
31
  - !ruby/object:Gem::Dependency
29
32
  name: erubis
30
33
  requirement: !ruby/object:Gem::Requirement
34
+ none: false
31
35
  requirements:
32
36
  - - ! '>='
33
37
  - !ruby/object:Gem::Version
@@ -35,6 +39,7 @@ dependencies:
35
39
  type: :runtime
36
40
  prerelease: false
37
41
  version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
38
43
  requirements:
39
44
  - - ! '>='
40
45
  - !ruby/object:Gem::Version
@@ -42,6 +47,7 @@ dependencies:
42
47
  - !ruby/object:Gem::Dependency
43
48
  name: rake
44
49
  requirement: !ruby/object:Gem::Requirement
50
+ none: false
45
51
  requirements:
46
52
  - - ! '>='
47
53
  - !ruby/object:Gem::Version
@@ -49,6 +55,7 @@ dependencies:
49
55
  type: :development
50
56
  prerelease: false
51
57
  version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
52
59
  requirements:
53
60
  - - ! '>='
54
61
  - !ruby/object:Gem::Version
@@ -72,6 +79,8 @@ files:
72
79
  - lib/chef/knife/README.md.erb
73
80
  - lib/chef/knife/cookbook_doc.rb
74
81
  - lib/knife_cookbook_doc/attributes_model.rb
82
+ - lib/knife_cookbook_doc/base_model.rb
83
+ - lib/knife_cookbook_doc/definitions_model.rb
75
84
  - lib/knife_cookbook_doc/documenting_lwrp_base.rb
76
85
  - lib/knife_cookbook_doc/readme_model.rb
77
86
  - lib/knife_cookbook_doc/recipe_model.rb
@@ -80,26 +89,26 @@ files:
80
89
  homepage: http://realityforge.github.com/knife-cookbook-doc
81
90
  licenses:
82
91
  - Apache 2.0
83
- metadata: {}
84
92
  post_install_message:
85
93
  rdoc_options: []
86
94
  require_paths:
87
95
  - lib
88
96
  required_ruby_version: !ruby/object:Gem::Requirement
97
+ none: false
89
98
  requirements:
90
99
  - - ! '>='
91
100
  - !ruby/object:Gem::Version
92
101
  version: '0'
93
102
  required_rubygems_version: !ruby/object:Gem::Requirement
103
+ none: false
94
104
  requirements:
95
105
  - - ! '>='
96
106
  - !ruby/object:Gem::Version
97
107
  version: '0'
98
108
  requirements: []
99
109
  rubyforge_project:
100
- rubygems_version: 2.0.3
110
+ rubygems_version: 1.8.23
101
111
  signing_key:
102
- specification_version: 4
112
+ specification_version: 3
103
113
  summary: Knife plugin to generate README.md for a cookbook
104
114
  test_files: []
105
- has_rdoc:
checksums.yaml DELETED
@@ -1,15 +0,0 @@
1
- ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- ODE3YjMyNTVmN2UzYWY3ZDVkMjE4Y2U3ZTk2MjZiZjM1MjlmZmRmMg==
5
- data.tar.gz: !binary |-
6
- N2NjZDhlZmVhM2M0M2Q2MzNlNDExNThjYTY0ZGQ5Nzk3M2E2OTI0Yw==
7
- !binary "U0hBNTEy":
8
- metadata.gz: !binary |-
9
- ODQwNWE3OTY5YmFmY2YyOWJhYzgyNjQ3ZmViMGZkZjAxN2E2ZDllMDEyMGQy
10
- MmYzZDZkNmIzMzQ0Y2NmNGNhMTkyNzNiNWY4OGFlNGQ4ZTlhNmJjZGFiMmU2
11
- NWIwN2VmZTRjZDkyNGVlZTNhNDhhMjJiMTdmNjUxMzFjMmZkZTE=
12
- data.tar.gz: !binary |-
13
- MTc3MWFhOGM0NDM2NTQ3NjFjMDc4MjU2M2Q2ZTExZDllOTMyYzc5Y2FjY2Q5
14
- NWNkNzAyOGRlNWVhN2ZmZTBhZmQ4YTJlYmM2YTVlODA3MWVhZTlmNjg1NGY2
15
- NjkyOWZlZDZmMTI3MjFhYmNkYjNmMGE1MTc2NDdjYWU1N2ZlM2I=