]> git.r.bdr.sh - rbdr/grita/commitdiff
Muchas cosas.
authorBen Beltran <redacted>
Wed, 1 Dec 2010 19:17:32 +0000 (12:17 -0700)
committerBen Beltran <redacted>
Wed, 1 Dec 2010 19:17:32 +0000 (12:17 -0700)
Sería la primera copia funcional de la aplicación... Falta por supuesto estilizar las páginas individuales.

Gemfile
grita.rb
views/grito.haml
views/index.haml
views/style.css
views/style.less

diff --git a/Gemfile b/Gemfile
index 70436750222a2e3c278a645ee89e659a76e56c3d..c5e2123501ae57b1d5e9e3fea279d6fff46769bf 100644 (file)
--- a/Gemfile
+++ b/Gemfile
@@ -5,5 +5,8 @@ gem 'haml', ">=3.0.0"
 gem 'less', ">=1.2.0"
 gem 'rdiscount', ">=1.6.5"
 gem 'dm-core', ">=1.0"
+gem 'dm-validations', ">=1.0"
+gem 'dm-migrations', ">=1.0"
 gem 'dm-timestamps', ">=1.0"
-gem 'dm-mysql-adapter', ">=1.0"
\ No newline at end of file
+gem 'dm-postgres-adapter', ">=1.0"
+gem 'rqr', ">=0.2.2"
\ No newline at end of file
index eaf59a715e23c03ef8b5d71d9262cf013694a353..28d903a420b3b989a61927fd6aa930b18370c130 100644 (file)
--- a/grita.rb
+++ b/grita.rb
@@ -2,7 +2,10 @@ require 'sinatra'
 require 'haml'
 require 'less'
 require 'dm-core'
+require 'dm-validations'
 require 'dm-timestamps'
+require 'dm-migrations'
+require 'rqr'
 
 #config
 set :haml, :format => :html5
@@ -13,15 +16,37 @@ get '/' do
 end
 
 post '/' do
-  @grito = Grito.first_or_create(:title => params[:title], :text => params[:text])
+  @grito = Grito.new(:title => params[:title], :text => params[:text])
+  @grito.save
   haml :index
 end
 
+get '/qr/:grito.png' do
+   tmpfile = Tempfile.new('tmp')    
+   tmpfile.close
+   rpr_filepath = tmpfile.path + '.png'
+
+   RQR::QRCode.create do |qr|
+     qr.save('http://grita.heroku.com/'+params[:grito], rpr_filepath)
+   end
+
+   buffer = File.open(rpr_filepath).read
+
+   content_type 'image/png'
+   buffer
+end
+
 get '/style.css' do
   less :style
 end
 
-not_found do
+get '/:grito' do
+    @grito = Grito.first(:id => params[:grito].to_i(36))
+    raise "Invalid Post" if @grito.nil?
+    haml :grito
+end
+
+error do
   haml :error
 end
 
