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

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

#Rspec + #Ruby でhelper メソッドを定義して共通化する

Globalなメソッドではなくちゃんと describe / context の中に作用を閉じ込めてくれるみたいだ

“`rb
# https://relishapp.com/rspec/rspec-core/v/3-8/docs/helper-methods/arbitrary-helper-methods
#
# Arbitrary helper methods
#
# You can define methods in any example group using Ruby’s def keyword or
# define_method method. These helper methods are exposed to examples in the
# group in which they are defined and groups nested within that group, but not
# parent or sibling groups.

# PASS
RSpec.describe “flat define method” do
def he

元記事を表示

Rspec の expect と with で ネストの深いハッシュや引数をゆるくテストする / #Ruby #Rspec #Rails

# Complexed hash fuzzy match

“`rb
example ‘complexed match’ do
expect(SomeClass).to receive(:call).with(
‘X’,
hash_including(
y1: ‘Y1’,
y2: (be_a String),
y4: hash_including(
y4_1: array_including(1, 3),
y4_3: contain_exactly(9, 7, 8),
)
),
any_args
)
subject
end

“`

# Example

“`rb
# Doc
# https://relishapp.com/rspec/rspec-mocks/v/3-2/docs/setting-constraints/matching-arguments

class SomeClass
de

元記事を表示

#Rspec + #Ruby / Complexed Nested Hash arguments / Fuzzy match / Use expect receive syntax and “with” matcher

# Complexed hash fuzzy match

“`rb
example ‘complexed match’ do
expect(SomeClass).to receive(:call).with(
‘X’,
hash_including(
y1: ‘Y1’,
y2: (be_a String),
y4: hash_including(
y4_1: array_including(1, 3),
y4_3: contain_exactly(9, 7, 8),
)
),
any_args
)
subject
end

“`

# Example

“`rb
# Doc
# https://relishapp.com/rspec/rspec-mocks/v/3-2/docs/setting-constraints/matching-arguments

class SomeClass
de

元記事を表示

libssl.1.0.0.dylibがないことでエラーになった時の対処法 dyld: lazy symbol binding failed: Symbol not found: _SSL_library_init

Railsを久しぶりに起動しようとしたらなんかエラーが起きていた。

“`
masashi-no-mbp:MarimoKing pcuser$ rails s
dyld: lazy symbol binding failed: Symbol not found: _SSL_library_init
Referenced from: /Users/pcuser/.rbenv/versions/2.6.0/lib/ruby/2.6.0/x86_64-darwin18/openssl.bundle
Expected in: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib
“`

結果としては、rbenvで入れていたRubyのリンクの設定が原因でダメだったみたい。

## 対処法

Rubyを入れ直すことで解消した。

`$ rbenv uninstall 2.6.0 && rbenv install 2.6.0`

## 参考リンク

[[MEMO] gem コマンドで Library not loaded: /usr/local/

元記事を表示

Hamlで式展開するときはイコールとかダブルクォーテーションとかいらんかった

なんかすごい無駄な書き方をしていたことに気づいたので、執筆します。
同じことしている人とかいないとは思いますが…。

# やりたいこと

– `last updated : 2020-01-11 15:00`と出力したい。
– `2020-01-11 15:00` の部分が動的に変わる。

# こう書いてた

“`haml
= “last updated : #{@first_book.updated_at.strftime(“%F %R”)}”
“`

# これでよかった

“`haml
last updated : #{@first_book.updated_at.strftime(“%F %R”)}
“`

# 気づいた経緯

経緯は書かなくてもいいかなと思ったのですが、せっかくなので。

まず、フッターにコピーライトで `© 2019-2020 Yoshida` みたいに出そうとして、
この `2020` の部分を動的にすれば、年明けてもメンテいらねえじゃんとか思ったのがきっかけでした。

それで、以下のように書きました。`get_this_year` はヘルパーで

元記事を表示

Ruby で CSV の先頭行だけを得る方法

Ruby の CSV ライブラリーを使って CSV ファイルの先頭行(第一行)だけを得るには

“`rb
require “csv”

