chusaku 0.3.0 → 0.5.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cf3fc6d454cdeaf9c8c31019c1b0ec6dc4c676203a8c44cd40e24dee49ace832
4
- data.tar.gz: ba06bb7b2868c6c2d53ac93504eb00fe0ef5527b1224f04c6c862fd27e7734fe
3
+ metadata.gz: 006eca0c4d1c3b87363edd35f9070dd48bc0693e1b56b01fd3900696fa50387d
4
+ data.tar.gz: d5d3816c84eaba7c36d4e06e30eb7b8783b1dbb69f3c42190a278bf82fd01619
5
5
  SHA512:
6
- metadata.gz: b932a1b72743a06701d7fa3d7a80068baf0e31df76d78a0dea7b892a46bb663c3dcd9e444599b3942a9a5eb3289b5b90b962ef39216e8f15ff04bde5bff0946b
7
- data.tar.gz: c609bb26e27dc4018766e84d55aa38715385bff1fc444468481ff781649f9af3037e2078ada729814f9d92963e9b3752f48b1bb6cbdbe05a00000eae5ea169b4
6
+ metadata.gz: b103a27205545c18aba9e7570e0f0c63aafa558b0cb6b870520e8a25d60cbb73cdfceccc7937c09c3de5090cc304b08c1151a29ba16602802b0fdf685f8fe360
7
+ data.tar.gz: ff6eb6258eea5a27f0422d633975251827c114af744f229ab3f4eca101a6ce840b39c4bf47300f16813944b055502f78d1a88d89725d827edf90649003b43b22
data/.rubocop.yml CHANGED
@@ -7,6 +7,9 @@ AllCops:
7
7
  - 'test/mock/app/**/*'
8
8
  - 'test/mock/examples/**/*'
9
9
 
10
+ Layout/LineLength:
11
+ Max: 120
12
+
10
13
  Metrics/AbcSize:
11
14
  Exclude:
12
15
  - 'test/**/*'
@@ -16,6 +19,9 @@ Metrics/MethodLength:
16
19
  Exclude:
17
20
  - 'test/**/*'
18
21
 
22
+ Metrics/ModuleLength:
23
+ Max: 250
24
+
19
25
  Style/ClassAndModuleChildren:
20
26
  Exclude:
21
27
  - 'test/**/*'
data/chusaku.gemspec CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
8
8
  spec.name = 'chusaku'
9
9
  spec.version = Chusaku::VERSION
10
10
  spec.authors = ['Nishiki Liu']
11
- spec.email = ['nishiki.liu@gmail.com']
11
+ spec.email = ['nishiki@hey.com']
12
12
 
13
13
  spec.summary = 'Annotate your Rails controllers with route info.'
14
14
  spec.description = 'Annotate your Rails controllers with route info.'
@@ -37,15 +37,15 @@ Gem::Specification.new do |spec|
37
37
  f.match(%r{^(test|spec|features)/})
38
38
  end
39
39
  end
40
- spec.bindir = 'bin'
41
- spec.executables = 'chusaku'
40
+ spec.bindir = 'bin'
41
+ spec.executables = 'chusaku'
42
42
  spec.require_paths = ['lib']
43
43
 
44
- spec.add_development_dependency 'bundler', '~> 2.0'
45
- spec.add_development_dependency 'minitest', '~> 5.0'
46
- spec.add_development_dependency 'rake', '~> 10.0'
47
- spec.add_development_dependency 'rubocop', '~> 0.77'
48
- spec.add_development_dependency 'rubocop-performance', '~> 1.5'
44
+ spec.add_development_dependency 'bundler', '~> 2.2'
45
+ spec.add_development_dependency 'minitest', '~> 5.14'
46
+ spec.add_development_dependency 'rake', '~> 13.0'
47
+ spec.add_development_dependency 'rubocop', '~> 1.7'
48
+ spec.add_development_dependency 'rubocop-performance', '~> 1.9'
49
49
 
50
- spec.add_dependency 'rails', '> 2.0'
50
+ spec.add_dependency 'railties', '>= 3.0'
51
51
  end
