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

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

#Ruby で to_hash メソッドのある Class のインスタンスを、キーワード引数を可変で受け取るメソッドに渡すと、ハッシュに変換されてしまう

“`rb
# Ruby 2.7

# to_hash method not implemented class
class ToHashNotImplementedUser
def initialize(name:, age:)
@name = name
@age = age
end
end

# to_hash method implemented class
class ToHashImplementedUser
def initialize(name:, age:)
@name = name
@age = age
end

def to_hash
{
name: @name,
age: @age
}
end
end

def show_args(*args, **keyword_args)
puts “args: #{args}”
puts “keyword_args: #{keyword_args}”
end

# —————————

元記事を表示

devise実装後のユーザ権限設定方法について記述していきます。

はじめに

前回の投稿では、アルバムページの作成方法についてご紹介いたしました。
その後、私はdeviseを使用してログイン機能の追加や各種投稿機能を実装し、
Railsアプリっぽくなってきた事に満足していたのですが、
重要な欠陥に気付きました。

それは、このままではどのユーザでログインしても投稿画面やアルバム一覧が全て見えてしまうという事です。。。。
絶対嫌ですよね。見知らぬ方にプライベートな写真や投稿を見られるのは。
このままではいけないと思い、各ユーザ毎に閲覧可能なページの権限設定方法について調べ、
実装しましたので備忘録として記事に残したいと思います。

下記の動画を参考にしました。非常に分かりやすくおすすめです。
お困りの方は是非ご覧いただければと思います。

やりたいこと

UploadモデルをUserモデル(deviseにて作成)に紐付け、権限設定を行う

環境

macOS:10.15.2
Ruby:2.6.5
Rail

元記事を表示

#Ruby to_hash implemented class / method receive as **keyword_args / Class instance automatic converted as hash

“`rb
# Ruby 2.7

# to_hash method not implemented class
class ToHashNotImplementedUser
def initialize(name:, age:)
@name = name
@age = age
end
end

# to_hash method implemented class
class ToHashImplementedUser
def initialize(name:, age:)
@name = name
@age = age
end

def to_hash
{
name: @name,
age: @age
}
end
end

def show_args(*args, **keyword_args)
puts “args: #{args}”
puts “keyword_args: #{keyword_args}”
end

# —————————

元記事を表示

ExecJS::RuntimeUnavailableの解決方法

##前提条件
ruby ‘2.5.0’
Rails ‘5.1.4’

#mini_racerを使おう
先日MacのOSアップデート後、rails serverを立ち上げようとしたところ、`Could not find a JavaScript runtime. See https://github.com/rails/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)`と怒られてしまった。
どうやら、Javascriptを実行するために必要なランタイム(ソフトウェアの実行に必要なプログラム)がないぞということらしい。
エラーメッセージには、https://github.com/rails/execjs と利用可能なランタイムの一覧のリンクまで表示してくれてある。
親切。
 
ただリンクの一覧にある`therubyracer`はトラップだった。
導入を進めている他の記事も多いけど、自分の前提条件だと、このgemをbundle installしようとしたところ、

“`
An error occur

元記事を表示

AWS SAM + Step Functions でアクセスチェックをする。(ruby runtime)

# 概要

AWS SAM(Lambda) + Step Functions を利用してウェブサイトの外形監視を行います。

## やること

1. サイトの外形監視をする。(lambdaで実行)
2. アクセスした際にステータスコードが200 or 302の場合、メールで通知(lambda + SES)
3. アクセスアクセスした際に上記のステータスコード以外の場合は、時間をおいて再アクセスをする。
StepFunctionsでループの処理を実装し、最大5回実行する。
4. 正常なステータスコードが取得できなかった場合は実行を失敗として終了する。
失敗時の通知はCloudWatch Eventで通知予定ですが、今回は実装しません。

注意)
通常は成功時は通知をせず、失敗時に通知を行うと思いますが、今回は成功した場合に通知をする設定にしています。(学習目的のため)

# 実行環境

1. AWS CLIを設定済であること(バージョン1)
2. AWS SAMをインストール済であること
3. SESを設定済であること

## 環境設定の参考サイト

AWS CL

元記事を表示

#Ruby define Class VS Struct Vs OpenStruct code example

“`rb
# Ruby 2.7

# ————————
# Normal class
# receive some args
# ————————
class FooUser
def initialize(name, age)
@name = name
@age = age
end

attr_reader :name, :age
end