first_row = CSV.foreach(“hoge.csv”){ |row| break row }
“`

のようにすればよい。
`CSV.foreach` は CSV の行ごとにブロックを評価するが,初回でいきなり `break` させられるので先頭行しかアクセスしない。
で,`break` の引数がそのまんま `foreach` の返り値になる,というわけ。

しかし,これ,もうちょっと素直な方法が無いもんかね。
どなたかご存知なら教えてください。

元記事を表示

【初心者向け】Rubyで超簡単な本紹介アプリを作ってみる(リファクタリング編)

#本紹介アプリのリファクタリングをしてみました。

ありがたいことに、@scivolaさんよりご指摘いただきました。
まじくそ初心者の私に感謝しきれないくらいに細かいところまでフィードバックいただきました・・・。

他の方にもみていただければと思いアウトプットさせていただきます。

こちらの記事は、前回ご紹介させていただいた、
https://qiita.com/pontarou194/items/c9d4d7e64e6eadbd5de2
の続きで、下記にリファクタリングを主として実施しています。

#もともとのリファクタリングする前はこんなコードでした。

“`rb
puts “本の名前を登録”
title= gets.chomp
puts “著者を登録”
author = gets.chomp
puts “本のカテゴリを入力してください”
categorys = [“小説”,”ノンフィクション”,”ビジネス書”]

categorys.each.with_index(1) do |category, number|
puts “#{number}:#{cat

元記事を表示

はじめてAWSでデプロイする方法④(EC2インスンタンスにSSHログイン)

