Slide 1

Slide 1 text

1 Wednesday, April 24, 13

Slide 2

Slide 2 text

Introduction to 1 Wednesday, April 24, 13

Slide 3

Slide 3 text

About Me • Name: Sumeet Singh • @ortuna • github.com/ortuna • Ruby/Rails Developer 2 Wednesday, April 24, 13

Slide 4

Slide 4 text

What is Padrino(quick version) Sinatra Helpers Generators Rake Tasks Console Mailer Admin Cache Multi-apps Sub Apps 3 Wednesday, April 24, 13

Slide 5

Slide 5 text

What is Sinatra? • Micro-framework • DSL for quickly creating web applications • Does not include: • Database interaction • Helpers • Luxuries 4 Wednesday, April 24, 13

Slide 6

Slide 6 text

Still Packs a Punch • Render • Templates (haml, erb, liquid) • Layouts • URL-matching patterns • before/after filters 5 Wednesday, April 24, 13

Slide 7

Slide 7 text

Example Sinatra App 6 Wednesday, April 24, 13

Slide 8

Slide 8 text

#hi.rb require 'sinatra' get '/hi' do "Hello World!" end $ gem install sinatra $ ruby hi.rb $ curl http://localhost:4567/hi 7 Wednesday, April 24, 13

Slide 9

Slide 9 text

#hi.rb require 'sinatra' get '/hi' do "Hello World!" end $ gem install sinatra $ ruby hi.rb $ curl http://localhost:4567/hi 7 Wednesday, April 24, 13

Slide 10

Slide 10 text

#hi.rb require 'sinatra' get '/hi' do "Hello World!" end $ gem install sinatra $ ruby hi.rb $ curl http://localhost:4567/hi 7 Wednesday, April 24, 13

Slide 11

Slide 11 text

#hi.rb require 'sinatra' get '/hi' do "Hello World!" end $ gem install sinatra HTTP Verb $ ruby hi.rb $ curl http://localhost:4567/hi 7 Wednesday, April 24, 13

Slide 12

Slide 12 text

#hi.rb require 'sinatra' get '/hi' do "Hello World!" end $ gem install sinatra HTTP Verb Path $ ruby hi.rb $ curl http://localhost:4567/hi 7 Wednesday, April 24, 13

Slide 13

Slide 13 text

#hi.rb require 'sinatra' get '/hi' do "Hello World!" end $ gem install sinatra HTTP Verb Path Return Value $ ruby hi.rb $ curl http://localhost:4567/hi 7 Wednesday, April 24, 13

Slide 14

Slide 14 text

#hi.rb require 'sinatra' get '/hi' do "Hello World!" end $ gem install sinatra HTTP Verb Path Return Value $ ruby hi.rb $ curl http://localhost:4567/hi 7 Wednesday, April 24, 13

Slide 15

Slide 15 text

What is Padrino? • Web framework built on top of Sinatra • Adds: Routing, Helpers, Mailer, Caching, Admin interface, Localization, and more... • Has a standard library of tools for Sinatra • “Structured Sinatra” 8 Wednesday, April 24, 13

Slide 16

Slide 16 text

#hi.rb require 'sinatra' .... get '/hi' do .... "Hello World!" end Many different ways to append features 9 Wednesday, April 24, 13

Slide 17

Slide 17 text

#hi.rb require 'sinatra' .... get '/hi' do .... "Hello World!" end Many different ways to append features many approaches many approaches 9 Wednesday, April 24, 13

Slide 18

Slide 18 text

Padrino is Mix and Match 10 Wednesday, April 24, 13

Slide 19

Slide 19 text

Padrino is Mix and Match • mongoid • activerecord • datamapper • sequel • ohm • more... Persistence 10 Wednesday, April 24, 13

Slide 20

Slide 20 text

Padrino is Mix and Match • mongoid • activerecord • datamapper • sequel • ohm • more... Persistence • minitest • bacon • rspec • shoulda • cucumber • more... Testing 10 Wednesday, April 24, 13

Slide 21

Slide 21 text

Padrino is Mix and Match • mongoid • activerecord • datamapper • sequel • ohm • more... Persistence • minitest • bacon • rspec • shoulda • cucumber • more... Testing Templating • erb • haml • slim • liquid • more... 10 Wednesday, April 24, 13

