sinatra slideshare

28

Upload: nemoto-yusuke

Post on 10-May-2015

440 views

Category:

Technology


0 download

DESCRIPTION

とある組織の勉強会議 #5

TRANSCRIPT

Page 1: Sinatra slideshare
Page 2: Sinatra slideshare

SInatra?

Page 3: Sinatra slideshare

SInatra?

Page 4: Sinatra slideshare

Sinatra?

• Ruby製     Webフレームワーク

• MCモデル

• お手軽

Page 5: Sinatra slideshare
Page 6: Sinatra slideshare

Agenda

• Hello Sinatra

• View (Haml)

• DB(Active Record)

Page 7: Sinatra slideshare

Hello World!

# coding: utf-8require ‘sinatra’

get ‘/’ do ‘Hello Sinatra!’end

sinatra.rb

http://0.0.0.0:4567/

COMMAND

ruby sinatra.rb

Page 8: Sinatra slideshare

環境作り gem install sinatra

Page 9: Sinatra slideshare

VIEW / Template

• Erb

• Haml

• Markdown

• 鋸

など

Page 10: Sinatra slideshare

haml

• HTML abstraction markup language• Haml accelerates and simplifies

template creation down to veritable haiku

Page 11: Sinatra slideshare

HAML

%html

%head

%title

Haml Sample

%body

Hello Haml!

<html>

<head>

<title>

Haml Sample

</title>

</head>

<body>

Hello Haml!

</body>

</html>

Page 12: Sinatra slideshare

Sinatra with haml

http://twitter.github.io/bootstrap/

https://github.com/kaakaa/SinatraBenkyou1

Page 13: Sinatra slideshare

#coding: utf-8

require 'sinatra'

require 'haml'

get '/' do

redirect '/Sinatra/'

end

get '/:name/' do

@display_name = params[:name]

haml :index

end

post '/hello' do

@name = params[:name]

if @name.nil? then

@name = "Sinatra"

end

redirect '/' + @name + '/'

end

sinatra.rb

Page 14: Sinatra slideshare

%html

%head

%title

Haml Sample

%meta{ :charset => "utf-8" }

%script{ :src => "/js/jquery-1.9.0.min.js" }

%link{ :rel => "stylesheet", :href => "/css/bootstrap.css" }

%body

%div.input-append

%h3

INPUT YOUT NAME!

%form{ :method => "post", :action => "/hello" }

%input{ :type => "text", :name => "name",

:class => "span2" }

%input{ :type => "submit", :value => "SEND",

:class => "btn btn-small" }

%h2

= "Hello " + @display_name.to_s + " !"

index.haml

Page 15: Sinatra slideshare

%html

%head

%title

Haml Sample

%meta{ :charset => "utf-8" }

%script{ :src => "/js/jquery-1.9.0.min.js" }

%link{ :rel => "stylesheet", :href => "/css/bootstrap.css" }

%body

%div.input-append

%h3

INPUT YOUT NAME!

%form{ :method => "post", :action => "/hello" }

%input{ :type => "text", :name => "name",

:class => "span2" }

%input{ :type => "submit", :value => "SEND",

:class => "btn btn-small" }

%h2

= "Hello " + @display_name.to_s + " !"

index.haml

Page 16: Sinatra slideshare

%form{ :method => "post", :action => "/hello" }

%input{ :type => "text", :name => "name",

:class => "span2" }

%input{ :type => "submit", :value => "SEND",

:class => "btn btn-small" }

post '/hello' do

@name = params[:name]

if @name.nil? then

@name = "Sinatra"

end

redirect '/' + @name + '/'

end

Page 17: Sinatra slideshare

Active Record Design Pattern

O/R Mapper 1Record = 1Object

https://github.com/kaakaa/Sinatra-Benkyou2

Page 18: Sinatra slideshare

history Record

namedate_time

Page 19: Sinatra slideshare

require 'active_record'

ActiveRecord::Base.configurations = YAML.load_file('database.yml')

ActiveRecord::Base.establish_connection('development')

class History < ActiveRecord::Base

end

development:

adapter: sqlite3

database: db/benkyo.db

sinatra.rb(partially)

database.yml

Page 20: Sinatra slideshare

require 'active_record'

ActiveRecord::Base.configurations = YAML.load_file('database.yml')

ActiveRecord::Base.establish_connection('development')

class History < ActiveRecord::Base

end

development:

adapter: sqlite3

database: db/benkyo.db

sinatra.rb(partially)

database.yml

history

namedate_time

Page 21: Sinatra slideshare

require 'active_record'

ActiveRecord::Base.configurations = YAML.load_file('database.yml')

ActiveRecord::Base.establish_connection('development')

class History < ActiveRecord::Base

end

development:

adapter: sqlite3

database: db/benkyo.db

history = History.new

history.name = @name

history.date_time = @date_time

history.save

history = History.find(‘2013/05/14 00:00:00’)

history.destroy

History.destroy_all

sinatra.rb(partially)

Page 22: Sinatra slideshare

get '/' do

redirect '/Sinatra/'

end

get '/:name/' do

@display_name = params[:name]

@histories = History.all

haml :index

end

%h3

HISTORY

[email protected] do |history|

%div

= history.date_time

= history.name

sinatra.rb(partially) index.haml(partially)

Page 23: Sinatra slideshare

post '/*/hello' do

@name = params[:name]

if @name.nil? then

@name = "Sinatra"

end

day = Time.now

date_time =

day.strftime("%Y/%m/%d %H:%M:%S")

history = History.new

history.name = @name

history.date_time = @date_time

history.save

redirect '/' + @name + '/'

sinatra.rb(partially)

Page 24: Sinatra slideshare

summary

• Hello Sinatra

• 簡単

• View (Haml)

• 楽

• DB(Active Record)

• 楽

Page 25: Sinatra slideshare

summary

怠惰

Page 26: Sinatra slideshare

bundle

source "https://rubygems.org"

ruby '2.0.0'

group :development, :test do

gem "sqlite3", '1.3.7'

gem "dm-sqlite-adapter"

end

gem "activerecord"

gem "sinatra",

git: 'https://github.com/juanpastas/sinatra.git'

gem "haml"

bundle install --path vendor/bundle

bundle exec ruby sinatra.rb

Gemfile

Page 27: Sinatra slideshare

感想

Page 28: Sinatra slideshare

感想

• Ruby周りは楽

• ただ、楽過ぎて怖い

• テスト環境ならOK?

• 本棚アプリ…