Sinatra と MongoDB 今回は Sinatra で MongoDB の操作を体験してみます 進捗に合わせて ドライバから Ruby で使える便利な ORM の紹介をします

Similar documents
6 (1) app.html.eex 28 lib/nano_planner_web/templates/layout/app.html.eex 27 <footer> Oiax Inc <%= this_year() %> Oiax Inc. 29 </footer>

第 7 回の内容 動的な Web サイト フォーム Web システムの構成

利用者

intra-mart Accel Platform — OData for SAP HANA セットアップガイド   初版  

10 (1) s 10.2 rails c Rails 7 > item = PlanItem.new => #<PlanItem id nil, name nil,...> > item.name = "" => "" > item.valid? => true valid? true false

MxLogonサーバサイドツールキット用UI

1 ユーザ認証を受けた権限で アプリケーションを利用するために ログインプロキシにアクセスします 2 ログインプロキシにより Shibboleth SP から Shibboleth IdP の認証画面にリダイレクトされます 3 ブラウザに認証画面を表示します 4 認証画面にユーザ / パスワードを入

hands_on_4.PDF

すると メインメニューと呼ばれる DC さくらのメインウィンドウ部が表示されます ( 下の画面がスクリーンシ ョットです ) メインメニューは ウィンドウ右上の ボタンを押すと閉じます リスト内のアイテムは ダウンロードのタスクを表します ダウンロード状況を把握できます メニュー項目やボタンの説明は

Ruby 2.3 のてざわり新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会

勉強会の流れ Google API の概要 デモ curl で実際に体験 Copyright 2010 SRA OSS, Inc. Japan All rights reserved. 2

¥Í¥Ã¥È¥ï¡¼¥¯¥×¥í¥°¥é¥ß¥ó¥°ÆÃÏÀ

ビジネスサーバ設定マニュアル_Standard応用編

GitLab + Dokku で作る CI/ CD 環境 Kazuhiro NISHIYAMA 第 78 回 Ruby 関西勉強会 2017/07/29 Powered by Rabbit 2.2.0

ゲームプログラミング講習 第0章 導入

2003年度 情報処理概論


Microsoft Word - CygwinでPython.docx

Sequel のすすめ 私が SQL を嫌いな理由 とみたまさひろ RubyHiroba Sequel のすすめ - 私が SQL を嫌いな理由 Powered by Rabbit 2.0.7

CodeIgniter Con 2011, Tokyo Japan, February

メディプロ1 Javaサーブレット補足資料.ppt

5-5_arai_JPNICSecSemi_XssCsrf_CM_ PDF

はじめに

Microsoft Word - Win-Outlook.docx

情報処理概論(第二日目)

JavaScript 演習 2 1

リスト 1 1 <HTML> <HEAD> 3 <META http-equiv="content-type" content="text/html; charset=euc-jp"> 4 <TITLE> 住所の検索 </TITLE> 5 </HEAD> 6 <BODY> <FORM method=

ソフトウェアエンジニアリング - バグ #7

PowerPoint プレゼンテーション

項番 現象 原因 対応手順書など 4 代理店コードでのダウンロード時に以下のメッセージの画面が表示される サービス時間外のため 現在 このサービスはご利用になれません 当機能のサービス時間外です 以下の時間帯にダウンロードしてください 月曜日 ~ 金曜日 7:00~21:00 土曜日 7:00~17

1. 自己紹介 2.Sinatra の概要 3.Rails との比較 4.workshop メニュー

オンラインテスト

目次 1. 改版履歴 概要 WEB 版薬剤在庫管理システムのインストール 事前準備 インストール アプリケーションのセットアップ WEB 版薬剤在庫管理システムの初期設定

Cisco CSS HTTP キープアライブと ColdFusion サーバの連携

CAS Yale Open Source software Authentication Authorization (nu-cas) Backend Database Authentication Authorization Powered by A

モバイルアプリを Azure で作る - データを扱う Azure Storage を利 してデータを保存する 本稿では PHP と Windows Azure を使って 画像などのファイルを扱うアプリケーションを開発する方法を説明します Windows Azure Platform では データの


WLX302 取扱説明書

01_Bdy-Gbws07Guide-CS2.indd

システム分析とデータベース設計

データベースアクセス

Action Cableで簡易チャットを作ってみた Kazuhiro NISHIYAMA 第 87 回 Ruby 関西勉強会 2019/07/13 株式会社 Ruby 開発 Powered by Rabbit 2.2.1

