lib/chusaku.rb in chusaku-0.1.3 vs lib/chusaku.rb in chusaku-0.1.4
- old
+ new
@@ -1,33 +1,26 @@
# frozen_string_literal: true
-require 'ruby-progressbar'
require 'chusaku/version'
require 'chusaku/parser'
require 'chusaku/routes'
module Chusaku
# The main method to run Chusaku. Annotate all actions in your Rails project
# as follows:
#
- # # @route [GET] /waterlilies/:id (waterlilies)
+ # # @route GET /waterlilies/:id (waterlilies)
# def show
# # ...
# end
def self.call
routes = Chusaku::Routes.call
controller_pattern = 'app/controllers/**/*_controller.rb'
controller_paths = Dir.glob(Rails.root.join(controller_pattern))
- # Start progress bar.
- progressbar = ProgressBar.create \
- title: 'Chusaku',
- total: controller_paths.count
-
# Loop over all controller file paths.
controller_paths.each do |path|
- progressbar.increment
controller = /controllers\/(.*)_controller\.rb/.match(path)[1]
actions = routes[controller]
next if actions.nil?
# Parse the file and iterate over the parsed content, two entries at a
@@ -40,22 +33,35 @@
end
# Only proceed if we are currently looking at an action.
next unless curr[:type] == :action
- # Insert annotation comment.
+ # Fetch current action in routes.
action = curr[:action]
- annotation = annotate(routes[controller][action])
+ data = routes[controller][action]
+ next unless data.any?
+
+ # Add annotations.
whitespace = /^(\s*).*$/.match(curr[:body])[1]
- comment = "#{whitespace}# #{annotation}\n"
- curr[:body] = comment + curr[:body]
+ data.reverse.each do |datum|
+ annotation = annotate(datum)
+ comment = "#{whitespace}# #{annotation}\n"
+ curr[:body] = comment + curr[:body]
+ end
end
# Write to file.
parsed_content = parsed_file.map { |pf| pf[:body] }
write(path, parsed_content.join)
end
+
+ # Output results to user.
+ if controller_paths.any?
+ puts "Annotated #{controller_paths.join(', ')}"
+ else
+ puts "Nothing to annotate"
+ end
end
# Write given content to a file. If we're using an overridden version of File,
# then use its method instead for testing purposes.
#
@@ -72,18 +78,18 @@
end
end
# Given a hash describing an action, generate an annotation in the form:
#
- # @route [GET] /waterlilies/:id (waterlilies)
+ # @route GET /waterlilies/:id (waterlilies)
#
# @param {Hash} action_info
# @return {String}
def self.annotate(action_info)
- verbs = action_info[:verbs]
+ verb = action_info[:verb]
path = action_info[:path]
name = action_info[:name]
- annotation = "@route [#{verbs.join(', ')}] #{path}"
+ annotation = "@route #{verb} #{path}"
annotation += " (#{name})" unless name.nil?
annotation
end
end