middleman-targets 1.0.4 → 1.0.5

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.
Files changed (28) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +21 -0
  3. data/documentation_project/Gemfile +1 -1
  4. data/documentation_project/config.rb +1 -1
  5. data/documentation_project/source/helpers-resources.html.md.erb +3 -6
  6. data/documentation_project/source/partials/config.erb +334 -288
  7. data/documentation_project/source/partials/helpers.erb +204 -322
  8. data/documentation_project/source/partials/helpers_extended.erb +139 -0
  9. data/documentation_project/source/partials/resources.erb +88 -78
  10. data/lib/middleman-targets/extension.rb +4 -1
  11. data/lib/middleman-targets/version.rb +1 -1
  12. data/yard/readme.md +3 -3
  13. data/yard/template-grouped/default/module/html/method_details_list.erb +11 -0
  14. data/yard/template-partials/default/method_details/setup.rb +4 -0
  15. data/yard/template-partials/default/module/html/method_details_list.erb +11 -0
  16. data/yard/template-partials/default/module/setup.rb +6 -0
  17. data/yard/template-partials/default/onefile/html/layout.erb +1 -0
  18. data/yard/template-partials/default/onefile/html/setup.rb +4 -0
  19. data/yard/yard_extensions.rb +86 -49
  20. metadata +10 -11
  21. data/yard/templates/default/fulldoc/html/css/common.css +0 -1
  22. data/yard/templates/default/fulldoc/html/css/full_list.css +0 -57
  23. data/yard/templates/default/fulldoc/html/css/style.css +0 -343
  24. data/yard/templates/default/onefile/html/files.erb +0 -5
  25. data/yard/templates/default/onefile/html/headers.erb +0 -6
  26. data/yard/templates/default/onefile/html/layout.erb +0 -17
  27. data/yard/templates/default/onefile/html/readme.erb +0 -3
  28. data/yard/templates/default/onefile/html/setup.rb +0 -61
@@ -0,0 +1,139 @@
1
+
2
+
3
+
4
+
5
+
6
+ <div class="method_details_list">
7
+
8
+
9
+ <h2>Extended Helpers</h2>
10
+
11
+ <div class="method_details first">
12
+ <h3 class="signature first" id="image_tag-instance_method">
13
+
14
+ - (<tt>Void</tt>) <strong>image_tag</strong>(path, params = {})
15
+
16
+
17
+
18
+
19
+
20
+ </h3><div class="docstring">
21
+ <div class="discussion">
22
+ <p>Override the built-in <code>image-tag</code> helper in order to
23
+ support additional features.</p>
24
+
25
+ <ul>
26
+ <li>Automatic target-specific images. Note that this
27
+ only works on local files, and only if enabled
28
+ with the option <code>:target_magic_images</code>.</li>
29
+ <li>Target and feature dependent images using the
30
+ <code>params</code> hash.</li>
31
+ <li>Absolute paths, which Middleman sometimes bungles.</li>
32
+ </ul>
33
+
34
+ <p>Note that in addition to the options described below,
35
+ <code>middleman-targets</code> inherits all of the built-in
36
+ option parameters as well.</p>
37
+
38
+
39
+ </div>
40
+ </div>
41
+ <div class="tags">
42
+ <p class="tag_title">Parameters:</p>
43
+ <ul class="param">
44
+
45
+ <li>
46
+
47
+ <span class='name'>path</span>
48
+
49
+
50
+ <span class='type'>(<tt>String</tt>)</span>
51
+
52
+
53
+
54
+ &mdash;
55
+ <div class='inline'><p>The path to the image file.</p>
56
+ </div>
57
+
58
+ </li>
59
+
60
+ <li>
61
+
62
+ <span class='name'>params</span>
63
+
64
+
65
+ <span class='type'>(<tt>Hash</tt>)</span>
66
+
67
+
68
+ <em class="default">(defaults to: <tt>{}</tt>)</em>
69
+
70
+
71
+ &mdash;
72
+ <div class='inline'><p>Optional parameters to pass to
73
+ the helper.</p>
74
+ </div>
75
+
76
+ </li>
77
+
78
+ </ul>
79
+
80
+
81
+
82
+
83
+
84
+
85
+ <p class="tag_title">Options Hash (<tt>params</tt>):</p>
86
+ <ul class="option">
87
+
88
+ <li>
89
+ <span class="name">:target</span>
90
+ <span class="type">(<tt>String</tt>, <tt>Symbol</tt>)</span>
91
+ <span class="default">
92
+
93
+ </span>
94
+
95
+ &mdash; <div class='inline'><p>This image
96
+ tag will only be applied if the current target is
97
+ <code>target</code>.</p>
98
+ </div>
99
+
100
+ </li>
101
+
102
+ <li>
103
+ <span class="name">:feature</span>
104
+ <span class="type">(<tt>String</tt>, <tt>Symbol</tt>)</span>
105
+ <span class="default">
106
+
107
+ </span>
108
+
109
+ &mdash; <div class='inline'><p>This image
110
+ tag will only be applied if the current target
111
+ enables the feature <code>feature</code>.</p>
112
+ </div>
113
+
114
+ </li>
115
+
116
+ </ul>
117
+
118
+
119
+ <p class="tag_title">Returns:</p>
120
+ <ul class="return">
121
+
122
+ <li>
123
+
124
+
125
+ <span class='type'>(<tt>Void</tt>)</span>
126
+
127
+
128
+
129
+ </li>
130
+
131
+ </ul>
132
+
133
+ </div>
134
+ </div>
135
+
136
+
137
+ </div>
138
+
139
+
@@ -1,100 +1,110 @@
1
- <div id="instance_method_details" class="method_details_list">
2
- <div class="method_details first ">
3
- <h3 class="signature first" id="resource.targeted?-instance_method">
4
1
 
