module AddMagicComment
A simple library to prepend magic comments to all Ruby files in a given folder
Constants
- EMPTY_LINE_PATTERN
- EXTENSION_COMMENTS
- MAGIC_COMMENT
- MAGIC_COMMENT_PATTERN
- MAGIC_COMMENT_PREFIX
- SHEBANG_PATTERN
Public Class Methods
detect_newline(line)
click to toggle source
# File lib/add_magic_comment.rb, line 65 def self.detect_newline(line) (line[/\R/] if line) || $/ end
process(argv)
click to toggle source
# File lib/add_magic_comment.rb, line 25 def self.process(argv) directory = argv.first || Dir.pwd count = 0 EXTENSION_COMMENTS.each do |pattern, comment| filename_pattern = File.join(directory, "**", "#{pattern}") Dir.glob(filename_pattern).each do |filename| File.open(filename, "rb+") do |file| lines = file.readlines newline = detect_newline(lines.first) next unless lines.any? count += 1 if lines.first =~ SHEBANG_PATTERN shebang = lines.shift end # remove current magic comment(s) while lines.first && (lines.first.match(MAGIC_COMMENT_PATTERN) || lines.first.match(EMPTY_LINE_PATTERN)) lines.shift end # add magic comment as the first line lines.unshift(comment.gsub("\n", newline)) # put shebang back if shebang lines.unshift(shebang) end file.pos = 0 file.print(*lines) file.truncate(file.pos) end end end puts "Magic comments added to #{count} source file(s)" end