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

Ruby関連のことを調べてみた2020年04月16日
目次

【RSpec】 単体テスト(モデル・コントローラー)の記述方法について

## Qiita投稿の背景
Railsアプリのテストを実施する時にRSpecを使用しています。
しかし、RSpec特有のコマンド等を都度ググることになっているため、自分の備忘録、アウトプットによる知識の定着も兼ねて記録します。

## この記事の対象者
– Rails初心者の方
– RSpec初心者の方

## 環境
– ruby 2.5.1
– Rails 5.2.4.1

## Gemをインストール
“`:Gemfile
group :development, :test do
gem ‘rspec-rails’
gem ‘factory_bot_rails’
gem ‘rails-controller-testing’
end

group :development do
gem ‘web-console’
end

group :test do
gem ‘faker’
end
“`

上記のように、各Gemは記述する場所に気をつけましょう。
単体テスト(モデル、コントローラー)を実施するために必要な全てのGemです。

“`:ターミナル
$ bundle ins

元記事を表示

Rails6.0でRailsチュートリアル(Rails5.1)を完了させる時に詰まるポイント

# はじめに

Rails入門として非常にメジャーな[Ruby on Rails チュートリアル](https://railstutorial.jp/)ですが、Rails5.1と、3年前のバージョンがベースになっています。
それと比較し、Railsの最新バージョンは記事執筆現在6.0.2です。

マイナーバージョンならまだしも、メジャーバージョンも5→6となっているため、これからRailsを学ぶ方はRails6をベースに学習したいのではないでしょうか。

というわけで、Rails5.1で書かれたチュートリアルを、Rails6.0で動かした際に詰まるポイントをまとめました。
ですが、このページを常に開きながら、詰まった時にすぐに見て…というやり方はあまりオススメしません。
なぜなら詰まった時にこそ、エラーを読んでいろいろ調べることで得られる知識も多いためです。
詰まった際に15分、20分と解決しなかった際に本記事を参照いただけると幸いです。

なお、大前提、AWS Cloud9の構築です。

# ■1章

## sqlite3のバージョンエラー

Cloud9の環境構築時にPlatfor

元記事を表示

#Ruby #rspec how to mock ENV ( overwrite before return after OR allow receive mock )

“`rb
# $ FOO=foo BAR=bar rspec example_spec.rb

RSpec.describe do
# OK
describe do
it { expect(ENV[‘FOO’]).to eq ‘foo’ }
it { expect(ENV[‘BAR’]).to eq ‘bar’ }
end

# OK
describe do
it { expect(ENV.fetch(‘FOO’)).to eq ‘foo’ }
it { expect(ENV.fetch(‘BAR’)).to eq ‘bar’ }
end

# OK
# Mock hash
describe do
before do
allow(ENV).to receive(:[]).and_call_original # necessarry
allow(ENV).to receive(:[]).with(‘FOO’).and_return(‘mocked foo’)
end

i

元記事を表示

Rspec で ENV の環境変数をモックしたいが before で上書きしてもクリーンはしてくれない #Rails #Ruby #rspec

“`rb
# $ FOO=foo BAR=bar rspec example_spec.rb

RSpec.describe do
# OK
describe do
it { expect(ENV[‘FOO’]).to eq ‘foo’ }
it { expect(ENV[‘BAR’]).to eq ‘bar’ }
end

# OK
describe do
it { expect(ENV.fetch(‘FOO’)).to eq ‘foo’ }
it { expect(ENV.fetch(‘BAR’)).to eq ‘bar’ }
end

# OK
# Mock hash
describe do
before do
allow(ENV).to receive(:[]).and_call_original # necessarry
allow(ENV).to receive(:[]).with(‘FOO’).and_return(‘mocked foo’)
end

i

元記事を表示

消費税改正に備えて

## はじめに
最近、COVID-19の流行で本当に大変なことになっています。
経済への影響もかなり大きく、その対策として消費税改正の話が出たり引っ込んだりしています。

消費税改正…もし行われることがあれば、速やかに従いたいところです。
自分の関わっているサービスでは、サイト内いくつかの場所で税込価格を表示していますが、消費税の処理の記述も複数箇所に書かれており、速やかな対応をするのがちょっと大変そうです…。

…というわけで、こうやったら税処理の部分をうまく書けるのではないか?ということをまとめました。

### 理想の姿
消費税を扱うクラスで`attr_with_tax`によって属性を指定してあげると、`属性_with_tax`メソッドが使えるようになり、これが処理日なり指定日で自動で税率が変わってくれるようにしたいです。

“`ruby
class SampleItem
extend WithTax