Slide 22

Slide 22 text

Padrino is Mix and Match • mongoid • activerecord • datamapper • sequel • ohm • more... Persistence • minitest • bacon • rspec • shoulda • cucumber • more... Testing Templating • erb • haml • slim • liquid • more... css javascript mocking 10 Wednesday, April 24, 13

Slide 23

Slide 23 text

Installing Padrino 11 Wednesday, April 24, 13

Slide 24

Slide 24 text

Installing Padrino • # gem install padrino 11 Wednesday, April 24, 13

Slide 25

Slide 25 text

Installing Padrino • # gem install padrino • # padrino g project myapp -d datamapper 11 Wednesday, April 24, 13

Slide 26

Slide 26 text

Installing Padrino • # gem install padrino • # padrino g project myapp -d datamapper • # cd myapp 11 Wednesday, April 24, 13

Slide 27

Slide 27 text

Installing Padrino • # gem install padrino • # padrino g project myapp -d datamapper • # cd myapp • # padrino start 11 Wednesday, April 24, 13

Slide 28

Slide 28 text

Installing Padrino • # gem install padrino • # padrino g project myapp -d datamapper • # cd myapp • # padrino start => Padrino/0.11.0 has taken the stage development at http://127.0.0.1:3000 [2013-04-21 20:48:07] INFO WEBrick 1.3.1 [2013-04-21 20:48:07] INFO ruby 2.0.0 (2013-02-24) [x86_64-darwin12.2.1] [2013-04-21 20:48:07] INFO WEBrick::HTTPServer#start: pid=12867 port=3000 11 Wednesday, April 24, 13

Slide 29

Slide 29 text

Important Files & Folders 12 Wednesday, April 24, 13

Slide 30

Slide 30 text

App Structure !"" app # !"" controllers # !"" helpers # $"" views # $"" layouts !"" config !"" public # !"" images # !"" javascripts # $"" stylesheets $"" tmp 13 Wednesday, April 24, 13

Slide 31

Slide 31 text

App Structure !"" app # !"" controllers # !"" helpers # $"" views # $"" layouts !"" config !"" public # !"" images # !"" javascripts # $"" stylesheets $"" tmp 13 Wednesday, April 24, 13

Slide 32

Slide 32 text

App Structure !"" app # !"" controllers # !"" helpers # $"" views # $"" layouts !"" config !"" public # !"" images # !"" javascripts # $"" stylesheets $"" tmp 13 Wednesday, April 24, 13

Slide 33

Slide 33 text

Gemfile 14 Wednesday, April 24, 13

Slide 34

Slide 34 text

Rakefile 15 Wednesday, April 24, 13

Slide 35

Slide 35 text

Auto Loaded Paths 16 Wednesday, April 24, 13

Slide 36

Slide 36 text

Auto Loaded Paths • ./lib 16 Wednesday, April 24, 13

Slide 37

Slide 37 text

Auto Loaded Paths • ./lib • ./models 16 Wednesday, April 24, 13

Slide 38

Slide 38 text

Auto Loaded Paths • ./lib • ./models • ./shared/lib 16 Wednesday, April 24, 13

Slide 39

Slide 39 text

Auto Loaded Paths • ./lib • ./models • ./shared/lib • ./shared/models 16 Wednesday, April 24, 13

Slide 40

Slide 40 text

Auto Loaded Paths • ./lib • ./models • ./shared/lib • ./shared/models • ./#{app}/models (multi-apps) 16 Wednesday, April 24, 13

Slide 41

Slide 41 text

Auto Loaded Paths • ./lib • ./models • ./shared/lib • ./shared/models • ./#{app}/models (multi-apps) • ... 16 Wednesday, April 24, 13

Slide 42

Slide 42 text

config/boot.rb 17 Wednesday, April 24, 13

Slide 43

Slide 43 text

config/boot.rb • Usually contains: 17 Wednesday, April 24, 13

Slide 44

Slide 44 text

config/boot.rb • Usually contains: • Debug logging on/off 17 Wednesday, April 24, 13

Slide 45

Slide 45 text

config/boot.rb • Usually contains: • Debug logging on/off • before_load / after_load 17 Wednesday, April 24, 13

