SlideShare a Scribd company logo
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

More Related Content

DOCX
Borrador del blog
PDF
Cheap frontend tricks
KEY
JQuery In Rails
PDF
Magic of Ruby
PPTX
Amp Up Your Admin
PDF
Crowdsourcing with Django
PDF
Love and Loss: A Symfony Security Play
PDF
Pagination in PHP
Borrador del blog
Cheap frontend tricks
JQuery In Rails
Magic of Ruby
Amp Up Your Admin
Crowdsourcing with Django
Love and Loss: A Symfony Security Play
Pagination in PHP

What's hot (20)

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

Viewers also liked (7)

PPT
My Life
PPT
Sherrys French
PPT
Text Message Marketing
PPT
M Y L I F E
PPT
Future developments in the children's secure estate
PPT
Mla For Sf
PPS
Absolutely Fantastic Slideshow
My Life
Sherrys French
Text Message Marketing
M Y L I F E
Future developments in the children's secure estate
Mla For Sf
Absolutely Fantastic Slideshow
Ad

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

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

Recently uploaded (20)

PPT
Teaching material agriculture food technology
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
PDF
cuic standard and advanced reporting.pdf
PDF
Empathic Computing: Creating Shared Understanding
PPTX
Programs and apps: productivity, graphics, security and other tools
PDF
Electronic commerce courselecture one. Pdf
PDF
Machine learning based COVID-19 study performance prediction
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PPTX
MYSQL Presentation for SQL database connectivity
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PPTX
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
Teaching material agriculture food technology
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
cuic standard and advanced reporting.pdf
Empathic Computing: Creating Shared Understanding
Programs and apps: productivity, graphics, security and other tools
Electronic commerce courselecture one. Pdf
Machine learning based COVID-19 study performance prediction
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
MYSQL Presentation for SQL database connectivity
The Rise and Fall of 3GPP – Time for a Sabbatical?
Mobile App Security Testing_ A Comprehensive Guide.pdf
Review of recent advances in non-invasive hemoglobin estimation
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
Chapter 3 Spatial Domain Image Processing.pdf
MIND Revenue Release Quarter 2 2025 Press Release
Diabetes mellitus diagnosis method based random forest with bat algorithm
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx

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 Кейтлин