5
- - (<tt>Boolean</tt>) <strong>resource.targeted?</strong>
6
2
 
7
3
 
8
4
 
9
5
 
6
+ <div class="method_details_list">
7
+
8
+
9
+ <h2>Resource Extensions</h2>
10
+
11
+ <div class="method_details first">
12
+ <h3 class="signature first" id="resource.targeted?-instance_method">
13
+
14
+ - (<tt>Boolean</tt>) <strong>resource.targeted?</strong>
15
+
10
16
 
11
- </h3><div class="docstring">
12
- <div class="discussion">
17
+
13
18
 
14
- <p>Determines if the resource is eligible for inclusion
15
- in the current target based on the front matter data
16
- <code>target</code> and <code>exclude</code> fields.</p>
19
+
20
+ </h3><div class="docstring">
21
+ <div class="discussion">
22
+ <p>Determines if the resource is eligible for inclusion
23
+ in the current target based on the front matter data
24
+ <code>target</code> and <code>exclude</code> fields.</p>
17
25
 
18
- <ul>
19
- <li>If <strong>frontmatter:target</strong> is used, the target or
20
- feature appears in the frontmatter, and</li>
21
- <li>If <strong>frontmatter:exclude</strong> is used, the target or
22
- enabled feature does NOT appear in the
23
- frontmatter</li>
24
- </ul>
26
+ <ul>
27
+ <li>If <strong>frontmatter:target</strong> is used, the target or
28
+ feature appears in the frontmatter, and</li>
29
+ <li>If <strong>frontmatter:exclude</strong> is used, the target or
30
+ enabled feature does NOT appear in the
31
+ frontmatter</li>
32
+ </ul>
25
33
 
26
- <p>In general you won’t use this resource method because
27
- resources will already be excluded before you have a
28
- chance to check them, and so any leftover resources
29
- will always return <code>true</code> for this method.</p>
34
+ <p>In general you won’t use this resource method because
35
+ resources will already be excluded before you have a
36
+ chance to check them, and so any leftover resources
37
+ will always return <code>true</code> for this method.</p>
30
38
 
31
39
 
32
- </div>
33
40
  </div>
34
- <div class="tags">
35
-
36
- <p class="tag_title">Returns:</p>
37
- <ul class="return">
38
-
39
- <li>
40
-
41
-
42
- <span class='type'>(<tt>Boolean</tt>)</span>
43
-
41
+ </div>
42
+ <div class="tags">
43
+
44
+ <p class="tag_title">Returns:</p>
45
+ <ul class="return">
46
+
47
+ <li>
48
+
49
+
50
+ <span class='type'>(<tt>Boolean</tt>)</span>
51
+
52
+
53
+
54
+ &mdash;
55
+ <div class='inline'><p>Returns a value indicating whether
56
+ or not this resource belongs in the current target.</p>
57
+ </div>
58
+
59
+ </li>
60
+
61
+ </ul>
44
62
 
