-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathramaziki.rb
69 lines (55 loc) · 1.26 KB
/
ramaziki.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# -*- coding: utf-8 -*-
require 'uri'
class Ramaziki
# DataDir = 'data'
Version = "0.1"
def initialize(data_dir)
@data_dir = data_dir
Dir.mkdir @data_dir unless File.exist? @data_dir
end
def list(mode = {})
pages = Dir.chdir(@data_dir) { Dir["*"] }
case mode[:sort_by]
when :modify_time
pages = pages.sort_by { |filename| File.mtime(File.join(@data_dir, filename)) }
pages.map { |filename| to_pagename(filename) }
else # 名前順
pages.map! { |filename| to_pagename(filename)}
pages.sort_by {|filename| filename.downcase}
end
end
def get(page)
filename = to_filename(page)
if File.exist? filename
File.read filename
end
end
alias :[] :get
def write(page, data = "")
open(to_filename(page), "wb") { |out|
out.flock(File::LOCK_EX)
out.write data
out.flock(File::LOCK_UN)
}
end
alias :[]= :write
def delete(page)
File.unlink to_filename(page)
end
def hidden?(page)
(page =~ /^\./) == true
end
def exists?(page)
File.exists? to_filename(page)
end
def editable?(page)
page != nil
end
private
def to_filename(page)
File.join @data_dir, URI.encode(page)
end
def to_pagename(filename)
URI.unescape filename
end
end