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