SlideShare una empresa de Scribd logo
1 de 21
Descargar para leer sin conexión
GEMS / PLUGINS
  Интересно, полезно, весело
Что такое джемс?

RubyGems (rubygems.org) — пакетный
менеджер для руби

Единый формат распространения отдельных
программ и библиотек

Программа для установки библиотек (джемс)

Сервер для распространения джемс
Преимущества джемс

require ‘rubygems’
require ‘gemname’

sudo gem update

Отсутствие централизации

Стандартный формат: 8300 джемс на
Rubyforge, 7400 джемс на Github
Github


125000 пользователей

100000 проектов

gists

GitHub Pages
restful-authentication
                   (technoweenie)




./script/generate authenticated user sessions

map.signup ‘/signup’,
  :controller => ‘users’, :action => ‘new’
map.login ‘/login’,
  :controller => ‘session’, :action => ‘new’
map.logout ‘/logout’,
  :controller => ‘session’, :action => ‘destroy’
authlogic            (binarylogic)




class UserSession < Authlogic::Session::Base
  # specify configuration here, such as:
  # logout_on_timeout true
  # ...many more options in the documentation
end

UserSession.create(:login => "john",
                   :password => "my password",
                   :remember_me => true)

session.destroy
will_paginate                (mislav)




Post.paginate :page => 1,
              :order => 'created_at DESC'

@posts = Post.paginate_by_board_id
                     @board.id,
                     :page => params[:page],
                     :order => 'updated_at DESC'

<%= will_paginate @posts %>
paperclip            (thoughtbot)




class User < ActiveRecord::Base
  has_attached_file :avatar,
                    :styles => {
                          :medium => "300x300>",
                          :thumb => "100x100>" }
end

<%= image_tag @user.avatar.url %>
<%= image_tag @user.avatar.url(:medium) %>
<%= image_tag @user.avatar.url(:thumb) %>
cucumber            (aslakhellesoy)




Feature: Addition
  In order to avoid silly mistakes
  As a math idiot
  I want to be told the sum of two numbers

  Scenario: Add two numbers
    Given I visit the calculator page
    And I fill in '50' for 'first'
    And I fill in '70' for 'second'
    When I press 'Add'
    Then I should see 'Answer: 120'
cucumber                   (cont’d)




Given /^I visit the calculator page$/ do
  visit '/add'
end

Given /^I fill in '(.*)' for '(.*)'$/ do |value, field|
  fill_in(field, :with => value)
end

When /^I press '(.*)'$/ do |name|
  click_button(name)
end