@@ -29,11 +54,14 @@ DataMapper.setup(:default, ENV['DATABASE_URL'] || 'mysql://root:root@localhost/g
 class Grito
   include DataMapper::Resource
   property :id,           Serial
-  property :title,        String,  :required => true
-  property :text,         Text,  :required => true
+  property :title,        String
+  property :text,         Text
   property :created_at,   DateTime
   
-  def geturl() 
+  validates_presence_of :title, :message => "&middot; Debes incluír un título."
+  validates_presence_of :text, :message => "&middot; ¡No escribiste contenido!"
+  
+  def gethash() 
     self.id.to_s(36)
   end
 end
\ No newline at end of file
index a8e5eb54f4c8cf49f218f5b8b2bd0736c57d16d7..1a3bbc2caf8d3ac65c17f1811d28401bf40d503a 100644 (file)
@@ -1,8 +1,5 @@
-%h1 The Sorrows of Young Werther
-%p
-       :markdown
-               A **wonderful serenity** has taken possession of my entire soul, like these sweet mornings of spring which I enjoy with my whole heart. I am alone, and feel the charm of existence in this spot, which was created for the bliss of souls like mine.
-
-               I am so happy, *my dear friend*, so absorbed in the exquisite sense of mere tranquil existence, that I neglect my talents. I should be incapable of drawing a single stroke at the present moment; and yet I feel that I never was a greater artist than now.
-
-               When, while the lovely valley teems with vapour around me, and the meridian sun strikes the upper surface of the impenetrable foliage of my trees, and but a few stray gleams steal into the inner sanctuary, I throw myself down among the tall grass by the trickling stream; and, as I lie close to the earth, a thousand unknown plants are noticed by me: when I hear the buzz of the little world among the stalks, and grow familiar with the countless indescribable forms of the insects and flies, then I feel the presence of the Almighty, who formed us in his own image,
\ No newline at end of file
+%h1= @grito.title
+%p= @grito.text
+%h2 Share
+%p=    "http://grita.heroku.com/#{@grito.gethash}"
+%img#qrcode{:alt=>"Código QR", :src=>"/qr/#{@grito.gethash}.png"}
\ No newline at end of file
index 742418d2aa876eb77cba132c6491dc700ce75149..2b40431778e65cfe4535fdea9f738adafbfbbd8e 100644 (file)
@@ -1,8 +1,18 @@
 %form{:method => 'post', :action => '/'}
+       -unless @grito.nil?
+               -unless @grito.errors.empty?
+                       #errors
+                               -@grito.errors.each do |e|
+                                       %span= e
+                                       %br
+               -else
+                       #success
+                               Su texto ha sido guardado!
+                               %a{:href=>"/#{@grito.gethash}"} De click aquí para verlo.
        %h1 Título
-       %input{:type => 'text', :name => 'title', :class => 'title'}
+       %input.title{:type => 'text', :name => 'title'}
        %br
        %h1 Texto
-       %textarea{:name => 'text', :class => 'text', :cols => '100'}
+       %textarea.text{:name => 'text', :cols => '76', :rows => '20'}
        %br
-       %input{:type => 'submit', :value => 'Gritalo!'}
\ No newline at end of file
+       %input.submit{:type => 'submit', :value => 'Gritalo!'}
\ No newline at end of file
index 35f810c911f1f204df9a7d6b5be02d3bcce4a436..c082c521e60f61c0df0a26341bcf697c48e76f22 100644 (file)
@@ -47,3 +47,47 @@ hr {
   border: 0;
   border-bottom: 1px solid #eeeeee;
 }
+#body #qrcode {
+  display: block;
+  margin: 10px 250px;
+}
+#body input.title {
+  border: 1px solid #eeeeee;
+  font-size: 1.6em;
+  padding: 5px;
+  margin: 0 90px;
+  width: 770px;
+}
+#body textarea.text {
+  border: 1px solid #eeeeee;
+  font-size: 1.6em;
+  padding: 5px;
+  margin: 0 90px;
+  resize: vertical;
+}
+#body input.submit {
+  width: 150px;
+  font-size: 4.8em;
+  margin: 10px 410px;
+  padding: 20px;
+}
+#body #errors {
+  -moz-border-radius: 5px;
+  border-radius: 5px;
+  -webkit-border-radius: 5px;
+  padding: 10px;
+  font-size: 1.4em;
+  margin: 0 90px;
+  width: 760px;
+  background-color: #ffebe8;
+}
+#body #success {
+  -moz-border-radius: 5px;
+  border-radius: 5px;
+  -webkit-border-radius: 5px;
+  padding: 10px;
+  font-size: 1.4em;
+  margin: 0 90px;
+  width: 760px;
+  background-color: #f0fff0;
+}
index 09630930b19f9cb08a9094dab560dfcf1e3b53c2..6052c107dbc77383ab8aa09fc59dbcefedbe55a6 100644 (file)
@@ -3,6 +3,10 @@
 @emphasis_color: #222;
 @light_color: #999;
 @border_color: #eee;
+@error_color: #ffebe8;
+@success_color: #f0fff0;
+
+@font_stack: "Helvetica Neue", Helvetica, Arial, sans-serif;
 
 *{
        margin: 0;
@@ -14,7 +18,7 @@ body{
        background-color: @background_color;
        text-align: center;
        font-size: .625em;
-       font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+       font-family: @font_stack;
 }
 
 #wrapper{
@@ -62,4 +66,54 @@ hr{
        margin: 10px;
        border: 0;
        border-bottom: 1px solid @border_color;
+}
+
+#body #qrcode{
+       display: block;
+       margin: 10px 250px;
+}
+
+#body input.title{
+       border: 1px solid @border_color;
+       font-size: 1.6em;
+       padding: 5px;
+       margin: 0 90px;
+       width: 770px;
+}
+
+#body textarea.text{
+       border: 1px solid @border_color;
+       font-size: 1.6em;
+       padding: 5px;
+       margin: 0 90px;
+       resize: vertical;
+}
+
+#body input.submit{
+       width: 150px;
+       font-size: 4.8em;
+       margin: 10px 410px;
+       padding: 20px;
+}
+
+#body #errors{
+       -moz-border-radius: 5px;
+       border-radius: 5px;
+       -webkit-border-radius: 5px;
+       padding: 10px;
+       font-size: 1.4em;
+       margin: 0 90px;
+       width: 760px;
+       background-color: @error_color;
+}
+
+#body #success{
+       -moz-border-radius: 5px;
+       border-radius: 5px;
+       -webkit-border-radius: 5px;
+       padding: 10px;
+       font-size: 1.4em;
+       margin: 0 90px;
+       width: 760px;
+       background-color: @success_color;
 }
\ No newline at end of file