yard-api 0.1.8 → 0.1.10
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.
- checksums.yaml +4 -4
- data/README.md +20 -0
- data/config/yard_api.yml +15 -1
- data/lib/yard-api/options.rb +2 -0
- data/lib/yard-api/tags/argument_tag.rb +20 -1
- data/lib/yard-api/version.rb +1 -1
- data/spec/tags/argument_spec.rb +41 -1
- data/templates/api/fulldoc/html/js/highlight.zip +0 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2f894b7c9e0efdee454a068de0105e061b713784
|
4
|
+
data.tar.gz: a5eb169d8372bcea684866395a2a4ecddda65385
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 297b3d21420a0a60052d77f4d2748ed252e32298e78b3e87d2b7f13f6229efe389483b52bc4f309399b87eb5b816befe0f91c7be4fa479aa81f383890b453479
|
7
|
+
data.tar.gz: fea346e1cee3d55253920f2fba306f797a5a86c41e74418e42958ace2d96dd2269499808df1f345080716f002ee4afd8816c93686cec1b9235e1d1459e9d7cc0
|
data/README.md
CHANGED
@@ -8,6 +8,22 @@ TODO
|
|
8
8
|
|
9
9
|
TODO
|
10
10
|
|
11
|
+
### Compatibility options
|
12
|
+
|
13
|
+
#### `@argument` tags with names specified before types
|
14
|
+
|
15
|
+
For tags that have a type and a name such as the YARD `@attr` tag, or the yard-api `@argument` tag, the "correct" syntax is to specify the types *before* the name. For example:
|
16
|
+
|
17
|
+
```ruby
|
18
|
+
# @argument [String] name
|
19
|
+
# This is compliant with YARD syntax.
|
20
|
+
#
|
21
|
+
# @argument name [String]
|
22
|
+
# This is not compliant with YARD syntax.
|
23
|
+
```
|
24
|
+
|
25
|
+
If your project already uses the (incorrect) second syntax and you would like to keep things that way, then you can use the compatibility option `leading_argument_name_fix` to have yard-api correctify this and understand both flavors.
|
26
|
+
|
11
27
|
## Configuration
|
12
28
|
|
13
29
|
`yard-api` will look for a file in `config/yard_api.yml` in the Rails root for customizations. Configuration fields not specified in that file will be filled with the default values found in [config/yard_api.yml](https://github.com/amireh/yard-api/blob/master/config/yard_api.yml).
|
@@ -20,6 +36,10 @@ Read that file to view all the available options.
|
|
20
36
|
|
21
37
|
## Changelog
|
22
38
|
|
39
|
+
**0.1.7**
|
40
|
+
|
41
|
+
- new compatibility option `leading_argument_name_fix`
|
42
|
+
|
23
43
|
**15/9/2014**
|
24
44
|
|
25
45
|
- `@argument` tags can now be formatted in a table by setting the `tabular_arguments` option to true
|
data/config/yard_api.yml
CHANGED
@@ -83,4 +83,18 @@ sidebar_width: 240
|
|
83
83
|
content_width: "fluid"
|
84
84
|
|
85
85
|
# Whitespace between the Sidebar and the content, in pixels.
|
86
|
-
spacer: 20
|
86
|
+
spacer: 20
|
87
|
+
|
88
|
+
# Compatibility option.
|
89
|
+
#
|
90
|
+
# If your project (mis)uses the @argument tag to specify the name before the
|
91
|
+
# types, e.g `@argument name [String]`, then turn this on and yard-api will
|
92
|
+
# make these docstrings compliant with YARD's @attr tag (or any tag with a name
|
93
|
+
# and a type, really) which is what @argument uses as its back-end tag.
|
94
|
+
#
|
95
|
+
# The "right" thing to do is to use the correct YARD syntax:
|
96
|
+
#
|
97
|
+
# @argument [Type specifier] name_specifier
|
98
|
+
#
|
99
|
+
# But that may not be viable in very large, existing projects.
|
100
|
+
leading_argument_name_fix: false
|
data/lib/yard-api/options.rb
CHANGED
@@ -4,6 +4,7 @@ module YARD::APIPlugin::Tags
|
|
4
4
|
class ArgumentTag < YARD::Tags::Tag
|
5
5
|
attr_reader :accepted_values, :is_required
|
6
6
|
|
7
|
+
RE_NAME = /^([\S]+)/
|
7
8
|
RE_ARRAY_LITERAL = /\[[^\]]+\]/
|
8
9
|
RE_ARRAY_TYPE = /^#{RE_ARRAY_LITERAL}$/
|
9
10
|
RE_ACCEPTED_VALUES_PREFIXES = /
|
@@ -16,8 +17,26 @@ module YARD::APIPlugin::Tags
|
|
16
17
|
/mx
|
17
18
|
|
18
19
|
def initialize(name, buf)
|
20
|
+
name = nil
|
21
|
+
|
22
|
+
# If the name specifier is written before the types and contains brackets,
|
23
|
+
# YARD will not properly parse the attributes (it doesn't even say that it
|
24
|
+
# supports this syntax so), something like this:
|
25
|
+
#
|
26
|
+
# @argument shirt[size] [String]
|
27
|
+
#
|
28
|
+
# We convert the name to use underscores instead and YARD does its magic!
|
29
|
+
# Once the tag is parsed, we'll use the original name.
|
30
|
+
#
|
31
|
+
# @since 0.1.7
|
32
|
+
if buf[0] != '[' && YARD::APIPlugin.options.leading_argument_name_fix
|
33
|
+
arg_name = buf.match(RE_NAME).captures.first
|
34
|
+
buf.sub!(arg_name, arg_name.gsub(/\W/, '_'))
|
35
|
+
name = arg_name
|
36
|
+
end
|
37
|
+
|
19
38
|
YARD::Tags::Library.instance.tag_create(:attr, buf).tap do |tag|
|
20
|
-
super(:argument, tag.text, tag.types, tag.name)
|
39
|
+
super(:argument, tag.text, tag.types, name || tag.name)
|
21
40
|
|
22
41
|
@is_required = parse_is_required(@types)
|
23
42
|
@accepted_values = parse_accepted_values(@types, @text)
|
data/lib/yard-api/version.rb
CHANGED
data/spec/tags/argument_spec.rb
CHANGED
@@ -16,6 +16,7 @@ describe YARD::APIPlugin::Tags::ArgumentTag do
|
|
16
16
|
end
|
17
17
|
|
18
18
|
it 'should work like an @attr tag' do
|
19
|
+
ENV['DO'] = '1'
|
19
20
|
populate <<-'eof'
|
20
21
|
# @argument [String] name
|
21
22
|
# Your full name.
|
@@ -30,6 +31,46 @@ describe YARD::APIPlugin::Tags::ArgumentTag do
|
|
30
31
|
expect(tag.types).to eq ['String']
|
31
32
|
end
|
32
33
|
|
34
|
+
describe 'option: leading_argument_name_fix' do
|
35
|
+
it 'should work with type and name specifiers swapped "@argument name [String]"' do
|
36
|
+
set_option(:leading_argument_name_fix, true)
|
37
|
+
|
38
|
+
populate <<-'eof'
|
39
|
+
# @argument name [String]
|
40
|
+
# Your full name.
|
41
|
+
#
|
42
|
+
# @argument shirt_size [String, ["S", "M", "L"]]
|
43
|
+
# Size of the shirt you wear.
|
44
|
+
#
|
45
|
+
# @argument shirt[size] [String, ["S", "M", "L"]]
|
46
|
+
# Size of the shirt you wear.
|
47
|
+
#
|
48
|
+
def signup
|
49
|
+
end
|
50
|
+
eof
|
51
|
+
|
52
|
+
find_tag(:signup, :argument, 0).tap do |tag|
|
53
|
+
expect(tag.name).to eq 'name'
|
54
|
+
expect(tag.text).to eq 'Your full name.'
|
55
|
+
expect(tag.types).to eq ['String']
|
56
|
+
end
|
57
|
+
|
58
|
+
find_tag(:signup, :argument, 1).tap do |tag|
|
59
|
+
expect(tag.name).to eq 'shirt_size'
|
60
|
+
expect(tag.text).to eq 'Size of the shirt you wear.'
|
61
|
+
expect(tag.types).to eq ['String']
|
62
|
+
expect(tag.accepted_values).to eq %w[ S M L ]
|
63
|
+
end
|
64
|
+
|
65
|
+
find_tag(:signup, :argument, 2).tap do |tag|
|
66
|
+
expect(tag.name).to eq 'shirt[size]'
|
67
|
+
expect(tag.text).to eq 'Size of the shirt you wear.'
|
68
|
+
expect(tag.types).to eq ['String']
|
69
|
+
expect(tag.accepted_values).to eq %w[ S M L ]
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
33
74
|
describe '#is_required' do
|
34
75
|
it 'should default to whatever Options.strict_arguments is set to' do
|
35
76
|
set_option(:strict_arguments, false)
|
@@ -124,6 +165,5 @@ describe YARD::APIPlugin::Tags::ArgumentTag do
|
|
124
165
|
|
125
166
|
expect(find_tag(:order_shirt, :argument).accepted_values).to eq(%w[S M L XL])
|
126
167
|
end
|
127
|
-
|
128
168
|
end
|
129
169
|
end
|
Binary file
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yard-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ahmad Amireh
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-09-
|
11
|
+
date: 2014-09-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: yard
|
@@ -97,6 +97,7 @@ files:
|
|
97
97
|
- templates/api/docstring/html/text.erb
|
98
98
|
- templates/api/fulldoc/html/css/common.css
|
99
99
|
- templates/api/fulldoc/html/css/highlight.css
|
100
|
+
- templates/api/fulldoc/html/js/highlight.zip
|
100
101
|
- templates/api/fulldoc/html/js/highlight/CHANGES.md
|
101
102
|
- templates/api/fulldoc/html/js/highlight/LICENSE
|
102
103
|
- templates/api/fulldoc/html/js/highlight/README.md
|