Skip to content

Instantly share code, notes, and snippets.

@eitoball
Created February 1, 2014 08:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save eitoball/8749639 to your computer and use it in GitHub Desktop.
Save eitoball/8749639 to your computer and use it in GitHub Desktop.
Ruby東海 第30回勉強会でのコードレビューしたコードを参考にこんな風に書いたらいいかなぁと思いながら書いてみました。あくまでも、こんな風でということで一度も動かしていないため、色々問題があると思います。
# encoding: utf-8
require 'yaml'
class Executer
def initialize(dir)
@dir = dir
end
def execute
files do |file|
filtered_lines = (lines = lines_of(file)).map { |line| filter(line) }
write_and_backup(file, filtered_lines) if lines != filtered_lines
end
end
private
def files(&block)
Dir.glob(File.join(@dir, '*.ps')) do |filename|
yield(filename)
end
end
def lines_of(filename)
File.readlines(filename, $/, external_encoding: 'CP932')
end
def filters
@filters ||= YAML.load(DATA.read).map do |filter_data|
Filter.new(filter_data)
end
end
class Filter
def initialize(data)
@data = data
end
def apply(line)
line
end
end
def filter(line)
filters.inject(line) do |line, filter|
line = filter.apply(line)
end
end
def write_and_backup(file, lines)
FileUtils.mv(file, file + '.org')
File.open(ps, 'w').puts(lines)
end
end.new(ARGV[0]).execute
__END__
---
- :keyword_regexp: FileInfo
:except_keyword_repexp: -force
- :keyword_regexp: Directory
:except_keyword_repexp: -encode
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment