Ruby関連のことを調べてみた2020年05月24日

Ruby関連のことを調べてみた2020年05月24日

Ruby on rails を初心者向けに解説⑦ ~フラッシュの実装~

#はじめに
今回は以前の記事の続きになります。

よろしければ、以前の記事も御覧ください。

今回はフラッシュについてまとめていきます。

[Ruby on rails を初心者向けに解説①](https://qiita.com/renesisu727/items/c81e29c619dbd4b5ea76)

[Ruby on rails を初心者向けに解説② ~リンクの作成~](https://qiita.com/renesisu727/items/d729616473981e763fdd)

[Ruby on rails を初心者向けに解説③ ~データベースの作成~](https://qiita.com/renesisu727/items/c647582a59cfd7bf0a98)

[Ruby on rails を初心者向けに解説④ ~命名規則とform_Tagの使い方について~](https://qiita.com/renesisu727/items/f0f3de5377358f8768ed)

[Ruby on rails を初心者向けに解説⑤ ~データベースの編集と削除~]

元記事を表示

Ruby on rails を初心者向けに解説⑥ ~バリデーションの作成~

#はじめに
今回は以前の記事の続きになります。

よろしければ、以前の記事も御覧ください。

今回はバリデーションについて学んでいきましょう。

[Ruby on rails を初心者向けに解説①](https://qiita.com/renesisu727/items/c81e29c619dbd4b5ea76)

[Ruby on rails を初心者向けに解説② ~リンクの作成~](https://qiita.com/renesisu727/items/d729616473981e763fdd)

[Ruby on rails を初心者向けに解説③ ~データベースの作成~](https://qiita.com/renesisu727/items/c647582a59cfd7bf0a98)

[Ruby on rails を初心者向けに解説④ ~命名規則とform_Tagの使い方について~](https://qiita.com/renesisu727/items/f0f3de5377358f8768ed)

[Ruby on rails を初心者向けに解説⑤ ~データベースの編集と削

元記事を表示

RSpec で メソッドをモックしたいときに mock 用の allow メソッドと singleton メソッドを使うか迷ったときは allow メソッドを使うべき

# 概要
rspecではテストをしやすくするために、メソッドをモックしたいときがよくあると思います。

下記の例では `set_complex_config` メソッドに`admin?`メソッドが影響を受けるのですが、

`set_complex_config` メソッドはすでにそれ自体のテストコードがあり、そのレスポンスのみ欲しいという状況です。

“`
# コード例は適当です
class User
def admin?
res = set_complex_config
case res
when ‘hoge’
‘hoge’
when ‘fuga’
‘fuga’
end
end

def set_complex_config
# 複雑な処理
end
end
“`

このような場合のモックの仕方として私は2通りのやり方が思いつくので、どちらが良いかを考えてみました。

# mockの仕方
## ① singleton メソッドを定義してmockする

下記のように User クラスの set_c

元記事を表示

Rails でセッションを特定のコントローラだけ無効にしたいとき

# 概要
クッキーを使ったセッションを特定のコントローラだけ無効にしたいときがあります。

例えば、管理画面Aでは active_record_store でセッション管理をしており、
管理画面Bでは devise token auth でセッション管理をしているときなどです。

この場合、管理画面Aでのみセッション管理が働いて欲しいのに、管理画面Bでも active_record_store によって
sessions テーブルにセッションデータの書き込みが発生してしまいます。

# 対策
セッションを無効にしたいコントローラーで下記の処理を記載すればOKです。

“`
request.session_options[:skip] = true
“`

参考
https://stackoverflow.com/questions/33318060/how-do-i-prevent-rails-from-creating-a-session

元記事を表示

Rails の routing で namespace, module, scope, as の違い

# 概要
routing を書くときに紛らわしいメソッドをまとめました。

# ルーティングの各名称
“`
resources :users

名前付きルーティング パス ディレクトリ
↓ ↓ ↓

Prefix Verb URI Pattern Controller#Action
users GET /users(.:format) users#index
POST /users(.:format) users#create
new_user GET /users/new(.:format) users#new
edit_user GET /users/:id/edit(.:format) users#edit
user GET /users/:id(.:format) users#

元記事を表示

RSpec で hash の確認をするときは素直に include matcher を使おう

# 概要
rspec で hash を確認したいときに、eq matcher ではなく、include matcher を素直に使おうという記事です。

# コード
` { hoge: ‘fuga’ }`という hash があるときに、これを eq で確認しようとすると、

“`
it do
expect(subject).to eq { hoge: ‘fuga’ }
end
“`

のようには書けません、{}がブロックと解釈されるからです。
なので eq を使うためには

“`
it do
expected_hash = { hoge: ‘fuga’ }
expect(subject).to eq expected_hash
end
“`

のように、hash を変数に入れなければなりません。

当たり前で記事にするまでもないかもしれませんが、

これでは面倒なのでinclude を使いましょう。

“`
it do
expect(subject).to include(hoge: ‘fuga’)
end
“`

元記事を表示

Scaffoldでslimのカスタマイズをしてみた

#これはなに
##概要
railsのscaffoldをカスタマイズする時に、slimでの出力に苦戦したので、それを実現するまでの奮闘記
##こんな人向け
・railsのテンプレートエンジンをslimにしている人
 またはrailsのテンプレートエンジンをslimにしたいと思っている人
・scaffoldのカスタマイズをしているが、viewのカスタマイズを諦めている人
 またはscaffoldのカスタマイズをしたい人
##環境
`Rails 6.0.2.2`
`ruby 2.6.5`

#実装までの事前準備
##その1 テンプレートエンジンをslimにする
こちらの記事を参考にして、`rails-slim`というgemを追加します。
https://qiita.com/ftyabu/items/42eb62901b6b56a7dc72

##その2 scaffoldのテンプレートをカスタマイズできるようにする
こちらの記事を参考にして、テンプレートの作成と、その参照先を変更します。
https://qiita.com/akito1986/items/d9f379191fd6b98de95

元記事を表示

分子動力学法で一瞬文字が浮かび上がるアニメーションを作る

# はじめに

分子動力学法で粒子を動かして文字が一瞬浮かび上がるアニメーションを作ります。分子動力学法といっても粒子間の相互作用は考えません。

具体的には、こんなアニメーションを作ります。

Ballistic版

![b.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/79744/43d6867d-21d6-73ce-4b87-a0969d765182.gif)

Diffusion版

![d.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/79744/027a6420-f8f2-237e-03f3-ac239bdc17d3.gif)

ソースは以下に置いておきます。

[https://github.com/kaityo256/stringtext](https://github.com/kaityo256/stringtext)

# 方針

とりあえず文字を描きます。RubyならCairoを使うのが楽でしょう

元記事を表示

100日後に1人前になる新人エンジニア(3日目)

#100日後に1人前になる新人エンジニア(3日目)
どうもこんばんは。
土曜日でもめげずに学び更新していきます。

今日は本屋にいって書籍を買ってきました。
「Ruby on Rails 速習実践ガイド」 です
コツコツとやっていきたいと思います。

##本日のお題は
・ REST
・Ruby製のテンプレートエンジンslim

以上の二つです。全然違うテーマだけど自分がよく分かっていないと
思っていたところなので書いていきます。

##REST

Railsをやるようになってから「この設計はRESTfulだとか」,「RESTらしい」
という言葉を書籍等でよく見るようになった。
でもよく考えたらRESTについてしっかり分かっていないなと思ったので
土曜日を使って学んでみた。

##RESTとは

次の6つを組み合わせたWebのアーキテクチャスタイルのこと

– **クライアント/サーバ**
– クライアントがサーバーにリクエストを送り、サーバーはそれに対してレスポンスを返す
– **ステートレスサーバ**
– クライアントのアプリケーションの状態をサーバーで管理しない
– **キャ

元記事を表示

pacman で MSYS2 に Ruby をインストール

既存の MSYS2 環境に後から手動で Ruby をインストールする手順メモ

# 動作環境

“`
Windows10 Home Edition

msys2-x86_64-20190524
“`

# インストール済みパッケージの更新

“`bash
# パッケージデータベースの更新
$ pacman -Sy

# インストールされているパッケージを最新版に更新
$ pacman -Suu
“`

以下の警告が出た場合、MSYS2 のシェルをクローズボタンで終了し、再起動して再度 `pacman -Suu` を実行する

“`
警告: シェルに戻る前に MSYS2 を終了し、更新を再度チェックしてください
警告: exit を呼ぶのではなく、例えば端末ウィンドウを閉じてください
“`

# toolchain (gcc) のインストール

“`bash
$ pacman -S base-devel
$ pacman -S mingw-w64-x86_64-toolchain
“`

# ruby のインストール

“`bash
$ pacman -S mingw-

元記事を表示

Railsでとにかくログイン機能を作る

## とにかくログイン機能を作りましょう
Railsを用いたWEBアプリケーションでログイン機能を作るためだけの記事です。
これを体に覚え込ませて爆速で作れるようになっちゃいましょう!

## アプリの雛形を作る
これを作らないと何も始まりません!ターミナルから以下のコマンドを実行しましょう。

“`
% rails _5.2.3_ new アプリ名 -d mysql
“`
上記のコマンドによりアプリの雛形ができたらアプリのディレクトリに移動しましょう。

“`
% cd アプリ名
“`

## deviseのインストール
エディタでGemfileを開き、deviseを追加します。
deviseとは、ユーザー認証に必要な機能を簡単に作れるようになるgemのことです。
また、今回は私の好みでerbではなくhamlを使うのでerbファイルをhamlに変換するgemもインストールします。

“`
gem ‘devise’
gem “haml-rails”
“`
Gemfileにdeviseを追記したらインストールします!

“`
% bundle install
“`
インス

元記事を表示

【備忘録】Rails6 Devise + cancancan の使い方

##はじめに

deviseを使用してUserモデル(認証)を作成後して
cancancanを追加して認可をできるようにしました。

その過程を備忘録としてログします。

deviseのgemを追記します。

“`Gemfile



gem ‘devise’

“`

バンドルインストールします。

“`
$bundle install
“`

デバイスをインストールします。

“`
$rails generate devise:install
“`

設定があるか確認します。

“`config/environments/development.rb


config.action_mailer.default_url_options = { host: ‘localhost’, port: 3000 }
“`

page#indexを追記します。

“`config/routes.rb
Rails.application.routes.draw do
root to: “page#index”


end
“`

以下を追記します。

元記事を表示

Ruby, Nokogiri : セレクトしているノードの要素名を取得する

#はじめに
Nokogiriでは、cssまたはat_cssで要素の名前を指定することでノードをセレクトできますが、逆にセレクトしているノードから要素名はどのように取得するのか気になったので、調べてみました。

#nameメソッドを使う
ノードの要素名取得はとてもシンプルです。以下のようなhtmlファイルがあったとします。

“`hello.html


hello


こんにちは



“`
at_cssでpタグを選択します。

“`sample.rb
require ‘nokogiri’

html = open(‘hello_utf8.html’).read
doc = Nokogiri::HTML.parse(html)

element = doc.at_css(‘p’)

p element.name #=> ‘p’
p element.parent.name #

元記事を表示

Google Books APIから情報を格納するモデルを作り、直感的な扱いとテストを可能にする

## 対象読者

– 本に関するRailsポートフォリオを作る方
– Google Books APIを用いたRailsポートフォリオを作る方

## 本記事の到達物

#### Google Books APIのIDから情報を取得し、クラスに格納する

“`ruby
pry(main)> @google_book = GoogleBook.new_from_id(‘c1L4IzmUzicC’)

pry(main)> @google_book.title
=> “Practical Rails Plugins”

pry(main)> @google_book.authors
=> [“Nick Plante”, “David Berube”]

pry(main)> @google_book.image
=> “http://books.google.com/books/content?id=c1L4IzmUzicC&printsec=frontcover&img=1&zoom=5&edge=curl&imgtk=AFLRE73ENsMYFOfY27vluLqgI1cO-b80l

元記事を表示

[Ruby]getとpostの違い

Rubyのルーティングの中にgetとpostがあります。
その違いは何なのかを説明していきます。

get:
データベースを**変更しない**アクション

post:
データベースを**変更する**アクション

非常にシンプルです

元記事を表示

Ruby on rails を初心者向けに解説⑤ ~データベースの編集と削除~

#はじめに
今回は以前の記事の続きになります。

よろしければ、以前の記事も御覧ください。

[Ruby on rails を初心者向けに解説①](https://qiita.com/renesisu727/items/c81e29c619dbd4b5ea76)

[Ruby on rails を初心者向けに解説② ~リンクの作成~](https://qiita.com/renesisu727/items/d729616473981e763fdd)

[Ruby on rails を初心者向けに解説③ ~データベースの作成~](https://qiita.com/renesisu727/items/c647582a59cfd7bf0a98)

[Ruby on rails を初心者向けに解説④ ~命名規則とform_Tagの使い方について~](https://qiita.com/renesisu727/items/f0f3de5377358f8768ed)

##データベースのデータ一覧の表示
以下のコードでusersテーブルのデータを取得して表示しましょう。

“`index.h

元記事を表示

Ruby: CSV::Tableの使い方備忘録

CSVライブラリ使いにくいですね〜。少なくとも私は使いにくいです。
備忘録として書き留めます。参考になれば幸いです。

# newする

CSV::Rowインスタンスを渡す。それ以外の方法あるのかよくわからない。なんか直感的じゃないと感じる

“`ruby
row1 = CSV::Row.new([“header1”, “header2”], [“row1_1”, “row1_2”])
table = CSV::Table.new([row1])
pp table
“`

“`shell
#
“`

# headersを取得する

“`ruby
row1 = CSV::Row.new([“header1”, “header2”], [“row1_1”, “row1_2”])
table = CSV::Table.new([row1])
pp table.headers
“`

“`shell
[“header1”, “header2”]
“`

# row(行)を指定して取得する

元記事を表示

Ruby to_sメソッド

puts(“10000” + 0)

これができない。

そこで「to_s」メソッドを用いる。

puts(“10000” + 0.to_s)

これで、文字列の数値をくっつけて表示することができる。

元記事を表示

Kinx ライブラリ – CSV Parser

# CSV

## はじめに

**「見た目は JavaScript、頭脳(中身)は Ruby、(安定感は AC/DC)」** でお届けしているスクリプト言語 [Kinx](https://github.com/Kray-G/kinx)。言語はライブラリが命。ということでライブラリの使い方編。

今回は CSV パーサーです。TSV もあります。

* 参考
* 最初の動機 … [スクリプト言語 KINX(ご紹介)](https://qiita.com/Kray-G/items/ca08b6fb40d15dd0ec76)
* 個別記事へのリンクは全てここに集約してあります。
* リポジトリ … [https://github.com/Kray-G/kinx](https://github.com/Kray-G/kinx)
* Pull Request 等お待ちしております。

## 使い方

### using CSV

CSV ライブラリは標準組み込みではないため、using ディレクティブを使用して明示的に読み込む。

`

元記事を表示

シーザー暗号を噛み砕く

## 近況報告
 最近は就活(企業にひたすらESを送るだけの作業)ばっかで空いている時間にテックキャンプのドリルをしこしこ解いています。githubの草は生やし続ける。今日受けた企業さん,無事通っているといいな。

# 本題 シーザー暗号
 辞書順に3文字分シフトして暗号文を作る暗号
  ex. abc ⇨ cde

 シーザーというのは高校世界史を履修していたら知らない人はいないあのシーザー,カエサルさんのことを指します。ガリア戦記とか,「ブルートゥスお前もか」とかかなりの人が認知しているのではないのでしょうか。

 昔はパソコンもケータイもないアナログの時代,かろうじてエジプト文明がパピルスとか発明していたので文字を記録する文明はあったでしょう。ただ,文書の輸送手段は人の足です。となれば機密文書が道中で奪われてそれが原因で亡国の危機に晒されることは度々あったでしょう。

 カエサルは重要な情報の漏洩を防ぐためにこのような暗号を用いました。ちなみに甥のアウグストゥスも用いていたとか。なお,現代における**シーザー暗号はセキュリティの観点からは非常に脆弱である**ことは認識しておきまし

元記事を表示

OTHERカテゴリの最新記事