routes2spec 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.rspec +3 -0
- data/.rubocop.yml +64 -0
- data/CHANGELOG.md +5 -0
- data/Gemfile +13 -0
- data/LICENSE.txt +21 -0
- data/README.md +60 -0
- data/Rakefile +12 -0
- data/exe/routes2spec +5 -0
- data/lib/routes2spec/binstubs/routes2spec +8 -0
- data/lib/routes2spec/command.rb +112 -0
- data/lib/routes2spec/logging.rb +22 -0
- data/lib/routes2spec/request_spec_formatter.rb +107 -0
- data/lib/routes2spec/templates/request_spec.rb.erb +12 -0
- data/lib/routes2spec/templates/routing_spec.rb.erb +11 -0
- data/lib/routes2spec/version.rb +5 -0
- data/lib/routes2spec.rb +14 -0
- data/routes2spec.gemspec +38 -0
- data/sig/routes2spec.rbs +4 -0
- metadata +79 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: fe60dcfbe04e4fb8eab34486d415fc35f96b4087d7cc3d526b2764b85e84c22b
|
4
|
+
data.tar.gz: 91d6bbbb4e835fddf3ee82b66e2c58e0607cc75c468d013fb430ebb61f8027a7
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 6a6ee2e33e390e4d70f70c50388e071381a56f96623ddfd47c1d0bb76749a9ce739ef048ad914bb65a96da3b05c7ac7a227f1b77e4363a5e85fda3c270db4960
|
7
|
+
data.tar.gz: f306579044aba45f60890ab6093d5cf807bb0648f154dc3091b7b64c778e1a0f7c270c7319b3078da94f5163874e9fd8954c2c38faeb75487e95bd180029635f
|
data/.rspec
ADDED
data/.rubocop.yml
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
require:
|
2
|
+
- rubocop-rake
|
3
|
+
- rubocop-rspec
|
4
|
+
- rubocop-rubycw
|
5
|
+
|
6
|
+
AllCops:
|
7
|
+
TargetRubyVersion: 2.7
|
8
|
+
NewCops: enable
|
9
|
+
DisplayCopNames: true
|
10
|
+
DisplayStyleGuide: true
|
11
|
+
ExtraDetails: true
|
12
|
+
Exclude:
|
13
|
+
- 'spec/dummy/**/*'
|
14
|
+
- 'spec/tmp/**/*'
|
15
|
+
- 'spec/isolation/abstract_unit.rb'
|
16
|
+
- 'vendor/bundle/**/*'
|
17
|
+
|
18
|
+
Style/ClassAndModuleChildren:
|
19
|
+
Enabled: false
|
20
|
+
|
21
|
+
Style/EmptyMethod:
|
22
|
+
Enabled: false
|
23
|
+
|
24
|
+
Style/Lambda:
|
25
|
+
Enabled: false
|
26
|
+
|
27
|
+
Style/StringLiterals:
|
28
|
+
Enabled: true
|
29
|
+
EnforcedStyle: double_quotes
|
30
|
+
|
31
|
+
Style/StringLiteralsInInterpolation:
|
32
|
+
Enabled: true
|
33
|
+
EnforcedStyle: double_quotes
|
34
|
+
|
35
|
+
Style/TrailingCommaInArrayLiteral:
|
36
|
+
Enabled: false
|
37
|
+
|
38
|
+
Style/TrailingCommaInHashLiteral:
|
39
|
+
Enabled: false
|
40
|
+
|
41
|
+
Layout/LineLength:
|
42
|
+
Max: 120
|
43
|
+
Exclude:
|
44
|
+
- '*.gemspec'
|
45
|
+
|
46
|
+
Layout/SpaceBeforeBlockBraces:
|
47
|
+
Enabled: false
|
48
|
+
|
49
|
+
Metrics/BlockLength:
|
50
|
+
Exclude:
|
51
|
+
- 'spec/**/*'
|
52
|
+
|
53
|
+
Metrics/MethodLength:
|
54
|
+
Max: 15
|
55
|
+
|
56
|
+
# DisabledByDefault for RSpec
|
57
|
+
RSpec:
|
58
|
+
Enabled: false
|
59
|
+
|
60
|
+
RSpec/ContextWording:
|
61
|
+
Enabled: true
|
62
|
+
|
63
|
+
RSpec/VerifiedDoubles:
|
64
|
+
Enabled: true
|
data/CHANGELOG.md
ADDED
data/Gemfile
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
source "https://rubygems.org"
|
4
|
+
|
5
|
+
# Specify your gem's dependencies in routes2spec.gemspec
|
6
|
+
gemspec
|
7
|
+
|
8
|
+
gem "rake", "~> 13.0"
|
9
|
+
gem "rspec", "~> 3.0"
|
10
|
+
gem "rubocop", "~> 1.21", require: false
|
11
|
+
gem "rubocop-rake", require: false
|
12
|
+
gem "rubocop-rspec", require: false
|
13
|
+
gem "rubocop-rubycw", require: false
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2022 shuuuuuny
|
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
|
13
|
+
all 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
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
# Routes2spec
|
2
|
+
|
3
|
+
Generate Request specs and Routing specs of RSpec, from your Rails routes config.
|
4
|
+
It is useful as a test scaffolding.
|
5
|
+
|
6
|
+
## Installation
|
7
|
+
|
8
|
+
Add this line to your application's Gemfile:
|
9
|
+
|
10
|
+
```ruby
|
11
|
+
gem "routes2spec", group: :test
|
12
|
+
```
|
13
|
+
|
14
|
+
And then execute:
|
15
|
+
|
16
|
+
$ bundle install
|
17
|
+
|
18
|
+
## Usage
|
19
|
+
|
20
|
+
This gem depends on the Rails application, so it generates binstubs first.
|
21
|
+
```sh
|
22
|
+
$ bundle exec routes2spec --binstubs
|
23
|
+
# => `bin/routes2spec` will be generated.
|
24
|
+
```
|
25
|
+
|
26
|
+
Then, simply execute the following command to generate the spec files.
|
27
|
+
```sh
|
28
|
+
$ bin/routes2spec
|
29
|
+
```
|
30
|
+
|
31
|
+
See help for other options.
|
32
|
+
```sh
|
33
|
+
$ bin/routes2spec --help
|
34
|
+
Usage:
|
35
|
+
routes2spec [options]
|
36
|
+
|
37
|
+
Options:
|
38
|
+
-h, [--help] # Show this message.
|
39
|
+
-V, [--version] # Show version.
|
40
|
+
[--binstubs] # Generate binstubs.
|
41
|
+
-c, [--controller=CONTROLLER] # Filter by a specific controller, e.g. PostsController or Admin::PostsController.
|
42
|
+
-g, [--grep=GREP] # Grep routes by a specific pattern.
|
43
|
+
[--symbol-status] # Use symbols for http status.
|
44
|
+
[--overwrite] # Overwrite files even if they exist.
|
45
|
+
[--force-overwrite] # Force overwrite files even if they exist.
|
46
|
+
```
|
47
|
+
|
48
|
+
## Development
|
49
|
+
|
50
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
51
|
+
|
52
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
53
|
+
|
54
|
+
## Contributing
|
55
|
+
|
56
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/routes2spec. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/[USERNAME]/routes2spec/blob/main/CODE_OF_CONDUCT.md).
|
57
|
+
|
58
|
+
## License
|
59
|
+
|
60
|
+
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
data/Rakefile
ADDED
data/exe/routes2spec
ADDED
@@ -0,0 +1,112 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rails/command"
|
4
|
+
require_relative "./request_spec_formatter"
|
5
|
+
|
6
|
+
module Routes2spec
|
7
|
+
# Routes2spec::Command class
|
8
|
+
class Command < Rails::Command::Base
|
9
|
+
class_option :help, aliases: "-h", banner: "", desc: "Show this message."
|
10
|
+
class_option :version, aliases: "-V", banner: "", desc: "Show version."
|
11
|
+
|
12
|
+
class_option :binstubs, banner: "", desc: "Generate binstubs."
|
13
|
+
|
14
|
+
class_option :controller, aliases: "-c",
|
15
|
+
desc: "Filter by a specific controller, e.g. PostsController or Admin::PostsController."
|
16
|
+
class_option :grep, aliases: "-g", desc: "Grep routes by a specific pattern."
|
17
|
+
class_option :symbol_status, banner: "", desc: "Use symbols for http status."
|
18
|
+
class_option :overwrite, banner: "", desc: "Overwrite files even if they exist."
|
19
|
+
class_option :force_overwrite, banner: "", desc: "Force overwrite files even if they exist."
|
20
|
+
class_option :pending, banner: "", desc: "Mark examples as pending."
|
21
|
+
|
22
|
+
class << self
|
23
|
+
def executable
|
24
|
+
"routes2spec"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def perform(*)
|
29
|
+
if options.version?
|
30
|
+
say "Routes2spec: #{Routes2spec::VERSION}"
|
31
|
+
exit 0
|
32
|
+
end
|
33
|
+
|
34
|
+
if options.binstubs?
|
35
|
+
make_binstubs
|
36
|
+
exit 0
|
37
|
+
end
|
38
|
+
|
39
|
+
require_application_and_environment!
|
40
|
+
require "action_dispatch/routing/inspector"
|
41
|
+
|
42
|
+
results = inspector.format(formatter, routes_filter)
|
43
|
+
results.each do |result|
|
44
|
+
relative_path = File.join("spec/requests", *result[:namespaces], "#{result[:name].underscore}_spec.rb")
|
45
|
+
writing_file(relative_path, result[:content])
|
46
|
+
|
47
|
+
relative_path = File.join("spec/routing", *result[:namespaces], "#{result[:name].underscore}_spec.rb")
|
48
|
+
writing_file(relative_path, result[:routing_content])
|
49
|
+
end
|
50
|
+
end
|
51
|
+
# https://github.com/rails/rails/blob/v7.0.4/railties/lib/rails/command/base.rb#L144
|
52
|
+
alias_method "routes2spec", "perform"
|
53
|
+
|
54
|
+
private
|
55
|
+
|
56
|
+
def writing_file(relative_path, content)
|
57
|
+
outfile = Rails.root.join(relative_path)
|
58
|
+
FileUtils.mkdir_p(File.dirname(outfile))
|
59
|
+
|
60
|
+
unless File.exist?(outfile)
|
61
|
+
Routes2spec.log "Generating: #{relative_path}"
|
62
|
+
File.write(outfile, content, mode: "w")
|
63
|
+
return
|
64
|
+
end
|
65
|
+
|
66
|
+
if options.force_overwrite?
|
67
|
+
Routes2spec.log "Overwriting: #{relative_path}"
|
68
|
+
File.write(outfile, content, mode: "w")
|
69
|
+
return
|
70
|
+
end
|
71
|
+
|
72
|
+
Routes2spec.log "Already exists: #{relative_path}"
|
73
|
+
|
74
|
+
if options.overwrite? && file_collision(relative_path)
|
75
|
+
say "Overwriting..."
|
76
|
+
File.write(outfile, content, mode: "w")
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def make_binstubs
|
81
|
+
require "fileutils"
|
82
|
+
FileUtils.mkdir_p("bin")
|
83
|
+
outfile = File.expand_path("bin/routes2spec")
|
84
|
+
file_path = File.expand_path(File.join(File.dirname(__FILE__), "binstubs/routes2spec"))
|
85
|
+
content = File.read(file_path)
|
86
|
+
File.write(outfile, content, mode: "w")
|
87
|
+
FileUtils.chmod("+x", outfile)
|
88
|
+
Routes2spec.log "Generated: bin/routes2spec"
|
89
|
+
end
|
90
|
+
|
91
|
+
def inspector
|
92
|
+
ActionDispatch::Routing::RoutesInspector.new(routes)
|
93
|
+
end
|
94
|
+
|
95
|
+
def routes
|
96
|
+
# TODO: support engine routes.
|
97
|
+
Rails.application.routes.routes.reject{ _1.app.engine? || _1.internal }
|
98
|
+
end
|
99
|
+
|
100
|
+
def formatter
|
101
|
+
Routes2spec::RequestSpecFormatter.new(formatter_opts)
|
102
|
+
end
|
103
|
+
|
104
|
+
def routes_filter
|
105
|
+
options.symbolize_keys.slice(:controller, :grep)
|
106
|
+
end
|
107
|
+
|
108
|
+
def formatter_opts
|
109
|
+
options.symbolize_keys.slice(:symbol_status, :pending)
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Routes2spec
|
4
|
+
# @private
|
5
|
+
module Logging
|
6
|
+
def debug?
|
7
|
+
ENV.fetch("ROUTES2SPEC_DEBUG", nil)
|
8
|
+
end
|
9
|
+
|
10
|
+
def log_debug(message)
|
11
|
+
warn("[Routes2spec][debug] #{message}") if debug?
|
12
|
+
end
|
13
|
+
|
14
|
+
def log(message)
|
15
|
+
warn("[Routes2spec] #{message}")
|
16
|
+
end
|
17
|
+
|
18
|
+
def warn_deprecated(message)
|
19
|
+
warn("[Routes2spec] [DEPRECATION] #{message}")
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,107 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Routes2spec
|
4
|
+
# Routes2spec::RequestSpecFormatter class
|
5
|
+
class RequestSpecFormatter
|
6
|
+
STATUS = {
|
7
|
+
get: 200,
|
8
|
+
post: 201,
|
9
|
+
patch: 200,
|
10
|
+
put: 200,
|
11
|
+
delete: 204,
|
12
|
+
}.tap{ _1.default = 200 }.freeze
|
13
|
+
|
14
|
+
SYMBOL_STATUS = {
|
15
|
+
get: ":ok",
|
16
|
+
post: ":created",
|
17
|
+
patch: ":ok",
|
18
|
+
put: ":ok",
|
19
|
+
delete: ":no_content",
|
20
|
+
}.tap{ _1.default = ":ok" }.freeze
|
21
|
+
|
22
|
+
def initialize(opts = {})
|
23
|
+
@results = []
|
24
|
+
@opts = opts
|
25
|
+
end
|
26
|
+
|
27
|
+
def result
|
28
|
+
@results.flatten
|
29
|
+
end
|
30
|
+
|
31
|
+
def section_title(title)
|
32
|
+
end
|
33
|
+
|
34
|
+
def section(routes)
|
35
|
+
routes = routes.select do |r|
|
36
|
+
is_valid = r[:reqs].include?("#") && !r[:reqs].start_with?("#<")
|
37
|
+
Routes2spec.log "Skip. Unsupported reqs! `#{r[:reqs]}`" unless is_valid
|
38
|
+
is_valid
|
39
|
+
end
|
40
|
+
grouped = routes.group_by { |r| r[:reqs].split("#").first }
|
41
|
+
Routes2spec.log_debug "grouped: #{grouped}"
|
42
|
+
@results << grouped.map do |controller, grouped_routes|
|
43
|
+
# TODO: support redirect. ex: {"redirect(301, https://example.com)"=>[{:name=>"example", :verb=>"GET", :path=>"/example(.:format)", :reqs=>"redirect(301, https://example.com)"}]}
|
44
|
+
|
45
|
+
namespaces = controller.split("/")
|
46
|
+
controller_name = namespaces.map(&:camelize).join("::")
|
47
|
+
group_name = namespaces.pop
|
48
|
+
Routes2spec.log_debug "namespaces: #{namespaces}, group_name: #{group_name}, controller_name: #{controller_name}"
|
49
|
+
unless group_name
|
50
|
+
Routes2spec.log "Skip. Invalid controller format! `#{controller}`"
|
51
|
+
next
|
52
|
+
end
|
53
|
+
routes = grouped_routes.map do |r|
|
54
|
+
verb = r[:verb]&.downcase # GET|POST
|
55
|
+
path = r[:path].gsub("(.:format)", "")
|
56
|
+
param_names = path.scan %r{(?<=/:).+?(?=/|\z)}
|
57
|
+
params_str = param_names.map{|name| "#{name}: \"#{name}\"" }.join(", ")
|
58
|
+
path_name = r[:name] || ""
|
59
|
+
path_name = grouped_routes.find{ _1[:path] == r[:path] && !_1[:name].empty? }&.fetch(:name) || "" if path_name.empty?
|
60
|
+
Routes2spec.log_debug "verb: #{verb}, path: #{path}, path_name: #{path_name}"
|
61
|
+
if path_name.empty?
|
62
|
+
Routes2spec.log "Skip. No path name! `#{verb&.upcase} #{path}`"
|
63
|
+
next
|
64
|
+
end
|
65
|
+
unless %w[get post patch put delete].include?(verb)
|
66
|
+
Routes2spec.log "Skip. Unsupported verb! `#{verb&.upcase} #{path}`"
|
67
|
+
next
|
68
|
+
end
|
69
|
+
endpoint, constraints = r[:reqs].split(" ")
|
70
|
+
Routes2spec.log_debug "endpoint: #{endpoint}, constraints: #{constraints}"
|
71
|
+
# TODO: insert constraints to routing spec
|
72
|
+
status = @opts[:symbol_status] ? SYMBOL_STATUS[verb.to_sym] : STATUS[verb.to_sym]
|
73
|
+
r.merge(
|
74
|
+
path: path,
|
75
|
+
path_name: path_name,
|
76
|
+
params_str: params_str,
|
77
|
+
reqs: r[:reqs],
|
78
|
+
endpoint: endpoint,
|
79
|
+
constraints: constraints || "",
|
80
|
+
status: status
|
81
|
+
)
|
82
|
+
end.compact
|
83
|
+
if routes.empty?
|
84
|
+
Routes2spec.log "Skip. Empty routes! `#{controller}`"
|
85
|
+
next
|
86
|
+
end
|
87
|
+
pending = @opts[:pending] || false
|
88
|
+
template_path = File.expand_path(File.join(File.dirname(__FILE__), "templates/request_spec.rb.erb"))
|
89
|
+
content = ERB.new(File.read(template_path)).result(binding)
|
90
|
+
routing_template_path = File.expand_path(File.join(File.dirname(__FILE__), "templates/routing_spec.rb.erb"))
|
91
|
+
routing_content = ERB.new(File.read(routing_template_path)).result(binding)
|
92
|
+
{
|
93
|
+
name: group_name,
|
94
|
+
namespaces: namespaces,
|
95
|
+
content: content,
|
96
|
+
routing_content: routing_content,
|
97
|
+
}
|
98
|
+
end.compact
|
99
|
+
end
|
100
|
+
|
101
|
+
def header(routes)
|
102
|
+
end
|
103
|
+
|
104
|
+
def no_routes(*)
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require "rails_helper"
|
2
|
+
|
3
|
+
RSpec.describe "<%= controller_name %>", type: :request do
|
4
|
+
<% routes.each do |route| %>
|
5
|
+
describe "<%= route[:verb].upcase %> <%= route[:path] %>" do
|
6
|
+
it "works!" do
|
7
|
+
<%= pending ? 'pending "now write some real specs. and remove pending mark."' + "\n " : "" %><%= route[:verb].downcase %> <%= route[:path_name] %>_path<%= route[:params_str].empty? ? "" : "(#{route[:params_str]})" %>
|
8
|
+
expect(response).to have_http_status(<%= route[:status] %>)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
<% end %>
|
12
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require "rails_helper"
|
2
|
+
|
3
|
+
RSpec.describe "<%= controller_name %>", type: :routing do
|
4
|
+
describe "routing" do
|
5
|
+
<% routes.each do |route| %>
|
6
|
+
it "routes to <%= route[:endpoint] %>" do
|
7
|
+
<%= pending ? 'pending "now write some real specs. and remove pending mark."' + "\n " : "" %>expect(<%= route[:verb].downcase %>: "<%= route[:path].delete(":") %>").to route_to("<%= route[:endpoint] %>"<%= route[:params_str].empty? ? "" : ", #{route[:params_str]}" %>)
|
8
|
+
end
|
9
|
+
<% end %>
|
10
|
+
end
|
11
|
+
end
|
data/lib/routes2spec.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "routes2spec/version"
|
4
|
+
require_relative "routes2spec/logging"
|
5
|
+
require_relative "routes2spec/command"
|
6
|
+
|
7
|
+
# Routes2spec module
|
8
|
+
module Routes2spec
|
9
|
+
class Error < StandardError; end
|
10
|
+
|
11
|
+
class << self
|
12
|
+
include Routes2spec::Logging
|
13
|
+
end
|
14
|
+
end
|
data/routes2spec.gemspec
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "lib/routes2spec/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = "routes2spec"
|
7
|
+
spec.version = Routes2spec::VERSION
|
8
|
+
spec.authors = ["shuuuuuny"]
|
9
|
+
spec.email = []
|
10
|
+
|
11
|
+
spec.summary = "routes2spec"
|
12
|
+
spec.description = "routes2spec"
|
13
|
+
spec.homepage = "https://github.com/shuuuuun/routes2spec"
|
14
|
+
spec.license = "MIT"
|
15
|
+
spec.required_ruby_version = ">= 2.7.0"
|
16
|
+
|
17
|
+
spec.metadata["homepage_uri"] = spec.homepage
|
18
|
+
spec.metadata["source_code_uri"] = "https://github.com/shuuuuun/routes2spec"
|
19
|
+
spec.metadata["changelog_uri"] = "https://github.com/shuuuuun/routes2spec/CHANGELOG.md"
|
20
|
+
spec.metadata["rubygems_mfa_required"] = "true"
|
21
|
+
|
22
|
+
# Specify which files should be added to the gem when it is released.
|
23
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
24
|
+
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
25
|
+
`git ls-files -z`.split("\x0").reject do |f|
|
26
|
+
(f == __FILE__) || f.match(%r{\A(?:(?:bin|test|spec|features)/|\.(?:git|travis|circleci)|appveyor)})
|
27
|
+
end
|
28
|
+
end
|
29
|
+
spec.bindir = "exe"
|
30
|
+
spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
|
31
|
+
spec.require_paths = ["lib"]
|
32
|
+
|
33
|
+
spec.add_dependency "rails", ">= 6.0"
|
34
|
+
# spec.add_dependency "rspec", ">= 3.9"
|
35
|
+
|
36
|
+
# For more information and examples about making a new gem, check out our
|
37
|
+
# guide at: https://bundler.io/guides/creating_gem.html
|
38
|
+
end
|
data/sig/routes2spec.rbs
ADDED
metadata
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: routes2spec
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- shuuuuuny
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2022-12-06 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rails
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '6.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '6.0'
|
27
|
+
description: routes2spec
|
28
|
+
email: []
|
29
|
+
executables:
|
30
|
+
- routes2spec
|
31
|
+
extensions: []
|
32
|
+
extra_rdoc_files: []
|
33
|
+
files:
|
34
|
+
- ".rspec"
|
35
|
+
- ".rubocop.yml"
|
36
|
+
- CHANGELOG.md
|
37
|
+
- Gemfile
|
38
|
+
- LICENSE.txt
|
39
|
+
- README.md
|
40
|
+
- Rakefile
|
41
|
+
- exe/routes2spec
|
42
|
+
- lib/routes2spec.rb
|
43
|
+
- lib/routes2spec/binstubs/routes2spec
|
44
|
+
- lib/routes2spec/command.rb
|
45
|
+
- lib/routes2spec/logging.rb
|
46
|
+
- lib/routes2spec/request_spec_formatter.rb
|
47
|
+
- lib/routes2spec/templates/request_spec.rb.erb
|
48
|
+
- lib/routes2spec/templates/routing_spec.rb.erb
|
49
|
+
- lib/routes2spec/version.rb
|
50
|
+
- routes2spec.gemspec
|
51
|
+
- sig/routes2spec.rbs
|
52
|
+
homepage: https://github.com/shuuuuun/routes2spec
|
53
|
+
licenses:
|
54
|
+
- MIT
|
55
|
+
metadata:
|
56
|
+
homepage_uri: https://github.com/shuuuuun/routes2spec
|
57
|
+
source_code_uri: https://github.com/shuuuuun/routes2spec
|
58
|
+
changelog_uri: https://github.com/shuuuuun/routes2spec/CHANGELOG.md
|
59
|
+
rubygems_mfa_required: 'true'
|
60
|
+
post_install_message:
|
61
|
+
rdoc_options: []
|
62
|
+
require_paths:
|
63
|
+
- lib
|
64
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 2.7.0
|
69
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - ">="
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: '0'
|
74
|
+
requirements: []
|
75
|
+
rubygems_version: 3.3.26
|
76
|
+
signing_key:
|
77
|
+
specification_version: 4
|
78
|
+
summary: routes2spec
|
79
|
+
test_files: []
|