Screencast: Sass Basiswissen

Sass ist neben CoffeeScript eine der Neuerungen die mit Rails 3.1 kommen werden. Sass ermöglicht die Entwicklung von Cascading Stylesheets (CSS) mit der Eweiterung, dass Ruby-Code in die Stylesheets eingebettet werden können. Somit lassen sich Variablen und Funktionen für die vereinfachte Erstellung nutzen. Weiterhin werden auch Tools zum Komprimieren mitgeliefert, um die generierten Dateien möglichst klein zu halten.

 

Downloads in verschiedenen Formaten:

source code
mp4
m4v
webm
ogv

 

Resourcen:

[css]
/*
*= require_self
*/
@import "layout.css.scss";
@import "projects.css.scss";
[/css]

[css]
$main-color: #1E7B12;

@mixin rounded-corners($radius) {
border-radius: $radius;
-moz-border-radius: $radius;
-webkit-border-radius: $radius;
}

body {
margin: 0;
padding: 0;
background-color: #FFF;
font-family: verdana;
font-size: 14px;
}

#header {
background-color: $main-color;
color: #FFF;
padding: 4px 100px;
border-bottom: solid 5px darken($main-color, 10%);

h1 {
font-size: 30px;
}
}

a {
color: $main-color;
text-decoration: none;
&:hover {
text-decoration: underline;
}
}

#container {
margin: 0 100px;
}
[/css]

[css]
#projects_controller {
.new_project {
background-color: $main-color;
color: #FFF;
padding: 5px 12px;
margin: 10px 0;
font-size: 16px;
@include rounded-corners(5px);
}

.project {
border: solid 1px #777;
margin: 20px 0;
padding: 7px 12px;
@include rounded-corners(10px);
}

.project h2 {
margin: 0;
}
}
[/css]

Screencast: CoffeeScript Basiswissen

CoffeeScript, einer der Neuerungen in Rails 3.1, ist eine Programmier-Sprache zur Generierung von JavaScript. Es will die JavaScript-Entwicklung erleichtern, indem es unnötige Anweisungen entfernt und somit eine kompaktere Entwicklung zulässt. Um einen Vorgeschmack über die Möglichkeiten zu bekommen, hat Ryan diese Woche seinen Screencast, dem Basiswissen zu CoffeeScript gewidmet. Er zeigt wie es in Kombination mit Rails 3.1 eingesetzt werden kann.

 

Downloads in verschiedenen Formaten:

source code
mp4
m4v
webm
ogv

 

Resourcen:

[javascript]
CreditCard =
cleanNumber: (number) -> number.replace /[- ]/g, ""

validNumber: (number) ->
total = 0
number = @cleanNumber(number)
for i in [(number.length-1)..0]
n = +number[i]
if (i+number.length) % 2 == 0
n = if n*2 > 9 then n*2 – 9 else n*2
total += n
total % 10 == 0

jQuery ->
$("#order_credit_card_number").blur ->
if CreditCard.validNumber(@value)
$("#credit_card_number_error").text("")
else
$("#credit_card_number_error").text("Invalid credit card number.")
[/javascript]

Rails 3.1 Release Candidate veröffentlicht

Wie auf der Rails-Konferenz 2011 versprochen, hat David gestern den ersten Release Candidate für Rails 3.1 veröffentlicht. neben Verbesserungen und Geschwindigkeitsoptimierungen bringt dieses Release viele Neuerungen mit.

Die größten Neuerungen sind

  • Die Asset Pipeline, welche auf Basis von Sprockets 2.0 statische Dateien wie JavaScripte und CSS performanter ausliefert. Zusätzlich sind SCSS als für Stylesheets und CoffeeScript für JavaScript als Default eingeführt worden.
  • HTTP Streaming (siehe Screencast) für eine schnellere Content-Auslieferung
  • JQuery löst nun Prototype als Standardbibliothek ab

 

Weiteres Features in diesem Release sind:

Eine vollständige und ausführlichere Liste zu den Änderungen sind im Changelog verfügbar: https://gist.github.com/958283

Die Installation kann wie gewohnt über gems durchgeführt werden:

[bash]
gem install rails –pre
[/bash]

 

Screencast: HTTP Streaming

