class MemoRack::PageInfo

Attributes

max_lines[RW]

Public Class Methods

define_keys(*keys, &block) click to toggle source
# File lib/memorack/pageinfo.rb, line 110
def self.define_keys(*keys, &block)
        block = lambda { |key| values[key] || parse(key) } unless block

        keys.each { |name|
                define_key(name, &block)
        }
end
new(path, hash = nil, parent = {}, ifnone = nil) click to toggle source
Calls superclass method
# File lib/memorack/pageinfo.rb, line 12
def initialize(path, hash = nil, parent = {}, ifnone = nil)
        super ifnone

        @path = path
        merge!(hash) if hash

        @max_lines = 5
        @parent = parent
end

Public Instance Methods

app() click to toggle source

実行アプリケーション

# File lib/memorack/pageinfo.rb, line 65
def app
        begin
                @parent.app
        rescue
        end
end
git?() click to toggle source

git で管理されているか?

# File lib/memorack/pageinfo.rb, line 73
def git?
        if @git == nil
                @git ||= File.exists?(File.join(app.root, '.git'))
                @git ||= File.exists?(File.join(app.root, '../.git'))
        end

        @git
end
log() click to toggle source

git log で更新日時一覧を取得する

# File lib/memorack/pageinfo.rb, line 83
def log
        unless @log
                @log = []
                return @log unless git?

                begin
                        dir, fname = File.split(@path)
                        Dir.chdir(dir) { |dir|
                                log << File::Stat.new(fname).mtime if `git status` =~ /modified:\s+#{fname}/

                                `git log --pretty='%ad' --date iso '#{fname}'`.each_line { |line|
                                        @log << line
                                }
                        }
                rescue
                end
        end

        @log
end
parse(*info_list) click to toggle source

ファイルを解析

# File lib/memorack/pageinfo.rb, line 27
def parse(*info_list)
        methods = {}

        info_list.each { |info|
                m = "accept_#{info}"
                methods[info] = m if respond_to?(m)
        }

        open(@path, 'r') { |file|
                prev = nil
                n = 1

                until methods.empty?
                    break unless line = file.gets
                        break if parse_end?(line, n)

                        methods.each { |key, m|
                                v = send(m, line, prev)
                                if v
                                        values[key] = v
                                        methods.delete(key)
                                end
                        }

                        prev = line
                        n += 1
                end
        }

        values[info_list.first]
end
parse_end?(line, n) click to toggle source

ファイル解析の終了か?

# File lib/memorack/pageinfo.rb, line 60
def parse_end?(line, n)
        max_lines < n
end
value_to_time(value) click to toggle source

値を Timeクラスに変換する

# File lib/memorack/pageinfo.rb, line 105
def value_to_time(value)
        value = Time.parse(value) if value.kind_of?(String)
        value
end
values() click to toggle source
# File lib/memorack/pageinfo.rb, line 22
def values
        @values ||= {}
end