yard-rails_plugin 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 4ee5828356df79f9af3841f7af240528c7492e282006ea6aadd898e722e5fc51
4
+ data.tar.gz: 233988e9b1e65313f07e71f7883cd3a95e054f7b9eca51e108d16945d29ff62f
5
+ SHA512:
6
+ metadata.gz: 5259b1ea921d2edf76559a0e35d1d984361db8ccca868200490bafd057d16e419b1f25df3baf663db311396cc4abeb26437343458ec51b7d17ac597353de7c51
7
+ data.tar.gz: 047d79b8493048018b46f92a40223d9a24734ec15331b38a83b7672b9a0d2bc634fa6396aff1adb24e075af5b5436f8d0adb3875de891ab5f1cc87c1e9ab5a2e
@@ -0,0 +1,47 @@
1
+ name: Ruby Gem
2
+
3
+ on:
4
+ push:
5
+ branches: [ "release" ]
6
+ pull_request:
7
+ branches: [ "release" ]
8
+
9
+ jobs:
10
+ build:
11
+ name: Build + Publish
12
+ runs-on: ubuntu-latest
13
+ permissions:
14
+ contents: read
15
+ packages: write
16
+
17
+ steps:
18
+ - uses: actions/checkout@v4
19
+ - name: Set up Ruby 3.3
20
+ # To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
21
+ # change this to (see https://github.com/ruby/setup-ruby#versioning):
22
+ uses: ruby/setup-ruby@v1
23
+ with:
24
+ ruby-version: 3.3.0
25
+
26
+ - name: Publish to GPR
27
+ run: |
28
+ mkdir -p $HOME/.gem
29
+ touch $HOME/.gem/credentials
30
+ chmod 0600 $HOME/.gem/credentials
31
+ printf -- "---\n:github: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
32
+ gem build *.gemspec
33
+ gem push --KEY github --host https://rubygems.pkg.github.com/${OWNER} *.gem
34
+ env:
35
+ GEM_HOST_API_KEY: "Bearer ${{secrets.GITHUB_TOKEN}}"
36
+ OWNER: ${{ github.repository_owner }}
37
+
38
+ - name: Publish to RubyGems
39
+ run: |
40
+ mkdir -p $HOME/.gem
41
+ touch $HOME/.gem/credentials
42
+ chmod 0600 $HOME/.gem/credentials
43
+ printf -- "---\n:rubygems_api_key: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
44
+ gem build *.gemspec
45
+ gem push *.gem
46
+ env:
47
+ GEM_HOST_API_KEY: "${{secrets.RUBYGEMS_AUTH_TOKEN}}"
@@ -0,0 +1,37 @@
1
+ # This workflow uses actions that are not certified by GitHub.
2
+ # They are provided by a third party and are governed by
3
+ # separate terms of service, privacy policy, and support
4
+ # documentation.
5
+ # This workflow will download a prebuilt Ruby version, install dependencies, and run tests with Rake
6
+ # For more information, see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
7
+
8
+ name: Ruby
9
+
10
+ on:
11
+ push:
12
+ branches: [ "main" ]
13
+ pull_request:
14
+ branches: [ "main" ]
15
+
16
+ permissions:
17
+ contents: read
18
+
19
+ jobs:
20
+ test:
21
+
22
+ runs-on: ubuntu-latest
23
+ strategy:
24
+ matrix:
25
+ ruby-version: ['3.3']
26
+
27
+ steps:
28
+ - uses: actions/checkout@v4
29
+ - name: Set up Ruby
30
+ # To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
31
+ # change this to (see https://github.com/ruby/setup-ruby#versioning):
32
+ uses: ruby/setup-ruby@v1 # v1.146.0
33
+ with:
34
+ ruby-version: ${{ matrix.ruby-version }}
35
+ bundler-cache: true # runs 'bundle install' and caches installed gems automatically
36
+ - name: Run tests
37
+ run: bundle exec rake
data/.gitignore ADDED
@@ -0,0 +1,21 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ /.config
5
+ /coverage/
6
+ /InstalledFiles
7
+ /pkg/
8
+ /spec/reports/
9
+ /spec/examples.txt
10
+ /test/tmp/
11
+ /test/version_tmp/
12
+ /tmp/
13
+ /.yardoc/
14
+ Gemfile.lock
15
+ /_yardoc/
16
+ /doc/
17
+ /rdoc/
18
+ /.bundle/
19
+ /vendor/bundle
20
+ /lib/bundler/man/
21
+ .rvmrc
data/.ruby-gemset ADDED
@@ -0,0 +1 @@
1
+ yard-rails_plugin
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 3.3.0
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ # Specify your gem's dependencies in yard-rails-plugin.gemspec
6
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Meter-reader
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,43 @@
1
+ # Yard::Rails::Plugin
2
+
3
+ This plugin for [Yard](http://yardoc.org) permits to generate the documentation about a [Rails](http://rubyonrails.org) project.
4
+
5
+ This means to handle in the correct way things such **models**, **controllers**, **routes** and so on.
6
+
7
+ At now this plugin manages:
8
+
9
+ - Routes
10
+ - creates a summary file
11
+ - adds to each controller and action its routes
12
+ - Controller Params
13
+ - adds to each action a list of params taken
14
+
15
+ You are more than invited to contribute!
16
+
17
+ ## Installation
18
+
19
+ For now this gem is available only through github so add this line to your application's Gemfile:
20
+
21
+ ```bash
22
+ gem 'yard-rails_plugin'
23
+ ```
24
+
25
+ Execute:
26
+
27
+ ```bash
28
+ bundle
29
+ ```
30
+
31
+ Then edit the file ```.yardopts``` with
32
+
33
+ ```ruby
34
+ "{lib,app}/**/*.rb" --plugin rails-plugin - tmp/routes.html
35
+ ```
36
+
37
+ ## Usage
38
+
39
+ Now you can execure yard doc with
40
+
41
+ ```bash
42
+ bundle exec yard
43
+ ```
data/Rakefile ADDED
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/gem_tasks'
4
+ require 'rake/testtask'
5
+
6
+ Rake::TestTask.new do |t|
7
+ t.libs << 'test'
8
+ t.test_files = FileList['test/**/test*.rb']
9
+ t.verbose = true
10
+ end
11
+
12
+ task default: :test
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module YARD
4
+ module Rails
5
+ module Plugin
6
+ # Handles Rails controller parameters
7
+ class ControllerParamsHandler < YARD::Handlers::Ruby::Base
8
+ handles(/params\[(:|')\w+'?\]/)
9
+ def process
10
+ return unless owner.is_a?(YARD::CodeObjects::MethodObject)
11
+
12
+ op = owner.parent
13
+ return unless op.is_a?(YARD::CodeObjects::ClassObject) || op.name.to_s[/Controller/]
14
+
15
+ (owner[:params] ||= []) << statement.source.match(/params\[((:|')\w+'?)\]/)[1]
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,112 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'erb'
4
+
5
+ module YARD
6
+ module Rails
7
+ module Plugin
8
+ # Handles Rails's route documentations
9
+ class Routes
10
+ # rubocop:disable Metrics/AbcSize
11
+ # rubocop:disable Metrics/MethodLength
12
+ def initialize
13
+ puts '[rails-plugin] Analyzing Routes...'
14
+ @routes = load_routes.collect do |route|
15
+ next if route[:path] =~ '/rails/info/properties|^/assets'
16
+
17
+ reqs = route.requirements.dup
18
+
19
+ return { name: route.name.to_s,
20
+ verb: route.verb.to_s,
21
+ path: route.path.spec.to_s,
22
+ action: reqs[:action],
23
+ controller: get_controller(reqs),
24
+ rack_app: get_rack_app(route),
25
+ constraints: get_constraints(reqs) }
26
+ end
27
+ end
28
+
29
+ def generate_routes_description_file(filename)
30
+ template = %q(
31
+ <html>
32
+ <head></head>
33
+ <body>
34
+ <h1>Routes</h1>
35
+ <table>
36
+ <tr style='background: #EAF0FF; font-weight: bold; line-height: 28px; text-align: left'>
37
+ <th>Rails Method</th>
38
+ <th>Verb</th>
39
+ <th>Endpoint</th>
40
+ <th>Destination</th>
41
+ </tr>
42
+ <% i = 0;
43
+ @routes.each do |r|
44
+ odd_or_even = (i.even? ? 'even' : 'odd')
45
+ destination = if r[:rack_app]
46
+ "<pre>#{r[:rack_app].inspect} #{r[:constraints]}</pre>"
47
+ else
48
+ "{#{r[:controller]} #{r[:controller]}}##{r[:action]} #{r[:constraints]}"
49
+ end
50
+ endpoint = r[:path].gsub(/(:|\*)\w+/) do |m|
51
+ "<span style='font-family: monospace; color: green'>#{m}</span>"
52
+ end
53
+ i += 1
54
+ %>
55
+ <tr class='#{odd_or_even}'>
56
+ <td><%= r[:name]%></td>
57
+ <td><%= r[:verb]%></td>
58
+ <td><%= endpoint%></td>
59
+ <td><%= destination%></td>
60
+ </tr>"
61
+ <% end %>
62
+ </table>
63
+ </body>
64
+ </html>').gsub(/^ /, '')
65
+ erb = ERB.new(template, trim_mode: '%<>')
66
+
67
+ File.write(File.join(Dir.pwd, filename), erb.result)
68
+ end
69
+ # rubocop:enable Metrics/MethodLength
70
+
71
+ def enrich_controllers
72
+ @routes.each do |r|
73
+ next unless r[:controller]
74
+
75
+ node = YARD::Registry.resolve(nil, r[:controller], true)
76
+ (node[:routes] ||= []) << r
77
+
78
+ next unless r[:action]
79
+
80
+ node = YARD::Registry.resolve(nil, "#{r[:controller]}##{r[:action]}", true)
81
+ (node[:routes] ||= []) << r
82
+ end
83
+ end
84
+ end
85
+
86
+ private
87
+
88
+ def load_routes
89
+ ::Rails.application.reload_routes!
90
+ ::Rails.application.routes.routes
91
+ end
92
+
93
+ def get_controller(reqs)
94
+ return unless reqs[:controller]
95
+
96
+ "#{reqs[:controller].upcase.gsub('_', '').gsub('/', '::')}_Controller"
97
+ end
98
+
99
+ def get_constraints(reqs)
100
+ return unless reqs.except(:controller, :action).present?
101
+
102
+ reqs.except(:controller, :action).inspect
103
+ end
104
+
105
+ def get_rack_app(route)
106
+ return unless route.app.is_a?('ActionDispatch::Routing')
107
+
108
+ route.app.inspect
109
+ end
110
+ end
111
+ end
112
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module YARD
4
+ module Rails
5
+ module Plugin
6
+ VERSION = '0.0.3'
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'yard-rails_plugin/version'
4
+ require 'yard-rails_plugin/routes'
5
+ require 'yard-rails_plugin/controller_params_handler'
6
+
7
+ YARD::Templates::Engine.register_template_path "#{File.dirname(__FILE__)}/../templates"
8
+
9
+ # After Source Parsing
10
+ def load_rails_environment(env)
11
+ puts "[rails-plugin] Loading Rails environment (#{env})..."
12
+ ENV['RAILS_ENV'] = env
13
+ require File.join(Dir.pwd, 'config/environment')
14
+ end
15
+
16
+ YARD::Parser::SourceParser.after_parse_list do
17
+ load_rails_environment 'development'
18
+ routes = YARD::Rails::Plugin::Routes.new
19
+ routes.generate_routes_description_file 'tmp/routes.html'
20
+ routes.enrich_controllers
21
+ end
data/techstack.md ADDED
@@ -0,0 +1,47 @@
1
+ <!--
2
+ &lt;--- Readme.md Snippet without images Start ---&gt;
3
+ ## Tech Stack
4
+ Meter-Reader/yard_rails_plugin is built on the following main stack:
5
+
6
+
7
+
8
+ Full tech stack [here](/techstack.md)
9
+
10
+ &lt;--- Readme.md Snippet without images End ---&gt;
11
+
12
+ &lt;--- Readme.md Snippet with images Start ---&gt;
13
+ ## Tech Stack
14
+ Meter-Reader/yard_rails_plugin is built on the following main stack:
15
+
16
+
17
+
18
+ Full tech stack [here](/techstack.md)
19
+
20
+ &lt;--- Readme.md Snippet with images End ---&gt;
21
+ -->
22
+ <div align="center">
23
+
24
+ # Tech Stack File
25
+ ![](https://img.stackshare.io/repo.svg "repo") [Meter-Reader/yard_rails_plugin](https://github.com/Meter-Reader/yard_rails_plugin)![](https://img.stackshare.io/public_badge.svg "public")
26
+ <br/><br/>
27
+ |1<br/>Tools used|04/26/24 <br/>Report generated|
28
+ |------|------|
29
+ </div>
30
+
31
+ ## <img src='https://img.stackshare.io/devops.svg'/> DevOps (1)
32
+ <table><tr>
33
+ <td align='center'>
34
+ <img width='36' height='36' src='https://img.stackshare.io/service/1046/git.png' alt='Git'>
35
+ <br>
36
+ <sub><a href="http://git-scm.com/">Git</a></sub>
37
+ <br>
38
+ <sub></sub>
39
+ </td>
40
+
41
+ </tr>
42
+ </table>
43
+
44
+ <br/>
45
+ <div align='center'>
46
+
47
+ Generated via [Stack File](https://github.com/marketplace/stack-file)
data/techstack.yml ADDED
@@ -0,0 +1,20 @@
1
+ repo_name: Meter-Reader/yard_rails_plugin
2
+ report_id: e9859831d9572fbeb9866f8a46387bd2
3
+ version: 0.1
4
+ repo_type: Public
5
+ timestamp: '2024-04-26T13:35:54+00:00'
6
+ requested_by: Antronin
7
+ provider: github
8
+ branch: main
9
+ detected_tools_count: 1
10
+ tools:
11
+ - name: Git
12
+ description: Fast, scalable, distributed revision control system
13
+ website_url: http://git-scm.com/
14
+ open_source: true
15
+ hosted_saas: false
16
+ category: Build, Test, Deploy
17
+ sub_category: Version Control System
18
+ image_url: https://img.stackshare.io/service/1046/git.png
19
+ detection_source_url: https://github.com/Meter-Reader/yard_rails_plugin
20
+ detection_source: Repo Metadata
@@ -0,0 +1,13 @@
1
+ <% if object[:routes] %>
2
+ <div class="tags">
3
+ <h2>Routes</h2>
4
+ <ul class="routes method_details_list">
5
+ <% for r in object[:routes] %>
6
+ <li>[<%= r[:verb] %>] <%= r[:path].gsub(/(:|\*)\w+/) { |m| "<span style='font-family: monospace; color: green'>#{m}</span>"} %>
7
+ &raquo; <%= r[:rack_app] ? "<pre>#{r[:rack_app].inspect}</pre>" : link_object(P("#{r[:controller]}##{r[:action]}"), '#' + r[:action]) %>
8
+ <%= (r[:name] && !r[:name].empty? ? "<span style='font-size: 85%'>(Rails Method: #{r[:name]})</span>" : '') %>
9
+ </li>
10
+ <% end %>
11
+ </ul>
12
+ </div>
13
+ <% end %>
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ def init
4
+ super
5
+ sections.place(:routes).before(:children)
6
+ end
@@ -0,0 +1,10 @@
1
+ <% if object[:params] %>
2
+ <div class="tags">
3
+ <h3>Params:</h3>
4
+ <ul class="params">
5
+ <% for p in object[:params] %>
6
+ <li>params[<%= link_object(P(p.gsub(':','').gsub("'",'').capitalize), p )%>]</li>
7
+ <% end %>
8
+ </ul>
9
+ </div>
10
+ <% end %>
@@ -0,0 +1,12 @@
1
+ <% if object[:routes] %>
2
+ <div class="tags">
3
+ <h3>Routes:</h3>
4
+ <ul class="routes">
5
+ <% for r in object[:routes] %>
6
+ <li>[<%= r[:verb] %>] <%= r[:path].gsub(/(:|\*)\w+/) { |m| "<span style='font-family: monospace; color: green'>#{m}</span>"} %>
7
+ <%= (r[:name] && !r[:name].empty? ? "<span style='font-size: 85%'>(Rails Method: #{r[:name]})</span>" : '') %>
8
+ </li>
9
+ <% end %>
10
+ </ul>
11
+ </div>
12
+ <% end %>
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ def init
4
+ super
5
+ sections.last.place(:routes).before(:source)
6
+ sections.last.place(:params).after(:routes)
7
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'English'
4
+ require File.expand_path('lib/yard-rails_plugin/version', __dir__)
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.required_ruby_version = '~> 3.3'
8
+ gem.authors = ['Peter Nagy']
9
+ gem.email = ['peter@meter-reader.com']
10
+ gem.summary = 'YARD plugin to document a Rails project'
11
+ gem.homepage = 'https://github.com/Meter-reader/yard-rails_plugin'
12
+ gem.licenses = ['MIT']
13
+
14
+ gem.files = `git ls-files`.split($OUTPUT_RECORD_SEPARATOR)
15
+ gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) }
16
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
17
+ gem.name = 'yard-rails_plugin'
18
+ gem.require_paths = ['lib']
19
+ gem.version = YARD::Rails::Plugin::VERSION
20
+
21
+ gem.add_runtime_dependency 'yard', '~> 0.7', '> 0.7'
22
+ gem.add_development_dependency 'rake', '~> 13.2'
23
+ gem.add_development_dependency 'rubocop', '~> 1.63'
24
+ end
metadata ADDED
@@ -0,0 +1,112 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: yard-rails_plugin
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
5
+ platform: ruby
6
+ authors:
7
+ - Peter Nagy
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2024-05-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: yard
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.7'
20
+ - - ">"
21
+ - !ruby/object:Gem::Version
22
+ version: '0.7'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '0.7'
30
+ - - ">"
31
+ - !ruby/object:Gem::Version
32
+ version: '0.7'
33
+ - !ruby/object:Gem::Dependency
34
+ name: rake
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '13.2'
40
+ type: :development
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '13.2'
47
+ - !ruby/object:Gem::Dependency
48
+ name: rubocop
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '1.63'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '1.63'
61
+ description:
62
+ email:
63
+ - peter@meter-reader.com
64
+ executables: []
65
+ extensions: []
66
+ extra_rdoc_files: []
67
+ files:
68
+ - ".github/workflows/gem-push.yml"
69
+ - ".github/workflows/ruby.yml"
70
+ - ".gitignore"
71
+ - ".ruby-gemset"
72
+ - ".ruby-version"
73
+ - Gemfile
74
+ - LICENSE
75
+ - README.md
76
+ - Rakefile
77
+ - lib/yard-rails_plugin.rb
78
+ - lib/yard-rails_plugin/controller_params_handler.rb
79
+ - lib/yard-rails_plugin/routes.rb
80
+ - lib/yard-rails_plugin/version.rb
81
+ - techstack.md
82
+ - techstack.yml
83
+ - templates/default/class/html/routes.erb
84
+ - templates/default/class/setup.rb
85
+ - templates/default/method_details/html/params.erb
86
+ - templates/default/method_details/html/routes.erb
87
+ - templates/default/method_details/setup.rb
88
+ - yard-rails-plugin.gemspec
89
+ homepage: https://github.com/Meter-reader/yard-rails_plugin
90
+ licenses:
91
+ - MIT
92
+ metadata: {}
93
+ post_install_message:
94
+ rdoc_options: []
95
+ require_paths:
96
+ - lib
97
+ required_ruby_version: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - "~>"
100
+ - !ruby/object:Gem::Version
101
+ version: '3.3'
102
+ required_rubygems_version: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ version: '0'
107
+ requirements: []
108
+ rubygems_version: 3.5.3
109
+ signing_key:
110
+ specification_version: 4
111
+ summary: YARD plugin to document a Rails project
112
+ test_files: []