In der kommenden Rails Version 3.1 wird mitunter HTTP Streaming als weiteres Feature eingeführt. In den meisten Web-Applikation, momentan auch bei Rails, wird der Inhalt komplett generiert und anschließend an den Client geschickt. Bei HTTP Streaming hingegen, wird der Inhalt „stückchenweise“ zur Verfügung gestellt. Also sobald er fertig generiert wurde. Vereinfacht beschrieben kann z.B. ein Browser, wenn er bereits den HTMl-Header mit externen Referenzen bekommen hat, diese anfangen zu laden, während der Server den restlichen Inhalt generiert.

 

Resourcen:


[code lang=“bash“]
bundle
echo "listen 3000, :tcp_nopush => false" > config/unicorn.development.rb
unicorn_rails –config-file config/unicorn.development.rb
curl -i localhost:3000
[/code]

[ruby]
stream

def index
@projects = Project.all
# alternative way to enable streaming:
# render :stream => true
end
[/ruby]

[html]
<% provide :title, "Projects" %>

<% sleep 5 %>
[/html]

[html]
<title><%= yield :title %></title>
[/html]

Screencast: Überblick über Rails 3.1

Nachdem letzte Woche (5. Mai 2011) Rails 3.1 Beta veröffentlicht wurde, wird es den einen oder anderen interessieren, was das zukünftige Release mit sich bringt. In dem Screencast von dieser Woche gibt Ryan einen Überblick auf die Neuerung in Rails 3.1, dass nicht lange auf sich warten lassen wird…

 

Downloads in verschiedenen Formaten:

mp4
m4v
webm
ogv

 

Resourcen:

 
rvm 1.9.2@railspre --create
gem install rails --pre
rails new todo
cd todo
bundle
rails g scaffold project name:string
rake db:migrate
rake test
 

p = Project.create!(:name => "Yardwork")
p2 = Project.find(1)
p.object_id == p2.object_id
 
alert "Hello world!"
 
has_many :tasks
has_many :assigments, :through => :tasks
has_many :users, :through => :assignments

attr_accessible :name, :as => :admin
 
@project.update_attributes(params[:project], :as => :admin)
 
<%= link_to "Edit", edit_project_url(@project, :subdomain => "foo") %>

Screencast: Dateiüberwachung mit Guard

Guard ist ein Tool für die Konsole, mit dem Veränderungen (FSEvent / Inotify / Polling) an Dateien überwacht werden können. Eine solche Funktion kann zum Beispiel für automatisierte Tests, Neustarts von Servern und viele andere Bereiche, in denen eine „Folgeaktion“ erforderlich ist, nützlich sein. In diesem Screencast gibt es eine kleine Einführung in Guard und wie es konfiguriert wird.

 

Download:

Download(13.8 MB, 8:44)
Alternativer Download für iPod & Apple TV(16 MB, 8:44)

 

Resourcen:

 

Quellcode:

[bash]
bundle
guard init rspec
guard init livereload
guard
[/bash]

[ruby]
# Gemfile
group :development, :test do
# …
gem ‚rb-fsevent‘, :require => false if RUBY_PLATFORM =~ /darwin/i
gem ‚guard-rspec‘
gem ‚guard-livereload‘
end

# Guardfile
guard ‚livereload‘ do
watch(%r{app/.+.(erb|haml)})
watch(%r{app/helpers/.+.rb})
watch(%r{public/.+.(css|js|html)})
watch(%r{config/locales/.+.yml})
end

guard ‚rspec‘, :version => 2 do
watch(%r{^spec/.+_spec.rb})
watch(%r{^lib/(.+).rb}) { |m| "spec/lib/#{m[1]}_spec.rb" }
watch(’spec/spec_helper.rb‘) { "spec" }

# Rails example
watch(’spec/spec_helper.rb‘) { "spec" }
watch(‚config/routes.rb‘) { "spec/routing" }
watch(‚app/controllers/application_controller.rb‘) { "spec/controllers" }
watch(%r{^spec/.+_spec.rb})
watch(%r{^app/(.+).rb}) { |m| "spec/#{m[1]}_spec.rb" }
watch(%r{^lib/(.+).rb}) { |m| "spec/lib/#{m[1]}_spec.rb" }
watch(%r{^app/controllers/(.+)_(controller).rb}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/requests/#{m[1]}_spec.rb"] }
watch(%r{^app/views/(.+)/}) { |m| "spec/requests/#{m[1]}_spec.rb" }
end
[/ruby]