middleman-targets 1.0.4 → 1.0.5

Sign up to get free protection for your applications and to get access to all the features.
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