data/lib/chusaku.rb CHANGED
@@ -15,8 +15,8 @@ module Chusaku
15
15
  # # ...
16
16
  # end
17
17
  #
18
- # @param {Hash} flags - CLI flags
19
- # @return {Integer} - 0 on success, 1 on error
18
+ # @param flags [Hash] CLI flags
19
+ # @return [Integer] 0 on success, 1 on error
20
20
  def call(flags = {})
21
21
  @flags = flags
22
22
  @routes = Chusaku::Routes.call
@@ -38,10 +38,10 @@ module Chusaku
38
38
 
39
39
  # Adds annotations to the given file.
40
40
  #
41
- # @param {String} path - Path to file
42
- # @param {String} controller - Controller name
43
- # @param {Array<String>} actions - List of valid actions for the controller
44
- # @return {void}
41
+ # @param path [String] Path to file
42
+ # @param controller [String] Controller name
43
+ # @param actions [Array<String>] List of valid actions for the controller
44
+ # @return [void]
45
45
  def annotate_file(path:, controller:, actions:)
46
46
  parsed_file = Chusaku::Parser.call(path: path, actions: actions)
47
47
  parsed_file[:groups].each_cons(2) do |prev, curr|
@@ -59,7 +59,7 @@ module Chusaku
59
59
 
60
60
  # Given a parsed group, clean out its contents.
61
61
  #
62
- # @param {Hash} group - { type: Symbol, body: String }
62
+ # @param group [Hash] { type => Symbol, body => String }
63
63
  # @return {void}
64
64
  def clean_group(group)
65
65
  return unless group[:type] == :comment
@@ -74,52 +74,114 @@ module Chusaku
74
74
  #
75
75
  # @route GET /waterlilies/:id (waterlilies)
76
76
  #
77
- # @param {Hash} group - Parsed content given by Chusaku::Parser
78
- # @param {Hash} route_data - Individual route data given by Chusaku::Routes
79
- # @return {void}
77
+ # @param group [Hash] Parsed content given by Chusaku::Parser
78
+ # @param route_data [Hash] Individual route data given by Chusaku::Routes
79
+ # @return [void]
80
80
  def annotate_group(group:, route_data:)
81
81
  whitespace = /^(\s*).*$/.match(group[:body])[1]
82
82
  route_data.reverse_each do |datum|
83
- name = datum[:name]
84
- annotation = "@route #{datum[:verb]} #{datum[:path]}"
85
- annotation += " (#{name})" unless name.nil?
86
- comment = "#{whitespace}# #{annotation}\n"
83
+ comment = "#{whitespace}# #{annotate_route(**datum)}\n"
87
84
  group[:body] = comment + group[:body]
88
85
  end
89
86
  end
90
87
 
88
+ # Generate route annotation.
89
+ #
90
+ # @param verb [String] HTTP verb for route
91
+ # @param path [String] Rails path for route
92
+ # @param name [String] Name used in route helpers
93
+ # @param defaults [Hash] Default parameters for route
94
+ # @return [String] "@route <verb> <path> {<defaults>} (<name>)"
95
+ def annotate_route(verb:, path:, name:, defaults:)
96
+ annotation = "@route #{verb} #{path}"
97
+ if defaults&.any?
98
+ defaults_str =
99
+ defaults
100
+ .map { |key, value| "#{key}: #{value.inspect}" }
101
+ .join(', ')
102
+ annotation += " {#{defaults_str}}"
103
+ end
104
+ annotation += " (#{name})" unless name.nil?
105
+ annotation
106
+ end
107
+
91
108
  # Write annotated content to a file if it differs from the original.
92
109
  #
93
- # @param {String} path - File path to write to
94
- # @param {Hash} parsed_file - Hash mutated by `annotate_group`
95
- # @return {void}
110
+ # @param path [String] File path to write to
111
+ # @param parsed_file [Hash] Hash mutated by {#annotate_group}
112
+ # @return [void]
96
113
  def write_to_file(path:, parsed_file:)
