chusaku 1.2.0 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +2 -0
- data/lib/chusaku/cli.rb +2 -1
- data/lib/chusaku/routes.rb +13 -5
- data/lib/chusaku/version.rb +1 -1
- data/lib/chusaku.rb +18 -11
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 48034ba3796c8cd1ab1a16b0db1065dcdf487ea5e6bc1b08a7fcd18db4ad1d33
|
4
|
+
data.tar.gz: 65cf7dbbf5571f547aeb9cefc8cd804ccab9467b0765edcc00691c777c158554
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 83c00966e23c6d8a63f9b68e35cc48a975689f21473e83344927764ac200d9eb378274c6ad82fa90a0ac6a06d286763f45661f4b2433983f903cf93371158167
|
7
|
+
data.tar.gz: 70afe36985465e34f3fa18e5eea3d51d130daaada6414a51b680a0e4f32f31e14a3e3225f8f70b594d19d8c23e9ad3b00ac9f43c4dd83c493bdd5befba483e8a
|
data/.gitignore
CHANGED
data/lib/chusaku/cli.rb
CHANGED
@@ -41,7 +41,8 @@ module Chusaku
|
|
41
41
|
# @raise [Chusaku::CLI::NotARailsProject] Exception if not Rails project
|
42
42
|
# @return [void]
|
43
43
|
def check_for_rails_project
|
44
|
-
|
44
|
+
controllers_pattern = options[:controllers_pattern] || DEFAULT_CONTROLLERS_PATTERN
|
45
|
+
has_controllers = !Dir.glob(Rails.root.join(controllers_pattern)).empty?
|
45
46
|
has_rakefile = File.exist?("./Rakefile")
|
46
47
|
raise NotARailsProject unless has_controllers && has_rakefile
|
47
48
|
end
|
data/lib/chusaku/routes.rb
CHANGED
@@ -27,7 +27,19 @@ module Chusaku
|
|
27
27
|
def call
|
28
28
|
routes = {}
|
29
29
|
|
30
|
-
Rails.application
|
30
|
+
populate_routes(Rails.application, routes)
|
31
|
+
backfill_routes(routes)
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def populate_routes(app, routes)
|
37
|
+
app.routes.routes.each do |route|
|
38
|
+
if route.app.engine?
|
39
|
+
populate_routes(route.app.app, routes)
|
40
|
+
next
|
41
|
+
end
|
42
|
+
|
31
43
|
controller, action, defaults = extract_data_from(route)
|
32
44
|
routes[controller] ||= {}
|
33
45
|
routes[controller][action] ||= []
|
@@ -39,12 +51,8 @@ module Chusaku
|
|
39
51
|
action: action,
|
40
52
|
defaults: defaults
|
41
53
|
end
|
42
|
-
|
43
|
-
backfill_routes(routes)
|
44
54
|
end
|
45
55
|
|
46
|
-
private
|
47
|
-
|
48
56
|
# Adds formatted route info for the given param combination.
|
49
57
|
#
|
50
58
|
# @param route [Hash] Route info
|
data/lib/chusaku/version.rb
CHANGED
data/lib/chusaku.rb
CHANGED
@@ -4,6 +4,8 @@ require "chusaku/routes"
|
|
4
4
|
|
5
5
|
# Handles core functionality of annotating projects.
|
6
6
|
module Chusaku
|
7
|
+
DEFAULT_CONTROLLERS_PATTERN = "**/*_controller.rb".freeze
|
8
|
+
|
7
9
|
class << self
|
8
10
|
# The main method to run Chusaku. Annotate all actions in a Rails project as
|
9
11
|
# follows:
|
@@ -19,14 +21,20 @@ module Chusaku
|
|
19
21
|
@flags = flags
|
20
22
|
@routes = Chusaku::Routes.call
|
21
23
|
@changed_files = []
|
22
|
-
controllers_pattern = @flags[:controllers_pattern] ||
|
24
|
+
controllers_pattern = @flags[:controllers_pattern] || DEFAULT_CONTROLLERS_PATTERN
|
25
|
+
controllers_paths = Dir.glob(Rails.root.join(controllers_pattern))
|
26
|
+
|
27
|
+
@routes.each do |controller, actions|
|
28
|
+
next unless controller
|
29
|
+
|
30
|
+
controller_class = "#{controller.underscore.camelize}Controller".constantize
|
31
|
+
action_method_name = actions.keys.first&.to_sym
|
32
|
+
next unless !action_method_name.nil? && controller_class.method_defined?(action_method_name)
|
23
33
|
|
24
|
-
|
25
|
-
|
26
|
-
actions = @routes[controller]
|
27
|
-
next if actions.nil?
|
34
|
+
source_path = controller_class.instance_method(action_method_name).source_location&.[](0)
|
35
|
+
next unless controllers_paths.include?(source_path)
|
28
36
|
|
29
|
-
annotate_file(path:
|
37
|
+
annotate_file(path: source_path, actions: actions)
|
30
38
|
end
|
31
39
|
|
32
40
|
output_results
|
@@ -46,16 +54,15 @@ module Chusaku
|
|
46
54
|
# Adds annotations to the given file.
|
47
55
|
#
|
48
56
|
# @param path [String] Path to file
|
49
|
-
# @param
|
50
|
-
# @param actions [Array<String>] List of valid actions for the controller
|
57
|
+
# @param actions [Hash<String, Hash>] List of valid action data for the controller
|
51
58
|
# @return [void]
|
52
|
-
def annotate_file(path:,
|
53
|
-
parsed_file = Chusaku::Parser.call(path: path, actions: actions)
|
59
|
+
def annotate_file(path:, actions:)
|
60
|
+
parsed_file = Chusaku::Parser.call(path: path, actions: actions.keys)
|
54
61
|
parsed_file[:groups].each_cons(2) do |prev, curr|
|
55
62
|
clean_group(prev)
|
56
63
|
next unless curr[:type] == :action
|
57
64
|
|
58
|
-
route_data =
|
65
|
+
route_data = actions[curr[:action]]
|
59
66
|
next unless route_data.any?
|
60
67
|
|
61
68
|
annotate_group(group: curr, route_data: route_data)
|
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: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nishiki Liu
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-08-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -129,7 +129,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
129
129
|
- !ruby/object:Gem::Version
|
130
130
|
version: '0'
|
131
131
|
requirements: []
|
132
|
-
rubygems_version: 3.5.
|
132
|
+
rubygems_version: 3.5.17
|
133
133
|
signing_key:
|
134
134
|
specification_version: 4
|
135
135
|
summary: Annotate your Rails controllers with route info.
|