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

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

Rspecのrequest specにて値の削除や更新、作成などのテストをする際の注意点

## 概要
Rspecのテストで、値を更新や削除などのデータ変更が加えられた際に
テストの記述の仕方について多少手間取ったので備忘録としてアウトプットします。

## 環境
Ruby ‘3.0.1’
rails ‘6.1.4’
rspec-rails ‘5.0.2’

## テストコード
### 前提
今回のテストはpostコントローラーにdeleteリクエストを送った際に、
該当する投稿データが削除されるといったテストを想定します。
__なお、実際のコードについては説明に重点を置くため簡易的に表記します。__

_*controllers/posts_controller.rb*_

“`ruby
class PostsController < ApplicationController def destroy post = Post.find(params[:id]) # 左記のコードでは誰の投稿でも削除が可能になってしますので、 post.destory # ユーザー自身の投稿のみ削除可能にするための条件分岐等を行ったほうが

元記事を表示

インスタンス変数の簡略化メモ

●インスタンス変数
3段活用
以下、全て出力結果は同じになる

“`:①基本の書き方
class Test
# セッター
def name=(name)
@name = name
end

# ゲッター
def name
@name
end
end

“`

“`:②セッターとゲッターをそれぞれ簡略化

class Test
# セッター
attr_writer :name
# ゲッター
attr_reader :name
end

“`

“`:③全て簡略化

class Test
attr_accessor :name
end

“`

元記事を表示

Ruby技術者認定試験Silverで実際に出題された内容(ほんの一部)

# 最初に

2020/6にRuby技術者認定試験 Silverを受けて、合格しました。
自分的には、めちゃくちゃ簡単だった記憶です。
問題は貰えないですが、出題された内容の中で印象的なのを少し覚えて、当時メモしました。
せっかくなので、そのメモを元に記事で残すことにしました。

今は2022年の年始ですが、2020年のRubyのアドベントカレンダーPart2がスカスカで、せっかくなので登録しておきます!! どうせなら、この記事がちょっと目立つように!

# 実際に出題された内容

## Arrayのgrepメソッドの理解

### 問題

下記は、どのような出力がなされるか。

“`ruby
a = [“foo”, “foo”, “bar”, “foo”, “baz”]