Slide 46

Slide 46 text

config/boot.rb • Usually contains: • Debug logging on/off • before_load / after_load • load any prerequisites 17 Wednesday, April 24, 13

Slide 47

Slide 47 text

config/boot.rb • Usually contains: • Debug logging on/off • before_load / after_load • load any prerequisites • Padrino.require_dependencies("path/one/**/*.rb") 17 Wednesday, April 24, 13

Slide 48

Slide 48 text

config/boot.rb • Usually contains: • Debug logging on/off • before_load / after_load • load any prerequisites • Padrino.require_dependencies("path/one/**/*.rb") • ... 17 Wednesday, April 24, 13

Slide 49

Slide 49 text

config/apps.rb 18 Wednesday, April 24, 13

Slide 50

Slide 50 text

config/apps.rb • Usually contains: 18 Wednesday, April 24, 13

Slide 51

Slide 51 text

config/apps.rb • Usually contains: • Site wide configs 18 Wednesday, April 24, 13

Slide 52

Slide 52 text

config/apps.rb • Usually contains: • Site wide configs • session_secret, csrf, etc... 18 Wednesday, April 24, 13

Slide 53

Slide 53 text

config/apps.rb • Usually contains: • Site wide configs • session_secret, csrf, etc... • mounts each app 18 Wednesday, April 24, 13

Slide 54

Slide 54 text

config/apps.rb • Usually contains: • Site wide configs • session_secret, csrf, etc... • mounts each app • ... 18 Wednesday, April 24, 13

Slide 55

Slide 55 text

config/database.rb 19 Wednesday, April 24, 13

Slide 56

Slide 56 text

./tmp 20 Wednesday, April 24, 13

Slide 57

Slide 57 text

./tmp • Used for: 20 Wednesday, April 24, 13

Slide 58

Slide 58 text

./tmp • Used for: • Temp use with tests 20 Wednesday, April 24, 13

Slide 59

Slide 59 text

./tmp • Used for: • Temp use with tests • Cache 20 Wednesday, April 24, 13

Slide 60

Slide 60 text

./tmp • Used for: • Temp use with tests • Cache • Anything with: 20 Wednesday, April 24, 13

Slide 61

Slide 61 text

./tmp • Used for: • Temp use with tests • Cache • Anything with: • tmp_location = Padrino.root(‘tmp’) 20 Wednesday, April 24, 13

Slide 62

Slide 62 text

./tmp • Used for: • Temp use with tests • Cache • Anything with: • tmp_location = Padrino.root(‘tmp’) • ... 20 Wednesday, April 24, 13

Slide 63

Slide 63 text

./tmp • Used for: • Temp use with tests • Cache • Anything with: • tmp_location = Padrino.root(‘tmp’) • ... 20 Wednesday, April 24, 13

Slide 64

Slide 64 text

./public 21 Wednesday, April 24, 13

Slide 65

Slide 65 text

./public • Used for assets 21 Wednesday, April 24, 13

Slide 66

Slide 66 text

./public • Used for assets • Can use for packaging: 21 Wednesday, April 24, 13

Slide 67

Slide 67 text

./public • Used for assets • Can use for packaging: • sinatra-assetpack 21 Wednesday, April 24, 13

Slide 68

Slide 68 text

./public • Used for assets • Can use for packaging: • sinatra-assetpack • sprockets 21 Wednesday, April 24, 13

Slide 69

Slide 69 text

./public • Used for assets • Can use for packaging: • sinatra-assetpack • sprockets • ... 21 Wednesday, April 24, 13

Slide 70

Slide 70 text

App Structure !"" app # !"" controllers # !"" helpers # $"" views # $"" layouts !"" config !"" public # !"" images # !"" javascripts # $"" stylesheets $"" tmp 22 Wednesday, April 24, 13

Slide 71

Slide 71 text

./app/app.rb ./#{app_name}/app.rb 23 Wednesday, April 24, 13

Slide 72

Slide 72 text

./app/app.rb ./#{app_name}/app.rb • Usually contains: 23 Wednesday, April 24, 13

Slide 73

Slide 73 text

./app/app.rb ./#{app_name}/app.rb • Usually contains: • Overall app configuration 23 Wednesday, April 24, 13