63
+ </div>
64
+ </div>
65
+
66
+ <div class="method_details ">
67
+ <h3 class="signature " id="resource.valid_features-instance_method">
68
+
69
+ - (<tt>Array</tt>) <strong>resource.valid_features</strong>
70
+
45
71
 
46
- &mdash;
47
- <div class='inline'><p>Returns a value indicating whether
48
- or not this resource belongs in the current target.</p>
49
- </div>
72
+
50
73
 
51
- </li>
74
+
75
+ </h3><div class="docstring">
76
+ <div class="discussion">
77
+ <p>Returns an array of valid features for a resource
78
+ based on the current target, i.e., features that
79
+ are true for the current target.</p>
52
80
 
53
- </ul>
54
81
 
55
- </div>
56
82
  </div>
83
+ </div>
84
+ <div class="tags">
85
+
86
+ <p class="tag_title">Returns:</p>
87
+ <ul class="return">
88
+
89
+ <li>
90
+
91
+
92
+ <span class='type'>(<tt>Array</tt>)</span>
93
+
94
+
95
+
96
+ &mdash;
97
+ <div class='inline'><p>Returns an array of features.</p>
98
+ </div>
99
+
100
+ </li>
101
+
102
+ </ul>
57
103
 
58
- <div class="method_details ">
59
- <h3 class="signature " id="resource.valid_features-instance_method">
60
-
61
- - (<tt>Array</tt>) <strong>resource.valid_features</strong>
62
-
63
-
64
-
65
-
66
-
67
- </h3><div class="docstring">
68
- <div class="discussion">
69
-
70
- <p>Returns an array of valid features for a resource
71
- based on the current target, i.e., features that
72
- are true for the current target.</p>
73
-
74
-
75
- </div>
104
+ </div>
105
+ </div>
106
+
107
+
76
108
  </div>
77
- <div class="tags">
78
-
79
- <p class="tag_title">Returns:</p>
80
- <ul class="return">
81
-
82
- <li>
83
-
84
109
 
85
- <span class='type'>(<tt>Array</tt>)</span>
86
110
 
87
-
88
-
89
- &mdash;
90
- <div class='inline'><p>Returns an array of features.</p>
91
- </div>
92
-
93
- </li>
94
-
95
- </ul>
96
-
97
- </div>
98
- </div>
99
-
100
- </div>
@@ -169,6 +169,7 @@ class MiddlemanTargets < ::Middleman::Extension
169
169
  ############################################################
170
170
  # Sitemap manipulators.
171
171
  # Add new methods to each resource.
172
+ # @visibility private
172
173
  ############################################################
173
174
  def manipulate_resource_list(resources)
174
175
 
@@ -326,6 +327,7 @@ class MiddlemanTargets < ::Middleman::Extension
326
327
  # tag will only be applied if the current target
327
328
  # enables the feature `feature`.
328
329
  # @return [Void]
330
+ # @group Extended Helpers
329
331
  #--------------------------------------------------------
330
332
  def image_tag(path, params={})
331
333
  params.symbolize_keys!
@@ -355,13 +357,14 @@ class MiddlemanTargets < ::Middleman::Extension
355
357
  end
356
358
 
357
359
  super(path, params)
358
- end
360
+ end # @endgroup
359
361
 
360
362
  end #helpers
361
363
 
362
364
 
363
365
  ############################################################
364
366
  # Instance Methods
367
+ # @group Instance Methods
365
368
  ############################################################
366
369
 
367
370
 
@@ -1,5 +1,5 @@
1
1
  module Middleman
2
2
  module MiddlemanTargets
3
- VERSION = '1.0.4'
3
+ VERSION = '1.0.5'
4
4
  end
5
5
  end
data/yard/readme.md CHANGED
@@ -1,6 +1,6 @@
1
1
  This gem provides the ability to generate multiple targets by outfitting
2
- *Middleman** with additional command line options. The provided helpers make it
3
- simple to control content that is specific to each target, based on the target
4
- name or based on feature sets for each target.
2
+ **Middleman** with additional command line options. The provided helpers make
3
+ it simple to control content that is specific to each target, based on the
4
+ target name or based on feature sets for each target.
5
5
 
