display the README in 'get /README'
authorLunar <lunar@anargeek.net>
Tue, 28 Feb 2012 15:15:19 +0000 (16:15 +0100)
committerLunar <lunar@anargeek.net>
Thu, 14 Mar 2013 09:12:08 +0000 (10:12 +0100)
We introduce a dependency on maruku to parse Markdown and display the README.

This new (trivial) feature is spec'd in the new `spec/coquelicot/app_sec.rb`
which is the canonical file location.

We also introduce a new dependency on Capybara: its interface is so much nicer,
and ideally, most of the specs in `spec/coquelicot_spec.rb` will be rewriten
to use it instead of Rack::Test::Methods and Hpricot.

Gemfile
Gemfile.lock
lib/coquelicot/app.rb
spec/coquelicot/app_spec.rb [new file with mode: 0644]
spec/coquelicot_spec.rb
views/layout.haml
views/style.sass

diff --git a/Gemfile b/Gemfile
index a9fed53..4c95c06 100644 (file)
--- a/Gemfile
+++ b/Gemfile
@@ -7,6 +7,7 @@ gem "haml-magic-translations",
   :git    => 'https://dl.poivron.org/new/haml-magic-translations.git',
   :branch => 'coquelicot'
 gem "sass"
+gem "maruku"
 gem "fast_gettext"
 gem "lockfile", "~>1.4.3"
 gem "json"
@@ -16,6 +17,7 @@ group :test do
   gem "hpricot", "~>0.8.2"
   gem "timecop", "~>0.3.5"
   gem "rack-test", "~>0.5.7"
+  gem "capybara"
 end
 
 group :development do
index af33f18..c6bd658 100644 (file)
@@ -10,10 +10,20 @@ GEM
   remote: http://rubygems.org/
   specs:
     backports (2.3.0)
+    capybara (1.1.2)
+      mime-types (>= 1.16)
+      nokogiri (>= 1.3.3)
+      rack (>= 1.0.0)
+      rack-test (>= 0.5.4)
+      selenium-webdriver (~> 2.0)
+      xpath (~> 0.1.4)
+    childprocess (0.3.1)
+      ffi (~> 1.0.6)
     daemons (1.1.8)
     diff-lcs (1.1.3)
     eventmachine (0.12.10)
     fast_gettext (0.6.4)
+    ffi (1.0.11)
     gettext (2.1.0)
       locale (>= 2.0.5)
     haml (3.1.4)
@@ -21,6 +31,11 @@ GEM
     json (1.6.5)
     locale (2.0.5)
     lockfile (1.4.3)
+    maruku (0.6.0)
+      syntax (>= 1.0.0)
+    mime-types (1.17.2)
+    multi_json (1.0.4)
+    nokogiri (1.5.0)
     rack (1.4.1)
     rack-protection (1.2.0)
       rack
@@ -34,7 +49,13 @@ GEM
     rspec-expectations (2.8.0)
       diff-lcs (~> 1.1.2)
     rspec-mocks (2.8.0)
+    rubyzip (0.9.6.1)
     sass (3.1.15)
+    selenium-webdriver (2.19.0)
+      childprocess (>= 0.2.5)
+      ffi (~> 1.0.9)
+      multi_json (~> 1.0.4)
+      rubyzip
     sinatra (1.3.2)
       rack (~> 1.3, >= 1.3.6)
       rack-protection (~> 1.2)
@@ -46,17 +67,21 @@ GEM
       rack-test
       sinatra (~> 1.3.0)
       tilt (~> 1.3)
+    syntax (1.0.0)
     thin (1.3.1)
       daemons (>= 1.0.9)
       eventmachine (>= 0.12.6)
       rack (>= 1.0.0)
     tilt (1.3.3)
     timecop (0.3.5)
+    xpath (0.1.4)
+      nokogiri (~> 1.3)
 
 PLATFORMS
   ruby
 
 DEPENDENCIES
+  capybara
   fast_gettext
   gettext (~> 2.1.0)
   haml (~> 3.1)
@@ -64,6 +89,7 @@ DEPENDENCIES
   hpricot (~> 0.8.2)
   json
   lockfile (~> 1.4.3)
+  maruku
   rack (~> 1.1)
   rack-test (~> 0.5.7)
   rspec (~> 2.0)
index 5170b26..056fdef 100644 (file)
@@ -74,6 +74,11 @@ module Coquelicot
       haml :index
     end
 
+    get '/README' do
+      haml(":markdown\n" +
+           File.read(File.join(settings.root, 'README')).gsub(/^/, '  '))
+    end
+
     get '/random_pass' do
       "#{Coquelicot.gen_random_pass}"
     end
diff --git a/spec/coquelicot/app_spec.rb b/spec/coquelicot/app_spec.rb
new file mode 100644 (file)
index 0000000..7953436
--- /dev/null
@@ -0,0 +1,35 @@
+# Coquelicot: "one-click" file sharing with a focus on users' privacy.
+# Copyright © 2010-2012 potager.org <jardiniers@potager.org>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+require 'spec_helper'
+require 'capybara/dsl'
+
+describe Coquelicot::Application do
+  include Capybara::DSL
+  Capybara.app = Coquelicot::Application
+
+  include_context 'with Coquelicot::Application'
+
+  describe 'get /README' do
+    before do
+      visit '/README'
+    end
+    it 'should display the README file' do
+      title = File.open(File.expand_path('../../../README', __FILE__)) { |f| f.readline.strip }
+      find('h1').should have_content(title)
+    end
+  end
+end
index 9fd42ca..a9c26cb 100644 (file)
@@ -22,6 +22,13 @@ require 'tmpdir'
 
 UPLOAD_PASSWORD = 'secret'
 
+# The specs in this file are written like what should have been Cucumber
+# features and without much knowledge of best practices with RSpec. Most of
+# them should be improved, rewritten and moved to `spec/coquelicot/app_spec.rb`.
+#
+# Once down, we could remove the dependency on Hpricot for the much better
+# Capybara (which is used in `spec/coquelicot/app_spec.rb`).
+
 describe 'Coquelicot' do
   include Rack::Test::Methods
 
index b910acf..f09ba97 100644 (file)
@@ -43,7 +43,8 @@
     #container
       = yield
     #footer
-      %span= 'Coquelicot © 2010-2012 potager.org'
+      %a{ :href => 'README' }= 'Coquelicot'
+      %span= '© 2010-2012 potager.org'
       %span
         = '—'
         %a{ :href => 'http://www.gnu.org/licenses/agpl.txt' }= 'AGPLv3'
index aa026e4..a155ac3 100644 (file)
@@ -36,6 +36,9 @@ h1
   border-bottom: solid 1px #b60a00
   text-align: center
 
+h2
+  border-bottom: solid 1px #b60a00
+
 #container
   width: 550px
   margin: 2em auto