97
- content = parsed_file[:groups].map { |pf| pf[:body] }.join
98
- return unless parsed_file[:content] != content
99
-
100
- unless @flags.include?(:dry)
101
- File.open(path, 'r+') do |file|
102
- if file.respond_to?(:test_write)
103
- file.test_write(content, path)
104
- else
105
- file.write(content)
106
- end
114
+ new_content = new_content_for(parsed_file)
115
+ return unless parsed_file[:content] != new_content
116
+
117
+ !@flags.include?(:dry) && perform_write(path: path, content: new_content)
118
+ @annotated_paths.push(path)
119
+ end
120
+
121
+ # Extracts the new file content for the given parsed file.
122
+ #
123
+ # @param parsed_file [Hash] { groups => Array<Hash> }
124
+ # @return [String] New file content
125
+ def new_content_for(parsed_file)
126
+ parsed_file[:groups].map { |pf| pf[:body] }.join
127
+ end
128
+
129
+ # Wraps the write operation. Needed to clearly distinguish whether it's a
130
+ # write in the test suite or a write in actual use.
131
+ #
132
+ # @param path [String] File path
133
+ # @param content [String] File content
134
+ # @return [void]
135
+ def perform_write(path:, content:)
136
+ File.open(path, file_mode) do |file|
137
+ if file.respond_to?(:test_write)
138
+ file.test_write(content, path)
139
+ else
140
+ file.write(content)
107
141
  end
108
142
  end
143
+ end
109
144
 
110
- @annotated_paths.push(path)
145
+ # When running the test suite, we want to make sure we're not overwriting
146
+ # any files. `r` mode ensures that, and `w` is used for actual usage.
147
+ #
148
+ # @return [String] 'r' or 'w'
149
+ def file_mode
150
+ File.instance_methods.include?(:test_write) ? 'r' : 'w'
111
151
  end
112
152
 
113
153
  # Output results to user.
114
154
  #
115
- # @return {Integer} - 0 for success, 1 for error
155
+ # @return [Integer] 0 for success, 1 for error
116
156
  def output_results
117
- if @annotated_paths.any?
118
- puts("Annotated #{@annotated_paths.join(', ')}")
119
- @flags.include?(:error_on_annotation) ? 1 : 0
157
+ puts(output_copy)
158
+ exit_code = 0
159
+ exit_code = 1 if @annotated_paths.any? && @flags.include?(:error_on_annotation)
160
+ exit_code
161
+ end
162
+
163
+ # Determines the copy to be used in the program output.
164
+ #
165
+ # @return [String] Copy to be outputted to user
166
+ def output_copy
167
+ return 'Nothing to annotate.' if @annotated_paths.empty?
168
+
169
+ annotated_paths = @annotated_paths.join(', ')
170
+ dry_run = @flags.include?(:dry)
171
+ error_on_annotation = @flags.include?(:error_on_annotation)
172
+
173
+ if dry_run && error_on_annotation
174
+ <<~COPY
175
+ Annotations missing in the following files: #{annotated_paths}
176
+
177
+ Run `chusaku` to annotate them. Exiting with status code 1.
178
+ COPY
179
+ elsif dry_run
180
+ "The following files would be annotated without `--dry-run`: #{annotated_paths}"
181
+ elsif error_on_annotation
182
+ "Annotated #{annotated_paths}.\n\nExiting with status code 1."
120
183
  else
121
- puts('Nothing to annotate')
122
- 0
184
+ "Annotated #{annotated_paths}."
123
185
  end
124
186
  end
125
187
  end
data/lib/chusaku/cli.rb CHANGED
@@ -14,17 +14,17 @@ module Chusaku
14
14
  Finished = Class.new(RuntimeError)
15
15
  NotARailsProject = Class.new(RuntimeError)
16
16
 
17
- # Initializes a new instance of Chusaku::CLI.
17
+ # Initializes a new instance of `Chusaku::CLI`.
18
18
  #
19
- # @return {Chusaku::CLI} - Instance of this class
19
+ # @return [Chusaku::CLI] Instance of this class
20
20
  def initialize