attr_accessor :price
attr_with_tax :price

def initialize(price)
@price = pr

元記事を表示

Vagrant+docker環境でrubyのイメージをRubyMineのインタプリタに設定する

## いきさつ
Railsのローカル開発環境をVagrant+dockerで立てて、RubyMineでrubyのインタプリタを設定する際に悩んだので解決方法をメモ。

## 解決方法
1. tcpソケット経由でdockerを実行できるようにする。
1. RubyMineにdockerの設定を追加する。

ローカル開発環境用で外部から接続されるケースは想定してません。

## 1. tcpで利用できるようにdockerのサービスを修正
“`
$ vi /lib/systemd/system/docker.service
“`
“`
#ExecStart=/usr/bin/dockerd -H fd:// –containerd=/run/containerd/containerd.sock
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H fd://
“`
2375で受けるようにする。

## 2. dockerデーモン再起動
“`
$ systemctl daemon-reload
$ systemctl restart

元記事を表示

【Ruby】インスタンス変数に関する備忘録

classでよく見かけるこいつら、整理してみた

①attr_accessorを利用した場合

“`ruby
attr_accessor :name
def initialize(name)
@name = name
end
#—-略—-
“`
②「@」を用いたインスタンス変数を用いる場合

“`ruby
def initialize(name)
@name = name
end

#—-略—-

def name
@name
end
def name=(val)
@name = val
end
“`
①と②は同じ意味である。

def name=(val) とは

“`ruby
class名.name = “hogehoge”
“`
とインスタンス変数nameへの代入式を書いた時に呼び出されるメソッド。

そもそもattr_accessorとは

getterとsetterを同時に定義してくれている。
つまりこのメソッドを使わずに再現しようとすると以下のようになる。

“`ruby
def initial

元記事を表示

【Ruby on Rails】chromedriver-helperからwebdriversに乗り換えよう

https://qiita.com/jnchito/items/f9c3be449fd164176efa
を参考にした備忘録

概要

chromedriver-helperがサポート終了。
webdriversに乗り換えよう!の話。

やり方

“`ruby:Gimfile
group :test do
# …
– gem ‘chromedriver-helper’
+ gem ‘webdrivers’
“`
コレだけ。
ちなみに’chromedriver-helper’依存するコードも削除すること。

元記事を表示

rbenvでバージョンを変えたら、gem install railsできないって言われた。

*備忘録*

概要

CentOS7の環境でrubyをrbenvで管理。
rbenv local 2.6.5でとあるアプリのRubyのバージョンを変更。
すると、、

“`shell
$ rails s -b 0.0.0.0
rbenv: rails: command not found

The `rails’ command exists in these Ruby versions:
2.5.7
“`
怒られちゃったという話。

さらに「gem install rails」したらエラーにハマった話。

状況

まぁ、
そもそもこれは当たり前の話で、実際に.rbenv以下のパッケージの管理のされ方を見ればわかる。

“`shell:/home/vagrant/.rbenv/versions
$ ls
2.5.7 2.6.5
“`
こんな感じで管理されており、

“`shell:/home/vagrant/.rbenv/versions/2.5.7/bin
$ ls
bundle irb rake

元記事を表示

rbenvでRuby2.6.5がインストールできない

環境

vagrant
CentOS7
Rails 5.2.4.2
Ruby 2.5.7

概要

別のディレクトリにあったアプリを仮想環境に持ってきて、localでそのアプリのRubyのバージョンに合わせようとした結果、、、、