6
6
  It is standalone and can be used in any **Middleman** project.
@@ -0,0 +1,11 @@
1
+ <% scopes(method_listing(false)) do |list, scope| %>
2
+ <div id="<%= scope %>_method_details" class="method_details_list">
3
+ <% groups = list.group_by { |g| g.group.nil? ? 'ZZZ' : g.group }.sort.to_h %>
4
+ <% groups.each_value do |group| %>
5
+ <h2><%= group[0].group || "#{scope.to_s.capitalize} Method Details" %></h2>
6
+ <% group.each_with_index do |meth, i| %>
7
+ <%= yieldall :object => meth, :owner => object, :index => i %>
8
+ <% end %>
9
+ <% end %>
10
+ </div>
11
+ <% end %>
@@ -0,0 +1,4 @@
1
+ def init
2
+ super
3
+ sections :header, [:method_signature, T('docstring')]
4
+ end
@@ -0,0 +1,11 @@
1
+ <% scopes(method_listing(false)) do |list, scope| %>
2
+ <div class="method_details_list">
3
+ <% groups = list.group_by { |g| g.group.nil? ? 'ZZZ' : g.group }.sort.to_h %>
4
+ <% groups.each_value do |group| %>
5
+ <h2><%= group[0].group || "#{scope.to_s.capitalize} Method Details" %></h2>
6
+ <% group.each_with_index do |meth, i| %>
7
+ <%= yieldall :object => meth, :owner => object, :index => i %>
8
+ <% end %>
9
+ <% end %>
10
+ </div>
11
+ <% end %>
@@ -0,0 +1,6 @@
1
+ include Helpers::ModuleHelper
2
+
3
+ def init
4
+ sections :attribute_details, [T('method_details')],
5
+ :method_details_list, [T('method_details')]
6
+ end
@@ -0,0 +1 @@
1
+ <%= yieldall %>
@@ -0,0 +1,4 @@
1
+ def init
2
+ super
3
+ sections :layout, [:all_objects]
4
+ end
@@ -1,73 +1,110 @@
1
- # Use our own CSS
2
- YARD::Templates::Engine.register_template_path File.join(File.dirname(__FILE__), 'templates')
1
+ ##########################################################################
2
+ # Our template groups the methods by @group instead of lumping all of
3
+ # them together as instance methods. This is because most of them simply
4
+ # *aren't* instance methods but rather helpers or resource methods.
5
+ # This template will be used by default because .yardopts loads this
6
+ # file; however `rake partials` will override this template via the
7
+ # command line in order to use the `template-partials` instead.
8
+ ##########################################################################
9
+ YARD::Templates::Engine.register_template_path File.join(File.dirname(__FILE__), 'template-grouped')
3
10
 
11
+
12
+ ##########################################################################
4
13
  # Force Yard to parse the helpers block in a Middleman extension.
5
- # Because they're not truly instance methods, these are forced into their
6
- # own 'Helpers' group in output.
14
+ #
15
+ # * Assign a generic "Helpers" group to each item if they don't have
16
+ # their own @group assignment. Note that @!group doesn't work in this
17
+ # section.
18
+ # * Add a @note to each item to distinguish them in a mixed up instance
19
+ # method detail section.
20
+ ##########################################################################
7
21
  class HelpersHandler < YARD::Handlers::Ruby::Base
8
22
  handles method_call(:helpers)
9
23
  namespace_only
10
24
 
11
25
  def process
12
- extra = <<HEREDOC
13
- @note This is not truly an instance method but a **helper** provided by this class.
14
- @group Helpers
15
- HEREDOC
16
26
 
17
27
  statement.last.last.each do |node|
18
- node.docstring.gsub!(/^[\-=]+\n/, '').gsub!(/[\-=]+$/, '') << extra
19
- parse_block(node, :owner => self.owner)
20
- end
21
- end
22
28
 
23
- def hash_parameters(node)
24
- hash = {}
25
- return hash unless node
29
+ extra = ''
26
30
 
