infod 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/infod.rb +2 -3
- data/infod/Es.rb +31 -67
- data/infod/{W/source.rb → Es/code.rb} +6 -10
- data/infod/Es/css.rb +21 -0
- data/infod/{W → Es}/csv.rb +0 -0
- data/infod/Es/du.rb +16 -0
- data/infod/{W → Es}/feed.rb +13 -11
- data/infod/Es/filter.rb +75 -0
- data/infod/Es/find.rb +20 -0
- data/infod/Es/fs.rb +145 -136
- data/infod/Es/glob.rb +22 -0
- data/infod/Es/grep.rb +61 -0
- data/infod/Es/groonga.rb +47 -56
- data/infod/Es/html.rb +271 -0
- data/infod/Es/image.rb +114 -0
- data/infod/Es/in.rb +68 -0
- data/infod/Es/index.rb +183 -0
- data/infod/{W → Es}/json.rb +28 -4
- data/infod/Es/kv.rb +60 -0
- data/infod/Es/ls.rb +58 -0
- data/infod/Es/mail.rb +87 -0
- data/infod/Es/man.rb +112 -0
- data/infod/Es/mime.rb +59 -0
- data/infod/Es/out.rb +52 -0
- data/infod/{W/page.rb → Es/pager.rb} +7 -3
- data/infod/Es/pdf.rb +19 -0
- data/infod/Es/rdf.rb +35 -0
- data/infod/Es/schema.rb +99 -0
- data/infod/Es/search.rb +24 -0
- data/infod/Es/sh.rb +21 -0
- data/infod/{W → Es}/text.rb +26 -14
- data/infod/H.rb +15 -29
- data/infod/H/audio.rb +19 -0
- data/infod/H/blog.rb +15 -0
- data/infod/{W → H}/cal.rb +2 -31
- data/infod/H/edit.rb +88 -0
- data/infod/{W/examine/examine.rb → H/facets.rb} +17 -17
- data/infod/{W → H}/forum.rb +1 -0
- data/infod/{W/examine/sw.rb → H/hf.rb} +12 -12
- data/infod/H/histogram.rb +78 -0
- data/infod/H/mail.rb +92 -0
- data/infod/{W/chat.rb → H/microblog.rb} +21 -16
- data/infod/H/threads.rb +77 -0
- data/infod/H/time.rb +131 -0
- data/infod/H/who.rb +30 -0
- data/infod/{W → H}/wiki.rb +0 -0
- data/infod/K.rb +28 -60
- data/infod/N.rb +151 -74
- data/infod/Rb.rb +3 -3
- data/infod/Th.rb +27 -101
- data/infod/Th/404.rb +29 -36
- data/infod/Th/500.rb +36 -5
- data/infod/Th/GET.rb +48 -118
- data/infod/Th/POST.rb +31 -11
- data/infod/Th/perf.rb +37 -0
- data/infod/Th/util.rb +89 -0
- data/infod/Y.rb +24 -7
- data/infod/infod.rb +2 -3
- metadata +92 -64
- data/infod/Es/redis.rb +0 -3
- data/infod/Es/sqlite.rb +0 -3
- data/infod/Th/local.rb +0 -22
- data/infod/W.rb +0 -34
- data/infod/W/audio.rb +0 -56
- data/infod/W/blog.rb +0 -3
- data/infod/W/color.rb +0 -28
- data/infod/W/core.rb +0 -77
- data/infod/W/css.rb +0 -24
- data/infod/W/du.rb +0 -35
- data/infod/W/edit.rb +0 -8
- data/infod/W/examine/exhibit.rb +0 -34
- data/infod/W/examine/hist.rb +0 -55
- data/infod/W/examine/history.rb +0 -19
- data/infod/W/examine/normal.rb +0 -31
- data/infod/W/examine/protovis.rb +0 -30
- data/infod/W/examine/time/graph.rb +0 -86
- data/infod/W/examine/time/line.rb +0 -24
- data/infod/W/find.rb +0 -24
- data/infod/W/grep.rb +0 -27
- data/infod/W/html.rb +0 -143
- data/infod/W/image.rb +0 -61
- data/infod/W/kv.rb +0 -66
- data/infod/W/ls.rb +0 -50
- data/infod/W/mail.rb +0 -248
- data/infod/W/pdf.rb +0 -16
- data/infod/W/post.rb +0 -9
- data/infod/W/rdf.rb +0 -32
- data/infod/W/schema.rb +0 -172
- data/infod/W/search.rb +0 -33
- data/infod/W/shell.rb +0 -30
- data/infod/W/table.rb +0 -87
- data/infod/W/tree.rb +0 -26
- data/infod/W/vfs.rb +0 -175
data/infod/W/search.rb
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
class E
|
2
|
-
|
3
|
-
fn '/search/GET',->e,r{
|
4
|
-
r.q['graph'] = 'roonga'
|
5
|
-
e.response
|
6
|
-
}
|
7
|
-
|
8
|
-
fn 'head/search',->d,e{[{_: :title, c: e.q['q']},(Fn 'head.formats',e)]}
|
9
|
-
|
10
|
-
fn 'view/search',->d,e{
|
11
|
-
[H.css('/css/search'),H.js('/js/search'),
|
12
|
-
(Fn 'view/search/form',e.q,e),'<br><br>',
|
13
|
-
(Fn 'view/page',d,e)]}
|
14
|
-
|
15
|
-
fn 'view/search/form',-> q=nil,e { q||={}
|
16
|
-
{:class => :form,
|
17
|
-
c: {_: :form, action: e['REQUEST_PATH'],
|
18
|
-
c: [{_: :input, name: :q, value: q['q']}, # search box
|
19
|
-
q.update(q['view'] ? {} : {'view' => 'search'}). # show searchbox above results unless other view specified
|
20
|
-
except('q','start','uri'). # new query & offset for this search
|
21
|
-
map{|a,s|
|
22
|
-
{_: :input, name: a, value: s, :type => :hidden}}]}}}
|
23
|
-
|
24
|
-
# construct p/o index-traversal links
|
25
|
-
fn 'view/linkPO',->d,e{
|
26
|
-
['<style>a {background-color: #000;text-decoration:none;border-style:dotted;border-width:.1em;border-color:#fff;;color:#fff;font-size:1.3em;border-radius:.62em;padding:.1em}
|
27
|
-
div {display:block; padding:.3em}</style>',
|
28
|
-
{_: :h3, c: e['uri']},{_: :br},
|
29
|
-
d.map{|u,r|
|
30
|
-
{c: {_: :a, href: r.url+'?set=indexPO&p='+e['uri']+'&view=page&views=timegraph,mail&v=multi&c=8', c: u}}
|
31
|
-
}]}
|
32
|
-
|
33
|
-
end
|
data/infod/W/shell.rb
DELETED
@@ -1,30 +0,0 @@
|
|
1
|
-
class E
|
2
|
-
|
3
|
-
class << self
|
4
|
-
def console; ARGV.clear; require 'irb'
|
5
|
-
IRB.start
|
6
|
-
end
|
7
|
-
end
|
8
|
-
|
9
|
-
# util, prefix -> tripleStream
|
10
|
-
def triplrStdOut e,f='/',g=nil,a=sh
|
11
|
-
|
12
|
-
# leading/trailing whitespace expression
|
13
|
-
g ||= /^\s*(.*?)\s*$/
|
14
|
-
|
15
|
-
# exec command
|
16
|
-
`#{e} #{a}|grep :`.each_line{|i|
|
17
|
-
|
18
|
-
# key/val separator
|
19
|
-
i = i.split /:/
|
20
|
-
|
21
|
-
yield uri, # subject
|
22
|
-
(f+(i[0].match(g)||[nil,i[0]])[1].gsub(/\s/,'_').gsub(/\//,'-').gsub(/[\(\)]+/,'')), # predicate
|
23
|
-
i.tail.join(':').strip.do{|v|v.match(/^[0-9\.]+$/) ? v.to_f : v} # object
|
24
|
-
}
|
25
|
-
nil
|
26
|
-
rescue
|
27
|
-
nil
|
28
|
-
end
|
29
|
-
|
30
|
-
end
|
data/infod/W/table.rb
DELETED
@@ -1,87 +0,0 @@
|
|
1
|
-
#watch __FILE__
|
2
|
-
class E
|
3
|
-
|
4
|
-
# property selector toolbar
|
5
|
-
fn 'view/p',->d,e{
|
6
|
-
[H.once(e,'property.toolbar',H.once(e,'p',(H.once e,:mu,H.js('/js/mu')),
|
7
|
-
H.js('/js/p'),
|
8
|
-
H.css('/css/table')),
|
9
|
-
{_: :a, href: '#', c: '-', id: :hideP},
|
10
|
-
{_: :a, href: '#', c: '+', id: :showP},
|
11
|
-
{_: :span, id: 'properties',
|
12
|
-
c: E.graphProperties(d).map{|k|
|
13
|
-
{_: :a, class: :n, href: k, c: k.label+' '}}},
|
14
|
-
{_: :style, id: :pS},
|
15
|
-
{_: :style, id: :lS}),
|
16
|
-
(Fn 'view/'+(e.q['pv']||'tab'),d,e)]}
|
17
|
-
|
18
|
-
# table layout, sparse matrix of rows/cols - see table/elements for usage
|
19
|
-
fn 'view/t',->d,e,l=nil,a=nil{
|
20
|
-
[H.once(e,'table',H.css('/css/table')),
|
21
|
-
{_: :table, c:
|
22
|
-
{_: :tbody, c: (Fn 'table/'+(l||e.q['table']),d).do{|t|
|
23
|
-
rx = t.keys.max
|
24
|
-
rm = t.keys.min
|
25
|
-
c = t.values.map(&:keys)
|
26
|
-
cm = c.map(&:min).min
|
27
|
-
cx = c.map(&:max).max
|
28
|
-
(rm..rx).map{|r|
|
29
|
-
{_: :tr, c:
|
30
|
-
t[r].do{|r|
|
31
|
-
(cm..cx).map{|c|
|
32
|
-
r[c].do{|c|
|
33
|
-
{_: :td, class: :cell, c:(Fn 'view/'+(a||e.q['cellview']),c,e)}
|
34
|
-
}||{_: :td}}}}}}}}]}
|
35
|
-
|
36
|
-
# a simple tabular view
|
37
|
-
fn 'view/table',->i,e{
|
38
|
-
[H.css('/css/table'),
|
39
|
-
(Fn 'table',i.values,e)]}
|
40
|
-
|
41
|
-
F['view/tab']=F['view/table']
|
42
|
-
|
43
|
-
fn 'table',->es,q=nil{
|
44
|
-
ks = {} # predicate table
|
45
|
-
es.map{|e|e.respond_to?(:keys) &&
|
46
|
-
e.keys.map{|k|ks[k]=true}}
|
47
|
-
keys = ks.keys
|
48
|
-
keys.empty? ? es.html :
|
49
|
-
H({_: :table,:class => :tab,
|
50
|
-
c: [{_: :tr,
|
51
|
-
c: keys.map{|k|
|
52
|
-
{_: :td, class: :label, property: k,
|
53
|
-
c: q ? {_: :a,
|
54
|
-
href: q['REQUEST_PATH']+q.q.except('reverse').merge({'sort'=>k}).merge(q.q.member?('reverse') ? {} : {'reverse'=>true}).qs,
|
55
|
-
c: (Fn 'abbrURI',k)} : k}}},
|
56
|
-
*es.map{|e|
|
57
|
-
{_: :tr, about: e.uri, c:
|
58
|
-
keys.map{|k|
|
59
|
-
{_: :td, property: k, c: e[k].do{|v|
|
60
|
-
(v.class==Array ? v : [v]).map(&:html).join ' '}}}}}]})}
|
61
|
-
|
62
|
-
fn 'table/elements',->d{ m={}
|
63
|
-
g='http://www.daml.org/2003/01/periodictable/PeriodicTable#group'
|
64
|
-
p='http://www.daml.org/2003/01/periodictable/PeriodicTable#period'
|
65
|
-
d.map{|u,r|
|
66
|
-
r[g].do{|g| g = g[0].uri.match(/[0-9]+$/)
|
67
|
-
r[p].do{|p| p = p[0].uri.match(/[0-9]+$/)
|
68
|
-
g && p &&
|
69
|
-
(g = g[0].to_i
|
70
|
-
p = p[0].to_i
|
71
|
-
m[p] ||= {}
|
72
|
-
m[p][g] ||= {}
|
73
|
-
m[p][g][u] = r
|
74
|
-
)}}}
|
75
|
-
m}
|
76
|
-
|
77
|
-
F["?"]||={}
|
78
|
-
F["?"].update({'elements'=>{'view' => 'p','pv' => 't','table' => 'elements', 'cellview' => 'element'}})
|
79
|
-
|
80
|
-
# element
|
81
|
-
fn 'view/element',->d,e{
|
82
|
-
l = d[d.keys[0]]
|
83
|
-
[H.once(e,'elements.css',H.css('/css/elements')),
|
84
|
-
{class: l['http://www.daml.org/2003/01/periodictable/PeriodicTable#classification'].do{|p|p[0].uri.label},
|
85
|
-
c: [l['http://www.daml.org/2003/01/periodictable/PeriodicTable#symbol'],(Fn 'view',d,e)]}]}
|
86
|
-
|
87
|
-
end
|
data/infod/W/tree.rb
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
class E
|
2
|
-
|
3
|
-
fn 'view/tree',->d,e{ t={}; c={}
|
4
|
-
d.map{|u,r| l=t
|
5
|
-
u.split(/[\/#]/).
|
6
|
-
map{|s|
|
7
|
-
l=(l[s] ||= {})}
|
8
|
-
l['#']={u => r}}
|
9
|
-
r=->t,d=0{
|
10
|
-
t.except('#').map{|k,t_|
|
11
|
-
{_: :div, class: :branch,style: 'background-color:'+(c[d]||=E.c),
|
12
|
-
c: [t_['#'].do{|t|Fn 'view/'+e.q['treev'],t,e}||k,r.(t_,d+1)]}}}
|
13
|
-
[(H.once e,'tree',(H.css '/css/tree')),r.(t)]}
|
14
|
-
|
15
|
-
fn 'view/treeR',->d,e{ t={}; c={}
|
16
|
-
d.map{|_,r| r.map{|p,o| l = t
|
17
|
-
p.split(/[\/#]/).map{|s|l=(l[s]||={})}
|
18
|
-
l['#']||=[]
|
19
|
-
l['#'].push o}}
|
20
|
-
r=->t,d=0{
|
21
|
-
t.except('#').map{|k,t_|
|
22
|
-
{_: :div, class: :branch,style: 'background-color:'+(c[d]||=E.c),
|
23
|
-
c: ['<b>',k,'</b>',{class: :treeO,c: t_['#'].html},r.(t_,d+1)]}}}
|
24
|
-
[(H.once e,'tree',(H.css '/css/tree')),r.(t)]}
|
25
|
-
|
26
|
-
end
|
data/infod/W/vfs.rb
DELETED
@@ -1,175 +0,0 @@
|
|
1
|
-
%w{date digest/sha1 fileutils json open-uri pathname}.each{|r|require(r)}
|
2
|
-
|
3
|
-
class E
|
4
|
-
|
5
|
-
def d
|
6
|
-
node.to_s
|
7
|
-
end
|
8
|
-
|
9
|
-
def node
|
10
|
-
Pathname.new FSbase + path
|
11
|
-
end
|
12
|
-
alias_method :no, :node
|
13
|
-
|
14
|
-
# glob :: pattern -> [E]
|
15
|
-
def glob p=""
|
16
|
-
(Pathname.glob d + p).map &:E
|
17
|
-
end
|
18
|
-
fn 'set/glob',->d,e,m{d.glob}
|
19
|
-
fn 'graph/glob',->d,e,m{d.glob.map{|c|c.fromStream m, :triplrInode, false}}
|
20
|
-
|
21
|
-
def parent
|
22
|
-
E Pathname.new(uri).parent
|
23
|
-
end
|
24
|
-
|
25
|
-
def siblings
|
26
|
-
parent.c
|
27
|
-
end
|
28
|
-
|
29
|
-
def jail
|
30
|
-
no.expand_path.to_s.index(E::FSbase)==0 && @r['PATH_INFO'] !~ /\.\./ && self
|
31
|
-
end
|
32
|
-
|
33
|
-
def children
|
34
|
-
no.c.map &:E
|
35
|
-
end
|
36
|
-
alias_method :c, :children
|
37
|
-
|
38
|
-
|
39
|
-
# node exists?
|
40
|
-
def exist?
|
41
|
-
no.exist?
|
42
|
-
end
|
43
|
-
alias_method :e, :exist?
|
44
|
-
|
45
|
-
# directory?
|
46
|
-
def d?
|
47
|
-
no.directory?
|
48
|
-
end
|
49
|
-
|
50
|
-
# file?
|
51
|
-
def file?
|
52
|
-
no.file?
|
53
|
-
end
|
54
|
-
alias_method :f, :file?
|
55
|
-
|
56
|
-
# modification time
|
57
|
-
def mtime
|
58
|
-
no.stat.mtime if e
|
59
|
-
end
|
60
|
-
alias_method :m, :mtime
|
61
|
-
|
62
|
-
def triplrInode r=true
|
63
|
-
e && (d? && (yield uri, Posix + 'dir#parent', parent
|
64
|
-
r && c.map{|c| yield uri, Posix + 'dir#child', c})
|
65
|
-
node.stat.do{|s|[:size,:ftype,:mtime].map{|p|
|
66
|
-
yield uri,Stat+p.to_s,(s.send p)}})
|
67
|
-
end
|
68
|
-
|
69
|
-
# create node
|
70
|
-
def dir
|
71
|
-
e || FileUtils.mkdir_p(d)
|
72
|
-
self
|
73
|
-
end
|
74
|
-
|
75
|
-
# create link
|
76
|
-
def ln t
|
77
|
-
t = E(t) # cast bare URI/string to resource
|
78
|
-
if !t.e # destination exists?
|
79
|
-
t.no.dirname.dir # ensure containing dir exists
|
80
|
-
# puts [:ln,uri].join ' '
|
81
|
-
FileUtils.symlink no, t.no # create link
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
def touch
|
86
|
-
FileUtils.touch no
|
87
|
-
self
|
88
|
-
end
|
89
|
-
|
90
|
-
def deleteNode
|
91
|
-
puts "-node #{d}" if e
|
92
|
-
no.deleteNode if e
|
93
|
-
self
|
94
|
-
end
|
95
|
-
|
96
|
-
def size
|
97
|
-
no.size
|
98
|
-
end
|
99
|
-
|
100
|
-
def read
|
101
|
-
f ? r : get
|
102
|
-
end
|
103
|
-
|
104
|
-
def get
|
105
|
-
(open uri).read
|
106
|
-
end
|
107
|
-
|
108
|
-
# read file - check if it exists & parse JSON if requested
|
109
|
-
def r p=false
|
110
|
-
if f
|
111
|
-
(p ? JSON.parse(readFile)[0] : readFile)
|
112
|
-
else
|
113
|
-
p ? {} : nil
|
114
|
-
end
|
115
|
-
rescue
|
116
|
-
p ? {} : nil
|
117
|
-
end
|
118
|
-
|
119
|
-
# write file - make sure dir exists & serialize JSON if requested
|
120
|
-
def w o,s=false
|
121
|
-
# puts "write #{uri} #{s}"
|
122
|
-
dirname.dir
|
123
|
-
writeFile (s ? [o].to_json : o)
|
124
|
-
self
|
125
|
-
end
|
126
|
-
|
127
|
-
def writeFile c
|
128
|
-
File.open(d,'w'){|f|f << c}
|
129
|
-
end
|
130
|
-
|
131
|
-
def readFile
|
132
|
-
File.open(d).read
|
133
|
-
end
|
134
|
-
|
135
|
-
def readlink
|
136
|
-
no.symlink? ? no.readlink.E : self
|
137
|
-
end
|
138
|
-
|
139
|
-
end
|
140
|
-
|
141
|
-
class Pathname
|
142
|
-
|
143
|
-
def dir
|
144
|
-
mkpath unless exist?
|
145
|
-
end
|
146
|
-
|
147
|
-
# append to path
|
148
|
-
def a s
|
149
|
-
Pathname.new to_s+s
|
150
|
-
end
|
151
|
-
|
152
|
-
# path -> E
|
153
|
-
def E
|
154
|
-
to_s.force_encoding('UTF-8').pathToURI false
|
155
|
-
end
|
156
|
-
|
157
|
-
def c
|
158
|
-
return [] unless directory?
|
159
|
-
children.delete_if{|n| n.basename.to_s.match /^(\.+|#{E::S})$/}
|
160
|
-
rescue
|
161
|
-
[]
|
162
|
-
end
|
163
|
-
|
164
|
-
def deleteNode
|
165
|
-
FileUtils.send file? ? :rm : :rmdir,self
|
166
|
-
parent.deleteNode if parent.c.empty?
|
167
|
-
end
|
168
|
-
|
169
|
-
end
|
170
|
-
|
171
|
-
class File::Stat
|
172
|
-
def utime
|
173
|
-
mtime.to_i
|
174
|
-
end
|
175
|
-
end
|