Then /^I should see '(.*)'$/ do |text|
  response_body.should contain(/#{text}/m)
end 
attachment_fu                (technoweenie)




has_attachment
  :size => 1.megabyte..2.megabytes
has_attachment
  :content_type => 'application/pdf'
has_attachment
  :store => :s3, :cloudfront => true

attachment_obj.public_filename
  #=> /attachments/2/file.jpg
attachment_obj.public_filename(:thumb)
  #=> /attachments/2/file_thumb.jpg
webrat         (brynary)




visit home_path
click_link "Sign up"
fill_in "Email", :with => "good@example.com"
select "Free account"
click_button "Register"
bort          (fudgestudios)




default css

rm rails.png/index.html

page title helper

application layout

filtering password /password_confirmation

database for sessions

capistrano for git/passenger

plugins (RESTful authentication, role requirement, Open ID authentication,
will_paginate, rspec/rspec-rails, exception notifier, asset packager)
whenever            (javan)




wheneverize .

every 3.hours do
  runner "MyModel.some_process"
  rake "my:rake:task"
end

every 1.day, :at => '4:30 am' do
  command "/usr/bin/my_great_command"
end

whenever --update-crontab
formtastic                               (justinfrench)



<% semantic_form_for @article do |form| %>
 <% form.inputs :name => "Basic" do %>
  <%= form.input :title %>
  <%= form.input :publication_state, :as => :radio %>
  <%= form.input :allow_comments, :label => "Allow commenting on this article" %>
 <% end %>`

 <% form.inputs :name => "Advanced" do %>
  <%= form.input :keywords, :required => false, :hint => "Example: ruby, rails, forms"
%>
 <% end %>

 <% form.inputs :name => "Author", :for => :author do |author_form| %>
  <%= author_form.input :first_name %>
  <%= author_form.input :last_name %>
 <% end %>

 <% form.buttons do %>
  <%= form.commit_button %>
 <% end %>
<% end %>
delayed_job                                                    (tobi)




create_table :delayed_jobs, :force => true do |table|
   table.integer :priority, :default => 0 #Allows some jobs to jump to the front of the queue
   table.integer :attempts, :default => 0 #Provides for retries, but still fail eventually.
   table.text :handler #YAML-encoded string of the object that will do work
   table.string :last_error #reason for last failure (See Note below)
   table.datetime :run_at #When to run. Could be Time.now for immediately, or sometime in the future.
   table.datetime :locked_at #Set when a client is working on this object
   table.datetime :failed_at #Set when all retries have failed (actually, by default, the record is
deleted instead)

   table.string :locked_by           #Who is working on this object (if locked)

   table.timestamps
end

MyJob#perform
haml               (Hampton Caitlin)



%ul
  %li Salt
  %li Pepper


%p
  Date/Time:
  - now = DateTime.now
  %strong= now
  - if now > DateTime.parse("December 31, 2006")
    = "Happy new " + "year!"


!main_bg= #46ar12
!main_width= 40em

#main
  background-color = !main_bg
  width = !main_width
  .sidebar
    background-color = !main_bg + #333333
    width = !main_width - 25em
searchlogic           (binarylogic)




User.username_equals("bjohnson")
User.username_does_not_equal("bjohnson")
User.username_begins_with("bjohnson")
User.username_not_begin_with("bjohnson")
User.username_like("bjohnson")
User.username_ends_with("bjohnson")
User.age_greater_than(20)
User.age_greater_than_or_equal_to(20)
User.username_null
User.username_not_null
User.username_blank
searchlogic                                                 (cont’d)




User.username_eq(10) # equals
User.id_lt(10)        # less than
User.id_lte(10)       # less than or equal to
User.id_gt(10)        # greater than
User.id_gte(10)       # greater than or equal to
User.orders_total_greater_than(20)
User.orders_line_items_price_greater_than(20)
User.ascend_by_order_total
User.descend_by_orders_line_items_price
User.username_like_all("bjohnson", "thunt") #will return any users that have all of the strings in their username
User.username_like_any(["bjohnson", "thunt"]) #also accepts an array
User.username_or_first_name_like("ben")
User.id_or_age_lt_or_username_or_first_name_begins_with(10)
search = User.search(:username_like => "bjohnson", :age_less_than => 20)
User.named_scope :four_year_olds, :conditions => {:age => 4}
User.search(:four_year_olds => true, :username_like => "bjohnson")
User.username_like("bjohnson").age_less_than(20).paginate(:page => params[:page])
User.search(:username_like => "bjohnson", :age_less_than => 20).paginate(:page =>
params[:page])
User.searchlogic
Автора ÿбер-джемсов
Technoweenie — Рик          Fudgestudios — Фил
Олсон, ENTP                 Джеффс, fudgestudios

Binarylogic — Бен           Javan — Джаван Махмали,
Джонсон, Binary Logic       Inkling Markets

Mislav — Мислав             Justinfrench — Джастин
Марохнич, Uniqpath          Френч, Indent

Aslakhellesoy — Аслак       Tobi — Тобиас Лютке,
Хеллесёй, BEKK Consulting   JadedPixel

Brynary — Брайан            hampton — Хэмптон
Хелмкамп, weplay            Кейтлин
Спасибо!


apostlion@gmail.com

@apostlion

Más contenido relacionado

La actualidad más candente

Kick start with j query
Kick start with j queryKick start with j query
Kick start with j query
Md. Ziaul Haq
 
Is HTML5 Ready? (workshop)
Is HTML5 Ready? (workshop)Is HTML5 Ready? (workshop)
Is HTML5 Ready? (workshop)
Remy Sharp
 
jQuery and Rails, Sitting in a Tree
jQuery and Rails, Sitting in a TreejQuery and Rails, Sitting in a Tree
jQuery and Rails, Sitting in a Tree
adamlogic
 
Mulberry: A Mobile App Development Toolkit
Mulberry: A Mobile App Development ToolkitMulberry: A Mobile App Development Toolkit
Mulberry: A Mobile App Development Toolkit
Rebecca Murphey
 
ApacheCon NA11 - Apache Celix, Universal OSGi?
ApacheCon NA11 - Apache Celix, Universal OSGi?ApacheCon NA11 - Apache Celix, Universal OSGi?
ApacheCon NA11 - Apache Celix, Universal OSGi?
abroekhuis
 
Phoenix for laravel developers
Phoenix for laravel developersPhoenix for laravel developers
Phoenix for laravel developers
Luiz Messias
 

La actualidad más candente (20)

Kick start with j query
Kick start with j queryKick start with j query
Kick start with j query
 
Jquery examples
Jquery examplesJquery examples
Jquery examples
 
Add edit delete in Codeigniter in PHP
Add edit delete in Codeigniter in PHPAdd edit delete in Codeigniter in PHP
Add edit delete in Codeigniter in PHP
 
$.Template
$.Template$.Template
$.Template
 
Country State City Dropdown in PHP
Country State City Dropdown in PHPCountry State City Dropdown in PHP
Country State City Dropdown in PHP
 
How Kris Writes Symfony Apps
How Kris Writes Symfony AppsHow Kris Writes Symfony Apps
How Kris Writes Symfony Apps
 
Is HTML5 Ready? (workshop)
Is HTML5 Ready? (workshop)Is HTML5 Ready? (workshop)
Is HTML5 Ready? (workshop)
 
Jquery In Rails
Jquery In RailsJquery In Rails
Jquery In Rails
 
Advanced jQuery
Advanced jQueryAdvanced jQuery
Advanced jQuery
 
Beyond Posts & Pages - Structured Content in WordPress
Beyond Posts & Pages - Structured Content in WordPressBeyond Posts & Pages - Structured Content in WordPress
Beyond Posts & Pages - Structured Content in WordPress
 
PhoneGap: Local Storage
PhoneGap: Local StoragePhoneGap: Local Storage
PhoneGap: Local Storage
 
jQuery and Rails, Sitting in a Tree
jQuery and Rails, Sitting in a TreejQuery and Rails, Sitting in a Tree
jQuery and Rails, Sitting in a Tree
 
Python Menu
Python MenuPython Menu
Python Menu
 
Mulberry: A Mobile App Development Toolkit
Mulberry: A Mobile App Development ToolkitMulberry: A Mobile App Development Toolkit
Mulberry: A Mobile App Development Toolkit
 
Emmet cheat-sheet
Emmet cheat-sheetEmmet cheat-sheet
Emmet cheat-sheet
 
ApacheCon NA11 - Apache Celix, Universal OSGi?
ApacheCon NA11 - Apache Celix, Universal OSGi?ApacheCon NA11 - Apache Celix, Universal OSGi?
ApacheCon NA11 - Apache Celix, Universal OSGi?
 
Phoenix for laravel developers
Phoenix for laravel developersPhoenix for laravel developers
Phoenix for laravel developers
 
Wynn Netherland: Accelerating Titanium Development with CoffeeScript, Compass...
Wynn Netherland: Accelerating Titanium Development with CoffeeScript, Compass...Wynn Netherland: Accelerating Titanium Development with CoffeeScript, Compass...
Wynn Netherland: Accelerating Titanium Development with CoffeeScript, Compass...
 
Make your own wp cli command in 10min
Make your own wp cli command in 10minMake your own wp cli command in 10min
Make your own wp cli command in 10min
 
Laravel 로 배우는 서버사이드 #5
Laravel 로 배우는 서버사이드 #5Laravel 로 배우는 서버사이드 #5
Laravel 로 배우는 서버사이드 #5
 

Destacado (7)

My Life
My LifeMy Life
My Life
 
Sherrys French
Sherrys FrenchSherrys French
Sherrys French
 
Text Message Marketing
Text Message MarketingText Message Marketing
Text Message Marketing
 
M Y L I F E
M Y  L I F EM Y  L I F E
M Y L I F E
 
Future developments in the children's secure estate
Future developments in the children's secure estateFuture developments in the children's secure estate
Future developments in the children's secure estate
 
Mla For Sf
Mla For SfMla For Sf
Mla For Sf
 
Absolutely Fantastic Slideshow
Absolutely Fantastic SlideshowAbsolutely Fantastic Slideshow
Absolutely Fantastic Slideshow
 

Similar a RubyBarCamp “Полезные gems и plugins”

Rails 3: Dashing to the Finish
Rails 3: Dashing to the FinishRails 3: Dashing to the Finish
Rails 3: Dashing to the Finish
Yehuda Katz
 
Desarrollando aplicaciones web en minutos
Desarrollando aplicaciones web en minutosDesarrollando aplicaciones web en minutos
Desarrollando aplicaciones web en minutos
Edgar Suarez
 
Rails 3 overview
Rails 3 overviewRails 3 overview
Rails 3 overview
Yehuda Katz
 
Venturing Into The Wild: A .NET Developer's Experience As A Ruby Developer
Venturing Into The Wild: A .NET Developer's Experience As A Ruby DeveloperVenturing Into The Wild: A .NET Developer's Experience As A Ruby Developer
Venturing Into The Wild: A .NET Developer's Experience As A Ruby Developer
Jon Kruger
 
Action View Form Helpers - 2, Season 2
Action View Form Helpers - 2, Season 2Action View Form Helpers - 2, Season 2
Action View Form Helpers - 2, Season 2
RORLAB
 
GHC Participant Training
GHC Participant TrainingGHC Participant Training
GHC Participant Training
AidIQ
 

Similar a RubyBarCamp “Полезные gems и plugins” (20)

Rails 3: Dashing to the Finish
Rails 3: Dashing to the FinishRails 3: Dashing to the Finish
Rails 3: Dashing to the Finish
 
Desarrollando aplicaciones web en minutos
Desarrollando aplicaciones web en minutosDesarrollando aplicaciones web en minutos
Desarrollando aplicaciones web en minutos
 
Django - sql alchemy - jquery
Django - sql alchemy - jqueryDjango - sql alchemy - jquery
Django - sql alchemy - jquery
 
Acceptance Testing with Webrat
Acceptance Testing with WebratAcceptance Testing with Webrat
Acceptance Testing with Webrat
 
Python Code Camp for Professionals 4/4
Python Code Camp for Professionals 4/4Python Code Camp for Professionals 4/4
Python Code Camp for Professionals 4/4
 
Rails 3 overview
Rails 3 overviewRails 3 overview
Rails 3 overview
 
The Browser Environment - A Systems Programmer's Perspective [sinatra edition]
The Browser Environment - A Systems Programmer's Perspective [sinatra edition]The Browser Environment - A Systems Programmer's Perspective [sinatra edition]
The Browser Environment - A Systems Programmer's Perspective [sinatra edition]
 
Engines: Team Development on Rails (2005)
Engines: Team Development on Rails (2005)Engines: Team Development on Rails (2005)
Engines: Team Development on Rails (2005)
 
JQuery Flot
JQuery FlotJQuery Flot
JQuery Flot
 
Python Code Camp for Professionals 3/4
Python Code Camp for Professionals 3/4Python Code Camp for Professionals 3/4
Python Code Camp for Professionals 3/4
 
Where's My SQL? Designing Databases with ActiveRecord Migrations
Where's My SQL? Designing Databases with ActiveRecord MigrationsWhere's My SQL? Designing Databases with ActiveRecord Migrations
Where's My SQL? Designing Databases with ActiveRecord Migrations
 
HTML5 New and Improved
HTML5   New and ImprovedHTML5   New and Improved
HTML5 New and Improved
 
Python Code Camp for Professionals 1/4
Python Code Camp for Professionals 1/4Python Code Camp for Professionals 1/4
Python Code Camp for Professionals 1/4
 
Ruby gems
Ruby gemsRuby gems
Ruby gems
 
More to RoC weibo
More to RoC weiboMore to RoC weibo
More to RoC weibo
 
Venturing Into The Wild: A .NET Developer's Experience As A Ruby Developer
Venturing Into The Wild: A .NET Developer's Experience As A Ruby DeveloperVenturing Into The Wild: A .NET Developer's Experience As A Ruby Developer
Venturing Into The Wild: A .NET Developer's Experience As A Ruby Developer
 
Action View Form Helpers - 2, Season 2
Action View Form Helpers - 2, Season 2Action View Form Helpers - 2, Season 2
Action View Form Helpers - 2, Season 2
 
«Работа с базами данных с использованием Sequel»
«Работа с базами данных с использованием Sequel»«Работа с базами данных с использованием Sequel»
«Работа с базами данных с использованием Sequel»
 
J Query Public
J Query PublicJ Query Public
J Query Public
 
GHC Participant Training
GHC Participant TrainingGHC Participant Training
GHC Participant Training
 

Último

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Victor Rentea
 

Último (20)

Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
JohnPollard-hybrid-app-RailsConf2024.pptx
JohnPollard-hybrid-app-RailsConf2024.pptxJohnPollard-hybrid-app-RailsConf2024.pptx
JohnPollard-hybrid-app-RailsConf2024.pptx
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 

RubyBarCamp “Полезные gems и plugins”

  • 1. GEMS / PLUGINS Интересно, полезно, весело
  • 2. Что такое джемс? RubyGems (rubygems.org) — пакетный менеджер для руби Единый формат распространения отдельных программ и библиотек Программа для установки библиотек (джемс) Сервер для распространения джемс
  • 3. Преимущества джемс require ‘rubygems’ require ‘gemname’ sudo gem update Отсутствие централизации Стандартный формат: 8300 джемс на Rubyforge, 7400 джемс на Github
  • 5. restful-authentication (technoweenie) ./script/generate authenticated user sessions map.signup ‘/signup’, :controller => ‘users’, :action => ‘new’ map.login ‘/login’, :controller => ‘session’, :action => ‘new’ map.logout ‘/logout’, :controller => ‘session’, :action => ‘destroy’
  • 6. authlogic (binarylogic) class UserSession < Authlogic::Session::Base # specify configuration here, such as: # logout_on_timeout true # ...many more options in the documentation end UserSession.create(:login => "john", :password => "my password", :remember_me => true) session.destroy
  • 7. will_paginate (mislav) Post.paginate :page => 1, :order => 'created_at DESC' @posts = Post.paginate_by_board_id @board.id, :page => params[:page], :order => 'updated_at DESC' <%= will_paginate @posts %>
  • 8. paperclip (thoughtbot) class User < ActiveRecord::Base has_attached_file :avatar, :styles => { :medium => "300x300>", :thumb => "100x100>" } end <%= image_tag @user.avatar.url %> <%= image_tag @user.avatar.url(:medium) %> <%= image_tag @user.avatar.url(:thumb) %>
  • 9. cucumber (aslakhellesoy) Feature: Addition In order to avoid silly mistakes As a math idiot I want to be told the sum of two numbers Scenario: Add two numbers Given I visit the calculator page And I fill in '50' for 'first' And I fill in '70' for 'second' When I press 'Add' Then I should see 'Answer: 120'
  • 10. cucumber (cont’d) Given /^I visit the calculator page$/ do   visit '/add' end Given /^I fill in '(.*)' for '(.*)'$/ do |value, field|   fill_in(field, :with => value) end When /^I press '(.*)'$/ do |name|   click_button(name) end Then /^I should see '(.*)'$/ do |text|   response_body.should contain(/#{text}/m) end 
  • 11. attachment_fu (technoweenie) has_attachment :size => 1.megabyte..2.megabytes has_attachment :content_type => 'application/pdf' has_attachment :store => :s3, :cloudfront => true attachment_obj.public_filename #=> /attachments/2/file.jpg attachment_obj.public_filename(:thumb) #=> /attachments/2/file_thumb.jpg
  • 12. webrat (brynary) visit home_path click_link "Sign up" fill_in "Email", :with => "good@example.com" select "Free account" click_button "Register"
  • 13. bort (fudgestudios) default css rm rails.png/index.html page title helper application layout filtering password /password_confirmation database for sessions capistrano for git/passenger plugins (RESTful authentication, role requirement, Open ID authentication, will_paginate, rspec/rspec-rails, exception notifier, asset packager)
  • 14. whenever (javan) wheneverize . every 3.hours do runner "MyModel.some_process" rake "my:rake:task" end every 1.day, :at => '4:30 am' do command "/usr/bin/my_great_command" end whenever --update-crontab
  • 15. formtastic (justinfrench) <% semantic_form_for @article do |form| %> <% form.inputs :name => "Basic" do %> <%= form.input :title %> <%= form.input :publication_state, :as => :radio %> <%= form.input :allow_comments, :label => "Allow commenting on this article" %> <% end %>` <% form.inputs :name => "Advanced" do %> <%= form.input :keywords, :required => false, :hint => "Example: ruby, rails, forms" %> <% end %> <% form.inputs :name => "Author", :for => :author do |author_form| %> <%= author_form.input :first_name %> <%= author_form.input :last_name %> <% end %> <% form.buttons do %> <%= form.commit_button %> <% end %> <% end %>
  • 16. delayed_job (tobi) create_table :delayed_jobs, :force => true do |table| table.integer :priority, :default => 0 #Allows some jobs to jump to the front of the queue table.integer :attempts, :default => 0 #Provides for retries, but still fail eventually. table.text :handler #YAML-encoded string of the object that will do work table.string :last_error #reason for last failure (See Note below) table.datetime :run_at #When to run. Could be Time.now for immediately, or sometime in the future. table.datetime :locked_at #Set when a client is working on this object table.datetime :failed_at #Set when all retries have failed (actually, by default, the record is deleted instead) table.string :locked_by #Who is working on this object (if locked) table.timestamps end MyJob#perform
  • 17. haml (Hampton Caitlin) %ul %li Salt %li Pepper %p Date/Time: - now = DateTime.now %strong= now - if now > DateTime.parse("December 31, 2006") = "Happy new " + "year!" !main_bg= #46ar12 !main_width= 40em #main background-color = !main_bg width = !main_width .sidebar background-color = !main_bg + #333333 width = !main_width - 25em
  • 18. searchlogic (binarylogic) User.username_equals("bjohnson") User.username_does_not_equal("bjohnson") User.username_begins_with("bjohnson") User.username_not_begin_with("bjohnson") User.username_like("bjohnson") User.username_ends_with("bjohnson") User.age_greater_than(20) User.age_greater_than_or_equal_to(20) User.username_null User.username_not_null User.username_blank
  • 19. searchlogic (cont’d) User.username_eq(10) # equals User.id_lt(10) # less than User.id_lte(10) # less than or equal to User.id_gt(10) # greater than User.id_gte(10) # greater than or equal to User.orders_total_greater_than(20) User.orders_line_items_price_greater_than(20) User.ascend_by_order_total User.descend_by_orders_line_items_price User.username_like_all("bjohnson", "thunt") #will return any users that have all of the strings in their username User.username_like_any(["bjohnson", "thunt"]) #also accepts an array User.username_or_first_name_like("ben") User.id_or_age_lt_or_username_or_first_name_begins_with(10) search = User.search(:username_like => "bjohnson", :age_less_than => 20) User.named_scope :four_year_olds, :conditions => {:age => 4} User.search(:four_year_olds => true, :username_like => "bjohnson") User.username_like("bjohnson").age_less_than(20).paginate(:page => params[:page]) User.search(:username_like => "bjohnson", :age_less_than => 20).paginate(:page => params[:page]) User.searchlogic
  • 20. Автора ÿбер-джемсов Technoweenie — Рик Fudgestudios — Фил Олсон, ENTP Джеффс, fudgestudios Binarylogic — Бен Javan — Джаван Махмали, Джонсон, Binary Logic Inkling Markets Mislav — Мислав Justinfrench — Джастин Марохнич, Uniqpath Френч, Indent Aslakhellesoy — Аслак Tobi — Тобиас Лютке, Хеллесёй, BEKK Consulting JadedPixel Brynary — Брайан hampton — Хэмптон Хелмкамп, weplay Кейтлин