infod 0.0.1

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.
Files changed (67) hide show
  1. data/bin/infod +37 -0
  2. data/config.ru +3 -0
  3. data/infod/Es/fs.rb +154 -0
  4. data/infod/Es/groonga.rb +101 -0
  5. data/infod/Es/redis.rb +3 -0
  6. data/infod/Es/sqlite.rb +3 -0
  7. data/infod/Es.rb +67 -0
  8. data/infod/H.rb +29 -0
  9. data/infod/K.rb +197 -0
  10. data/infod/N.rb +248 -0
  11. data/infod/Rb.rb +71 -0
  12. data/infod/Th/404.rb +55 -0
  13. data/infod/Th/500.rb +10 -0
  14. data/infod/Th/GET.rb +132 -0
  15. data/infod/Th/HEAD.rb +5 -0
  16. data/infod/Th/PATCH.rb +5 -0
  17. data/infod/Th/POST.rb +19 -0
  18. data/infod/Th/local.rb +22 -0
  19. data/infod/Th/uid.rb +24 -0
  20. data/infod/Th.rb +110 -0
  21. data/infod/W/audio.rb +56 -0
  22. data/infod/W/blog.rb +3 -0
  23. data/infod/W/cal.rb +110 -0
  24. data/infod/W/chat.rb +81 -0
  25. data/infod/W/color.rb +28 -0
  26. data/infod/W/core.rb +77 -0
  27. data/infod/W/css.rb +24 -0
  28. data/infod/W/csv.rb +13 -0
  29. data/infod/W/du.rb +35 -0
  30. data/infod/W/edit.rb +8 -0
  31. data/infod/W/examine/examine.rb +59 -0
  32. data/infod/W/examine/exhibit.rb +34 -0
  33. data/infod/W/examine/hist.rb +55 -0
  34. data/infod/W/examine/history.rb +19 -0
  35. data/infod/W/examine/normal.rb +31 -0
  36. data/infod/W/examine/protovis.rb +30 -0
  37. data/infod/W/examine/sw.rb +114 -0
  38. data/infod/W/examine/time/graph.rb +86 -0
  39. data/infod/W/examine/time/line.rb +24 -0
  40. data/infod/W/feed.rb +116 -0
  41. data/infod/W/find.rb +24 -0
  42. data/infod/W/forum.rb +3 -0
  43. data/infod/W/grep.rb +27 -0
  44. data/infod/W/html.rb +143 -0
  45. data/infod/W/image.rb +61 -0
  46. data/infod/W/json.rb +44 -0
  47. data/infod/W/kv.rb +66 -0
  48. data/infod/W/ls.rb +50 -0
  49. data/infod/W/mail.rb +248 -0
  50. data/infod/W/page.rb +30 -0
  51. data/infod/W/pdf.rb +16 -0
  52. data/infod/W/post.rb +9 -0
  53. data/infod/W/rdf.rb +32 -0
  54. data/infod/W/schema.rb +172 -0
  55. data/infod/W/search.rb +33 -0
  56. data/infod/W/shell.rb +30 -0
  57. data/infod/W/source.rb +35 -0
  58. data/infod/W/table.rb +87 -0
  59. data/infod/W/text.rb +94 -0
  60. data/infod/W/tree.rb +26 -0
  61. data/infod/W/vfs.rb +175 -0
  62. data/infod/W/wiki.rb +18 -0
  63. data/infod/W.rb +34 -0
  64. data/infod/Y.rb +17 -0
  65. data/infod/infod.rb +13 -0
  66. data/infod.rb +13 -0
  67. metadata +129 -0
