You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@whimsical.apache.org by Sam Ruby <ru...@apache.org> on 2015/12/13 16:14:51 UTC
[whimsy.git] [4/37] Commit 8a50482: rough in a server
Commit 8a50482042c219ddc805db104c55e9ea671df09a:
rough in a server
Branch: refs/heads/secmail
Author: Sam Ruby <ru...@intertwingly.net>
Committer: Sam Ruby <ru...@intertwingly.net>
Pusher: rubys <ru...@apache.org>
------------------------------------------------------------
Gemfile | +++++++++++
Rakefile | ++++++++++++++
config.ru | +++++
server.rb | +++++++++++
views/index.html.rb | +++++++++++++++
------------------------------------------------------------
67 changes: 67 additions, 0 deletions.
------------------------------------------------------------
diff --git a/Gemfile b/Gemfile
index 8a27d17..3206146 100644
--- a/Gemfile
+++ b/Gemfile
@@ -1,2 +1,13 @@
+source 'https://rubygems.org'
+
gem 'mail'
+gem 'rake'
gem 'zip'
+gem 'whimsy-asf'
+gem 'sinatra'
+gem 'wunderbar'
+
+group :demo do
+ gem 'listen'
+ gem 'puma'
+end
diff --git a/Rakefile b/Rakefile
index 6e2498c..1cfaa07 100644
--- a/Rakefile
+++ b/Rakefile
@@ -1,3 +1,5 @@
+require_relative 'config'
+
verbose false
task :default do
@@ -21,3 +23,15 @@ desc 'Fetch and parse emails'
task :fetch => :bundle do
ruby 'parsemail.rb', '--fetch'
end
+
+desc 'WebServer that provides an interface to explore emails'
+task :server => :bundle do
+ require 'whimsy/asf/config'
+ ENV['RACK_ENV']='development'
+ require 'wunderbar/listen'
+end
+
+desc 'remove all parsed yaml files'
+task :clean do
+ rm_rf Dir["#{ARCHIVE}/*.yml"]
+end
diff --git a/config.ru b/config.ru
new file mode 100644
index 0000000..cd11ae0
--- /dev/null
+++ b/config.ru
@@ -0,0 +1,5 @@
+require File.expand_path('../server.rb', __FILE__)
+
+require 'whimsy/asf/rack'
+
+run Sinatra::Application
diff --git a/server.rb b/server.rb
new file mode 100644
index 0000000..b04a976
--- /dev/null
+++ b/server.rb
@@ -0,0 +1,22 @@
+require 'whimsy/asf'
+require 'wunderbar/sinatra'
+
+require_relative 'config'
+
+def load_mbox(file)
+ messages = YAML.load_file(file)
+ messages.delete :mtime
+ source = File.basename(file, '.yml')
+ messages.each do |key, value|
+ value[:source]=source
+ end
+end
+
+get '/' do
+ @messages = load_mbox(Dir["#{ARCHIVE}/*.yml"].sort.last)
+ @messages.merge! load_mbox(Dir["#{ARCHIVE}/*.yml"].sort[-2])
+
+ @messages = @messages.sort_by {|id, message| message[:time]}.reverse
+
+ _html :index
+end
diff --git a/views/index.html.rb b/views/index.html.rb
new file mode 100644
index 0000000..e2ca141
--- /dev/null
+++ b/views/index.html.rb
@@ -0,0 +1,15 @@
+_html do
+ _table do
+ @messages.each do |id, description|
+ next unless description[:attachments]
+
+ _tr_ do
+ _td! do
+ _a description[:time], href: "msg/#{description[:source]}/#{id}"
+ end
+ _td description[:name]
+ _td description['Subject']
+ end
+ end
+ end
+end