Slide 74

Slide 74 text

./app/app.rb ./#{app_name}/app.rb • Usually contains: • Overall app configuration • enable/disable options 23 Wednesday, April 24, 13

Slide 75

Slide 75 text

./app/app.rb ./#{app_name}/app.rb • Usually contains: • Overall app configuration • enable/disable options • register helpers 23 Wednesday, April 24, 13

Slide 76

Slide 76 text

./app/app.rb ./#{app_name}/app.rb • Usually contains: • Overall app configuration • enable/disable options • register helpers • ... 23 Wednesday, April 24, 13

Slide 77

Slide 77 text

Controllers (and router) 24 Wednesday, April 24, 13

Slide 78

Slide 78 text

Myapp::App.controllers do get :index do ... end get ‘/about’ do ... end end #app/controllers/example.rb route to /about 25 Wednesday, April 24, 13

Slide 79

Slide 79 text

Myapp::App.controllers do get :index do ... end get ‘/about’ do ... end end #app/controllers/example.rb Context route to /about 25 Wednesday, April 24, 13

Slide 80

Slide 80 text

Myapp::App.controllers do get :index do ... end get ‘/about’ do ... end end #app/controllers/example.rb Context route to /about route to / 25 Wednesday, April 24, 13

Slide 81

Slide 81 text

Named Routes & Params 26 Wednesday, April 24, 13

Slide 82

Slide 82 text

get :index, :with => :id do /5 /xyz Named Routes & Params 26 Wednesday, April 24, 13

Slide 83

Slide 83 text

get :index, :with => :id do /5 /xyz get ‘/:id’ do # /my_id # params[:id] => my_id Named Routes & Params 26 Wednesday, April 24, 13

Slide 84

Slide 84 text

get :index, :with => :id do /5 /xyz get ‘/:id’ do # /my_id # params[:id] => my_id Named Routes & Params #url_for(:index, 5) => /5 #url_for(:admin, :show) => /admin/show In views: 26 Wednesday, April 24, 13

Slide 85

Slide 85 text

Myapp::App.controllers :admin do get :index do ... end get :index, :with => :id do “request id #{params[:id]}” end end #app/controllers/admin.rb Named Routes 27 Wednesday, April 24, 13

Slide 86

Slide 86 text

Mounted Apps 28 Wednesday, April 24, 13

Slide 87

Slide 87 text

Mounted Apps A Simple way to have multiple applications within the same project. 28 Wednesday, April 24, 13

Slide 88

Slide 88 text

Mounted Apps • More testable • More readable • Changable A Simple way to have multiple applications within the same project. 28 Wednesday, April 24, 13

Slide 89

Slide 89 text

Add a Blog 29 Wednesday, April 24, 13

Slide 90

Slide 90 text

!"" app # !"" controllers # !"" helpers # $"" views # $"" layouts !"" blog # !"" controllers # !"" models !"" shared # !"" models # !"" lib !"" config !"" public # !"" images # !"" javascripts # $"" stylesheets $"" tmp 30 Wednesday, April 24, 13

Slide 91

Slide 91 text

Config/apps.rb 31 Wednesday, April 24, 13

Slide 92

Slide 92 text

blog_path = Padrino.root('blog/app.rb') Padrino.mount('Myapp::Blog', :app_file => blog_path).to('/blog') Config/apps.rb 31 Wednesday, April 24, 13

Slide 93

Slide 93 text

blog_path = Padrino.root('blog/app.rb') Padrino.mount('Myapp::Blog', :app_file => blog_path).to('/blog') Config/apps.rb Easy way: padrino-gen app blog 31 Wednesday, April 24, 13

Slide 94

Slide 94 text

blog_path = Padrino.root('blog/app.rb') Padrino.mount('Myapp::Blog', :app_file => blog_path).to('/blog') Config/apps.rb Easy way: padrino-gen app blog create blog create blog/app.rb create blog/controllers create blog/helpers create blog/views create blog/views/layouts create public/blog append config/apps.rb 31 Wednesday, April 24, 13

Slide 95

Slide 95 text

Why Use Padrino? 32 Wednesday, April 24, 13

Slide 96

Slide 96 text

Questions? 33 Wednesday, April 24, 13