sidekiq-statsd 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.yardopts +1 -1
- data/README.md +8 -4
- data/lib/sidekiq/statsd/client.rb +10 -10
- data/lib/sidekiq/statsd/server_middleware.rb +8 -9
- data/lib/sidekiq/statsd/version.rb +1 -1
- data/spec/sidekiq/statsd/client_spec.rb +6 -6
- data/spec/spec_helper.rb +1 -0
- data/vendor/ruby/1.9.1/bin/yard +1 -1
- data/vendor/ruby/1.9.1/bin/yardoc +1 -1
- data/vendor/ruby/1.9.1/bin/yri +1 -1
- data/vendor/ruby/1.9.1/gems/yard-0.8.6.1/lib/yard/tags/default_factory.rb +176 -0
- data/vendor/ruby/1.9.1/gems/yard-0.8.6.1/lib/yard/tags/default_tag.rb +12 -0
- data/vendor/ruby/1.9.1/gems/yard-0.8.6.1/lib/yard/tags/directives.rb +595 -0
- data/vendor/ruby/1.9.1/gems/yard-0.8.6.1/lib/yard/tags/library.rb +630 -0
- data/vendor/ruby/1.9.1/gems/yard-0.8.6.1/lib/yard/tags/option_tag.rb +12 -0
- data/vendor/ruby/1.9.1/gems/yard-0.8.6.1/lib/yard/tags/overload_tag.rb +65 -0
- data/vendor/ruby/1.9.1/gems/yard-0.8.6.1/lib/yard/tags/ref_tag.rb +7 -0
- data/vendor/ruby/1.9.1/gems/yard-0.8.6.1/lib/yard/tags/ref_tag_list.rb +27 -0
- data/vendor/ruby/1.9.1/gems/yard-0.8.6.1/lib/yard/tags/tag.rb +57 -0
- data/vendor/ruby/1.9.1/gems/yard-0.8.6.1/lib/yard/tags/tag_format_error.rb +6 -0
- data/vendor/ruby/1.9.1/gems/yard-0.8.6.1/spec/tags/default_factory_spec.rb +152 -0
- data/vendor/ruby/1.9.1/gems/yard-0.8.6.1/spec/tags/default_tag_spec.rb +11 -0
- data/vendor/ruby/1.9.1/gems/yard-0.8.6.1/spec/tags/directives_spec.rb +436 -0
- data/vendor/ruby/1.9.1/gems/yard-0.8.6.1/spec/tags/library_spec.rb +34 -0
- data/vendor/ruby/1.9.1/gems/yard-0.8.6.1/spec/tags/overload_tag_spec.rb +53 -0
- data/vendor/ruby/1.9.1/gems/yard-0.8.6.1/spec/tags/ref_tag_list_spec.rb +53 -0
- data/vendor/ruby/1.9.1/gems/yard-0.8.6.1/templates/default/tags/html/example.erb +11 -0
- data/vendor/ruby/1.9.1/gems/yard-0.8.6.1/templates/default/tags/html/index.erb +3 -0
- data/vendor/ruby/1.9.1/gems/yard-0.8.6.1/templates/default/tags/html/option.erb +24 -0
- data/vendor/ruby/1.9.1/gems/yard-0.8.6.1/templates/default/tags/html/overload.erb +14 -0
- data/vendor/ruby/1.9.1/gems/yard-0.8.6.1/templates/default/tags/html/see.erb +8 -0
- data/vendor/ruby/1.9.1/gems/yard-0.8.6.1/templates/default/tags/html/tag.erb +20 -0
- data/vendor/ruby/1.9.1/gems/yard-0.8.6.1/templates/default/tags/setup.rb +55 -0
- data/vendor/ruby/1.9.1/gems/yard-0.8.6.1/templates/default/tags/text/example.erb +12 -0
- data/vendor/ruby/1.9.1/gems/yard-0.8.6.1/templates/default/tags/text/index.erb +1 -0
- data/vendor/ruby/1.9.1/gems/yard-0.8.6.1/templates/default/tags/text/option.erb +20 -0
- data/vendor/ruby/1.9.1/gems/yard-0.8.6.1/templates/default/tags/text/overload.erb +19 -0
- data/vendor/ruby/1.9.1/gems/yard-0.8.6.1/templates/default/tags/text/see.erb +11 -0
- data/vendor/ruby/1.9.1/gems/yard-0.8.6.1/templates/default/tags/text/tag.erb +13 -0
- data/vendor/ruby/1.9.1/gems/yard-0.8.6.1/templates/guide/tags/html/setup.rb +8 -0
- metadata +34 -4
@@ -0,0 +1,630 @@
|
|
1
|
+
module YARD
|
2
|
+
module Tags
|
3
|
+
# Keeps track of all the registered meta-data tags and directives.
|
4
|
+
# Also allows for defining of custom tags and customizing the tag parsing
|
5
|
+
# syntax.
|
6
|
+
#
|
7
|
+
# == Defining Custom Meta-Data Tags
|
8
|
+
#
|
9
|
+
# To define a custom tag, use {define_tag}. You should pass the tag
|
10
|
+
# name and the factory method to use when creating the tag. If you do not
|
11
|
+
# provide a factory method to use, it will default to {DefaultFactory#parse_tag}
|
12
|
+
#
|
13
|
+
# You can also define tag objects manually by simply implementing a "tagname_tag"
|
14
|
+
# method that returns a {Tag} object, but they will not take advantage of tag factory
|
15
|
+
# parsing:
|
16
|
+
#
|
17
|
+
# def mytag_tag(text)
|
18
|
+
# Tag.new(:mytag, text)
|
19
|
+
# end
|
20
|
+
#
|
21
|
+
# == Defining Custom Directives
|
22
|
+
#
|
23
|
+
# Directives can be defined by calling the {define_directive} method, taking
|
24
|
+
# the directive name, an optional tag factory parser method (to parse the
|
25
|
+
# data in the directive into a temporary {Tag} object) and a {Directive} subclass
|
26
|
+
# that performs the directive processing. For more information on creating a
|
27
|
+
# Directive subclass, see the {Directive} class documentation.
|
28
|
+
#
|
29
|
+
# Similar to tags, Directives can also be defined manually, in this case using
|
30
|
+
# the method name "mydirective_directive" and returning a new {Directive} object:
|
31
|
+
#
|
32
|
+
# def mydirective_directive(tag, parser)
|
33
|
+
# MyDirective.new(tag, parser)
|
34
|
+
# end
|
35
|
+
#
|
36
|
+
# == Namespaced Tags
|
37
|
+
#
|
38
|
+
# In YARD 0.8.0+, tags can be namespaced using the '.' character. It is recommended
|
39
|
+
# to namespace project specific tags, like +@yard.tag_name+, so that tags do not
|
40
|
+
# collide with other plugins or new built-in tags.
|
41
|
+
#
|
42
|
+
# == Adding/Changing the Tag Syntax
|
43
|
+
#
|
44
|
+
# If you have specialized tag parsing needs you can substitute the {#factory}
|
45
|
+
# object with your own by setting {Library.default_factory= Library.default_factory}
|
46
|
+
# to a new class with its own parsing methods before running YARD. This is useful
|
47
|
+
# if you want to change the syntax of existing tags (@see, @since, etc.)
|
48
|
+
#
|
49
|
+
# @example Defining a custom tag
|
50
|
+
# define_tag "Parameter", :param, :with_types_and_name
|
51
|
+
# define_tag "Author", :author
|
52
|
+
# @example Defining a custom directive
|
53
|
+
# define_directive :method, :with_title_and_text, MethodDirective
|
54
|
+
# @see DefaultFactory
|
55
|
+
# @see define_tag
|
56
|
+
# @see define_directive
|
57
|
+
# @see Directive
|
58
|
+
class Library
|
59
|
+
class << self
|
60
|
+
# @return [SymbolHash{Symbol=>String}] the map of tag names and their
|
61
|
+
# respective display labels.
|
62
|
+
attr_reader :labels
|
63
|
+
|
64
|
+
# @!attribute instance
|
65
|
+
# @return [Library] the main Library instance object.
|
66
|
+
def instance
|
67
|
+
@instance ||= new
|
68
|
+
end
|
69
|
+
|
70
|
+
# @!attribute default_factory
|
71
|
+
# Replace the factory object responsible for parsing tags by setting
|
72
|
+
# this to an object (or class) that responds to +parse_TAGNAME+ methods
|
73
|
+
# where +TAGNAME+ is the name of the tag.
|
74
|
+
#
|
75
|
+
# You should set this value before performing any source parsing with
|
76
|
+
# YARD, otherwise your factory class will not be used.
|
77
|
+
#
|
78
|
+
# @example
|
79
|
+
# YARD::Tags::Library.default_factory = MyFactory
|
80
|
+
#
|
81
|
+
# @param [Class, Object] factory the factory that parses all tags
|
82
|
+
#
|
83
|
+
# @see DefaultFactory
|
84
|
+
def default_factory
|
85
|
+
@default_factory ||= DefaultFactory.new
|
86
|
+
end
|
87
|
+
|
88
|
+
def default_factory=(factory)
|
89
|
+
@default_factory = factory.is_a?(Class) ? factory.new : factory
|
90
|
+
end
|
91
|
+
|
92
|
+
# Returns the factory method used to parse the tag text for a specific tag
|
93
|
+
#
|
94
|
+
# @param [Symbol] tag the tag name
|
95
|
+
# @return [Symbol] the factory method name for the tag
|
96
|
+
# @return [Class<Tag>,Symbol] the Tag class to use to parse the tag
|
97
|
+
# or the method to call on the factory class
|
98
|
+
# @return [nil] if the tag is freeform text
|
99
|
+
# @since 0.6.0
|
100
|
+
def factory_method_for(tag)
|
101
|
+
@factory_methods[tag]
|
102
|
+
end
|
103
|
+
|
104
|
+
# Returns the factory method used to parse the tag text for a specific
|
105
|
+
# directive
|
106
|
+
#
|
107
|
+
# @param [Symbol] directive the directive name
|
108
|
+
# @return [Symbol] the factory method name for the tag
|
109
|
+
# @return [Class<Tag>,Symbol] the Tag class to use to parse the tag or
|
110
|
+
# the methods to call on the factory class
|
111
|
+
# @return [nil] if the tag is freeform text
|
112
|
+
# @since 0.8.0
|
113
|
+
def factory_method_for_directive(directive)
|
114
|
+
@directive_factory_classes[directive]
|
115
|
+
end
|
116
|
+
|
117
|
+
# Sets the list of tags to display when rendering templates. The order of
|
118
|
+
# tags in the list is also significant, as it represents the order that
|
119
|
+
# tags are displayed in templates.
|
120
|
+
#
|
121
|
+
# You can use the {Array#place} to insert new tags to be displayed in
|
122
|
+
# the templates at specific positions:
|
123
|
+
#
|
124
|
+
# Library.visible_tags.place(:mytag).before(:return)
|
125
|
+
#
|
126
|
+
# @return [Array<Symbol>] a list of ordered tags
|
127
|
+
# @since 0.6.0
|
128
|
+
attr_accessor :visible_tags
|
129
|
+
|
130
|
+
# Sets the list of tags that should apply to any children inside the
|
131
|
+
# namespace they are defined in. For instance, a "@since" tag should
|
132
|
+
# apply to all methods inside a module it is defined in. Transitive
|
133
|
+
# tags can be overridden by directly defining a tag on the child object.
|
134
|
+
#
|
135
|
+
# @return [Array<Symbol>] a list of transitive tags
|
136
|
+
# @since 0.6.0
|
137
|
+
attr_accessor :transitive_tags
|
138
|
+
|
139
|
+
# Sorts the labels lexically by their label name, often used when displaying
|
140
|
+
# the tags.
|
141
|
+
#
|
142
|
+
# @return [Array<Symbol>, String] the sorted labels as an array of the tag name and label
|
143
|
+
def sorted_labels
|
144
|
+
labels.sort_by {|a| a.last.downcase }
|
145
|
+
end
|
146
|
+
|
147
|
+
# Convenience method to define a new tag using one of {Tag}'s factory methods, or the
|
148
|
+
# regular {DefaultFactory#parse_tag} factory method if none is supplied.
|
149
|
+
#
|
150
|
+
# @!macro [attach] yard.tag
|
151
|
+
# @!method $2_tag
|
152
|
+
# @!visibility private
|
153
|
+
# @yard.tag $2 [$3] $1
|
154
|
+
# @param [#to_s] label the label used when displaying the tag in templates
|
155
|
+
# @param [#to_s] tag the tag name to create
|
156
|
+
# @param [#to_s, Class<Tag>] meth the {Tag} factory method to call when
|
157
|
+
# creating the tag or the name of the class to directly create a tag for
|
158
|
+
def define_tag(label, tag, meth = nil)
|
159
|
+
tag_meth = tag_method_name(tag)
|
160
|
+
if meth.is_a?(Class) && Tag > meth
|
161
|
+
class_eval <<-eof, __FILE__, __LINE__
|
162
|
+
def #{tag_meth}(text)
|
163
|
+
#{meth}.new(#{tag.inspect}, text)
|
164
|
+
end
|
165
|
+
eof
|
166
|
+
else
|
167
|
+
class_eval <<-eof, __FILE__, __LINE__
|
168
|
+
def #{tag_meth}(text)
|
169
|
+
send_to_factory(#{tag.inspect}, #{meth.inspect}, text)
|
170
|
+
end
|
171
|
+
eof
|
172
|
+
end
|
173
|
+
|
174
|
+
@labels ||= SymbolHash.new(false)
|
175
|
+
@labels.update(tag => label)
|
176
|
+
@factory_methods ||= SymbolHash.new(false)
|
177
|
+
@factory_methods.update(tag => meth)
|
178
|
+
tag
|
179
|
+
end
|
180
|
+
|
181
|
+
# @macro [attach] yard.directive
|
182
|
+
# @!method $1_directive
|
183
|
+
# @!visibility private
|
184
|
+
# @yard.directive $1 [$2] $-1
|
185
|
+
# @overload define_directive(tag, tag_meth = nil, directive_class)
|
186
|
+
# Convenience method to define a new directive using a {Tag} factory
|
187
|
+
# method and {Directive} subclass that implements the directive
|
188
|
+
# callbacks.
|
189
|
+
#
|
190
|
+
# @param [#to_s] tag the tag name of the directive
|
191
|
+
# @param [#to_s] tag_meth the tag factory method to use when
|
192
|
+
# parsing tag information
|
193
|
+
# @param [Class<Directive>] the directive class that implements the
|
194
|
+
# directive behaviour
|
195
|
+
# @see define_tag
|
196
|
+
def define_directive(tag, tag_meth = nil, directive_class = nil)
|
197
|
+
directive_meth = directive_method_name(tag)
|
198
|
+
if directive_class.nil?
|
199
|
+
tag_meth, directive_class = nil, tag_meth
|
200
|
+
end
|
201
|
+
class_eval <<-eof, __FILE__, __LINE__
|
202
|
+
def #{directive_meth}(tag, parser)
|
203
|
+
directive_call(tag, parser)
|
204
|
+
end
|
205
|
+
eof
|
206
|
+
|
207
|
+
@factory_methods ||= SymbolHash.new(false)
|
208
|
+
@factory_methods.update(tag => tag_meth)
|
209
|
+
@directive_factory_classes ||= SymbolHash.new(false)
|
210
|
+
@directive_factory_classes.update(tag => directive_class)
|
211
|
+
|
212
|
+
tag
|
213
|
+
end
|
214
|
+
|
215
|
+
def tag_method_name(tag_name)
|
216
|
+
tag_or_directive_method_name(tag_name)
|
217
|
+
end
|
218
|
+
|
219
|
+
def directive_method_name(tag_name)
|
220
|
+
tag_or_directive_method_name(tag_name, 'directive')
|
221
|
+
end
|
222
|
+
|
223
|
+
private
|
224
|
+
|
225
|
+
def tag_or_directive_method_name(tag_name, type = 'tag')
|
226
|
+
"#{tag_name.to_s.gsub('.', '_')}_#{type}"
|
227
|
+
end
|
228
|
+
end
|
229
|
+
|
230
|
+
private
|
231
|
+
|
232
|
+
def send_to_factory(tag_name, meth, text)
|
233
|
+
meth = meth.to_s
|
234
|
+
send_name = "parse_tag" + (meth.empty? ? "" : "_" + meth)
|
235
|
+
if @factory.respond_to?(send_name)
|
236
|
+
arity = @factory.method(send_name).arity
|
237
|
+
@factory.send(send_name, tag_name, text)
|
238
|
+
else
|
239
|
+
raise NoMethodError, "Factory #{@factory.class_name} does not implement factory method :#{meth}."
|
240
|
+
end
|
241
|
+
end
|
242
|
+
|
243
|
+
# @return [Directive]
|
244
|
+
def directive_call(tag, parser)
|
245
|
+
meth = self.class.factory_method_for_directive(tag.tag_name)
|
246
|
+
if meth <= Directive
|
247
|
+
meth = meth.new(tag, parser)
|
248
|
+
meth.call
|
249
|
+
meth
|
250
|
+
else
|
251
|
+
meth.call(tag, parser)
|
252
|
+
end
|
253
|
+
end
|
254
|
+
|
255
|
+
public
|
256
|
+
|
257
|
+
# A factory class to handle parsing of tags, defaults to {default_factory}
|
258
|
+
attr_accessor :factory
|
259
|
+
|
260
|
+
def initialize(factory = Library.default_factory)
|
261
|
+
self.factory = factory
|
262
|
+
end
|
263
|
+
|
264
|
+
# @param [#to_s] tag_name the name of the tag to look for
|
265
|
+
# @return [Boolean] whether a tag by the given name is registered in
|
266
|
+
# the library.
|
267
|
+
def has_tag?(tag_name)
|
268
|
+
tag_name && respond_to?(self.class.tag_method_name(tag_name))
|
269
|
+
end
|
270
|
+
|
271
|
+
# Creates a new {Tag} object with a given tag name and data
|
272
|
+
# @return [Tag] the newly created tag object
|
273
|
+
def tag_create(tag_name, tag_buf)
|
274
|
+
send(self.class.tag_method_name(tag_name), tag_buf)
|
275
|
+
end
|
276
|
+
|
277
|
+
# @param [#to_s] tag_name the name of the tag to look for
|
278
|
+
# @return [Boolean] whether a directive by the given name is registered in
|
279
|
+
# the library.
|
280
|
+
def has_directive?(tag_name)
|
281
|
+
tag_name && respond_to?(self.class.directive_method_name(tag_name))
|
282
|
+
end
|
283
|
+
|
284
|
+
# Creates a new directive with tag information and a docstring parser
|
285
|
+
# object.
|
286
|
+
# @param [String] tag_name the name of the tag
|
287
|
+
# @param [String] tag_buf the tag data
|
288
|
+
# @param [DocstringParser] parser the parser object parsing the docstring
|
289
|
+
# @return [Directive] the newly created directive
|
290
|
+
def directive_create(tag_name, tag_buf, parser)
|
291
|
+
meth = self.class.factory_method_for(tag_name)
|
292
|
+
tag = send_to_factory(tag_name, meth, tag_buf)
|
293
|
+
meth = self.class.directive_method_name(tag_name)
|
294
|
+
send(meth, tag, parser)
|
295
|
+
end
|
296
|
+
|
297
|
+
# @!macro yard.tag.transitive
|
298
|
+
# @note This tag is *transitive*. If it is applied on a
|
299
|
+
# namespace (module or class), it will automatically be
|
300
|
+
# applied to all children objects of that namespace unless
|
301
|
+
# it is redefined on the child object.
|
302
|
+
|
303
|
+
# Marks a class/module/method as abstract with optional
|
304
|
+
# implementor information.
|
305
|
+
#
|
306
|
+
# @example
|
307
|
+
# # @abstract Subclass and override {#run} to implement
|
308
|
+
# # a custom Threadable class.
|
309
|
+
# class Runnable
|
310
|
+
# def run; raise NotImplementedError end
|
311
|
+
# end
|
312
|
+
define_tag "Abstract", :abstract
|
313
|
+
|
314
|
+
# Declares the API that the object belongs to. Does not display in
|
315
|
+
# output, but useful for performing queries (+yardoc --query+). Any text is
|
316
|
+
# allowable in this tag, and there are no predefined values.
|
317
|
+
#
|
318
|
+
# @!macro yard.tag.transitive
|
319
|
+
# @note The special name +@api private+ does display a notice in
|
320
|
+
# documentation if it is listed, letting users know that the
|
321
|
+
# method is not to be used by external components.
|
322
|
+
# @example
|
323
|
+
# class Post
|
324
|
+
# # @api private
|
325
|
+
# def reset_table!; table.flush end
|
326
|
+
# end
|
327
|
+
define_tag "API Visibility", :api
|
328
|
+
|
329
|
+
# Declares a readwrite attribute on a Struct or class.
|
330
|
+
#
|
331
|
+
# @note This attribute is only applicable on class docstrings
|
332
|
+
# @deprecated Use the more powerful {tag:!attribute} directive instead.
|
333
|
+
# @example
|
334
|
+
# # @attr [String] name the name of the structure
|
335
|
+
# # @attr [Fixnum] size the size of the structure
|
336
|
+
# class MyStruct < Struct; end
|
337
|
+
define_tag "Attribute", :attr, :with_types_and_name
|
338
|
+
|
339
|
+
# Declares a readonly attribute on a Struct or class.
|
340
|
+
#
|
341
|
+
# @note This attribute is only applicable on class docstrings
|
342
|
+
# @deprecated Use the more powerful {tag:!attribute} directive instead.
|
343
|
+
# @example
|
344
|
+
# # @attr_reader [String] name the name of the structure
|
345
|
+
# # @attr_reader [Fixnum] size the size of the structure
|
346
|
+
# class MyStruct < Struct; end
|
347
|
+
define_tag "Attribute Getter", :attr_reader, :with_types_and_name
|
348
|
+
|
349
|
+
# Declares a writeonly attribute on a Struct or class.
|
350
|
+
#
|
351
|
+
# @note This attribute is only applicable on class docstrings
|
352
|
+
# @deprecated Use the more powerful {tag:!attribute} directive instead.
|
353
|
+
# @example
|
354
|
+
# # @attr_reader [String] name the name of the structure
|
355
|
+
# # @attr_reader [Fixnum] size the size of the structure
|
356
|
+
# class MyStruct < Struct; end
|
357
|
+
define_tag "Attribute Setter", :attr_writer, :with_types_and_name
|
358
|
+
|
359
|
+
# List the author or authors of a class, module, or method.
|
360
|
+
#
|
361
|
+
# @example
|
362
|
+
# # @author Foo Bar <foo@bar.com>
|
363
|
+
# class MyClass; end
|
364
|
+
define_tag "Author", :author
|
365
|
+
|
366
|
+
# Marks a method/class as deprecated with an optional description.
|
367
|
+
# The description should be used to inform users of the recommended
|
368
|
+
# migration path, and/or any useful information about why the object
|
369
|
+
# was marked as deprecated.
|
370
|
+
#
|
371
|
+
# @example Deprecate a method with a replacement API
|
372
|
+
# # @deprecated Use {#bar} instead.
|
373
|
+
# def foo; end
|
374
|
+
# @example Deprecate a method with no replacement
|
375
|
+
# class Thread
|
376
|
+
# # @deprecated Exiting a thread in this way is not reliable and
|
377
|
+
# # can cause a program crash.
|
378
|
+
# def kill; end
|
379
|
+
# end
|
380
|
+
define_tag "Deprecated", :deprecated
|
381
|
+
|
382
|
+
# Show an example snippet of code for an object. The first line
|
383
|
+
# is an optional title.
|
384
|
+
#
|
385
|
+
# @example
|
386
|
+
# # @example Reverse a String
|
387
|
+
# # "mystring".reverse #=> "gnirtsym"
|
388
|
+
# def reverse; end
|
389
|
+
# @yard.signature Optional title
|
390
|
+
# Code block
|
391
|
+
define_tag "Example", :example, :with_title_and_text
|
392
|
+
|
393
|
+
# Adds an emphasized note at the top of the docstring for the object
|
394
|
+
#
|
395
|
+
# @example
|
396
|
+
# # @note This method should only be used in outer space.
|
397
|
+
# def eject; end
|
398
|
+
# @see tag:todo
|
399
|
+
define_tag "Note", :note
|
400
|
+
|
401
|
+
# Describe an options hash in a method. The tag takes the
|
402
|
+
# name of the options parameter first, followed by optional types,
|
403
|
+
# the option key name, a default value for the key and a
|
404
|
+
# description of the option. The default value should be placed within
|
405
|
+
# parentheses and is optional (can be omitted).
|
406
|
+
#
|
407
|
+
# Note that a +@param+ tag need not be defined for the options
|
408
|
+
# hash itself, though it is useful to do so for completeness.
|
409
|
+
#
|
410
|
+
# @example
|
411
|
+
# # @param [Hash] opts the options to create a message with.
|
412
|
+
# # @option opts [String] :subject The subject
|
413
|
+
# # @option opts [String] :from ('nobody') From address
|
414
|
+
# # @option opts [String] :to Recipient email
|
415
|
+
# # @option opts [String] :body ('') The email's body
|
416
|
+
# def send_email(opts = {}) end
|
417
|
+
# @yard.signature name [Types] option_key (default_value) description
|
418
|
+
define_tag "Options Hash", :option, :with_options
|
419
|
+
|
420
|
+
# Describe that your method can be used in various
|
421
|
+
# contexts with various parameters or return types. The first
|
422
|
+
# line should declare the new method signature, and the following
|
423
|
+
# indented tag data will be a new documentation string with its
|
424
|
+
# own tags adding metadata for such an overload.
|
425
|
+
#
|
426
|
+
# @example
|
427
|
+
# # @overload set(key, value)
|
428
|
+
# # Sets a value on key
|
429
|
+
# # @param [Symbol] key describe key param
|
430
|
+
# # @param [Object] value describe value param
|
431
|
+
# # @overload set(value)
|
432
|
+
# # Sets a value on the default key +:foo+
|
433
|
+
# # @param [Object] value describe value param
|
434
|
+
# def set(*args) end
|
435
|
+
# @yard.signature method_signature(parameters)
|
436
|
+
# Indented docstring for overload method
|
437
|
+
define_tag "Overloads", :overload, OverloadTag
|
438
|
+
|
439
|
+
# Documents a single method parameter with a given name, type
|
440
|
+
# and optional description.
|
441
|
+
#
|
442
|
+
# @example
|
443
|
+
# # @param [String] the URL of the page to download
|
444
|
+
# def load_page(url) end
|
445
|
+
define_tag "Parameters", :param, :with_types_and_name
|
446
|
+
|
447
|
+
# Declares that the _logical_ visibility of an object is private.
|
448
|
+
# In other words, it specifies that this method should be marked
|
449
|
+
# private but cannot due to Ruby's visibility restrictions. This
|
450
|
+
# exists for classes, modules and constants that do not obey Ruby's
|
451
|
+
# visibility rules. For instance, an inner class might be considered
|
452
|
+
# "private", though Ruby would make no such distinction.
|
453
|
+
#
|
454
|
+
# This tag is meant to be used in conjunction with the +--no-private+
|
455
|
+
# command-line option, and is required to actually remove these objects
|
456
|
+
# from documentation output. See {file:README.md} for more information on
|
457
|
+
# switches.
|
458
|
+
#
|
459
|
+
# If you simply want to set the API visibility of a method, you should
|
460
|
+
# look at the {tag:api} tag instead.
|
461
|
+
#
|
462
|
+
# @note This method is not recommended for hiding undocumented or
|
463
|
+
# "unimportant" methods. This tag should only be used to mark objects
|
464
|
+
# private when Ruby visibility rules cannot do so. In Ruby 1.9.3, you
|
465
|
+
# can use +private_constant+ to declare constants (like classes or
|
466
|
+
# modules) as private, and should be used instead of +@private+.
|
467
|
+
# @macro yard.tag.transitive
|
468
|
+
# @example
|
469
|
+
# # @private
|
470
|
+
# class InteralImplementation; end
|
471
|
+
# @see tag:api
|
472
|
+
# @yard.signature
|
473
|
+
define_tag "Private", :private
|
474
|
+
|
475
|
+
# Describes that a method may raise a given exception, with
|
476
|
+
# an optional description of what it may mean.
|
477
|
+
#
|
478
|
+
# @example
|
479
|
+
# # @raise [AccountBalanceError] if the account does not have
|
480
|
+
# # sufficient funds to perform the transaction
|
481
|
+
# def withdraw(amount) end
|
482
|
+
define_tag "Raises", :raise, :with_types
|
483
|
+
|
484
|
+
# Describes the return value (and type or types) of a method.
|
485
|
+
# You can list multiple return tags for a method in the case
|
486
|
+
# where a method has distinct return cases. In this case, each
|
487
|
+
# case should begin with "if ...".
|
488
|
+
#
|
489
|
+
# @example A regular return value
|
490
|
+
# # @return [Fixnum] the size of the file
|
491
|
+
# def size; @file.size end
|
492
|
+
# @example A method returns an Array or a single object
|
493
|
+
# # @return [String] if a single object was returned
|
494
|
+
# # from the database.
|
495
|
+
# # @return [Array<String>] if multiple objects were
|
496
|
+
# # returned.
|
497
|
+
# def find(query) end
|
498
|
+
define_tag "Returns", :return, :with_types
|
499
|
+
|
500
|
+
# "See Also" references for an object. Accepts URLs or
|
501
|
+
# other code objects with an optional description at the end.
|
502
|
+
# Note that the URL or object will be automatically linked by
|
503
|
+
# YARD and does not need to be formatted with markup.
|
504
|
+
#
|
505
|
+
# @example
|
506
|
+
# # Synchronizes system time using NTP.
|
507
|
+
# # @see http://ntp.org/documentation.html NTP Documentation
|
508
|
+
# # @see NTPHelperMethods
|
509
|
+
# class NTPUpdater; end
|
510
|
+
define_tag "See Also", :see, :with_name
|
511
|
+
|
512
|
+
# Lists the version that the object was first added.
|
513
|
+
#
|
514
|
+
# @!macro yard.tag.transitive
|
515
|
+
# @example
|
516
|
+
# # @since 1.2.4
|
517
|
+
# def clear_routes; end
|
518
|
+
define_tag "Since", :since
|
519
|
+
|
520
|
+
# Marks a TODO note in the object being documented.
|
521
|
+
# For reference, objects with TODO items can be enumerated
|
522
|
+
# from the command line with a simple command:
|
523
|
+
#
|
524
|
+
# !!!sh
|
525
|
+
# mocker$ yard list --query '@todo'
|
526
|
+
# lib/mocker/mocker.rb:15: Mocker
|
527
|
+
# lib/mocker/report/html.rb:5: Mocker::Report::Html
|
528
|
+
#
|
529
|
+
# YARD can also be used to enumerate the TODO items from
|
530
|
+
# a short script:
|
531
|
+
#
|
532
|
+
# !!!ruby
|
533
|
+
# require 'yard'
|
534
|
+
# YARD::Registry.load!.all.each do |o|
|
535
|
+
# puts o.tag(:todo).text if o.tag(:todo)
|
536
|
+
# end
|
537
|
+
#
|
538
|
+
# @example
|
539
|
+
# # @todo Add support for Jabberwocky service.
|
540
|
+
# # There is an open source Jabberwocky library available
|
541
|
+
# # at http://jbrwcky.org that can be easily integrated.
|
542
|
+
# class Wonderlander; end
|
543
|
+
# @see tag:note
|
544
|
+
define_tag "Todo Item", :todo
|
545
|
+
|
546
|
+
# Lists the version of a class, module or method. This is
|
547
|
+
# similar to a library version, but at finer granularity.
|
548
|
+
# In some cases, version of specific modules, classes, methods
|
549
|
+
# or generalized components might change independently between
|
550
|
+
# releases. A version tag is used to infer the API compatibility
|
551
|
+
# of a specific object.
|
552
|
+
#
|
553
|
+
# @example
|
554
|
+
# # The public REST API for http://jbrwcky.org
|
555
|
+
# # @version 2.0
|
556
|
+
# class JabberwockyAPI; end
|
557
|
+
define_tag "Version", :version
|
558
|
+
|
559
|
+
# Describes what a method might yield to a given block.
|
560
|
+
# The types specifier list should not list types, but names
|
561
|
+
# of the parameters yielded to the block. If you define
|
562
|
+
# parameters with +@yieldparam+, you do not need to define
|
563
|
+
# the parameters in the type specification of +@yield+ as
|
564
|
+
# well.
|
565
|
+
#
|
566
|
+
# @example
|
567
|
+
# # For a block {|a,b,c| ... }
|
568
|
+
# # @yield [a, b, c] Gives 3 random numbers to the block
|
569
|
+
# def provide3values(&block) yield(42, 42, 42) end
|
570
|
+
# @see tag:yieldparam
|
571
|
+
# @see tag:yieldreturn
|
572
|
+
# @yard.signature [parameters] description
|
573
|
+
define_tag "Yields", :yield, :with_types
|
574
|
+
|
575
|
+
# Defines a parameter yielded by a block. If you define the
|
576
|
+
# parameters with +@yieldparam+, you do not need to define
|
577
|
+
# them via +@yield+ as well.
|
578
|
+
#
|
579
|
+
# @example
|
580
|
+
# # @yieldparam [String] name the name that is yielded
|
581
|
+
# def with_name(name) yield(name) end
|
582
|
+
define_tag "Yield Parameters", :yieldparam, :with_types_and_name
|
583
|
+
|
584
|
+
# Documents the value and type that the block is expected
|
585
|
+
# to return to the method.
|
586
|
+
#
|
587
|
+
# @example
|
588
|
+
# # @yieldreturn [Fixnum] the number to add 5 to.
|
589
|
+
# def add5_block(&block) 5 + yield end
|
590
|
+
# @see tag:return
|
591
|
+
define_tag "Yield Returns", :yieldreturn, :with_types
|
592
|
+
|
593
|
+
# @yard.signature [r | w | rw] attribute_name
|
594
|
+
# Indented attribute docstring
|
595
|
+
define_directive :attribute, :with_types_and_title, AttributeDirective
|
596
|
+
|
597
|
+
# @yard.signature
|
598
|
+
define_directive :endgroup, EndGroupDirective
|
599
|
+
|
600
|
+
define_directive :group, GroupDirective
|
601
|
+
|
602
|
+
# @yard.signature [attach | new] optional_name
|
603
|
+
# Optional macro expansion data
|
604
|
+
define_directive :macro, :with_types_and_title, MacroDirective
|
605
|
+
|
606
|
+
# @yard.signature method_signature(parameters)
|
607
|
+
# Indented method docstring
|
608
|
+
define_directive :method, :with_title_and_text, MethodDirective
|
609
|
+
|
610
|
+
# @yard.signature [language] code
|
611
|
+
define_directive :parse, :with_types, ParseDirective
|
612
|
+
|
613
|
+
# Sets the scope of a DSL method. Only applicable to DSL method
|
614
|
+
# calls. Acceptable values are 'class' or 'instance'
|
615
|
+
# @yard.signature class | instance
|
616
|
+
define_directive :scope, ScopeDirective
|
617
|
+
|
618
|
+
# Sets the visibility of a DSL method. Only applicable to
|
619
|
+
# DSL method calls. Acceptable values are public, protected, or private.
|
620
|
+
# @yard.signature public | protected | private
|
621
|
+
define_directive :visibility, VisibilityDirective
|
622
|
+
|
623
|
+
self.visible_tags = [:abstract, :deprecated, :note, :todo, :example, :overload,
|
624
|
+
:param, :option, :yield, :yieldparam, :yieldreturn, :return, :raise,
|
625
|
+
:see, :author, :since, :version]
|
626
|
+
|
627
|
+
self.transitive_tags = [:since, :api]
|
628
|
+
end
|
629
|
+
end
|
630
|
+
end
|