第7回 Javascript入門

印刷アプリケーションマニュアル

FAQ案(Linkup Manager)

マイフォルダへのアクセス マイフォルダ をクリックすると マイフォルダの一覧画面へ遷移します 利用の手引き ver.5 フォルダの作成 新規フォルダ をクリックして フォルダ名を入力し 作成 ボタンをクリックする ファイルのアップロード ファイルをアップロードしたいフォルダをクリックして開き アップ

※サンプルアプリケーションを固めたファイル(orcasample

VB実用Ⅲ⑩ フリーデータベースⅡ

Maser - User Operation Manual

外部 RESTful サービス コール

Microsoft Word - Python利用環境構築ガイド_ docx

実験 5 CGI プログラミング 1 目的 動的にWebページを作成する手法の一つであるCGIについてプログラミングを通じて基本的な仕組みを学ぶ 2 実験 実験 1 Webサーバの設定確認と起動 (1)/etc/httpd/conf にある httpd.conf ファイルの cgi-bin に関する

Mental ray for Maya インストール手順 1 Mental ray plug-in のインストール 1.1 下記リンクの NVIDIA mental ray の製品ページにて必要事項を記入し 必要なバージョンのチェックボックスを入れてから 今すぐダウンロード をクリックすると 記載し

PowerPoint プレゼンテーション

目次 第一章インストールと製品登録 1.1 インストール & ライセンス認証 3 第二章製品活用 - Leawo itransfer 3.1 コンピュータのファイルを iphone に転送 iphone のファイルをコンピュータにバックアップ ファイルを itunes から

LightSwitch で申請システム Windows ストアアプリで受付システムを構築してみた 情報政策グループ技術職員金森浩治 1. はじめに総合情報基盤センターでは 仮想サーバホスティングサービスや ソフトウェアライセンス貸与といった さまざまなエンドユーザ向けサービスを行っている 上記のよう

JAIRO Cloud 初級ユーザー向け手引書 1. ユーザーアカウント管理 JAIRO Cloud 事務局 協力 : オープンアクセスリポジトリ推進協会 (JPCOAR) JAIRO Cloud 運用作業部会 ver date 修正内容 /11 初版

IBM Bluemix で WordPress 無料の WordPress 環境を構築する 1

WLM-L11G導入ガイド

1. Microsoft Loopback Adapter のインストール 1) ノートパソコンにおいて そのパソコンの管理者アカウントによりログオンします 2) [ スタート ] > コントロールパネルを開きます 3) 表示方法 : カテゴリの場合には ハードウェアとサウンド > デバイスマネージ

C:\Apache Software Foundation\Apache2.2\htdocs\sample\login.html サンプルプログラム passworddisc.php <head><title> ログイン </title></head> $user=$_post['user']; $

Transcription:

Sinatra MongoDB Powered by Rabbit 2.1.2 and COZMIXNG

Sinatra と MongoDB 今回は Sinatra で MongoDB の操作を体験してみます 進捗に合わせて ドライバから Ruby で使える便利な ORM の紹介をします

Sinatra と MongoDB まずは初回なので Sinatra の基本からおさらいします

Hello world require 'sinatra' get '/' do "Hello, world!"

Hello world これは最も単純で有名な例ですが HTTP ヘッダを見てみましょう

Hello world ブラウザにはこういったヘッダーの情報を確かめる機能が備わっています その中でも重要なのが Request Method が GET であるという点です

HTTP Method これらのGETはHTTP Methodの一 部で 主にGETやPOSTが使われて います GET POST PUT DELE OPTIO TE N 何か見せる 何か生成する 何か更新する 何か削除する 何か満たす http://www.sinatrarb.com/intro-

POST では 次に post メソッドを試してみましょう require 'sinatra' post '/' do "Hello world!"

POST $ curl -X POST http://localhost:4567 POST コマンドを送信する方法

POST require 'sinatra' post '/' do "Hello world!" get '/' do erb <<EOF <form method='post' action='/'> <input type='submit' /> </form> EOF

POST ただし POST コマンドは通常では値の取得には用いません値を取得するときには GET を使います

MongoDB それでは実際にデータを保存するために MongoDB を利用しましょう

MongoDB インストールは行ってきましたか? $ which mongo $ which mongod

MongoDB まずは基本から $ mongo # クライアントの起動 > db # 現在のテーブル > use foo # foo をこれから使用 ( この時点ではまだ書き込まれていない ) > db # foo

