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

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

【rspec】confirmダイアログのテスト

# 開発環境
ruby ‘2.6.3’
rails ‘6.0.2’

## railsでconfirmダイアログのテストをする。
* `accept_confirm`だけで表示内容の確認とOKを押してくれる
* [Method: Capybara::Session#accept_confirm](https://www.rubydoc.info/github/jnicklas/capybara/Capybara/Session:accept_confirm)

“`ruby:systemテスト
context “削除する” do
it “投稿消去” do
click_button “消去する”
expect{
expect(page.accept_confirm).to eq “本当に削除しますか?”
expect(page).to have_content “レビューを消去しました。”
}. to change(@user.posts, :count).by(-1)
end
end
`

元記事を表示

Remember機能を実装する~Railsチュートリアル9章~

第9章も終了しました。
9章では主にRemember機能の実装方法について学びました。
ここはあまり時間をかけずに少し足早に通りすぎましたね。記憶トークンやRemember me機能についてざっくりとだけ理解した感じです。というのも今回はログイン機能の発展型、応用であるためまだまだ覚えることがたくさんある初学者の自分としては現段階では優先度が低い内容なのかなと感じました。

#Remember me機能
ユーザーのログイン状態をブラウザを閉じた後でも有効にする機能を実装する。
またこの機能を使うかをユーザーに決めてもらうためチェックボックスをフォームに追加する。
Sessionの永続化を行うために、記憶トークン(要するにパスワードのようなもの)を生成しcookiesメソッドによる永続cookiesの作成や、安全性の高い記憶ダイジェストによるトークン認証に記憶トークンを活用する。

#パスワードとトークンの違い
パスワードはユーザーが作成・管理する情報
トークンはコンピュータが作成・管理する情報

sessionメソッドで保存した情報は自動的に安全が保たれるが、cookiesメソッドに保

元記事を表示

【初心者向け】FizzBuzz問題

##環境,前提
Ruby 2.5.1
MacOS Mojave Ver.10.14.6

本記事はRubyがインストールされた前提の記事です。
Rubyをインストールしたあと、とにかくRubyをいろいろ触ってみて慣れていくための記事です。お役に立てば幸いです。

# 採用試験に出ました。

採用試験で実際に出題されたのでやはり大事なのかなと思い今回記録に残します。

# FizzBuzz問題とは?
1から30まで順に数えて出力して行き、3で割り切れる数は「Fizz」5で割り切れる数は「Buzz」両方で割り切れる数は「FizzBuzz」と出力する、ようにプログラムを書く問題です。

これが書けるか書けないかでプログラマー志願者を仕分けられるようになったようです。実際今でも使われていますから押さえておいて損はないと思います。[FizzBuzz詳細](https://ja.wikipedia.org/wiki/Fizz_Buzz)

# 私が書いたコード
実際の試験では「言語は問わない、形式も自由」だったので今回はRubyのWhile文を用いてやってみます。

“`FizzBuzz.

元記事を表示

Ruby入門メモ(プログラミング経験者用)2

#TIPS
###定数
英大文字で定義する(慣習的に全部大文字)。

“`
VERSION = 1.1
“`

##オブジェクトの型変換
to_i : 数値変換
to_f : 浮動小数点変換
to_s : 文字列変換

“`
number = 100
f_number = number.to_i * 0.01
l_number = number.to_s + “円”
d_number = f_number.to_i

puts “#{number} #{f_number} #{l_number} #{d_number}”
“`

[実行結果]

“`
100 1.0 100円 1
“`

###書式付きの値埋め込み
%d 整数
%f 浮動小数
%s 文字列

puts “文字列と書式埋め込み” %[対応する値]
※埋め込む書式が複数なら配列で渡す。

“`
diagram = “円”
radius = 1
ratio = 3.14

puts “半径%dcmの%sの直径は%.2fcmです” %[radius, diagram, 2 * ratio * radius]

元記事を表示

Helmで導入したRabbitMQをRuby(Bunny)から利用した時のメモ

# はじめに

アプリケーション同士を連携させるのに、必ずしもAPIをHTTPで呼び出すことが適切でない場合もあります。
特にQueueに入れた処理を逐次処理させる場合には、アプリケーションが依頼を直接受け取ってしまうと、アプリ側で永続化の処理を考えなければいけませんし、負荷分散も難しくなります。

とりあえずPub/Subよりも単純なQueueをRabbitMQで実現する予定なので、その作業のメモを残しておきます。

## 前提

* Kubernetes v1.15.11 (by Kubespray v2.11.2)
* Rook/Cephが導入されている
* MetalLBが導入されている

## References

次の資料を参考にしました。

* https://github.com/ruby-amqp/bunny
* http://rubybunny.info/articles/getting_started.html
* https://qiita.com/suketa/items/bb4a8c294351cb7b9025
* https://qiita.com/su

元記事を表示

Reactのチュートリアルの三目並べで少しRails使う #2

[前回](https://qiita.com/GodPhwng/items/0c3dd4599a83c3799451)の続きになります。

手順を履歴に保持します。

#履歴機能を作成

“`erb:index.html.erb



<%= javascript_pack_tag 'tictactoes', 'data-turbolinks-track': 'reload' %>


<%= form_with(url: "/tictactoes/sqClick", method: "post") do |f| %>

元記事を表示

【Rails】collectionとmemberの違い

# はじめに
学習中の備忘録です。
# 概要
7つの基本アクション以外でルーティングを定義する時の、collectionとmemberの違い。
結論:collectionはルーティングに:idがつかない、memberは:idがつく。

# 前提
– rails 5.2.3
– postsテーブルを検索するsearchアクションを定義
– 今回はcollectionとmemberの違いのみ。searchメソッドは定義済とする。

# collectionで定義した場合
“`ruby
Rails.application.routes.draw do
resources :posts do
collection do
get ‘search’
end
end
end
“`
# collectionのルーティング
“`
Prefix Verb URI Pattern
search_posts GET /posts/search(.:format)

元記事を表示

Bootstrap dropdown導入時の注意点[備忘録]

##はじめに

bootstrapのdropdownの表示方法の順序や注意点についてを備忘録として残しておく。

##基本的には公式ページに添えばできる

基本的にはweb上にたくさん表示方法が転がっているのだが、個人的には公式ページを読むことをオススメする。

####参考ページ
公式ページ ドロップダウン(日本語)
https://getbootstrap.jp/docs/4.2/components/dropdowns/

公式ページ ドロップダウン(英語)
https://getbootstrap.com/docs/4.4/components/dropdowns/

##バージョンによって記述方法が違う

bootstrap3からbootstrap4へのバージョンが変わると、dropdownだけでなく他の機能の表示記述方法も変わる。以下の記事を参考に、自身の導入したbootstrapのバージョンを再度確認して、記述していくのが良い。

####参考ページ
Bootstrap4移行ガイド ドロップダウン
https://cccabinet.jpn.org/bootstrap4

元記事を表示

Kinx ライブラリ – Signal

# Signal

## はじめに

**「見た目は JavaScript、頭脳(中身)は Ruby、(安定感は AC/DC)」** でお届けしているスクリプト言語 [Kinx](https://github.com/Kray-G/kinx)。言語はライブラリが命。ということでライブラリの使い方編。

今回は Signal です。

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

簡単ながらシグナルをサポートしました。

## Signal

Signal は、`type` として `Signal.SIGINT` と `Signal.SIGTER

元記事を表示

Rails 自作アプリへの道 Part2

Rails 自作アプリを作った時の経過をまとめていきます。

環境

|OS|Ruby|Rails|
|:—|:—|:—|
|Mac Mojave 10.14.16|2.6.3p62|5.0.7.2|

参考
https://qiita.com/cigalecigales/items/f4274088f20832252374

前提
環境構築済

【conformableの設定】

1.送信メールアドレスの登録

①設定ファイルの追記/編集

“`config/environments/depelopment.rb
config.action_mailer.raise_delivery_errors = true
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
:address => “smtp.gmail.com”,
:port => 587,
:user_name => “Gメールアドレス”, # メアドを書く

元記事を表示

gem ancestry + seedファイルを利用した、データベースへの複数カラム挿入

# 本記事について
Ruby on Railsのseedファイルを使って、ancestryのデータを挿入するとき、カラムを複数同時に挿入したいと思い、その実装ができたので解説させていただきます。
(とあるプログラミングスクールのカリキュラムによって、某フリマアプリのカテゴリーに関する記事がたくさんありますが、そちらはカラムが1つしかなかったため投稿しようと考えました。)

### 目的
1. seedファイルを使ってデータベースを作成すること
2. データベース作成時に複数のカラムを同時に生成すること

### 参考資料
Qiita参考記事
・[【Rails】ancestryで簡単に多階層型データの作成し呼び出す](https://qiita.com/n-ike/items/f0738c00c8da13de2ee0)
・[railsのseedの書き方いろいろ](https://qiita.com/takehanKosuke/items/79a66751fe95010ea5ee)
・[Rails・seedファイルを分割して管理する](https://qiita.com/masaki755

元記事を表示

rails whereとfind、find_byの違い

こんにちわ。
未経験から独学でwebベンチャーに入社して3ヶ月のバスケンです。

##ActiveRecord の where句でオブジェクトを出力した後の挙動がおかしい、、

ruby on railsにて
オブジェクト選択でfindではなくwhereを使う必要があったため
whereを利用して出力したオブジェクトでインスタンス変数を作成したら、
オブジェクトの値が今までどうり取り出せなくなりました。。

##何故(Why??)
**find** と **where** の違い

find:オブジェクトを返す
where:ActiveRecord_Relationを返す

※ActiveRecord_Relationに関してはまとめたものを後日投稿します?

##対処
オブジェクトが単数の場合は、最後に「.first」を記述すると
findで出力した時と同じように扱うことができます。

(例)
object = Object.where(id: 1).first

元記事を表示

#VsCode + RestClient 拡張で #ruby の API リクエストのコードを自動生成生する ( curl コマンドも )

# 手順

– RestClient 拡張をインストールしておく
– VsCode でテキストエディタに以下のように書いて、コマンドパレットで Generate Code Snippet を選ぶ

“`
POST https://httpbin.org/post HTTP/1.1
Content-Type: application/json

{
“foo”: “bar”,
“wow”: “yeah”
}
“`

![image](https://user-images.githubusercontent.com/13635059/78118494-0c39ce80-7442-11ea-8269-e2dbb718eb21.png)

# 生成の例

“`rb
require ‘uri’
require ‘net/http’
require ‘openssl’

url = URI(“https://httpbin.org/post”)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
ht

元記事を表示

GraphQLでカスタムタイプの作り方

# はじめに
graphql-rubyでデフォルトであるタイプでは足りず、自作タイプを作りたいとき。
(英語含めて)これといった記事がなかったため書きました。
なお我流なので、正しいやり方を知っている人がいれば教えてください。
今回はTimeTypeを作ります。

# custom_types/time.rbの作成
わかりやすいようにcustom_typesでディレクトリを切っています。
実装は[本家](https://github.com/rmosolgo/graphql-ruby/blob/d1ca69a3daf93286c529e8fccb6e108c4370fb5b/lib/graphql/types/iso_8601_date_time.rb#L23)を参考にしました。

“`ruby
module CustomTypes
class Time < GraphQL::Schema::Scalar description "An ISO 8601-encoded time without timezone" # @param value [DateTim

元記事を表示

Ajax通信でActionController::InvalidAuthenticityTokenしたときの対応

# 原因とか理由とかすっ飛ばして結論

送信するdataに`authenticity_token: $(‘meta[name=”csrf-token”]’).attr(‘content’)}`を追加。

“`js
let ajax = function (method, data) {
data = $.extend(data, {authenticity_token: $(‘meta[name=”csrf-token”]’).attr(‘content’)});
$.ajax({
type: method,
url: “hope/the/colona/is/orver”,
timeout: 3000,
data: data,
dataType: ‘json’
}).done(function (response, textStatus, jqXHR) {
console.log(response);
}).fail(function

元記事を表示

attr_accessorについて

#attr_accessorとは?
attr_accessorについて理解が不十分であったので紐解きます。
attr_accessorはデータを代入するメソッド(setter)とデータを取り出せるメソッド(getter)を同時に定義できるメソッドである。これは省略形であり、いきなり覚えようとするとかえって混乱するので一個一個分解していく。

###attr_accessor・setter/getterを使わずに定義する場合

“`

class okashi
def name = (name)  #どんな処理を行っているのか
@name = name    →   ・いわゆるsetterの部分
end             お菓子クラスに名前という情報をセット
                しますという処理。@を使用しているた
                め、メソッドの中だけでなく外でも使用できる。

def name → #どんな処理を行っているのか
@user           ・いわゆるgetterの部分
end 

元記事を表示

Ruby入門メモ(プログラミング経験者用)1

#変数定義
1.型無しで定義できる
2.セミコロンがいらない

“`
//C言語やC#言語の場合
//int year = 2020;

//Ruby
year = 2020

“`

#入出力
1.シングルクォーテーションやダブルクォーテーションで囲む。
2.クォーテーションで囲むと文字列として扱われる
3.文字列中で変数をつかうときは「#{ }」で変数をかこむ(ダブルクォーテーションのとき利用可能)。

“`
num1 = 10
num2 = 20

puts num1 + num2
puts “num1” + “num2”
puts “#{num1}” + “#{num2}”

buf1 = “春夏”
buf2 = “秋冬”

puts buf1 + buf2
“`

[実行結果]

“`
30
num1num2
1020
春夏秋冬
“`

###出力
改行なし print
改行あり puts

“`
print “あいう”
puts “あいう”

puts “あいう”
print “あいう”
“`
[実行結果]

“`
あいうあいう
あいう
あいう

元記事を表示

Twitterのおすすめトレンドに日本の地域でどれくらいの差があるか調べてみる

### 概要

Twitterのおすすめトレンドは地域ごとに取得することができ、日本だけで22箇所に細分化されている。この日本の22箇所のおすすめトレンドにどれくらいの差があるか調べてみる。

### 先に結論

**キーワードの一覧**

地域ごとに多少の差はあるものの、キーワードの一覧はほとんど同じ結果になった。一方で、`エイプリルフール`や`コロナ`のように、全ての地域で入っていてもおかしくないようなキーワードが入っていない地域があり、この点は不思議に思える結果となった。

**ツイートボリューム**

同じ地域の中では、数字の大小に一貫性があるように思える。一方で、`日本`と`東京`のように単純な大小関係がある地域であっても、ツイートボリュームはその通りにはなっていない場合がる。

トレンド情報の都市名とツイートボリュームを、`サーティワン`に限って絞り込みし、グラフにしてみた結果は下記の通り。

スクリーンショット 2020-04-02 7.16.43.pngTwitterのおすすめトレンドをAPI(Ruby)で取得する

TwitterのおすすめトレンドをTwitter APIで取得するには、主に下記2つのエンドポイントを利用する。コード例はTwitter gemを使っている。

### GET trends/available

おすすめトレンド情報を持つ地域の一覧を取得する。Rate-limitは75回/15分。placesの数は現時点で467個ある。

“`ruby
places = client.trends_available
places.first.attrs
“`

上記のRubyコードの戻り値は下記の通り。

“`ruby
{:name=>”Worldwide”,
:placeType=>{:code=>19, :name=>”Supername”},
:url=>”http://where.yahooapis.com/v1/place/1″,
:parentid=>0,
:country=>””,
:woeid=>1,
:countryCode=>nil,
:id=>1}
“`

※取得できる地域の一覧は末尾に記載しています。

### GET trends/

元記事を表示

【メモ】Rubyにおける真偽値

## Rubyにおける真偽値の判断

### 大前提として
– falseもしくはnilならば【偽】を返す
– それ以外は全て【真】を返す
– && 【全ての条件が真であれば真】を返す
– || 【いずれかの条件で真であれば真】を返す

Rubyは、式全体が真もしくは偽であることが決定するまで、左辺から右辺に式を評価する。
式全体の 真or偽が確定した段階で式を評価し、最後に評価した式値を返す。
  

“`
1 && 2 && 3 => 3 全ての条件で真を返したため最後に評価した3を返す
1 && 2 && false => false

nil || 1 => 1
false || nil => nil
false || 2 || nil || 4 => 2  2を評価した段階で式全体の真偽値が真であるとわかったため、以降の処理を中断

“`

## 論理演算の優先順位

“`
優先順位
高  ! > && > || > not > and,or  低
“`

andやorやnotは記号の論理演算

元記事を表示

OTHERカテゴリの最新記事