“`zsh
Downloading ruby-2.6.5.tar.bz2…
-> https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.5.tar.bz2
Installing ruby-2.6.5…

BUILD FAILED (CentOS Linux 7 using ruby-build 20200401-7-g637ddf3)

Inspect or clean up the working tree at /tmp/ruby-build.20200415132139.18095.v4x36d
Results logged to /tmp/ruby-build.20200415132139.18095.log

Last 10 log lines:
installi

元記事を表示

railsチュートリアル 4章 初心者が意識すべき事

#初心者がrailsチュートリアル4章で学ぶべき事
1.**Ruby**について
2.**helper**とは(**module**とは?)
3.そもそも**rails**とは
##Rubyについて
これは、初心者の方であれば皆さんご存知**Progate**で十分に学ぶ事ができるかなと思います。
僕自身も含めて、初心者であればrailsの流れを抑えようとして、Rubyの基礎的なところが疎かになる事があります。railsチュートリアル、ポートフォリオ作成の途中でちょくちょく**Progate**に戻って復習するくらいがちょうど良いのかなと思います。
##helperとは
ここでは**module**をrailsでどのように使うのかという事を把握するくらいで良いと思います。
一応railsでのhelperの役割を説明すると、viewファイル(フロント)の可読性(読みさすさ)を保持する為にある、くらいで大丈夫かと。。笑
このサイトを一読してみるのがオススメです!

【Rails入門説明書】helperについて解説

##そもそもrailsとは
ここでは*

元記事を表示

ユーザー管理機能の実装(1)

今回は、**ユーザー管理機能の実装**を行なっていきたいと思います!
1~7の手順で進めていきます
(1)では1. deviseのインストール、2. Userモデルの作成を行うところまでやっていきます

#目次
1. deviseのインストール

2. Userモデルの作成

3. deviseのviewファイルを追加

4. サインアップ機能の追加

5. ユーザー情報編集機能の追加

6. ログアウト機能の追加

7. フラッシュメッセージの表示機能の実装
#1. deviseのインストール
ユーザー管理機能のの実装には、”devise”を使用します
まず初めにGemfileを開きましょう!
Gemをインストールするために、Gemfileに追記を行います

“`Gemfile
(略)
Gem ‘devise’
(略)
“`

Gemfileのgroup内に記述しないように注意しましょう!
*group内に記述した場合、特定の環境のみで使用される設定になってしまします

次に、deviseのインストールを行います ターミナルでbundle installを行い、続いてd

元記事を表示

Railsのコントローラー(モデルでも)では他とメソッドを共有したい時に継承ではなくConcernsを使おう

railsでプログラミングをしていると、同じようなメソッドを別々のコントローラーで使いたい時があったりします。また、肥大化して可読性がさがったコードを分割して、別ファイルにしたい時とかもあります。そんなときは継承を使わずに、Concernsを使いましょう

## 継承を使うと、改修が起きた時にバグに気が付かない

例えば、`HogeController`からCSV出力の所だけ切り出した`HogeCsVController`を作りたい場合

“`ruby:HogeController.rb
class HogeController < ApplicationController def index end def show end protected def set_hoge end end ``` ```ruby:HogeCsvConntroller.rb class HogeCsVController < HogeController def csv hoge = set_hoge end end ``` みたいな書き方でも動くといえ

元記事を表示

describe-task-definitionの結果をregister-task-definitionで使うために

※この記事は以下の記事に触発されて書きました。
https://dev.classmethod.jp/articles/describe-task-definition-to-register-task-definition/

上記記事の以下の部分をRubyでやってみた。
> 既存のタスク定義をdescribe-task-definitionで取得して、register-task-definitionで登録するには、 taskDefinition の中身を取り出して、 status, compatibilities, taskDefinitionArn, requiresAttributes, revision を削除することで、登録する事ができます!

– `describe-task-definition`の標準出力をRubyで処理する。そしてファイル(`taskDef.json`)に出力する。

“`shell
$ aws ecs describe-task-definition –task-definition sampleTask:1 | ruby -r JSON -e

元記事を表示

Kinx ライブラリ – Range, Enumerable, for in

# Range, Enumerable, for in

## はじめに