## 前回までの記事
[はじめてAWSでデプロイする方法①(インスタンスの作成)](https://qiita.com/nousi/items/f0ab345402362e43db80)
[はじめてAWSでデプロイする方法②(Elastic IPの作成と紐付け)](https://qiita.com/nousi/items/0fe964f0be7e1cfa2ca1)
[はじめてAWSでデプロイする方法③(AWSセキュリティグループの設定)](https://qiita.com/nousi/items/cd2d937e9faf0c0c669c)

EC2インスタンス(サーバー)を作成し、パブリックIPをElastic IPで固定。
一般ユーザーがアクセスできるように、セキュリティグループの設定を追加(入り口を作成)
ざっくり説明すると、こんなところです。

## 今回実施すること
今回はEC2上にRailsやMySQLなどをインストールする、つまり環境構築をするために、SSH接続でEC2にログインをしていきます。
EC2にログインするにはどうすればいいのか?

IDとPWが必要です。
I

元記事を表示

rails newを実行しても、構成ファイルが作成されない

Dockerのコンテナ上で`raile new .`を実行しても、本来作成されるはずのファイルやディレクトリが作成されない状況に直面したので、その対処方法について書きます。

Docker以外の環境でも上記の現象は起こりうる可能性があるため、異なる環境で同じよな問題が発生された方にも参考にしていただけるかと思います。

# 環境
– Host OS
– macOS 10.15.3 Beta
– Docker
– version 2.1.0.5
– Docker Image
– ruby: 2.7-slim

# 問題
`rails new .`を実行すると、本来`app`ディレクトリ等が生成されるはずですが、以下のような出力結果がされました。

“`
root@[container_id]:~# rails new ./
create
create README.md
create Rakefile
create .ruby-version
create config.ru
create .

元記事を表示

neo4jrbチュートリアル[rails]

#概要
`neo4j`を`ruby on rails`に導入したので備忘録を残しておきます。
railsアプリのデータベースを`neo4j`の**グラフデータベース**の形式で表現することができます。

#環境構築
基本的に[ドキュメント](https://neo4jrb.readthedocs.io/en/latest/Setup.html)通りに進めていきます。普段はzshを使っているのですが、bashでないと動かないことがあったため、シェルは`bash`とします。rails設定済みの`macOS`のローカル環境に構築していきます。

“` bash
$ rails new myapp -m http://neo4jrb.io/neo4j/neo4j.rb -O
$ cd myapp
“`
gemを追加します。既に`neo4j`のgemはあるはずです。

“`bash:Gemfile
gem ‘neo4j-rake_tasks’
“`

“`
$ bundle install
“`

[Youtubeの動画](https://www.youtube.com/watch

元記事を表示

【rails】deviseを使わずにログイン機能を実装する方法

本記事では、ログイン機能の実装で広く使われているdeviseを導入せずに、
ログイン機能を実装する方法を記述します。

#環境
ruby 2.5.1
rails 5.2.4

#Userモデルを作る
データ構造は下記で設定します。

| 意味 | 属性名 | データ型 |
|:—————–|——————:|:——————:|
| 名前 | name | string |
| メールアドレス | email | string |
| パスワード | password_digest | string |

パスワードを表す属性名を**password**ではなく**password_digest**にしている理由は、railsに標準で付いている**has_secu

元記事を表示

rails: form_withを使用するとflash.nowとvalidationエラーが表示されない

### なぜform_withを使用するとエラーが吐かれないのか
form_withは“local: false“がデフォルトで設定されている。
デフォルトで“local: false“が設定されていると、ajaxは楽だが、“form_for“や“form_tag“が前世の時代では、ajaxを使用するときは明示的に“local: true“と書く必要があったがrails5から導入されたform_withでは不要になった。
そのため、ajax処理を頻繁に活用するサービスにとっては便利だなメソッドだがデフォルトでajaxモードになっていると今回のような予期しない状況に遭遇する。(出るはずのエラーが表示されないなど)

### 解決方法
上記で、“local:true or false“に触れているので勘のいい人はもう既に気付いてるかもしれないが“form_with“で“flash.now“や“validation“エラ〜メッセージを表示させるためには、“form_with“の中で“form_for“や“form_tag“とは逆に“local

元記事を表示

rails: form_withを使用するとflash.nowとvalidationエラーが表示されない

### なぜform_withを使用するとエラーが吐かれないのか
form_withは“local: false“がデフォルトで設定されている。
デフォルトで“local: false“が設定されていると、ajaxは楽だが、“form_for“や“form_tag“が前世の時代では、ajaxを使用するときは明示的に“local: true“と書く必要があったがrails5から導入されたform_withでは不要になった。
そのため、ajax処理を頻繁に活用するサービスにとっては便利だなメソッドだがデフォルトでajaxモードになっていると今回のような予期しない状況に遭遇する。(出るはずのエラーが表示されないなど)

### 解決方法
上記で、“local:true or false“に触れているので勘のいい人はもう既に気付いてるかもしれないが“form_with“で“flash.now“や“validation“エラ〜メッセージを表示させるためには、“form_with“の中で“form_for“や“form_tag“とは逆に“local

元記事を表示

bundleを使ったrailsプロジェクトの初期化

# ruby, railsコマンドのインストール
rubyコマンドも、railsコマンドもprojectで管理したい。[こちら](https://fukatsu.tech/create-rails-new-app#i-3)を参考にした。

“`
$ bundle init
$ vim Gemfile => gem “rails”のアンコメントを外す
$ bundle install –path vendor/bundle
# APIだけでいいなら最後に–apiをつける
$ bundle exec rails new . -B –skip-bootsnap
“`

* vendor/bundle内にrubyもrailsも他のgemも入る。(一回目のbundle installでpathを指定した)。今後はコマンドは`$ rails exec (実行コマンド)`を使う。

* bootsnapはインストールがうまくいかないのでskipした。

# Gitにpush
“`
$ vim .gitignore => /vendor/bundleを追加
$ git add .
$

元記事を表示

改行コードエラーでherokuへのマイグレーションに失敗した件

#改行コードエラーでHerokuへのマイグレーションに失敗した件

Herokuにアプリをアップロードする際に以下のエラーが発生し、
マイグレーションに失敗したので、その時の対処法をまとめておきます。

“`bash
/usr/bin/env: ‘ruby\r’: No such file or directory
“`

## 目次
* [動作環境](#動作環境)
* [エラー内容](#エラー内容)
* [試したこと](#試したこと)
* [おわりに](#おわりに)

—————————————
## 動作環境
ホストOS : windows 10
ゲストOS実行環境 : Vagrant 2.2.5
ゲストOS : Ubuntu VERSION=”16.04.6 LTS (Xenial Xerus)”
ruby : 2.6.3p62
rails : 5.2.4
エディタ: Atom

## エラー内容
Herokuでマイグレーションをする際に以下のエラーが発生し、マイグレーションに失敗。

“`bash
vagrant@

元記事を表示

シーザー暗号を使って、splitメソッド、ordメソッド、chrメソッド、joinメソッドの勉強

# この記事で得られる知識
Rubyで、入力された文字列をシーザー暗号で暗号化し、暗号化された文字列を復号するプログラムを作ってみました。

① シーザー暗号とは
② splitメソッドの使い方。
③ ordメソッド、chrメソッドの使い方。
④ joinメソッドの使い方。

# シーザー暗号とは
決まった文字数分のアルファベットをシフトさせて作られる暗号。
例えば”study”という文字列を、シーザー暗号で前方に3つシフトさせて
暗号化すると”pqrav”という暗号文ができる。
[シーザー番号 wikipedia](https://ja.wikipedia.org/wiki/%E3%82%B7%E3%83%BC%E3%82%B6%E3%83%BC%E6%9A%97%E5%8F%B7)

# splitメソッド、ordメソッド、chrメソッド、joinメソッドを使って書いてみる

実装の流れは
1、入力された文字列を各文字に分割して配列に入れる。(splitメソッド)
2、配列に入れた各文字を暗号化する。(ordメドッド、chrメソッド)
3、暗号化され配列に入っている各文字を再び文字

元記事を表示

【Rails チュートリアル】第6章のbcryptがインストールできずにテストで落ちてしまう。。

Railsのチュートリアルの6章を勉強していた時に、bcryptがインストールできなく手間取ってしまったので解決方法を載せておきます。

これ↓
![スクリーンショット 2020-01-11 15.04.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530825/cd838cee-0737-077d-d0c7-a187a4200276.png)

解決方法

1. gem uninstall bcrypt を実行
2. gem uninstall bcrypt-ruby を実行
3. gem install bcrypt –platform=rubyを実行
4. Gemfileにgem ‘bcrypt’, ‘~> 3.1.11’を記載
5. bundle installを実行

少しでも役に立てれば幸いです。

元記事を表示

mac osをcatalinaにしてからbundleもrailsコマンドも効かない

最近macosをcatalinaにしたんですが、その瞬間からbundleコマンドもrailsコマンドも効かずに途方に暮れる。

“`
9): Library not loaded: /usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib (LoadError)
“`
上記エラーばっかり出てくる。

以下のようにすると解決。

“`
$brew uninstall –ignore-dependencies openssl
$brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/30fd2b68feb458656c2da2b91e577960b11c42f4/Formula/openssl.rb
“`

どうやらopensslのversionが問題らしい

参考記事(英語です)
https://forums.meteor.com/t/mongodump-cannot-find-openssl-version-on-macos-catalina/5091

元記事を表示

[Ruby] memcached のキー一覧を表示する

# はじめに

memcached でキーの一覧を取得するのは面倒だ。

* telnet コマンドで接続する。
* `stats items` で存在する slab 番号を調べる。
* キーが存在しそうな slab 番号で `stats cachedump` を実行する。

ということをやらないといけない。

Perl で書かれた [memcached-tool](https://github.com/memcached/memcached/blob/1.5.20/scripts/memcached-tool) の dump を使うという手もある。しかし、この記事ではお手製の Ruby スクリプトで取得してみる。

# コード

“`rb:list_memcached_keys
#! /usr/bin/env ruby
require ‘bundler/inline’

# 必要な Gem をインストールする。
gemfile do
source ‘https://rubygems.org’
gem ‘net-telnet’
gem ‘terminal-table’
e

元記事を表示

rails: will_paginateを共通化してみた

### 前提
※ 本投稿では“will_gaignate“の使い方の解説はしません
でも、間違ってアクセスしてきた人のためにREADMEのリンクだけ添付しておきます。
[will_paginate](https://github.com/mislav/will_paginate/blob/master/README.md)

### 何をしたいのか
“will_paginate“はとても便利な“gem“ですが、実際に使うとコード一行が長くなりがち。
“paginate“に加えて、他のメソッドも呼び出したりしていると、“rubocop“にLine is too longに怒られる可能性がある。
“paginate“で、“per_page“を設定することはあっても、“page“を設定しない場合がある。
なので、もっとシンプルに出来ないかを僕なりの方法で以下のようにしてみた。

### 解説
1. “concerns“の中で共通モジュールを作成する
2. モジュールの中で“WillPaginate::ViewHelpers“を読み込む
3. “sco

元記事を表示

OTHERカテゴリの最新記事