コピペコードで快適生活

明日使えるソースを自分のために

Ruby

class_evalを使って、classに自由な名前でメソッドを追加

concernに書くとこんな感じか。 # # include ::Logica::DateRangeSearchable # date_range_name_is :validity, :valid # # klass.valid # -> validity_start_at, validity_end_atが期間内のみ取り出す # instance.valid? # -> validity_start_at, validity_e…

Rubyでたまにしか使わないけど便利なメソッドメモ

備忘のため。随時追加していく。 Ruby # フィールドをもつモックオブジェクトを作る Struct.new(:name, :tel).new('hogeo', '090xxxxxxxx') # => #<struct name="hogeo", tel="090xxxxxxxx"> Rails # 引数の文字列で指定した名前で定数を探す '::MyApp::User'.constantize # => MyApp::User(id: integ</struct>…

prependでクラスメソッドを拡張する

singleton_classにprependすればOK。 class Hoge def self.hogehoge(*args) puts 'hogehoge' end end Hoge.hogehoge # => hogehoge Hoge.singleton_class.prepend Module.new { def hogehoge(*args) super(*args) puts 'extended hogehoge' end } Hoge.hogeh…

sidekiq-unique-jobsのunique値ごとの挙動

ちょっと古いけど、sidekiq-unique-jobs v4.0.8のunique値ごとの挙動を確認したのでメモしておく。GitHub - mhenrixon/sidekiq-unique-jobs at v4.0.8 while_executing 同じargsは実行中にならない。 同じargsを実行しようとしたらworkerは待ちになる。後続…

RailsConsoleでSidekiqジョブの状況を見る

運用していると状況確認したいときがあるのでメモ。 ## 実行中ジョブ Sidekiq::Workers.new.each do |process_id, thread_id, job| puts "#{process_id}, #{thread_id}, #{job}" end ## 待ち状態のジョブ Sidekiq::Queue.new("#{QUEUE_NAME}").each do |job|…

ActiveRecordで固定の日時最小値チェックのバリデーションを入れる

# # app/models/concerns/my_app/extend_validation.rb # 複数のフィールドに対して一括でバリデーション設定できるようにするために # バリデーションメソッドを追加するモジュール # module MyApp module ExtendValidation extend ActiveSupport::Concern …

cancancanでActiveRecord::RecordNotFoundを出したくないときのパッチ

module MyApp module CanCan module ControllerResourcePatch def find_resource # もともと定義してあるfind_resourceを呼び出す super rescue ActiveRecord::RecordNotFound => e # エラーさせたくないので握りつぶす end end end end CanCan::ControllerR…

RubyのGrapeメモ

たまにしか使わなくて、よく忘れている書き方をメモ。 随時追加していく。 params :example # enumの値のみ許可 optional :status, { type: String, allow_blank: true, values: User.statuses.keys } }

Rubyのinclude,extend,prepend,Concernの使い方メモ

なんとなく理解が怪しかったので復習をかねて。 includeだけでクラスメソッドとインスタンスメソッドを同時に追加する module MyModule def self.included(base) base.extend(ClassMethods) end module ClassMethods def hogehoge puts 'hogehoge!' end end …

Rubyで外からプライベート変数にアクセスする

# プライベート変数の定義状況を確認する obj.instance_variable_defined?('@raw') # プライベート変数にアクセス obj.instance_variable_get('@raw')

ffiのインストールで失敗する時

こんなエラー An error occurred while installing ffi (1.9.21), and Bundler cannot continue. Make sure that `gem install ffi -v '1.9.21'` succeeds before bundling.ライブラリがないっぽいので sudo yum install ruby-devel libffi-develすればOKだ…

CarrierWaveで既にアップロード済のファイルに新しいバージョンをあてる

User.all.each do |user| if user.avatar_file.present? user.avatar_file.recreate_versions! user.save end end

Rubyで名詞の単数形・複数形を変換する

たまにやりたくなる。いつもメソッド名忘れているけど。 require 'active_support' 'user'.pluralize # => users 'users'.singularize # => user

Rubyでメソッドの定義場所を確認する

gem pry を使うと、$で簡単に確認できる $ "".present? # From: /home/kinosuke/app/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.7/lib/active_support/core_ext/object/blank.rb @ line 23: # Owner: Object # Visibility: public # Number of lines:…

RailsConsoleでサクッとメール送信

本番環境でメール送信チェックとかするとき用に。 ActionMailer::Base.mail(to: "test@example.com", from: "test@example.com", subject: "題名", body: "本文").deliver

RubyでHTTPリクエストを送る

たまにしか使わなくてよく忘れるのでメモします。 require 'net/http' require 'uri' uri = URI.parse("http://kinosuke.hatenablog.jp/") # when get request req = Net::HTTP::Get.new("#{uri.path}?#{uri.query}") # when post request # req = Net::HTTP…

Rubyでログを強制出力する

require 'logger' _log = Logger.new('/tmp/debug.log') _log.info("#{ログ出力したいもの}") こちらを参考にさせていただきました http://dev.classmethod.jp/client-side/language-client-side/output_log_using_logger/

RubyでHashの要素に.(ドット)でアクセスしたい

Struct使えば楽にできるみたい。 hash = {hoge: 'fuga'} obj = Struct.new(*(hash.keys)).new(*(hash.values)) obj.hoge # => 'fuga'

RailsのArelの使い方

RailsでArelを使うときは、下記サイトをいつも参照させていただいていましたが、自分メモ用として転載します。 メモ || Arelのwhere系メソッド一覧 User.w... User.where(User.arel_table[:name].eq("aa")).to_sql # => SELECT "users".* FROM "users" WHERE…

RubyでUTF-8変換時にUndefinedConversionが出た件

shift_jisで書かれたCSVをUTF-8に変換して取り込み処理をするところで、Encoding::UndefinedConversionError が吐かれてた。 str.encode('utf-8', 'shift_jis') # => Encoding::UndefinedConversionError: "\x87@" from Shift_JIS to UTF-8 なんでだと思って…

rbenvでRubyをインストール~gemsetの設定

Rubyインストール # rbenv をインストール(clone)する git clone https://github.com/sstephenson/rbenv.git ~/.rbenv # bash_profile 設定追加 # vim ~/.bash_profile export PATH="$HOME/.rbenv/bin:$PATH" eval "$(rbenv init -)" # 上記設定の再読み込…

Rails×SES バウンスメール(不達メール)対策

「SESで不達メールが多いから、対策してくれなかったらSES止めるよ」って過去にAWSから言われたことがあって、そのときの対応メモを書きだしてみた。対応の基本的な流れ SESは不達メールがあった場合に特定のURLに対してリクエストをjson付きで投げてくれる…