21
21
  @options = {}
22
22
  end
23
23
 
24
24
  # Parse CLI flags, if any, and handle applicable behaviors.
25
25
  #
26
- # @param {Array<String>} args - CLI arguments
27
- # @return {Integer} - 0 on success, 1 on error
26
+ # @param args [Array<String>] CLI arguments
27
+ # @return [Integer] 0 on success, 1 on error
28
28
  def call(args = ARGV)
29
29
  optparser.parse!(args)
30
30
  check_for_rails_project
@@ -40,8 +40,8 @@ module Chusaku
40
40
 
41
41
  # Raises exception if Rails project cannot be detected.
42
42
  #
43
- # @raise {Chusaku::CLI::NotARailsProject} - Exception if not Rails project
44
- # @return {void}
43
+ # @raise [Chusaku::CLI::NotARailsProject] Exception if not Rails project
44
+ # @return [void]
45
45
  def check_for_rails_project
46
46
  has_controllers = File.directory?('./app/controllers')
47
47
  has_rakefile = File.exist?('./Rakefile')
@@ -50,7 +50,7 @@ module Chusaku
50
50
 
51
51
  # Returns an instance of OptionParser with supported flags.
52
52
  #
53
- # @return {OptionParser} - Preconfigured OptionParser instance
53
+ # @return [OptionParser] Preconfigured OptionParser instance
54
54
  def optparser
55
55
  OptionParser.new do |opts|
56
56
  opts.banner = 'Usage: chusaku [options]'
@@ -63,8 +63,8 @@ module Chusaku
63
63
 
64
64
  # Adds `--exit-with-error-on-annotation` flag.
65
65
  #
66
- # @param {OptionParser} opts - OptionParser instance
67
- # @return {void}
66
+ # @param opts [OptionParser] OptionParser instance
67
+ # @return [void]
68
68
  def add_error_on_annotation_flag(opts)