data/infod/W/source.rb ADDED
@@ -0,0 +1,35 @@
1
+ class E
2
+
3
+ # show available querystring aliases
4
+ fn '/qs/GET',->e,r{H([H.css('/css/404'),F['?'].html]).hR}
5
+
6
+ def triplrSourceCode
7
+ # MIME strip x-
8
+ m = mime.split(/\//)[-1].sub(/^x-/,'')
9
+
10
+ # show line numbers?
11
+ n = @r.has_key?('n') && "--line-number-ref=#{uri.sh}"
12
+
13
+ yield uri,Content,
14
+ `source-highlight -f html -o STDOUT -i #{sh} -s #{m} #{n}`
15
+ end
16
+
17
+ fn 'view/code',->d,e{[{_: :style, c: 'body{background-color:white;color:black}'},
18
+ d.values.map{|r|[r.E.do{|e|[{_: :a,name: e.uri},e.html(e.base,true)]},'<br>',
19
+ r[Content]]}]}
20
+
21
+ # ls /usr/share/source-highlight/*.lang | xargs -i basename {} .lang | tr "\n" " "
22
+ %w{ada applescript asm awk bat bib bison caml changelog c clipper cobol conf cpp csharp css desktop diff d erlang errors flex fortran function glsl haskell haskell_literate haxe html html_simple java javascript key_string langdef latex ldap lisp log logtalk lsm lua m4 makefile manifest nohilite number outlang oz pascal pc perl php postscript prolog properties proto python ruby scala script_comment sh slang sml spec sql style symbols tcl texinfo todo url vala vbscript xml}
23
+ .map{|l|
24
+ ma = 'application/' + l
25
+ mt = 'text/x-' + l
26
+ # extension -> MIME
27
+ MIME[l.to_sym] ||= ma
28
+ # triplr/view mappings
29
+ [ma,mt].map{|m|
30
+ MIMEsource[m] ||= [:triplrSourceCode]
31
+
32
+ fn 'view/'+m, F['view/code']
33
+ }}
34
+
35
+ end
data/infod/W/table.rb ADDED
@@ -0,0 +1,87 @@
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/text.rb ADDED
@@ -0,0 +1,94 @@
1
+ # -*- coding: utf-8 -*-
2
+ #watch __FILE__
3
+
4
+ class String
5
+ def hrefs i=false
6
+ (partition /(https?:\/\/(\([^)]*\)|[,.]\S|[^\s),.”\'\"<>\]])+)/).do{|p|
7
+ p[0].gsub('<','&lt;').gsub('>','&gt;')+
8
+ (p[1].empty?&&''||'<a rel=untyped href='+p[1]+'>'+p[1].do{|p|
9
+ i && p.match(/(gif|jpg|png|tiff)$/i) &&
10
+ "<img src=#{p}>" || p
11
+ }+'</a>')+
12
+ (p[2].empty?&&''||p[2].hrefs)
13
+ }
14
+ rescue
15
+ self
16
+ end
17
+ def camelToke
18
+ scan /[A-Z]+(?=\b|[A-Z][a-z])|[A-Z]?[a-z]+/
19
+ end
20
+ end
21
+
22
+ class E
23
+
24
+ fn 'view/monospace',->d,e{
25
+ [(H.once e,'text',(H.css '/css/text')),
26
+ d.values.map{|v|
27
+ v[Content].do{|c|
28
+ {class: :text,
29
+ c: [{_: :a, href: v.url+'?view', c: v.label, style: "background-color:" + E.c},
30
+ {_: :pre, c: c }]}}}]}
31
+
32
+ F['view/'+MIMEtype+'application/word']= F['view/monospace']
33
+ F['view/'+MIMEtype+'blob'] = F['view/monospace']
34
+ F['view/'+MIMEtype+'text/plain'] = F['view/monospace']
35
+ F['view/'+MIMEtype+'text/rtf'] = F['view/monospace']
36
+
37
+ fn 'view/'+MIMEtype+'text/nfo',->r,_{r.values.map{|r|{_: :pre,
38
+ style: 'background-color:#000;padding:2em;color:#fff;float:left;font-family: "Courier New", "DejaVu Sans Mono", monospace; font-size: 13px; line-height: 13px',
39
+ c: [{_: :a,
40
+ style: 'color:#0f0;font-size:1.1em;font-weight:bold',
41
+ c: r.E.bare,
42
+ href: r.uri+'?view=txt'},
43
+ '<br>',r[Content]]}}}
44
+
45
+ fn 'view/title',->d,e{i=F['view/title/item']
46
+ d.map{|u,r|[i.(r,e),' ']}}
47
+
48
+ fn 'view/title/item',->r,e{{_: :a,href: r.E.url,c:r[e.q['title']||Title],class: :title}}
49
+
50
+ # linebreak-delimited list of URIs
51
+ def triplrUriList
52
+ open(d).readlines.map{|l|
53
+ l = l.chomp
54
+ yield uri, '/link', l
55
+ yield l, '/link', uri
56
+ }
57
+ end
58
+
59
+ # list of uris in a .u doc
60
+ def uris
61
+ graph.keys.map &:E
62
+ end
63
+
64
+ def triplrANSI
65
+ yield uri, Content, `cat #{sh} | aha`
66
+ end
67
+
68
+ def triplrRTF
69
+ yield uri, Content, `which catdoc && catdoc #{sh}`.hrefs
70
+ end
71
+
72
+ def triplrWord
73
+ yield uri, Content, `which antiword && antiword #{sh}`.hrefs
74
+ end
75
+
76
+ fn Render+'text/plain',->d,_=nil{
77
+ d.map{|u,r|# each resource
78
+ [u,"\n", # subject URI
79
+ r.map{|k,v| # each predicate
80
+ p = k.split(/[\/#]/)[-1] # predicate
81
+ k == 'uri' || # already displayed
82
+ [" "*(16-p.size).min(1),p," ", # align objects
83
+ (v.class==Array ? v:[v]).map{|v|# each object
84
+ v.respond_to?(:uri) ? v.uri : # object-URI
85
+ v.to_s. # object-content
86
+ gsub(/<\/*(br|p|div)[^>]*>/,"\n"). # add linebreaks
87
+ gsub(/<a.*?href="*([^'">\s]+)[^>]*>/,'\1 '). # unwrap links
88
+ gsub(/<[^>]+>/,''). # remove HTML
89
+ gsub(/\n+/,"\n")}. # collapse empty space
90
+ intersperse(' '),"\n"]},"\n"]}.join} # collate
91
+
92
+ fn Render+'text/uri',->d,_=nil{d.keys.join "\n"}
93
+
94
+ end
data/infod/W/tree.rb ADDED
@@ -0,0 +1,26 @@
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 ADDED
@@ -0,0 +1,175 @@
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
data/infod/W/wiki.rb ADDED
@@ -0,0 +1,18 @@
1
+ class E
2
+
3
+ def triplrMarkdown
4
+ require 'markdown'
5
+ yield uri,Content,Markdown.new(r).to_html
6
+ end
7
+
8
+ def triplrOrg
9
+ require 'org-ruby'
10
+ r.do{|r|
11
+ yield uri,Content,Orgmode::Parser.new(r).to_html}
12
+ end
13
+
14
+ def triplrTextile; require 'redcloth'
15
+ yield uri,Content,RedCloth.new(r).to_html
16
+ end
17
+
18
+ end
data/infod/W.rb ADDED
@@ -0,0 +1,34 @@
1
+ %w{
2
+ core
3
+ vfs
4
+ audio
5
+ cal
6
+ chat
7
+ color
8
+ css
9
+ csv
10
+ du
11
+ edit
12
+ examine/examine
13
+ feed
14
+ find
15
+ grep
16
+ html
17
+ image
18
+ json
19
+ kv
20
+ ls
21
+ mail
22
+ page
23
+ post
24
+ pdf
25
+ rdf
26
+ schema
27
+ search
28
+ shell
29
+ source
30
+ table
31
+ text
32
+ tree
33
+ wiki
34
+ }.each{|r|require_relative 'W/'+r}
data/infod/Y.rb ADDED
@@ -0,0 +1,17 @@
1
+ def watch f
2
+ E::Watch[f]=File.mtime f
3
+ puts 'dev '+f end
4
+
5
+ class E
6
+ F={}
7
+ Data={}
8
+ Watch={}
9
+ def self.dev; Watch.each{|f,ts|if ts < File.mtime(f); load f end} end
10
+ def y *a; F[uri].(*a) end
11
+ end
12
+
13
+ # URI named functions
14
+ def Fn a,*g; E::F[a].(*g) end
15
+ def fn u,y
16
+ # E::F[u.to_s] && puts("#{u} redefined")
17
+ E::F[u.to_s] = y end
data/infod/infod.rb ADDED
@@ -0,0 +1,13 @@
1
+
2
+ # the table of elements
3
+
4
+ # Es search
5
+ # H HTML
6
+ # K constants
7
+ # N naming
8
+ # Rb Ruby native-types
9
+ # Th HTTP
10
+ # W forms and formats
11
+ # Y lambdas
12
+
13
+ %w{Y K Rb N W Th H Es}.map{|e| require 'infod/' + e}
data/infod.rb ADDED
@@ -0,0 +1,13 @@
1
+
2
+ # the table of elements
3
+
4
+ # Es search
5
+ # H HTML
6
+ # K constants
7
+ # N naming
8
+ # Rb Ruby native-types
9
+ # Th HTTP
10
+ # W forms and formats
11
+ # Y lambdas
12
+
13
+ %w{Y K Rb N W Th H Es}.map{|e| require 'infod/' + e}
metadata ADDED
@@ -0,0 +1,129 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: infod
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - <carmen@whats-your.name>
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-09-01 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: thin
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ description: a data/filesystem web-server
31
+ email: _@whats-your.name
32
+ executables:
33
+ - infod
34
+ extensions: []
35
+ extra_rdoc_files: []
36
+ files:
37
+ - bin/infod
38
+ - infod.rb
39
+ - config.ru
40
+ - infod/Y.rb
41
+ - infod/H.rb
42
+ - infod/W.rb
43
+ - infod/K.rb
44
+ - infod/Th.rb
45
+ - infod/W/css.rb
46
+ - infod/W/json.rb
47
+ - infod/W/cal.rb
48
+ - infod/W/color.rb
49
+ - infod/W/rdf.rb
50
+ - infod/W/source.rb
51
+ - infod/W/mail.rb
52
+ - infod/W/table.rb
53
+ - infod/W/post.rb
54
+ - infod/W/forum.rb
55
+ - infod/W/audio.rb
56
+ - infod/W/examine/time/graph.rb
57
+ - infod/W/examine/time/line.rb
58
+ - infod/W/examine/examine.rb
59
+ - infod/W/examine/sw.rb
60
+ - infod/W/examine/protovis.rb
61
+ - infod/W/examine/exhibit.rb
62
+ - infod/W/examine/hist.rb
63
+ - infod/W/examine/normal.rb
64
+ - infod/W/examine/history.rb
65
+ - infod/W/pdf.rb
66
+ - infod/W/feed.rb
67
+ - infod/W/csv.rb
68
+ - infod/W/du.rb
69
+ - infod/W/core.rb
70
+ - infod/W/wiki.rb
71
+ - infod/W/image.rb
72
+ - infod/W/ls.rb
73
+ - infod/W/schema.rb
74
+ - infod/W/blog.rb
75
+ - infod/W/tree.rb
76
+ - infod/W/grep.rb
77
+ - infod/W/vfs.rb
78
+ - infod/W/html.rb
79
+ - infod/W/find.rb
80
+ - infod/W/kv.rb
81
+ - infod/W/page.rb
82
+ - infod/W/search.rb
83
+ - infod/W/text.rb
84
+ - infod/W/edit.rb
85
+ - infod/W/chat.rb
86
+ - infod/W/shell.rb
87
+ - infod/Es/sqlite.rb
88
+ - infod/Es/redis.rb
89
+ - infod/Es/fs.rb
90
+ - infod/Es/groonga.rb
91
+ - infod/Es.rb
92
+ - infod/Rb.rb
93
+ - infod/Th/POST.rb
94
+ - infod/Th/uid.rb
95
+ - infod/Th/HEAD.rb
96
+ - infod/Th/500.rb
97
+ - infod/Th/local.rb
98
+ - infod/Th/GET.rb
99
+ - infod/Th/PATCH.rb
100
+ - infod/Th/404.rb
101
+ - infod/infod.rb
102
+ - infod/N.rb
103
+ homepage: http://whats-your.name/www/
104
+ licenses:
105
+ - Unlicense
106
+ post_install_message:
107
+ rdoc_options: []
108
+ require_paths:
109
+ - .
110
+ required_ruby_version: !ruby/object:Gem::Requirement
111
+ none: false
112
+ requirements:
113
+ - - ! '>='
114
+ - !ruby/object:Gem::Version
115
+ version: '0'
116
+ required_rubygems_version: !ruby/object:Gem::Requirement
117
+ none: false
118
+ requirements:
119
+ - - ! '>='
120
+ - !ruby/object:Gem::Version
121
+ version: '0'
122
+ requirements: []
123
+ rubyforge_project:
124
+ rubygems_version: 1.8.23
125
+ signing_key:
126
+ specification_version: 3
127
+ summary: a data/filesystem web-server
128
+ test_files: []
129
+ has_rdoc: