TechTalk #67 : Introduction to Ruby and Sinatra

Post on 18-Jul-2015

447 views 4 download

Transcript of TechTalk #67 : Introduction to Ruby and Sinatra

Ruby dan SinatraBy: Delta Purna Widyangga

| @deltawidyanggad@qiscus.com

Tentang RubyA dynamic, open source programming language witha focus on simplicity and productivity. It has elegant

syntax that is natural to read and easy to write -ruby-lang.org

Dibuat oleh @matz (Yukihiro Matsumoto)Public release 1995Object OrientedSekarang versi 2.2.1https://github.com/ruby/ruby

Why Ruby"Ruby stays out of your way" (Dave Thomas)“trying to make Ruby natural, not simple” (Matz)Imperative with functional flavor (+OO)VersatileGreat communities ( )RubyGems

Ruby is VersatileScriptingServer side web (Rails, Sinatra, etc.)Client side web (Opal, Volt)Mobile (Ruby Motion)Robotics (Artoo)JVM based app (JRuby)

Ruby.newdef greeting(name);

result = "Hello, " + name;

return result;

end;

puts(greeting("Delta"));

puts(greeting("Puti"));

Ruby.new (Refined)def greeting(name)

"Hello, #{name}"

end

puts greeting("Delta")

puts greeting("Puti")

No semicolon | return the last expression | optional parentheses |String interpolation

Object.. Object.. Everywhereputs "Tech Talk JDV".length

puts "Qiscus".index("c")

puts "Delta Purna".reverse

puts 42.even?

puts nil.to_i

String, FixNum, Everything on ruby land, even nothing is an object

Monkey Patch Everythingclass String

def shout!

"#{self.upcase}!!!"

end

end

puts "Tech Talk JDV".shout!

Can doesn't mean you shouldclass Animal; def walk; "Walking..."; end; end;

class Cat < Animal

def speak

"Meong..."

end

end

puts "#{Cat.new.speak} while #{Cat.new.walk}"

Arraysmy_arr = [ 10, 'qiscus', 1.618 ]

puts "The second element is #{my_arr[1]}"

# set the third element

my_arr[2] = nil

puts "The array is now #{my_arr}"

Hashesperson = {

'name' => 'Delta Purna Widyangga',

'age' => '28',

'job' => 'Programmer'

}

p person['name']

p person['job']

p person['weight']

Blocks (1)def my_block

puts "Begin"

yield

yield

puts "End"

end

my_block { puts "Inside my block" }

Blocks (2)def our_programmers

yield "Hiraq", "Backend"

yield "Fikri", "Frontend"

end

our_programmers do |name, role|

puts "#{name} is a #{role} developer"

end

Iterators[ 'angga', 'oki', 'omayib' ].each {|name| print name, " " }

3.times { print "*" }

2.upto(8) {|i| print i }

('b'..'f').each {|char| print char }

puts

Collectionsp [ 1, 2, 3 ].map { |n| n * 2 }

p (1..10).select { |n| n % 2 == 0 }

p [ 10, 20, 30 ].reduce { |sum, n| sum + n }

Ruby for DSLRuby is good for creating internal Domain Specific Language (DSL)

tweet_as('deltawidyangga') do

text 'hello world this is my first tweet'

mention 'putiayusetiani'

link 'http://melangkahkesurga.com'

hashtag 'first'

end

tweet_as('deltawidyangga') do

mention 'putiayusetiani'

Tentang SinatraSinatra is a DSL for quickly creating web applications

in Ruby with minimal effort - sinatrarb.com

Dibuat oleh @bmizerany (Blake Mizerany) tahun 2007Sekarang di maintain oleh @rkh (Konstantin Haase)

Why SinatraThey are both solving a different set of issues, even

though they indeed overlap. While Rails is aframework focused on writing model driven webapplications, Sinatra is a library for dealing withHTTP from the server side. If you think in terms of

HTTP requests/responses, Sinatra is the ideal tool. Ifyou need full integration and as much boilerplate as

possible, Rails is the way to go. - Konstantin

Sinatra is great for the micro-style, Rails is not. Aslong as you stay micro, Sinatra will beat Rails. If you

go beyond micro, Rails will beat Sinatra. - David

Installing SinatraSinatra adalah sebuah gem (library di ruby)

gem install sinatrahttps://rubygems.org/gems/sinatra

Hello Sinatrarequire 'sinatra'

get '/' do

'Hello Sinatra!'

end