Screencast: Pry in Rails verwenden

Pry ist eine Alternative zu IRB und bringt einige interessante Features und Funktionen mit. Ryan zeigt diese Woche wie es in Kombination mit Rails eingesetzt werden kann.

 

Downloads in verschiedenen Formaten:

source code
mp4
m4v
webm
ogv

 

Resourcen:

bash

[bash]
gem install pry pry-doc
rvm gemset use global
pry
pry -r ./config/environment
[/bash]

pry

[bash]
help
cd Article
cd first
cd name
nesting
exit
ls
ls -h
ls -m
ls -M
ls Array -M
show-doc Article#in_groups_of
show-doc all
show-doc all.in_groups_of
show-method all.in_groups_of
edit-method all.in_groups_of
.ls
.cat Gemfile
[/bash]

Gemfile

[ruby]
gem ‚pry‘, :group => :development
[/ruby]

models/article.rb

[ruby]
binding.pry
[/ruby]

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]

Screencast: Metriken

In dieser Woche gibt es von Ryan einen Screencast rund um das Thema Metriken. Es werden mitunter folgende Gems und Tools gezeigt: Metric Fu, Metrical, SimpleCov, Rails Best Practices.

 

Download:

Download(30.1 MB, 7:51)
Alternativer Download für iPod & Apple TV(27.3 MB, 7:51)

 

Resourcen:

 

Quellcode:

[bash]
gem install metrical
metrical
bundle
rake spec
open coverage/index.html
gem install rails_best_practices
rails_best_practices -f html –with-textmate
open rails_best_practices_output.html
[/bash]

[ruby]
# Gemfile
gem "simplecov", :require => false, :group => :test

# .metrics
MetricFu::Configuration.run do |config|
config.metrics -= [:rcov]
end
[/ruby]

Screencast: Ein Gem mit Bundler erstellen

Bundler kann nicht nur zur Installation von gems benutzt werden, es kann auch mit dem Befehl ‚bundle gem‘ ein gem generieren. Ryan zeigt wie das funktioniert und führt den Zuschauer durch die einzelnen Schritte.

 

Download:

Download(23.6 MB, 7:25)
Alternativer Download für iPod & Apple TV(19.4 MB, 7:25)

 

Resourcen:

 

Quellcode:

[bash]
bundle gem lorem
gem build lorem.gemspec
gem push lorem-0.0.1.gem
bundle
rake -T
rake build
rake install
rake release
[/bash]

[ruby]
# lorem.gemspec
# -*- encoding: utf-8 -*-
$:.push File.expand_path("../lib", __FILE__)
require "lorem/version"

Gem::Specification.new do |s|
s.name = "lorem"
s.version = Lorem::VERSION
s.platform = Gem::Platform::RUBY
s.authors = ["Ryan Bates"]
s.email = ["ryan@railscasts.com"]
s.homepage = ""
s.summary = %q{Lorem ipsum generator}
s.description = %q{Simply generates lorem ipsum text.}

s.add_development_dependency "rspec"

s.rubyforge_project = "lorem"

s.files = `git ls-files`.split("n")
s.test_files = `git ls-files — {test,spec,features}/*`.split("n")
s.executables = `git ls-files — bin/*`.split("n").map{ |f| File.basename(f) }
s.require_paths = ["lib"]
end

# Gemfile
source "http://rubygems.org"

# Specify your gem’s dependencies in lorem.gemspec
gemspec

# Rakefile
require ‚bundler‘
Bundler::GemHelper.install_tasks

# lib/lorem.rb
module Lorem
def self.ipsum
"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
end
end

# lib/lorem/version.rb
module Lorem
VERSION = "0.0.2"
end
[/ruby]

Screencast: Gravatar

Gravatar ist ein Service, der Benutzern die Möglichkeit gibt öffentlich benutzbare Avartare zum Beispiel in ihren Social Networks zu verwenden. Ryan zeigt diese Woche wie einfach Gravatar in einer Rails-Applikation genutzt werden kann.

 

Download:

Download(13.2 MB, 5:36)
Alternativer Download für iPod & Apple TV(11.2 MB, 5:36)

 

Resourcen:

 

Quellcode:

[ruby]
# application_helper.rb
def avatar_url(user)
if user.avatar_url.present?
user.avatar_url
else
default_url = "#{root_url}images/guest.png"
gravatar_id = Digest::MD5.hexdigest(user.email.downcase)
"http://gravatar.com/avatar/#{gravatar_id}.png?s=48&d=#{CGI.escape(default_url)}"
end
end
[/ruby]

[html]
<!– users/index.html.erb –>
<%= image_tag avatar_url(user) %>
[/html]

