Ruby gems
-
Upload
papp-laszlo -
Category
Technology
-
view
2.080 -
download
4
description
Transcript of Ruby gems
Balabit Meetup - December 9, 2010 [email protected]
Balabit Meetup - December 9, 2010 [email protected]
ActiveRecord
Mysql
Ruby Git
RMagick
Do what I mean
Jabber
Balabit Meetup - December 9, 2010 [email protected]
ActiveRecord
Mysql
Ruby Git
RMagick
Do what I mean
Jabber
Balabit Meetup - December 9, 2010 [email protected]
First steps
sudo apt-get install rubygems
gem install git
Balabit Meetup - December 9, 2010 [email protected]
First steps
sudo apt-get install rubygems
gem install gitrequire “rubygems”require “git”
repo = Git.open “/work/scb”
repo.log.between ‘3.0.0’, ‘3.1.0’
Balabit Meetup - December 9, 2010 [email protected]
http://haml-lang.com
Balabit Meetup - December 9, 2010 [email protected]
#title .left = @title
#content .author.strong %span{ :style => “float: left” } Nucc
.body.mobile = @content.body
- if @content.footer? .footer.mobile = @content.footer
- plain <span>Copyright</span>
<div id=”title”> <div class=”left”> <%= @title %> </div></div>
<div id=”content”> <div class=”author strong”> <span style=”float: left”> Nucc </span> </div> <div class=”body mobile”> <%= @content.body %> </div></div>
HAML
Balabit Meetup - December 9, 2010 [email protected]
http://sass-lang.com
Balabit Meetup - December 9, 2010 [email protected]
$blue: #3bbfce$margin: 16px
.content-navigation border-color: $blue color: darken($blue, 9%)
.border padding: $margin / 2 margin: $margin / 2 border-color: $blue
.content-navigation { border-color: #3bbfce; color: #2b9eab;}
.border { padding: 8px; margin: 8px; border-color: #3bbfce;}
HAMLSASS
Balabit Meetup - December 9, 2010 [email protected]
@mixin table-base th text-align: center font-weight: bold td, th padding: 2px
@mixin left($dist) float: left margin-left: $dist
#data @include left(10px) @include table-base
#data { float: left; margin-left: 10px;}#data th { text-align: center; font-weight: bold;}#data td, #data th { padding: 2px;}
HAMLSASS
Balabit Meetup - December 9, 2010 [email protected]
HPricotrequire ‘rubygems’require ‘hpricot’
html = Hpricot("<p id=’test_id’>A simple <span class=’bold’>test</span> string.</p>")
(html/”p”).inner_html=> "A simple <span class=\"bold\">test string.</b>"
(html/:p/:span).first.inner_html
=> “test”
(html/”#test_id”).inner_html
(html/”span.bold”).remove
Balabit Meetup - December 9, 2010 [email protected]
HPricotrequire ‘rubygems’require ‘hpricot’require ‘open-uri’
html = open("http://iosflashvideo.fw.hu/") { |f| Hpricot(f, :xhtml_strict => true) }
html.search("//a[@href='/donate']")
html.search("html > body > p img")
xpath
css
html.at("#header").xpath #=> "//div[@id='header']"
css to xpath
html.at("//span").css_path #=> "p > span:nth(0)"
xpath to css
Balabit Meetup - December 9, 2010 [email protected]
Hpricot
(html/"span.bold").set(:class => 'weight')
(html/”span.bold”).remove
jQuery
(html/:span).each do |span| span.attributes[‘class’] = “weight”end
Looping
Balabit Meetup - December 9, 2010 [email protected]
http://rspec.info
Balabit Meetup - December 9, 2010 [email protected]
RSPEC
Behaviour Driven Development
Describe a network interface!
It should have a host address.
It should have a network address.
It should have a gateway address.
The gateway and the host address must be in the same network.
Balabit Meetup - December 9, 2010 [email protected]
RSPEC
Behaviour Driven Development
Describe a network interface!
It should have a host address.
It should have a network address.
It should have a gateway address.
The gateway and the host address must be in the same network.
describe Interface do
it “should have a host address” do end
it “should have a network address” do end
it “should have a gateway address” do end
it “gateway and host address...” do end
end
Balabit Meetup - December 9, 2010 [email protected]
RSPECdescribe Interface do
before :all do @interface = Interface.new end
before :each do @interface.network = “10.30.0.0” end
it “should have a host address” do @interface.should respond_to :host end
it “should be valid” do # Rails model validation @interface.should be_valid end
after :each do #do something end
end
Balabit Meetup - December 9, 2010 [email protected]
RSPECdescribe Interface do
describe :network
subject { @interface.network }
context “when netmask is 255.255.0.0” do before { @interface.netmask = “255.255.0.0” } it { should =~ /0.0$/} end
context “when netmask is 255.0.0.0” do before { @interface.netmask = “255.0.0.0” } it { should =~ /0.0.0$/} end
context “when gateway and host are not in the same network” do # network address is 10.30.0.0/255.255.0.0 currently before { @interface.gateway = “10.100.255.254” }
it { should =~ /^10.100/ } specify { @interface.should not.be_valid } end endend
Balabit Meetup - December 9, 2010 [email protected]
RSPEC
Interface network when netmask is 255.255.0.0 should =~ /0.0$/ when netmask is 255.0.0.0 should =~ /0.0.0$/ when gateway and host are not in the same network should =~ /^10.100/ should not be valid
expected: /0.0$/, got: "10.30.0.1" (using =~) Diff: @@ -1,2 +1,2 @@ -/0.0$/ +"10.30.0.1"
Balabit Meetup - December 9, 2010 [email protected]
http://cukes.info
Balabit Meetup - December 9, 2010 [email protected]
Cucumber
Precondition Given
Action When
Postcondition Then
Balabit Meetup - December 9, 2010 [email protected]
Cucumber
Feature: Network Connection Managing network connections on intraweb
Scenario: Interface settings
Given an Interface and its address is 10.30.0.34 and its network is 10.30.0.0
When the gateway is 10.100.255.254
Then its not valid
Balabit Meetup - December 9, 2010 [email protected]
Cucumber
Feature: Network Connection Managing network connections on intraweb
Scenario: Interface settings
Given an Interface and its address is <IP> and its network is <NETWORK>
When the gateway is <GATEWAY>
Then its <RESULT>
Examples: | IP | NETWORK | GATEWAY | RESULT | | 10.30.0.34 | 10.30.0.0 | 10.30.255.254 | VALID | | 10.100.30.1 | 10.100.0.0 | 10.30.255.254 | NOT VALID |
Balabit Meetup - December 9, 2010 [email protected]
Cucumber
Given an Interface and its address is <IP> and its network is <NETWORK>
Given /^an Interface$/ do @interface = Interface.newend
Given /address is (.*)$/ do |value| @interface.address = valueend
Given /network is (.*)$/ do |value| @interface.network = valueend
Balabit Meetup - December 9, 2010 [email protected]
Cucumber
When the gateway is <GATEWAY>
Then its <RESULT>
When /^the gateway is (.*)$/ do |gw| @interface.gateway = gwend
Then /its (.*)$/ do |result| @interface.validate.should == (result == “VALID”)end
Balabit Meetup - December 9, 2010 [email protected]
Cucumber
Jellemző: Összeadás Azért, hogy elkerüljem a buta hibákat amit diszkalkúliásként elkövethetek, két szám összegét szeretném kiszámoltatni.
Forgatókönyv vázlat: Két szám összeadása Amennyiben beütök a számológépbe egy <be_1>-est És beütök a számológépbe egy <be_2>-est Majd megnyomom az <gomb> gombot Akkor eredményül <ki>-t kell kapnom
Példák: | be_1 | be_2 | gomb | ki | | 20 | 30 | add | 50 | | 2 | 5 | add | 7 | | 0 | 40 | add | 40 |
by gbence
Balabit Meetup - December 9, 2010 [email protected]
Cucumber
Before do @calc = Calculator.newend
Ha /^beütök a számológépbe egy (\d+)\-(?:es|as|ös|ás)t$/ do |n| @calc.push n.to_iend
Majd /^megnyomom az (\w+) gombot$/ do |op| @result = @calc.send opend
Akkor /^eredményül (.*)\-(?:e|a|ö|á|)t kell kapnom$/ do |result| @result.should == result.to_fend
Balabit Meetup - December 9, 2010 [email protected]
CucumberOH HAI: STUFFING
MISHUN: CUCUMBR I CAN HAZ IN TEH BEGINNIN 3 CUCUMBRZ WEN I EAT 2 CUCUMBRZ DEN I HAS 2 CUCUMBERZ IN MAH BELLY AN IN TEH END 1 CUCUMBRZ KTHXBAI
ICANHAZ /^IN TEH BEGINNIN (\d+) CUCUMBRZ$/ do |n| @basket = Basket.new(n.to_i)end
WEN /^I EAT (\d+) CUCUMBRZ$/ do |n| @belly = Belly.new @belly.eat(@basket.take(n.to_i))end
Balabit Meetup - December 9, 2010 [email protected]
OmniAuth
Foursquare
Meetup
OpenID
Balabit Meetup - December 9, 2010 [email protected]
OmniAuth
Rails.application.config.middleware.use OmniAuth::Builder do provider :twitter, 'CONSUMER_KEY', 'CONSUMER_SECRET'end
/config/initializers/omniauth.rb
Balabit Meetup - December 9, 2010 [email protected]
OmniAuth
Rails.application.config.middleware.use OmniAuth::Builder do provider :twitter, 'CONSUMER_KEY', 'CONSUMER_SECRET'end
/config/initializers/omniauth.rb
/auth/twitter
User
get redirect
/auth/failed/auth/twitter/callback
valid failed
Balabit Meetup - December 9, 2010 [email protected]
OmniAuth
class AuthController < Application
def callback
auth_hash = request.env['omniauth.auth']
# auth_hash: # { # ‘uid’ => “12345”
# ‘provider’ => “twitter” # ‘user_info’ => {
# ‘name’ => “User name” # ‘nickname’ => “nick”, # ...
# } # }
end
...
auth_controller.rb
Balabit Meetup - December 9, 2010 [email protected]
Ruby C API
http://ruby-doc.org/docs/ProgrammingRuby/html/ext_ruby.html
Balabit Meetup - December 9, 2010 [email protected]
class Test
def initialize @array = Array.new end
def add(anObject) @array.push(anObject) end
end
Balabit Meetup - December 9, 2010 [email protected]
Ruby C
#include "ruby.h"
static VALUE t_init(VALUE self){ VALUE array;
array = rb_ary_new(); rb_iv_set(self, "@array", array); return self;}
static VALUE t_add(VALUE self, VALUE anObject){ VALUE array;
array = rb_iv_get(self, "@array"); rb_ary_push(array, anObject); return array;}...
main.cclass Test
def initialize @array = Array.new end
def add(anObject) @array.push(anObject) end
end
Balabit Meetup - December 9, 2010 [email protected]
Ruby C
/* from the previous slide */static VALUE t_init(VALUE self);static VALUE t_add(VALUE self, VALUE anObject);/* end */
VALUE cTest;
void Init_Test() { cTest = rb_define_class("Test", rb_cObject); rb_define_method(cTest, "initialize", t_init, 0); rb_define_method(cTest, "add", t_add, 1);}
main.cclass Test
def initialize @array = Array.new end
def add(anObject) @array.push(anObject) end
end
Balabit Meetup - December 9, 2010 [email protected]
Ruby C
require 'mkmf'create_makefile("Test")
extconf.rb
nucc@rubybox ~ $ ruby extconf.rbnucc@rubybox ~ $ makenucc@rubybox ~ $ make install
Balabit Meetup - December 9, 2010 [email protected]
Ruby C
require “Test”
test = Test.newtest.add("Balabit Meetup")p test
=> #<Test:0x100156548 @array=["Balabit Meetup"]>
my_test.rb
Balabit Meetup - December 9, 2010 [email protected]
Balabit Meetup - December 9, 2010 [email protected]
require 'ftplib'
ftp = FTP.open('ftp.netlab.co.jp')ftp.loginftp.chdir('pub/lang/ruby')puts ftp.dirftp.quit
?
Balabit Meetup - December 9, 2010 [email protected]
require 'ftplib'
ftp = FTP.open('ftp.netlab.co.jp')ftp.loginftp.chdir('pub/lang/ruby')puts ftp.dirftp.quit
?RubyPyth
on
Balabit Meetup - December 9, 2010 [email protected]
Questions?
Balabit Meetup - December 9, 2010 [email protected]
Thank you!