chusaku 1.2.0 → 1.3.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 +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.
|