MongoDB 外部接続の場合 $ mongo <hostname>:<port>/<table> -u <user> -p <password>

MongoDB まずは基本から > a = { name: 'Frank' } > db.sinatradb.insert(a) # 挿入 > show collections # sinatradb が書き込まれている > db.sinatradb.find() # 検索

MongoDB $ gem install mongo bson_ext bson_ext は mongo ライブラリに BSON 形式をサポートさせるための Gem です

MongoDB require 'sinatra' require 'mongo' include Mongo # Mongo の省略 configure do conn = MongoClient.new # localhost:27017 set connection: conn set db: conn.db('foo') # use foo get '/collections' do settings.db.collection_names.to_a.to_s # show collections と同じ

MongoDB require 'sinatra' require 'mongo' get '/' do # ドキュメント全体 settings.db['sinatradb'].find.to_a.to_s get '/:collection' do col # name が collection であるものをひとつ返す settings.db['sinatradb'].find_one(name: col).to_s

Haml テンプレートエンジンを使います $ gem install haml

Haml テンプレートエンジンを使います get '/' do haml :index

Haml./views/index.haml %form{action: '/', method: 'post'} %input{name: 'name', placeholder: 'name'} %input{type: 'submit'} 注意 : インデント幅はソフトスペース 2 です

MongoDB Sinatra からデータを登録します post '/' do bson_id = settings.db['sinatradb'].insert(params) bson_id.to_s この ID をコピーしてください

MongoDB BSON_ID からの検索? get '/id/:id' do id settings.db['sinatradb'].find(id).to_s

MongoDB BSON_ID からの検索 get '/id/:id' do id id = BSON::ObjectId.from_string(id) settings.db['sinatradb'].find(id).to_s

ヘルパー helpers do def foo 'baz'

または ヘルパー module Foo def foo 'baz' helpers Foo

ヘルパー # Haml, Slim = foo # ERB <%= foo %>

ヘルパー helpers do def find_by_name(name) settings.db['sinatradb'].find(name: name) def find_all settings.db['sinatradb'].find

ヘルパー = find_by_name.count %ul - find_by_name('frank').each do document %li= document['_id']

データの更新./views/index.haml %ul - find_all.each do document %li %a{href: "/update/#{document['_id']}"}= document['name']

ルーティング データの更新 get '/update/:id' do id @id = id haml :update

データの更新./views/update.haml %h1= find_by_id(@id) %form{action: "/update/#{@id}", method: 'post'} %input{name: 'name', value: find_by_id(@id)} %input{type: 'submit'}

ヘルパー データの更新 helpers do def find_by_id(id) id = BSON::ObjectId.from_string(id) settings.db['sinatradb'].find_one(id)['name']

データの更新 post '/update/:id' do id id = BSON::ObjectId.from_string(id) settings.db['sinatradb'].update({_id: id}, params) redirect '/'

データの削除./views/index.haml %ul - find_all.each do document %li = document['name'] %a{href: "/update/#{document['_id']}"} 更新 %a{href: "/delete/#{document['_id']}"} 削除

ルーティング データの削除 get '/delete/:id' do id id = BSON::ObjectId.from_string(id) settings.db['sinatradb'].remove(_id: id) redirect '/' 本来は POST を使うのですが 今回は操作感を重視して GET を使います

データの追加 はじめに追加した部分も redirect に書き換えましょう post '/' do settings.db['sinatradb'].insert(params) redirect '/'

未完了と完了 ようやく ToDo リストを作り始める基礎をおさえることができました 今度はそれぞれのタスクが完了しているかどうかを判断させます

未完了と完了./views/index.haml %ul - find_all.each do document %li - if document['status'] %s= document['name'] %a{href: "/delete/#{document['_id']}"} 削除 - else = document['name'] %a{href: "/done/#{document['_id']}"} 完了 %a{href: "/update/#{document['_id']}"} 更新 %a{href: "/delete/#{document['_id']}"} 削除

未完了と完了 = document['status'].class.to_s #=> NilClass nil( 空白 ) が返ってくるのでエラーにならないあとから値を変更するのが容易

ルーティング 未完了と完了 get '/done/:id' do id id = BSON::ObjectId.from_string(id) settings.db['sinatradb'].update( {_id: id}, { "$set" => {status: Time.now} } ) redirect '/'

以上 今回はとても単純な ToDo リストを作成してみました次回以降は Ajax を絡めて もっと高機能なアプリケーションを作成しましょう Powered by Rabbit 2.1.2 and COZMIXNG