27
- param_strings = node.source.split(/,(?=[^\]]*(?:\[|$))/)
28
- param_strings.each do | param |
31
+ # Find out if there's a @group assigned.
32
+ extra << '@group Helpers' unless node.docstring.match(/^@group (.*?)$/i)
33
+
34
+ # Clean up the doc string because we like - and = borders.
35
+ # Force the note and group on each of these "fake" methods.
36
+ if node.docstring
37
+ docstring = node.docstring
38
+ docstring = docstring.gsub(/^[\-=]+\n/, '')
39
+ docstring = docstring.gsub(/[\-=]+$/, '')
40
+ docstring << extra
41
+ node.docstring = docstring
42
+ else
43
+ node.docstring = extra
44
+ end
45
+
46
+ parse_block(node, :owner => self.owner)
47
+ end # do
29
48
 
30
- components = param.split(/\=(?=[^\]]*(?:\[|$))/)
31
- .each { |c| c.strip! }
32
- hash[components[0]] = components[1]
33
- end
49
+ end # def
34
50
 
35
- hash
36
- end
37
- end
51
+ end # class
38
52
 
39
53
 
54
+ ##########################################################################
40
55
  # Force Yard to parse the resources.each block in a Middleman extension.
41
- # Because they're not truly instance methods, these are forced into their
42
- # own 'Resource Extensions' group in output.
56
+ #
57
+ # * Assign a generic "Resource Extensions" group to each item if they
58
+ # don't have their own @group assignment. Note that @!group
59
+ # doesn't work in this section.
60
+ # * Force each item to have a `@visibility public` because we will
61
+ # probably have `@visibility private` in the wrapping method.
62
+ # * Add a @note to each item to distinguish them in a mixed up instance
63
+ # method detail section.
64
+ ##########################################################################
43
65
  class ResourcesHandler < YARD::Handlers::Ruby::Base
44
66
  handles :def
45
67
  namespace_only
46
68
 
47
69
  def process
48
- note = '@note This is not truly an instance method but a **resource method** added to each resource.'
49
- public = '@visibility public'
50
- private = '@visibility private'
51
-
52
- if statement.method_name(true).to_sym == :manipulate_resource_list
53
-
54
- statement.docstring = "#{statement.docstring}\n#{private}"
55
- # Block consists of everything in the actual `do` block
56
- block = statement.last.first.last.last
57
- block.each do | node |
58
- if node.type == :defs
59
- def_docstring = node.docstring.gsub(/^[\-=]+\n/, '').gsub(/[\-=]+$/, '')
60
- def_docstring << "#{note}\n#{public}"
61
- def_name = node[2][0]
62
- object = YARD::CodeObjects::MethodObject.new(namespace, "resource.#{def_name}")
63
- register(object)
64
- object.dynamic = true
65
- object.source = node.source.clone
66
- object[:docstring] = def_docstring
67
- object[:group] = 'Resource Extensions'
70
+ extra = <<HEREDOC
71
+ @visibility public
72
+ HEREDOC
73
+
74
+ return unless statement.method_name(true).to_sym == :manipulate_resource_list
75
+
76
+ # Block consists of everything in the actual `do` block
77
+ block = statement.last.first.last.last
78
+ block.each do | node |
79
+ if node.type == :defs
80
+ # Clean up the doc string because we like - and = borders.
81
+ # Force the note and public on each of these "fake" methods.
82
+ if node.docstring
83
+ docstring = node.docstring
84
+ docstring = docstring.gsub(/^[\-=]+\n/, '')
85
+ docstring = docstring.gsub(/[\-=]+$/, '')
86
+ docstring << extra
87
+ else
88
+ docstring = extra
68
89
  end
90
+
91
+ # Find out if there's a @group assigned.
92
+ if ( group = docstring.match(/^@group (.*?)$/i) )
93
+ group = group[1]
94
+ else
95
+ group = 'Resource Extensions'
96
+ end
97
+
98
+ def_name = node[2][0]
99
+ object = YARD::CodeObjects::MethodObject.new(namespace, "resource.#{def_name}")
100
+ register(object)
101
+ object.dynamic = true
102
+ object.source = node.source.clone
103
+ object[:docstring] = docstring
104
+ object[:group] = group
69
105
  end
106
+ end # do
107
+
108
+ end # def
70
109
 
71
- end
72
- end
73
- end
110
+ end # class