alice = FooUser.new(“Alice”, 20)

p alice
#

# ————————
# Struct
# ————————
BarUser = Struct.new(“BarUser”, :name, :age)
bob = BarUser.new(“Bob”, 30)

p bob
#

元記事を表示

備忘録 railsの継承関係をちょっとだけ理解できた

初めてrailsを触った時、
クラス・モジュールの継承知識がないまま以下の文を見たので
『なんでApplicationクラスがApplicationクラスを継承してんだよ』
と頭の中が?でいっぱいになった思い出があります。

“` config/application.rb
module Hoge
class Application < Rails::Application #省略 end end ``` ちょっとは理解が深まったので改めて継承関係を確認してみることに ```ruby $ rails console ``` Applicationクラスの親クラスを表示(継承関係は見えているが一応、、、) ``` irb(main):001:0> Application.superclass
Traceback (most recent call last):
1: from (irb):1
NameError (uninitialized constant Application)
“`
ん、なんでだ?Applicationクラスじゃないのか

元記事を表示

【Ruby】はじめてのスキルチェック:標準入力のやさしい解釈

## 何をしてよいかわからない人を救いたい
四則演算や条件分岐、ループ処理は勉強したものの、[Paiza](https://paiza.jp/)のようなスキルチェックで入力された値をどう取得してどう使うのかがわからない。これは、もはや問題を解くという次元ではない!!
わたしも同じ気持ちでした。もしかして、わたしだけなんですか? 何はともあれ、まとめておきます。戒め。

## 基本的な評価方法
**① 入力 → ② なんらかの処理 → ③ 出力**

上記でいう「② なんらかの処理」だけを書けばOKというものもありますが、特にPaizaのように、この一連の流れをコードで記述することが求められるものもあります。
しばしば問題文と一緒に「入力される値の例」と「期待される出力の例」が書いてあります。そして、これをヒントにコードを考えていきます。入力された値が取得できているか(できなかったのが筆者である)、意図した通りの処理になっているか、期待した結果が出力されているか、このいずれもを満たしていないとコードとして成り立ちません。

## おさえておきたいメソッド
### getsメソッド
入力

元記事を表示

ONE PIECE FILM STRONG PARAMETERS -ストロングパラメータがわからない人向け-

皆さんに質問です。
「**ワンピース**」は好きですか?
愚問でしたね、私も大好きです。
ワノ国編が面白すぎて「今週号読んだ?神回やわ…」って毎週言ってます笑
ちなみに一番好きなキャラはゾロです。

では次の質問です。
Railsの「**ストロングパラメータ**」は知ってますか?

>「なんとなく、、」
「言葉は知ってるけど、正直何やってるか知らん」
「なにそれ?おいしいの?」

大丈夫です。
そんな人たちに向けて、**ワンピースの世界観を題材にしてわかりやすく解説します。**
この記事の目標は、
「**他の例えを使って説明できるレベルまでストロングパラメータの理解を深める**」です。

####それでは早速、冒険に出発しましょう!

##1. パラメータとストロングパラメータを少しおさらい
冒険に行く前に、
まずはパラメータとストロングパラメータの違いについて少しおさらいしておきましょう。

**・パラメータ(Parameters 又は Params)**
送信される複数のデータをひとまとめにしたモノ
例:Twitterで投稿されるデータ(ユーザー名、ツイート

元記事を表示

EC2とRDSを使用し、RailsアプリをAWSにあげる際に詰まった点 -その2- 

#●はじめに
下記の記事を参考にEC2とRDSへを使用しRailsアプリをAWSにデプロイする際に詰まった点と、その解消方法をまとめました。
[世界一丁寧なAWS解説。EC2を利用して、RailsアプリをAWSにあげるまで](https://qiita.com/naoki_mochizuki/items/f795fe3e661a3349a7ce)

#3.データベースの作成・接続ができない(RDSとRailsの接続)
RDSを使用したため、参考サイトの記述されているMySQLの設定方法とは異なる方法で実装する必要があります。
RDSとRailsの接続時に気にする大きなポイントは2つです。

###1.RDSのセキュリティグループで、EC2インスタンスのブライベートIPからの接続を許可してあるか

セキュリティーグループは、AWS consoleからRDSを開き、DB選択すると確認できますね。
![スクリーンショット 2020-05-01 23.16.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5

元記事を表示

Ruby と Perl と Java と Python で解く AtCoder diverta 2019 Programming Contest C

# はじめに
*[AtCoder Problems](https://kenkoooo.com/atcoder/#/)* の Recommendation を利用して、過去の問題を解いています。
AtCoder さん、AtCoder Problems さん、ありがとうございます。
# 今回のお題
*[AtCoder diverta 2019 Programming Contest C – AB Substrings](https://atcoder.jp/contests/diverta2019/tasks/diverta2019_c)*
Difficulty: 911

今回のテーマ、文字処理
# Ruby
与えられた文字列を、`BXA` `BX` `XA` でそれぞれカウントします。
この内、`BXA` は `BXA` 同士で合体しても又 `BXA` になりますので、まずこれを処理して、`BXA` の個数を減らします。
同様に、`BXA` と `BX` が合体しても `BX`、`XA` と `BXA` が合体しても `XA` で

元記事を表示

親モデルの単体テストをやったから、ついでに子モデルの画像アップロードテストもやろうとして頭を抱えた話。

#今回やること
[前回](https://qiita.com/0thefool/items/5e5935204c5a62f8bcce)、やっとまともに単体テストをやって、気を良くしたので親子関係のあるモデルの画像投稿の単体テストをやろうと思いました。
本当は「子モデルの単体テスト」だけにしたかったのですが、子モデルのカラムには画像保存のカラムしかなかった。
なので半強制的に画像の投稿テストまでやることになりました。

色々と勉強になったので備忘録として記載します。
#動作環境
ruby 2.5.1
rails 5.2.4.2
carrierwave 2.1.0
mini_magick 4.9.5
#下準備
ここまでの環境は[前々回](https://qiita.com/0thefool/items/5af0f17f0075e7e0e013)とか[前回](https://qiita.com/0thefool/items/5e5935204c5a62f8bcce)の記事の下準備をご覧ください。
#今回のテスト環境の準備
起動時間が早くなるらしいと聞いたので **’spring-comman

元記事を表示

MiniMagickの使い方 ArgumentError wrong number of arguments (given 4, expected 2) 

#MiniMagickの使い方
ArgumentError  wrong number of arguments (given 4, expected 2) 

開発環境
ruby 2.7.0p0
Rails 5.2.4.1

はい、またしても出ましたArgumentError
minimagickというgemを導入したらエラーが出たので改善してみました。

なかでも『wrong number of arguments (given 4, expected 2)』についての解説です。

今回はポートフォリオにアップロードした画像のサイズを変えたり余白を設定するgemを実装した時に起きたエラーです。

今までのポートフォリオではインスタライクなサービスなのでとりあえず画像投稿機能までは作っていたのですが、画像のファイル制限はしているものの縦横サイズ感についての制限はしておらず、投稿によってはやけに縦長のトピックになってしまったりしていました。

そこでGemfil

元記事を表示

railsで.xlsxを生成する

## 概要
xlsxを出力する必要があったため、 [caxlsx_rails](https://github.com/caxlsx/caxlsx_rails) 使用して.xlsxファイルを生成していく
> **axlsx_rails renamed to caxlsx_rails**

もともと`axlsx_rails`という名称のgemだったっぽい

## 準備
“`ruby:Gemfile
gem ‘caxlsx’
gem ‘caxlsx_rails’
“`

## コントローラーに追加
“`ruby:hoges_controller.rb

def show
@hoges = Hoge.all
respond_to do |format|
format.html
format.xlsx
end
end

“`

## viewに拡張子が.xlsx.axlsxのテンプレートを作成
下記のようなファイルを作成するだけでxlsm形式のファイルを生成する事が可能。

“`ruby
wb = xlsx_pac

元記事を表示

Kinx アルゴリズム – マージソート

# アルゴリズム – マージソート

## はじめに

**「見た目は JavaScript、頭脳(中身)は Ruby、(安定感は AC/DC)」** でお届けしているスクリプト言語 [Kinx](https://github.com/Kray-G/kinx)。「プログラム=アルゴリズム+データ構造」。アルゴリズムの実装例をご紹介。

元ネタは「C言語による(30年経っても)最新アルゴリズム事典」。今回はソート(マージソート)です。

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

アルゴリズムと言えばソート。今回はマージソートです。

## マ

元記事を表示

【Rails】sorceryのパスワードリセット機能(トークンがどのように使用されているのか)

## はじめに
sorceryのパスワードリセット機能の実装を行いました。
以下3点について記述しましたので、ご興味あれば見てってください。

**1. sorceryのパスワードリセット機能の実装方法
2. ActionMailerの使い方
3. passwordリセットトークンがリクエスト/レスポンス間でどのように使われているか**

## 1. sorceryの`reset_password`をインストール

#### モジュールの実装とマイグレーションファイルの作成

– `rails g sorcery:install reset_password –only-submodules`を実行し、password reset用のモジュールのインストール、マイグレーションファイルを作成する。

“`terminal
$ rails g sorcery:install reset_password –only-submodules
Running via Spring preloader in process 99290
gsub config/initi

元記事を表示

競技プログラミングメモ帳① 〜stringはまるで配列のように扱える〜

(ご指摘により5/2修正)
最近は競技プログラミングに、はまっていたためqiitaに書き込むことが少なかったです。(申し訳なく思っている)
今後はそれをネタに、その際に使ったコードをとりあげていきたいと思います。
かと言ってもすごく初歩的な物が多いこと、そしてこれはあくまでも私が個人的にコードを書いていることであるため、参考になるかはわかりません。(間違ってる可能性高いですが、それも勉強です)

私は、文字数分の繰り返し処理を行なう際にlengthなどを多用します。
ちなみにstringの型に[]で数字を間に挟むと、配列のように使用でき、前から順番に指定した数字に格納された文字が返ってきます。便利ですなぁ。
最後の文字を指定したい時は、str[-1]で指定すれば最後の文字取得できちゃうですよねー。
最初これは目から鱗でした。

“`ruby:

str = ‘test’ # gets.chomp.to_sなどで取得する場合がほとんど
puts str.length # 4と返す
str.length.times {|i| puts str[i]} # “t” “e” “s” “t”

元記事を表示

#Ruby 2.7 – Try code example – receive args and keyword args both with asterisk ( single splat and double splat both )

“`rb
# Ruby 2.7
# receive args and keyword args both with asterisk

def foo(*args, **kwargs)
p args
p kwargs
end

# Single arg
foo(“YES”)
# [“YES”]
# {}

# Multiple args
foo(“AH”, “WOW”)
# [“AH”, “WOW”]
# {}

# Array single args
foo([“WOW”, “YEAH”])
# [[“WOW”, “YEAH”]]
# {}

# Array multiple args
foo([“SAY”, “YES”], [“SAY”, “NO”])
# [[“SAY”, “YES”], [“SAY”, “NO”]]
# {}

# Args + Keyword Args
foo(“SOME”, “HOW”, x: “X”, y: “y”)
# [“SOME”, “HOW”]
# {:x=>”X”, :y=>”y”}

# Only Keyword Args
foo(

元記事を表示

【discordrb】うるさいレートリミットログを黙らせる

レートリミットの警告ログ、開発時はありがたいけど運用中は邪魔くさい。
だからといって、ログの出力レベルを`silent`とかにすると、重要なログも見逃すことになる。
そこで自身の備忘録も兼ねて、discordrbが出力する特定のログを出力させない方法を紹介する。
結構強引な上、一発ネタで申し訳ない。

## 方法
“`ruby
require ‘discordrb’

class Discordrb::Logger
private
alias_method :_write, :write

def write(message, mode)
return if message =~ /(RL bucket depletion detected|Locking RL mutex)/
_write(message, mode)
end
end
“`
discordrbを`require`した直後にこのコードを書くだけ。

何をやっているかというと、`Discordrb::Logger#write`という、ライブラリ内のログを書き込むためのメソッドを、`al

元記事を表示

[rails][devise][初心者]rspecでテストコードを書きながら学ぶ

# はじめに
deviseを使用したユーザー登録のテストコードを書いたので、備忘録として書き残します。
なお、内容はとても簡単な、初学者向けのものなります。

### 使用Gem等

– ruby, 2.5.1
– rails, ~> 5.2.3
– devise
– rspec-rails, ~>3.5
– factory_bot_rails

上記のGemをインストールします。
なお、web_console というgemはtest環境で動かすと不具合が起きる可能性があるgemなのでdevelopment環境でのみ動くようにします。
group :development do ~ endの記述が無ければ作成し、既にあればその記述の間にweb_consoleを移動させます。

## Rspecの設定ファイルを作成
ターミナルで下記のコマンドを実行します。

““
rails g rspec:install
““
すると以下のファイルが作成されます。

““
create .rspec
create spec
create spec/spec_helper.rb
cre

元記事を表示

OTHERカテゴリの最新記事