69
69
  opts.on(
70
70
  '--exit-with-error-on-annotation',
@@ -76,8 +76,8 @@ module Chusaku
76
76
 
77
77
  # Adds `--dry-run` flag.
78
78
  #
79
- # @param {OptionParser} opts - OptionParser instance
80
- # @return {void}
79
+ # @param opts [OptionParser] OptionParser instance
80
+ # @return [void]
81
81
  def add_dry_run_flag(opts)
82
82
  opts.on(
83
83
  '--dry-run',
@@ -89,8 +89,8 @@ module Chusaku
89
89
 
90
90
  # Adds `--version` flag.
91
91
  #
92
- # @param {OptionParser} opts - OptionParser instance
93
- # @return {void}
92
+ # @param opts [OptionParser] OptionParser instance
93
+ # @return [void]
94
94
  def add_version_flag(opts)
95
95
  opts.on(
96
96
  '-v',
@@ -104,8 +104,8 @@ module Chusaku
104
104
 
105
105
  # Adds `--help` flag.
106
106
  #
107
- # @param {OptionParser} opts - OptionParser instance
108
- # @return {void}
107
+ # @param opts [OptionParser] OptionParser instance
108
+ # @return [void]
109
109
  def add_help_flag(opts)
110
110
  opts.on(
111
111
  '-h',
@@ -3,6 +3,8 @@
3
3
  module Chusaku
4
4
  # Handles parsing a file and groups its lines into categories.
5
5
  module Parser
6
+ # Primary method to call.
7
+ #
6
8
  # Example output:
7
9
  #
8
10
  # {
@@ -31,9 +33,9 @@ module Chusaku
31
33
  # ]
32
34
  # }
33
35
  #
34
- # @param {String} path - File path to parse
35
- # @param {Array<String>} actions - List of valid actions for this route
36
- # @return {Hash} - { content: String, groups: Array<Hash> }
36
+ # @param path [String] File path to parse
37
+ # @param actions [Array<String>] List of valid actions for this route
38
+ # @return [Hash] { content => String, groups => Array<Hash> }
37
39
  def self.call(path:, actions:)
38
40
  groups = []
39
41
  group = {}
@@ -58,20 +60,22 @@ module Chusaku
58
60
  { content: content, groups: groups }
59
61
  end
60
62
 
61
- # Given a line and actions, returns the line's type:
63
+ # Given a line and actions, returns the line's type.
64
+ #
65
+ # A type can be one of:
62
66
  #
63
67
  # 1. comment - A line that is entirely commented. Lines that have trailing
64
68
  # comments do not fall under this category.
65
69
  # 2. action - A line that contains an action definition.
66
70
  # 3. code - Anything else.
67
71
  #
68
- # And give back a Hash in the form:
72
+ # Returns a Hash in the form:
69
73
  #
70
74
  # { type: :action, body: 'def foo', action: 'foo' }
71
75
  #
72
- # @param {String} line - A line of a file
73
- # @param {Array<String>} actions - List of valid actions for this route
74
- # @return {Hash} - { type: Symbol, body: String, action: String }
76
+ # @param line [String] A line of a file
77
+ # @param actions [Array<String>] List of valid actions for this route
78
+ # @return [Hash] { type => Symbol, body => String, action => String }
75
79
  def self.parse_line(line:, actions:)
76
80
  comment_match = /^\s*#.*$/.match(line)
77
81
  def_match = /^\s*def\s+(\w*)\s*\w*.*$/.match(line)
@@ -4,6 +4,8 @@ module Chusaku
4
4
  # Handles extracting information about the Rails project's routes.
5
5
  class Routes
6
6
  class << self
7
+ # Primary method to call.
8
+ #
7
9
  # Example output:
8
10
  #
9
11
  # {
@@ -23,15 +25,21 @@ module Chusaku
23
25
  # }
24
26
  # }
25
27
  #
26
- # @return {Hash} - Routes hash
28
+ # @return [Hash] Routes hash
27
29
  def call
28
30
  routes = {}
29
31
 
30
32
  Rails.application.routes.routes.each do |route|
31
- controller, action = extract_controller_and_action_from(route)
33
+ controller, action, defaults = extract_data_from(route)
32
34
  routes[controller] ||= {}
33
35
  routes[controller][action] ||= []
34
- routes[controller][action].push(format_route(route))
36
+
37
+ add_info_for \
38
+ route: route,
39
+ routes: routes,
40
+ controller: controller,
41
+ action: action,
42
+ defaults: defaults
35
43
  end
36
44
 
37
45
  backfill_routes(routes)
@@ -39,23 +47,56 @@ module Chusaku
39
47
 
40
48
  private
41
49
 
42
- # Extract information of a given route.
50
+ # Adds formatted route info for the given param combination.
51
+ #
52
+ # @param route [Hash] Route info
53
+ # @param routes [Hash] Collection of all route info
54
+ # @param controller [String] Controller key
55
+ # @param action [String] Action key
56
+ # @param defaults [Hash] Default parameters for route
57
+ # @return [void]
58
+ def add_info_for(route:, routes:, controller:, action:, defaults:)
59
+ verbs_for(route).each do |verb|
60
+ routes[controller][action]
61
+ .push(format(route: route, verb: verb, defaults: defaults))
62
+ routes[controller][action].uniq!
63
+ end
64
+ end
65
+
66
+ # Extract the HTTP verbs for a Rails route. Required for older versions of
67
+ # Rails that return regular expressions for a route verb which sometimes
68
+ # contains multiple verbs.
69
+ #
70
+ # @param route [ActionDispatch::Journey::Route] Route given by Rails
71
+ # @return [Array<String>] List of HTTP verbs for the given route
72
+ def verbs_for(route)
73
+ route_verb = route.verb.to_s
74
+
75
+ %w[GET POST PUT PATCH DELETE].select do |verb|
76
+ route_verb.include?(verb)
77
+ end
78
+ end
79
+
80
+ # Formats information for a given route.
43
81
  #
44
- # @param {ActionDispatch::Journey::Route} route - Route given by Rails
45
- # @return {Hash} - { verb: String, path: String, name: String }
46
- def format_route(route)
82
+ # @param route [ActionDispatch::Journey::Route] Route given by Rails
83
+ # @param verb [String] HTTP verb
84
+ # @param defaults [Hash] Default parameters for route
85
+ # @return [Hash] { verb => String, path => String, name => String }
86
+ def format(route:, verb:, defaults:)
47
87
  {
48
- verb: route.verb,
88
+ verb: verb,
49
89
  path: route.path.spec.to_s.gsub('(.:format)', ''),
50
- name: route.name
90
+ name: route.name,
91
+ defaults: defaults
51
92
  }
52
93
  end
53
94
 
54
95
  # Given a routes hash, backfill entries that aren't already filled by
55
96
  # `Rails.application.routes`.
56
97
  #
57
- # @param {Hash} routes - Routes hash generated by this class
58
- # @return {Hash} - Backfilled routes hash
98
+ # @param routes [Hash] Routes hash generated by this class
99
+ # @return [Hash] Backfilled routes hash
59
100
  def backfill_routes(routes)
60
101
  paths = {}
61
102
 
@@ -73,14 +114,14 @@ module Chusaku
73
114
 
74
115
  # Given a route, extract the controller and action strings.
75
116
  #
76
- # @param {ActionDispatch::Journey::Route} route - Route instance
77
- # @return {Array<String>} - [String, String]
78
- def extract_controller_and_action_from(route)
79
- defaults = route.defaults
80
- controller = defaults[:controller]
81
- action = defaults[:action]
117
+ # @param route [ActionDispatch::Journey::Route] Route instance
118
+ # @return [Array<Object>] (String, String, Hash)
119
+ def extract_data_from(route)
120
+ defaults = route.defaults.dup
121
+ controller = defaults.delete(:controller)
122
+ action = defaults.delete(:action)
82
123
 
83
- [controller, action]
124
+ [controller, action, defaults]
84
125
  end
85
126
  end
86
127
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Chusaku
4
- VERSION = '0.3.0'
4
+ VERSION = '0.5.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chusaku
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nishiki Liu
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-12-16 00:00:00.000000000 Z
11
+ date: 2021-04-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,87 +16,87 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '2.0'
19
+ version: '2.2'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '2.0'
26
+ version: '2.2'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: minitest
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '5.0'
33
+ version: '5.14'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '5.0'
40
+ version: '5.14'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '10.0'
47
+ version: '13.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '10.0'
54
+ version: '13.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rubocop
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0.77'
61
+ version: '1.7'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0.77'
68
+ version: '1.7'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rubocop-performance
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '1.5'
75
+ version: '1.9'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '1.5'
82
+ version: '1.9'
83
83
  - !ruby/object:Gem::Dependency
84
- name: rails
84
+ name: railties
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ">"
87
+ - - ">="
88
88
  - !ruby/object:Gem::Version
89
- version: '2.0'
89
+ version: '3.0'
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ">"
94
+ - - ">="
95
95
  - !ruby/object:Gem::Version
96
- version: '2.0'
96
+ version: '3.0'
97
97
  description: Annotate your Rails controllers with route info.
98
98
  email:
99
- - nishiki.liu@gmail.com
99
+ - nishiki@hey.com
100
100
  executables:
101
101
  - chusaku
102
102
  extensions: []
@@ -127,7 +127,7 @@ metadata:
127
127
  homepage_uri: https://github.com/nshki/chusaku
128
128
  source_code_uri: https://github.com/nshki/chusaku
129
129
  changelog_uri: https://github.com/nshki/chusaku
130
- post_install_message:
130
+ post_install_message:
131
131
  rdoc_options: []
132
132
  require_paths:
133
133
  - lib
@@ -142,8 +142,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
142
142
  - !ruby/object:Gem::Version
143
143
  version: '0'
144
144
  requirements: []
145
- rubygems_version: 3.0.3
146
- signing_key:
145
+ rubygems_version: 3.2.15
146
+ signing_key:
147
147
  specification_version: 4
148
148
  summary: Annotate your Rails controllers with route info.
149
149
  test_files: []