読者です 読者をやめる 読者になる 読者になる

u16suzuの blog

u16suzu のブログです。

リトライ処理のメモ

ruby

Rubyでリトライ処理をする際のテンプレ。再帰を使って綺麗に書ける。

class RetryException < StandardError; end

def foo
  p Time.now
  raise RetryException
end

def retry_foo( rc = 3)
  begin
    foo
  rescue RetryException => ex # RetryException以外はretryしない
    retry_foo( rc - 1 ) if rc > 1
  end
end

retry_foo

これだと、複数のメソッドに対応できない。 後で、blockで処理を受け取るようにしたい。

追記: retry 制御構文というものがあったので、それを使って書き直してみた。

def foo
  p Time.now
  raise
end

# 単純にfooメソッドをretryする
def retry_foo(count=3)
  c = count
  begin
    c = c - 1
    foo
  rescue
    retry if c > 0
  end
end

# 受け取ったブロックをretryする
def retryer(count=3)
  c = count
  begin
    c -= 1
    yield
  rescue
    retry if c > 0
  end
end

# retry_foo(5)
retryer(3) do
  foo
end

Object#methodについてメモ

ruby meta Methodオブジェクト

この書き方ができるの知らなかった.

# レシーバがself. (Object#methodはレシーバとメソッドの実態を封入する.)
[1,2,3].each( &self.method(:puts) )
[1,2,3].each( &method(:puts) ) # selfを省略できる
[1,2,3].each{|i| puts(i) }

こちらはたまに使う.

# レシーバが配列の各要素.
p [1,2,3].map( &:to_s )
p [1,2,3].map{|i| i.to_s }

Refer

MySQLのパーティションのメモ

MySQL partition

パーティションのサイズを確認 check size of each partitions

mysql> use information_schema;
mysql> select partition_name,data_length,index_length from partitions where table_name = 'entries';

entries テーブルのパーティション一覧を表示する

use INFORMATION_SCHEMA;
SELECT TABLE_SCHEMA, TABLE_NAME, PARTITION_NAME, PARTITION_ORDINAL_POSITION, TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME='entries';

パーティションを削除する

ALTER TABLE entries DROP PARTITION p201308;

パーティションを追加する

  • 後で書く

Refer

定数を定義する

ruby memo
module Constants
  GOLD_DEFAULT = 100
  ITEM_MAX_COUNT = 255
end

p Constants::GOLD_DEFAULT, Constants::ITEM_MAX_COUNT
# => 100
# => 255
p Constants.constants
# => [:GOLD_DEFAULT, :ITEM_MAX_COUNT]
  • 定数は初めだけ大文字であればよいのだが、全部大文字の方がしっくりくる

refer

現在見ているページのmarkdown形式のリンクを生成するブックマークレット

js ブックマークレット
javascript:(function(){prompt('%E3%82%B3%E3%83%94%E3%83%BC%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84',%20%20%20%20%20'-%20['%20+%20document.title.replace(/([\[\]])/g,'\\$1')%20+%20']'%20+%20'('%20+%20location.href%20+%20')');})();

実引数側でのアスタリスク(*)の使用例メモ

ruby
  • 実引数側でのアスタリスクの使用例メモ。配列オブジェクトを展開してメソッドの各引数に入れてくれる。便利。
def foo(name, val)
  "#{name}: #{val}"
end

ar = [[:a, 1], [:b, 2], [:c, 3]]

ar.each do |elem|
  puts foo(*elem) # here
end

こちらの記事のscivolaさんのコメントを参考にしました。

Ruby初心者を脱した人が悩みがちな、ちょっと特殊な記法・演算子・イディオム - Qiita

scopeの使い方メモ

scope ruby rails

よくググるのでメモ

scope :available, -> { where('deleted = false') }
scope :available, -> { receivable.opened.showable }

# 引数あり
scope :find_by_friend_ids, -> friend_ids { where( target_id: friend_ids )  }