**「見た目は JavaScript、頭脳(中身)は Ruby、(安定感は AC/DC)」** でお届けしているスクリプト言語 [Kinx](https://github.com/Kray-G/kinx)。新たにサポートした機能のご紹介。

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

最近サポートした Range オブジェクトです。`2..5`、`2…n`、`1..`、`”a”..”z”`、`”a”..` といった書き方もできます。また、Ruby のように Enum

元記事を表示

プログラミング初心者がTECH CAMPに通うと、一ヶ月半でこのくらいのアプリを作れるようになります。

初めまして。
2020年2月17日よりTECH CAMPというプログラミングスクールに通っている寺嶋と申します。

今回は、スクールの課題である「個人アプリ」について紹介させていただきます。

マークアップ言語もロクに扱えなかったプログラミング初心者が、TECH CAMPに通ってどこまで成長するのかの参考になればと思っておりますので、スクールに通うことを検討している方はぜひ参考にしてください。

# 「男飯」取り扱い説明書
top

## 本番環境URL
http://18.178.138.85/users/sign_in

## テストユーザー
メールアドレス test@gmail.com
パスワード aaaa1111

# 制作した経緯
私自身、「今日のご飯は超簡単に済ませたい!」と考え料理投稿アプリを検索する

元記事を表示

Railsチュートリアル3章

#3.2.1 演習
######1. Fooというコントローラを生成し、その中にbarとbazアクションを追加してみてください。

“`
$ rails g controller Foo bar baz
“`

######2. コラム 3.1で紹介したテクニックを駆使して、Fooコントローラとそれに関連するアクションを削除してみてください。

“`
$ rails destroy controller Foo bar baz
“`

#3.4.3 演習
######1. サンプルアプリケーションにContact (問い合わせ先) ページを作成してください。

下記コードを追記しました。テストも問題なくクリアしています。

“`static_pages_controller_test.rb
require ‘test_helper’
class StaticPagesControllerTest < ActionDispatch::IntegrationTest (中略) test "should get contact" do get st

元記事を表示

【Rails DBエラー】SQLite3::SQLException: table “✖︎✖︎✖︎” already existsが出るときの解決

# 【Rails DBエラー】SQLite3::SQLException: table “✖︎✖︎✖︎” already existsが出るときの解決

## なぜこのエラーが出るか
このエラーはすでに作成されているテーブルが再度作成されているときに出現するエラーです。
モデルを作った後に、カラム名とかを間違えて「rails db:rollback」とかz「rails destroy モデル名」とかして、また「rails db:migrate」をした時におきますね。
↓こんなエラー

“`:terminal
> rails db:migrate
== 20201111115213 CreateComments: migrating ===================================
— create_table(:comments)
rails aborted!
StandardError: An error has occurred, this and all later migrations canceled:

Caused by:
SQLite3::SQ

元記事を表示

個人アプリ(link_to 使い方)

<%= link_to new_block_path do %>
press a to start
<% end %>
do〜end を忘れていてページの遷移ができなかった。

GET http://localhost:3000/block/css/css.css net::ERR_ABORTED 404 (Not Found)
記述変更
変更後 link href=”/assets/css.css/”   変更前 href=”css/css.css”
でエラーは解決

GET http://localhost:3000/block.js net::ERR_ABORTED 404 (Not Found)
記述変更
変更後 script type=”text/javascript” src=”/assets/block.js”>

元記事を表示

Railsの命名規則まとめ

RailsではCoC(Convention over Configuration)という概念があります。
設定より規約という意味です。

今回はこのRailsの規約に則ってコントローラやモデルの命名規則をまとめていきたいと思います。

##1 Modelの命名規則

Modelは簡単に表現すると各テーブルの設計書のようなものです。
設計書は一つしか存在しないものなので、単数形で作成するものになります。
したがって、コマンドを入力するときは

“`
$ rails g model Book
“`

のようになります。

##2 Viewの命名規則

Viewのフォルダには複数のViewファイルが作成されるため複数形で作成します。

## 3 Controllerの命名規則

controllerはそのcontrollerの中に複数のアクションを持つので複数形で作成します。

“`
$ rails g controller Books
“`

##4 Modelにつけてはいけない名前

予約語や自分の作成したアプリ名はモデル名に指定できません。
予約語を確認するには rails c

元記事を表示

OTHERカテゴリの最新記事