Screencast: Rake alternative Thor

Thor, ein Tool das die Programmierung von Kommandozeilen-Scripts vereinfacht, kann auch als Alternative zu Rake eingesetzt werden. In dieser Woche zeigt Ryan wie es eingesetzt werden kann.

 

Download:

Download(11.2 MB, 8:54)
Alternativer Download für iPod & Apple TV(11 MB, 8:54)

 

Resourcen:

 

Quellcode:

[bash]
thor help
thor list
thor setup:config
thor setup:config –force
thor setup:config private.yml –force
thor install lib/tasks/setup.thor
thor setup:populate
thor setup:populate –count 5
[/bash]

[ruby]
class Setup < Thor
desc "config [NAME]", "copy configuration files"
method_options :force => :boolean
def config(name = "*")
Dir["config/examples/#{name}"].each do |source|
destination = "config/#{File.basename(source)}"
FileUtils.rm(destination) if options[:force] && File.exist?(destination)
if File.exist?(destination)
puts "Skipping #{destination} because it already exists"
else
puts "Generating #{destination}"
FileUtils.cp(source, destination)
end
end
end

desc "populate", "generate records"
method_options :count => 10
def populate
require File.expand_path(‚config/environment.rb‘)
options[:count].times do |num|
puts "Generating article #{num}"
Article.create!(:name => "Article #{num}")
end
end
end
[/ruby]

Screencast: Ryans WebApp Favoriten 2009

Diese Woche zeigt Ryan in seinem Screencast seine Web-App-Favoriten für das Jahr 2009.

Download

Download (22.7 MB, 6:26)
Alternativer Download für iPod & Apple TV (9.3 MB, 6:26)

 

Ressourcen

Screencast: Mechanize

Mechanize ist eine Library mit der Webseiten automatisch abgesurft werden können. Es unterstützt Weiterleitungen, Cookies und mehr. Ryan zeigt diese Woche wie Mechanize benutzt werden kann.

Download (22.8 MB, 10:16)
Alternativer Download für iPod & Apple TV (14.8 MB, 10:16)

Resourcen:

Quellcode:
[bash]
sudo gem install mechanize
[/bash]

[ruby]
# script/console
puts Readline::HISTORY.entries.split("exit").last[0..-2].join("n")

# lib/tasks/product_prices.rake
desc "Import wish list"
task :import_list => :environment do
require ‚mechanize‘
agent = WWW::Mechanize.new

agent.get("http://railscasts.tadalist.com/session/new")
form = agent.page.forms.first
form.password = "secret"
form.submit

agent.page.link_with(:text => "Wish List").click
agent.page.search(".edit_item").each do |item|
Product.create!(:name => item.text.strip)
end
end
[/ruby]

Screencast: Screen Scraping mit Nokogiri

Screen Scraping, ein Verfahren um ganze oder Teile von Webseiten auszulesen, wird gerne für Mashups eingesetzt. Ryan Bates zeigt in seinem dieswöchigen Screencast, wie dies mit Nokogiri umgesetzt werden kann.

Download (43 MB, 13:34)
Alternativer Download für iPod & Apple TV (21.9 MB, 13:34)

Ressourcen:

Quellcode:

[bash]
sudo gem install nokogiri — –with-xml2-include=/usr/local/include/libxml2 –with-xml2-lib=/usr/local/lib
[/bash]

[ruby]
# nokogiri_test.rb
require ‚rubygems‘
require ’nokogiri‘
require ‚open-uri‘

url = "http://www.walmart.com/search/search-ng.do?search_constraint=0&ic=48_0&search_query=batman&Find.x=0&Find.y=0&Find=Find"
doc = Nokogiri::HTML(open(url))
puts doc.at_css("title").text
doc.css(".item").each do |item|
title = item.at_css(".prodLink").text
price = item.at_css(".PriceCompare .BodyS, .PriceXLBold").text[/$[0-9.]+/]
puts "#{title} – #{price}"
puts item.at_css(".prodLink")[:href]
end

# lib/tasks/product_prices.rake
desc "Fetch product prices"
task :fetch_prices => :environment do
require ’nokogiri‘
require ‚open-uri‘

Product.find_all_by_price(nil).each do |product|
url = "http://www.walmart.com/search/search-ng.do?search_constraint=0&ic=48_0&search_query=#{CGI.escape(product.name)}&Find.x=0&Find.y=0&Find=Find"
doc = Nokogiri::HTML(open(url))
price = doc.at_css(".PriceCompare .BodyS, .PriceXLBold").text[/[0-9.]+/]
product.update_attribute(:price, price)
end
end
[/ruby]