Created
February 1, 2014 08:33
-
-
Save eitoball/8749639 to your computer and use it in GitHub Desktop.
Ruby東海 第30回勉強会でのコードレビューしたコードを参考にこんな風に書いたらいいかなぁと思いながら書いてみました。あくまでも、こんな風でということで一度も動かしていないため、色々問題があると思います。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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