p a.count(“foo”)
p a.grep(/f/)
p a.grep(/f/).count
“`

(実際は選択肢問題でしたけど、詳細は覚えてません。
確かなのはArrayのcountやgrepのメソッドの理解を問われるものでした。)

### 正解と雑感

正解は、

“`ruby
a = [“f

元記事を表示

【Rails】redirect_backとは

redirect_backを使うと、“直前のページにリダイレクト“をしてくれる。

“`使い方.
redirect_back fallback_location: 直前のページに戻れなかった際のパス

#使用例
redirect_back fallback_location: root_path
“`

redirect_backを使う際は、直前のページに戻れなかった際のパスの記述が必要。

元記事を表示

devise_token_auth使用時のRspecの認証処理のやり方

## 概要
Railsで`devise_token_auth`を使用して認証機構を実装しております。
Rspecを利用してテストを書いている際に、テスト内でトークン認証をさせるのに手間取ったので
備忘録としてアウトプットしたいと思います。

## 方法
ここでは、`devise_token_auth`を使用してトークン認証をしている場合と、
`devise`を使用してトークンを使わない認証の場合に分けて記載します。
使用例としてはログインしたユーザーが投稿を作成するというテストを考えていきます。
__なおここからは認証のやり方を示すことに重点を置いているためすべて簡易的にコードを記載していきます。__

#### deviseを使用した場合
通常`devise`を使用した場合は`sign_in`というヘルパーメソッドを使用してテスト内でログイン認証を行います。
まず、下記の投稿に関するcontrollerがあるとします。
またコード中に出てくる`authenticated_user!`、`current_user`、`sign_in`などはdeviseを導入すると
使用できるヘルパーメ

元記事を表示

rubyでtwitter自動フォローボット

知人の依頼で作成

要件

– ランダムなインターバルでフォローする
– 知人曰くBAN対策らしいけど、あまり関係ないような気もする
– 任意の検索ワードで検索して、一番上のひとをフォローする(#相互フォロー など)
– そのユーザーがフォロー済みだった場合は、そのユーザーのフォロワーのなかからランダムで一人取得してフォローする

ソースコード

“`ruby
# frozen_string_literal: true

require ‘twitter’
require ‘logger’

FOLLOW_COUNT_PER_DAY = 200
RANDOM_SLEEP_SECONDS = 30
SEARCH_WORDS = ‘#相互フォロー’

class TwitterManager
def initialize(logger)
@logger = logger
end

def client
@client ||= Twitter::REST::Client.new do |config|
conf

元記事を表示

Rubyの探索関連で迷った話

## なぜ
Ruby Goldの学習中に探索関連の問題(REX)でつまずいたので、その過程で簡単にメモしたものを記事にしてまとめたいと思ったから。

## 概要
メソッドの探索と定数の探索ではそもそも違う話なんだよってこと(知っている人は多数だと思いますが、私は無知故知りませんでした)。

## 結局なんなん?
#####・メソッドの場合
先人が残している様々な優良記事にも記載されているよう、あるクラスの未定義インスタンスメソッドを実行しても、そこでエラーにはならず、継承元のクラスまでそのインスタンスメソッドが定義していないかを探索した後、プログラムは実行される。(ここまではギリ知っていた)
 

“`ruby:main.rb
module LibertyFish

def method_a
“LibertyFish”
end

class Liberty
def method_a
“LibertyFishってなに?”
end
end

class Fish < Libe

元記事を表示

多重ハッシュから値を取得する

###rubyの知識を問題を解きながら、何が分かってて何が分かっていないかを洗い出して、復習するシリーズ
という知識を深める用アウトプットをしていくよ

ではさっそく。vol.2

##問題
配列の内部に、複数のユーザーの情報をハッシュとして持つ変数user_data

“`ruby
user_data = [
{user: {profile: {name: ‘Abc’}}},
{user: {profile: {name: ‘Def’}}},
{user: {profile: {name: ‘Ghi’}}},
]
“`
全てのユーザーの「名前だけ」が出力されるように記述する。

“`ruby:期待する出力結果
Abc
Def
Ghi
“`

試行錯誤で戦った経過。不毛すぎるから折りたたみ。

user_dataの定義部分は省略して書く。

“`ruby:戦い1 なんかこんな感じのはず
user_data.each do |data|
puts data.user.profile.name
end
`

元記事を表示

gemを比較するサイトを作ってみた。ついでにRails7の所感を少々

## 作ってみた

Railsのリハビリついでに欲しかったサイトを作りました。
簡単に言うと、[npmtrends][npmtrends-url]を~~パクっ~~リスペクトしたサイトです。

サイト:[rubytrends.net][site-url]
ソースコード:[github][repository-url]

## こんな感じ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188872/8bea6cc4-38a8-10a1-2d0a-0d4ebcce1ed9.png)

過去一年分のダウンロード数をグラフ化し、重ねて表示しただけです。
次は期間を変えれるようにする予定です。

また、裏で検索履歴をカウントしているので、皆さんが使ってくだされば、いずれは本家のようによく比較されている関連gemを表示できるようになるはずです。

需要がありそうなら機能強化していきます。

## Rails7を使ってみた感想

この記事にRailsタグを貼り付けた以上、Railsに関して何も書かない

元記事を表示

豆知識:「present?」や「blank?」などの末尾にある「?」について

#「present?」や「blank?」などの末尾にある「?」について
Rubyでは慣例的に、trueやfalseを返すメソッドには「?」をつける傾向にあります。

元記事を表示

[py2rb] double splat引数 と 実行速度の検証

# はじめに
移植やってます。
( from python 3.7 to ruby 2.7 )
# double splat引数 (Python)
“`python
def charge(sequence, pH, **kwargs):
# 略

class ElectrochemTest(unittest.TestCase):
def test_charge_calculations_str(self):
self.assertTrue(
abs(charge(‘AAA’, 5.0,
pK={‘H-‘: [(9., 1)], ‘-OH’: [(8., -1)]},
pK_nterm={‘H-‘: {‘A’: [(3., 1)]}})) < 0.01) ``` `pK`や`pK_nterm`って仮引数にないのですが、実は辞書のキーでした。 # double splat引数 (Ruby) ```ruby def charge(sequence, p

元記事を表示

【Ruby on Rails】データベースを削除する方法

こんにちは!安田駿介です!

今回は「Railsでデータベースを削除する方法」というテーマで解説していきます。

# ターミナルで「rails db:migrate:reset」と入力する

これだけですね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1903726/74424c26-09c3-a93b-1a9a-d9846f44a29b.png)

という結果になります。

#開発環境
・Cloud9
・Ruby 3.0.0
・Rails 6.1.3.1
・MySQL2

元記事を表示

Ruby on Railsを基本からまとめてみた【1】【概要と特徴】

##Ruby on Railsとは

Ruby on Railsはプログラミング言語「Ruby」で利用される代表的なフレームワーク。

##フレームワークとは

システムを開発するために必要な機能がまとまったものをフレームワークと呼ぶ。
文字通り「枠組み」を表し、システム開発がより簡単に行えるように便利なプログラムがひとまとまりとなったシステムを指す。

##Ruby on Railsの特徴

####MVCアーキテクチャー
Ruby on Railsは、MVCアーキテクチャーの基づいたフレームワークである。
データベースとのやり取りやビジネスロジックなどを担当するモデル(Model)、ブラウザへの表示を担当するビュー(View)、モデルやビューへの指令を与える役割としてのコントローラー(Controller)それぞれの頭文字を取ってMVCアーキテクチャーと呼ばれる。

MVCアーキテクチャーによって、機能毎の独立性が高く、開発効率・保守性ともに高いアプリケーションを構築することが可能である。

####CoC
Convention over Configurationの略称で、日本語

元記事を表示

継続を扱えるLispの簡易的な処理系をRubyで実装

プログラミング言語の処理系を実装してみたく思い、LispのようなS式を実行する簡易的な処理系を書いてみました。

「第一級の継続(call/cc)を実装する」というのが一番の目標でした。

ひとまずは動くものができた(と思う)ので、実装するにあたって考えたこと、試したことなどを書き残しておこうと思います。

ソースコードはこちらにあります。

https://github.com/tetetratra/mini_lisp

## 言語を軽く説明

Rubyで実装したS式の簡単な処理系です。

VM(バーチャルマシン)実行方式を採用しました。ソースコードを独自のバイトコードに変換して、それを独自のVMで実行します

扱える値は整数と文字列くらいです。組み込みの関数名などは若干Rubyに寄せています。if、while、変数などは実装してあって、こんなコードが動きます。

“`lisp
(= a 5)
(= sum 0)
(while (!= a 0)
(= sum (+ sum a))
(= a (- a 1))
)
(p sum) ; => 15
“`

関数も定義できます。

元記事を表示

[個人開発] 普段コンビニ食品を食べているが、成分が気になる方へ向けてのサービス 「healthy-combi」を開発しました。

## サービス概要

コンビニ食品をよく摂取するが、炭水化物・脂質・塩分が気になる人へ。組み合わせ食品を共有するアプリです。

URL: https://www.healthy-combi.com/
GitHub: https://github.com/takuya178/healthy-combi

[![Image from Gyazo](https://i.gyazo.com/ca8957b0455b3b00f02595e053678469.jpg)](https://gyazo.com/ca8957b0455b3b00f02595e053678469)

炭水化物、脂質、塩分から控えたい成分を選び、麺類とご飯類から食べたいジャンルを選んでいただきます。
選んでいただいた条件から組み合わせ一覧が表示され、控えたい成分とカロリーの値が表示されます。

## サービスを作成した背景

薬局の従業員の健康改善を目的に作成させていただきました。

そのため薬局の従業員の方達にMVPを定期的に見ていただき、サービスの修正や機能の追加を実装することができました。(本当にありがとうございました

元記事を表示

【Rails】ページ毎にタイトルを変更する方法

##content_forを使ってタイトル名を変えていく
“content_for“というヘルパーを使って**「ログイン(ページ名) | SAMPLE BOARD APP(固定タイトル)」**と出力するやり方を見ていく。

**手順**
①application_helperにヘルパーメソッドを記入
②viewにタイトルを入れていく

##①application_helperにヘルパーメソッドを記入

“`application_helper.rb
module ApplicationHelper
def page_title(page_titlle = ”)
def page_title(page_title = ”)
base_title = ‘SAMPLE BOARD APP’

page_title.empty? ? base_title : page_title + ‘ | ‘ + base_title
end
end
end
“`

“page_t

元記事を表示

[py2rb] assertAlmostEqual

# はじめに
移植やってます。
# assertAlmostEqual (Python)
https://docs.python.org/ja/3.7/library/unittest.html#unittest.TestCase.assertAlmostEqual

概要が完成しましたので、テストを開始しています。

assertAlmostEqual
> assertNotAlmostEqual(first, second, places=7, msg=None, delta=None)
first と second が近似的に等しい (等しくない) ことをテストします。これは、places (デフォルト7) で指定した小数位で丸めた差分をゼロと比較することで行われます

~~えっ、等しい場合はどうするのだろう。~~

**[追記]**

|メソッド|確認事項|
|:–:|:–:|
|assertAlmostEqual(a, b)|round(a-b, 7) == 0|

# assert (Ruby)
“`ruby
assert a.round(7) == b.round

元記事を表示

[py2rb] 引数の省略

# はじめに
移植やってます。
# 引数の省略 (Python)
“`python
def func1(str1, num1=(1, 2), num2=0):
print(num1[1] + num2)

func1(‘test’, num2=5)

# 7
“`
別段変わった様子はなし。
# 引数の省略 (Ruby)
“`ruby
def func1(str1, num1=[1, 2], num2=0)
puts(num1[1] + num2)
end

func1(‘test’, num2=5)

# 0
“`
うぅ、これに手間取りました。

この時の`num1`と`num2`には、それぞれ`[1, 0]`と`0`が入っています。
よって`0`が返ってくるのは当然ですね。
しかし`5`はどこにいった?
# キーワード引数 (Ruby)
“`ruby
def func1(str1, num1: [1, 2], num2: 0)
print(num1[1] + num2)
end

func1(‘test’, num2: 5)
“`
キーワード引数は~~`R

元記事を表示

【Rails】rails sができなくなった時の対処

##背景
“rails s“実行中にエラーが起き、“⌘+C“で終了出来なかったため、“⌘+Z“で強制終了し、再度起動すると

“`ターミナル.
=> Booting Puma
=> Rails 5.2.3 application starting in development
=> Run `rails server -h` for more startup options
A server is already running. Check /Users/ユーザー名/projects/test/tmp/pids/server.pid
Exiting
“`

と上記のようなものが出た。
“/Users/ユーザー名/projects/test/tmp/pids/server.pid“はサーバー起動する際に使用しているID。本来であればサーバーを終了したら、このIDも削除されるはずだが、今回のような強制終了により、IDが残ってしまうことがある。

##解決策
本来は自動で削除されるであろうこのIDを手動で消してあげれば、解決する。

**手順**
①server.pi

元記事を表示

【Rails】コメント機能のparamsにmergeの意味を調べた

コメント機能の実装する際に、comments_controllerにて以下の記述を行なった。

“`comments_controller.rb
class CommentsController < ApplicationController def create comment = current_user.comments.new(comment_params) if comment.save redirect_to board_path(comment.board),success: t('.success', item: Comment.model_name.human) else redirect_to board_path(comment.board),danger: t('.fail', item: Comment.model_name.human) end end def destroy comment = current_user.comments.find_by(id: param

元記事を表示

OTHERカテゴリの最新記事