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

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

[py2rb] 辞書の値が関数

# はじめに
移植やってます。
( from python 3.7 to ruby 2.7 )
# 辞書の値が関数 (Python)
“`python
def a(k, v):
print(k, v)

def b(k, v):
print(k, v)

h = {‘func a’: a, ‘func b’: b}

h[‘func a’](‘A’, 1)
h[‘func b’](‘B’, 2)

# A 1
# B 2
“`
辞書の値に関数を入れておいて、引数を渡します。
動的プログラミングですねえ。
# 失敗 (Ruby)
“`ruby
def a(k, v)
p [k, v]
end

h = {‘func a’ => a}

main.rb:1:in `a’: wrong number of arguments (given 0, expected 2) (ArgumentError)
“`
ハッシュにメソッドを入れた時点でエラーになります。
# 成功 lambda (Ruby)
“`ruby
a = lambda { |k, v| p [k, v

元記事を表示

[py2rb] lambda

# はじめに
移植やってます。
( from python 3.7 to ruby 2.7 )
# lambda (Python)
“`python
_identity = lambda x, **kw: x
“`
https://docs.python.org/ja/3.7/glossary.html#term-lambda

いわゆる無名関数ですね。
# lambda (Ruby)
“`ruby
_identity = ->(x, **kw) { x }
# or
_identity = lambda { |x, **kw| x }
“`
https://docs.ruby-lang.org/ja/latest/method/Kernel/m/lambda.html

`lambda`と`Proc`の違いの一つに引数の数が違っている場合があげられますが、可変長引数を使用するとエラーにならない様です。

“`ruby
identity2 = ->(x, **kw) { x }
puts identity2.call(2)

# 2

identity1

元記事を表示

音声ファイルを保存、再生、ダウンロード機能を実装。【Ruby】

# 目的
音声ファイルをアップロードし保存ができ、再生やダウンロードができるように実装します。
以下の画像のようなオーディオプレーヤーが実装されるのがゴールです。
[![Image from Gyazo](https://i.gyazo.com/c7beca78223170f1134c6b610b1f7668.jpg)](https://gyazo.com/c7beca78223170f1134c6b610b1f7668)

# 手順
### オーディオファイルを保存したいモデルにカラムを追加。

“`ターミナル.
% rails generate migration AddFileToモデル名 file:string
“`
“`ターミナル.
% rails db:migrate
“`
### ストロングパラメータの修正

“`songs_controller.rb
# 省略

private

def song_params
params.require(:song).permit(:file, :title)  # permit()の中に:fileを追

元記事を表示

RubyにEnumerator#rest みたいなのが欲しい

Ruby の Enumerator で、列挙はひとつずつしかできない。まとめていくつか列挙できるメソッドが欲しい。

こんな感じ。

“`ruby:Ruby
class Enumerator
def rest(n=nil)
ary = []
case n
in nil
loop { ary << self.next } in Integer n.times { ary << self.next } end ary end end a = [*1..10].to_enum a.next #=>1
a.next #=>2
a.rest(4) #=>[3, 4, 5, 6]
a.next #=>7
a.rest #=>[8, 9, 10]
“`

ダメですかねえ…。

元記事を表示

paiza POH silver_bullet #SILVERBULLET #銀の弾丸 #戦場のエンジニア

## Dランク

### d1

“`awk:d1.awk
#!/usr/bin/awk -f
$0=30*$1
“`

### d2

awkの除算は小数になるので…

“`sh:d2.sh
#!/bin/bash
read n
echo $(( (n-32)*5/9 ))
“`

### d3

“`rb:d3.rb
#!/usr/bin/ruby
p *gets.to_i+1…gets.to_i
“`

### d4

“`sh:d4.sh
#!/bin/sh
tr -d ‘\n’
“`

### d5

入力の順番的にRubyよりもPythonが適していると思いまする

“`py:d5.py
#!/usr/bin/python
print(‘DANGER’ if input().strip() in input() else ‘OK’)
“`

## Cランク

### c1

なんか泥臭いなぁ

“`rb:c1.rb
#!/usr/bin/ruby
gets.to_i.times{
a,b=gets.split
b=b.to_i
a=a.ch

元記事を表示

【RSpec】ActiveRecordを継承しないクラスでFactoryBotを作成したい

##initialize_with
Rubyの任意のクラスでFactoryBotを作成したいときは“`initialize_with“`を使う。

“`ruby
# user_info.rb
class UserInfo
attr_accessor :hoge

def initialize(hoge)
@hoge = hoge
end
end

# factories.rb
factory :user_info do
hoge { Fuga.new }

initialize_with { new(hoge) }
end

build(:user_info).hoge #Fugaクラスのインスタンスが返る
“`

####注意
**create(:user_info)**すると下記のエラーが出る。

“`
NoMethodError:
undefined method save!
“`

##参考

https://github.com/thoughtbot/factory_bot/blob/main/GETTING_STARTED.md

元記事を表示

【Ruby】if,else 真偽値による条件を組み合わせて処理

※初心者向け
※アウトプット練習の為

開発環境
rails 6.0.4.4
ruby 2.6.5

##概要
指定された数値の範囲による条件と真偽値による条件を組み合わせて処理を行うプログラムを実装。

##問題内容
以下の要件を満たす in1to10メソッドを実装しましょう。

**・第一引数のnumが1以上かつ10以下の範囲であればTrueを出力すること**
**・第二引数のoutside_modeがTrueの場合は、第一引数numが条件範囲外でもTrueを出力すること**
**・それ以外はFalseを出力すること**

##雛形

“`ruby
def in1to10(num, outside_mode)
# ここに条件式を記述する
end

# 呼び出し例
in1to10(5,false)
in1to10(11,false)
in1to10(11,true)
“`

**出力例**
in1to10(5,false) →True
in1to10(11,false) →False
in1to10(11,true) →True

**ヒント**
**論理演算子**

元記事を表示

[Rails7] 後からBootstrap5を導入する

# 前提環境

“`
$ ruby -v
ruby 3.0.3p157 (2021-11-24 revision 3fb7d2cadc) [x64-mingw32]
$ rails -v
Rails 7.0.1
“`

設定などはRails7プロジェクトを作成したままのデフォルトです。

# cssbundling-rails gemをインストールする

Gemfileに以下を追加してインストールします。

“`diff:Gemfile
+ gem “cssbundling-rails”
“`

“`
$ bundle install
“`

# Bootstrap5(CSS)をインストールする

以下のコマンドを実行してインストールします。

“`
$ rails css:install:bootstrap
“`

# sassのコンパイル用スクリプトを追加

`package.json`に、`”scripts”: { “build:css”: “sass ./app/assets/stylesheets/application.bootstrap.scss ./ap

元記事を表示

[Ruby] Integerクラスのabsメソッド

学習したことのアウトプットとして

## absメソッド
Rubyの組み込みライブラリ
対象となる数値に対してabsメソッドを実行すると絶対値を取得することができる。すなわち`正の数の場合はそのままだが、負の数の場合は符号を取って正の数にした数値`が取得できる。

“`ruby
num = 5.abs
#=> 5

num = (-5).abs
#=> 5
“`

[absメソッドのリファレンス](https://docs.ruby-lang.org/ja/latest/method/Integer/i/abs.html)

以上。

※補足等ありましたらコメントいただけると幸いです。

元記事を表示

rails s が上手くいかない。rails newが作成できない時。

簡潔に書くと、

**rubyとrailsのバージョンの互換性**

に問題がある場合がある。

その為、下記のURLを確認して見直すことをおすすめする。
もし、互換性がないものであればURL通りにRuby、railsを入れ直してみると解決する可能性がある。
https://www.hmallett.co.uk/2018/08/ruby-and-ruby-on-rails-version-compatibility/

補足:上記の方法は下記のようにPumaさえも立ち上がらない人向け
“`=> Booting Puma
=> Rails 5.2.6 application starting in development
=> Run `rails server -h` for more startup options
*** SIGUSR2 not implemented, signal based restart unavailable!
*** SIGUSR1 not implemented, signal based restart unavailable!
*** SIGH

元記事を表示

[Ruby]閏年の条件分岐

学習したことのアウトプットとして

##閏年になる条件
– その年が4で割り切れること
– ただし、年が100で割り切れて400で割り切れない場合は閏年ではない

##記述例
if~endの入れ子としてさらにif~endを使っていく

“`ruby
year = 指定の年

if year % 4 == 0 # 年が4で割り切れること
if year % 100 == 0 && year % 400 != 0 # 年が100で割り切れて400で割り切れない場合
# 閏年でない
else
# 閏年
end
else
# 閏年でない
end
“`
 
もっと簡単な書き方はいくらでもありそうな気がするが…一つの例として書き留めておく。

 

※補足等ありましたらコメントいただけると幸いです。

元記事を表示

[py2rb] decode

# はじめに
移植やってます。
( from python 3.7 to ruby 2.7 )
# decode (Python)
https://docs.python.org/ja/3.7/library/stdtypes.html#bytes.decode

バイト列から文字列
## encode
https://docs.python.org/ja/3.7/library/stdtypes.html#str.encode

文字列からバイト列
# どうする? (Ruby)
https://docs.ruby-lang.org/ja/latest/method/String/i/encode.html

`encode`はあるものの`decode`は無い様子。
ふむ、要検討。
# メモ
+ Python の decode を学習した
+ 道のりは遠そう

元記事を表示

【Python、Ruby】約数と総和

#はじめに
元々Rubyを中心に、学んでいましたが、Rubyで書く内容を他の言語であればどのように書くのか?とふと思い、Pythonに興味があったため、勉強をしてみようと思いました。
そんな中で、
##### AIZU ONLINE JUDGE
というサイトを知り、ちょうど良いトレーニングになりそうだと思ったので、少しずつ挑戦してみることにしました。
本当は、アプリ等をどんどん作成したほうがトレーニングになるのかなと思いつつ、基礎の部分として損はないだろうと思い、やり始めています。

##3-D 約数の数

######3つの整数 a、b、cを読み込み、aからbまでの整数の中に、 cの約数がいくつあるかを求めるプログラムを作成してください。

######Input
a、b、cが1つの空白区切りで1行に与えられます。

######Output
約数の数を1行に出力してください。

######例
a=1 , b=10 ,c=30のとき、
約数の数は6つ

####解答
“`ruby:3-D.rb
# 回数を調べる
a,b,c = gets.split(” “).map(&:to_

元記事を表示

[py2rb] next

# はじめに
移植やってます。
( from python 3.7 to ruby 2.7 )
# next (Python)
“`python
a = iter([1, 2, 3, 4, 5])

while True:
try:
print(next(a))
except StopIteration:
break

# 1
# 2
# 3
# 4
# 5
“`
https://docs.python.org/ja/3.7/library/functions.html?highlight=iter#next

https://www.shoeisha.co.jp/book/detail/9784798163642

独習Python 510p
> 初歩的なプログラミングでは、開発者がイテレーターを直接利用する機会はほどんどありません。

そうですよね、上記のプログラムであればforループで事足ります。
# to_enum (Ruby)
“`ruby
a = [1, 2, 3, 4, 5].to_enum

while true

元記事を表示

Rubyのリテラルについて

#リテラルとは
プログラムに直接記述ができる、“`数値や文字列の総称の呼び名“`で
見た通りのそのままの値のことです。

ex)

“`
#数値
10 20 30

#文字列
“Hello world” ‘Hello world’

#配列
[1,2,3,4,5]

#ハッシュ
{“baseball” => “野球”, “soccer” => “サッカー”}
“`

#数値リテラルについて
使い方はファイルに記述、ターミナルで実行どちらでも可能。
“`_(アンダーバー)を単位区切り“`に使う。
例えば大きい数字を使うときです。

“`billion.rb
100_00_00_00
“`

“` rb
irb(main):001:0> 100_00_00_00
=> 100000000
“`

#文字リテラルについて
文字列はシングルクォートがダブルクォートで囲うことで表現できる。

“`
“Ruby” ‘Ruby’
“`

⚫︎***シングルクォートがダブルクォートはどう使い分けるのか?***
両者の使い分けとしては“`改行付き“` 、任意の値を埋め込

元記事を表示

Rubyのirbの操作

#環境
Rubyのバージョンは “`ruby 2.7.1p83““で
***環境構築が終わっている前提***で説明していきます。

“`
$ ruby -v
ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-darwin19]
“`
#irbとは
Interactive RubyといいRubyと対話しながらプログラムが書けるものがRubyに用意されています。
機械には人の言葉がわからないのでirbを使い機械に指示を出したりできます。

ターミナルに以下のコマンドを実行します。

“`rb
$ irb
irb(main):001:0>
irb(main):002:0>
irb(main):003:0> exit #これでirbを終了
“`
これでirbが使えるようになります。

#irbを使う上で知っておくべきLinux Unixコマンド

⚫︎pwd(print working directory) 現在値

“`
$ pwd
/Users/******/ruby
“`
上は一例です。
“`今自分が

元記事を表示

[rails]楽天APIの商品検索でエラー(Application ID is not defined)

#はじめに
railsのポートフォリオを作成している際に、楽天APIを用いた商品検索機能を実装しようとした際に、
エラーに引っかかってしまい、時間を食われてしまったので備忘録として残します。

#開発環境
ruby ‘3.0.0’
Rails 6.0.3.4

#参考サイト
以下のサイトを参考にし、楽天API商品検索機能を実装しようと試みました。
https://www.tom08.net/2016-08-29-133539/
https://takoyarosan.hatenablog.com/entry/2018/07/28/211709
https://freesworder.net/rakuten-api-rails/

#エラー内容
![スクリーンショット 2022-01-18 12.07.28(2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1874224/e9f0ae4f-0dcb-3e55-e77d-8d2f1812d85d.png)

binding.pryで、でバックしたものの、

元記事を表示

[py2rb] split

# はじめに
移植やってます。
( from python 3.7 to ruby 2.7 )
# split (Python)
“`python
s = ‘a,b,c,d,e’
print(s.split(‘,’, 1))

# [‘a’, ‘b,c,d,e’]
“`
https://docs.python.org/ja/3.7/library/stdtypes.html#str.split

`Python`の`split`の引数`maxsplit`は**分割する回数**を指定します。

https://www.shoeisha.co.jp/book/detail/9784798163642

独習Python 170p
# split (Ruby)
“`ruby
s = ‘a,b,c,d,e’
print(s.split(‘,’, 2))

# [“a”, “b,c,d,e”]
“`
https://docs.ruby-lang.org/ja/latest/method/String/i/split.html

`Ruby`の`split`の引数`limit`は**分割

元記事を表示

RSpecのControllerテストでNoMethodError: undefined method `get’ for xxxx と表示される

# はじめに
RailsでRSpecを使用してcontrollerのテスト時のエラー NoMethodError: undefined method `get’ for xxx について
# 目次

1. [Rspecでのバージョンの違い](#Chapter1)
1. [エラーの原因](#Chapter2)
1. [参考文献](#reference)



# Rspecでのバージョンの違い
Rspec3以降ではデフォルトでファイルの場所から自動的に推測する機能がなくなっています。
Rspec3以降ではcontorollerのテストをする時は指定する必要があるようです。


# エラーの原因
**1.typeを指定していない**(今回の私)

“`rb
# type: :controller または type: :request とする必要あり
RSpec.describe Api::V1::PostsController

元記事を表示

Ruby技術者認定試験 Goldの直前に振り返っておきたいところ

# 最初に

Ruby技術者認定試験 Goldを受けて、合格しました。

本番では多数の問題が、合格教本の問題と同じか類題でした。
勉強方法として合格教本とRExを解けるように勉強していけば、十分だと思います。

合格できた体験から、直前で振り返っておきたいこと等をまとめました。

# 合格教本 Gold 演習問題 基礎力確認問題 30問

「合格教本」の第8章「Gold 演習問題」の「基礎力確認問題 30問」から、
自分が使わないので覚えにくいところを中心に直前に見直したいものをまとめました。

あと、同じ問題が出題されたと書いてるところがありますが、
問題を持ち帰れないため、そう思っただけで、ちゃんと比較したら違うかもしれません。

– `-I`オプション(全く同じ問題が本番で出題)
– 引数で指定したディレクトリを、変数`$LOAD_PATH`(配列)に追加する。
– 環境変数`RUBYLIB`も、変数`$LOAD_PATH`(配列)に追加する。
– ただし、`-I`オプションでの指定が、環境変数`RUBYLIB`に追加されるわけではない。
– 引数で指定したディ

元記事を表示

OTHERカテゴリの最新記事