net/sftp
net/sftpを利用する機会があったので作ってみました。ファイルの存在チェックができるメソッドがなかったので微妙な実装。
class Sftp # ファイルの存在チェック def self.file_exists?(dir, file_name) file_exists = false exec do |sftp| file_names = [] sftp.dir.foreach(dir) {|f| file_names << f.name} file_exists = file_names.any?{|fn| fn != "." && fn != ".." && fn == file_name} end file_exists end # ファイルのダウンロード # ファイルがない場合は例外が発生します。 def self.download!(remote_file_path, local_file_path) exec do |sftp| sftp.download!(remote_file_path, local_file_path) end end private def self.exec(&block) Net::SFTP.start("domain", "user", password: "password") do |sftp| yield(sftp) end end end
公式github
一時停止プロセスの再開
jobs fg
rails migration
migrationするたびに調べるのがめんどくさいのでメモ。optionも使う場合はapi documentを見る。
- コマンド
rails generate migration <migration_name>
- テーブル追加
# 簡単に書けるやり方 create_table(:members) do |t| t.column :name, :string, limit: 60 end # ひとつずつやるやり方 create_table(:members) add_column(:members, :name, :string, {limit: 60})
- 既存テーブルにカラム追加
add_column(:members, :address, :string, {limit: 200})
- カラム削除
remove_column(members, address)
- カラムのデータ型修正
change_column(:members, :name, :string, limit: 400)
rubyで営業日を取得する
メンテナンスされるかわからないgemを使いたくなかったので簡単に自作しました。 祝日、年末やその他の休みを好き勝手に入れたい場合はpublic_holidaysをメンテをしていく。
月~金までが営業日 祝日、年末は休み
require 'singleton' require 'date' class BusinessDate include Singleton @@public_holidays = [ "2021-11-3", "2021-11-23", "2021-12-30", "2021-12-31", "2022-1-1", "2022-1-2", "2022-1-3", "2022-1-4" ] def initialize @today = Date.today end def public_holiday?(_date) @@public_holidays.include?("#{_date.year}-#{_date.month}-#{_date.day}") end def holiday?(_date) _date.sunday? || _date.saturday? end def business_date?(_date) !holiday?(_date) && !public_holiday?(_date) end def business_beginning_of_month?(_date) target_business_date = _date.beginning_of_month if target_business_date == _date return true if business_date?(_date) return false end while !business_date?(target_business_date) target_business_date = target_business_date + 1 end return true if target_business_date == _date false end def prev_business_date(_date) target_date = _date if business_date?(target_date) if target_date.monday? # 月曜日の場合は金曜日を取得する target_date = target_date - 3 else target_date = target_date - 1 end end while !business_date?(target_date) target_date = target_date - 1 end target_date end end
メソッド名 | 内容 |
---|---|
public_holiday? | 祝日か判定する。@@public_holidaysのメンテが必要 |
holiday? | 休日か判定する。土日休み |
business_date? | 営業日か判定する。祝日、土日以外は営業日 |
business_beginning_of_month? | 営業月初か判定する。月初が土日、祝日なら遡って営業月初を取得する |
prev_business_date | 前日の営業日を取得する。月曜日の場合は金曜日。金曜日が祝日なら遡って営業日を取得する |
Slackに投稿する
たまに書くのでコピペできるようにしておく。
Google Apps Script
class Slack { constructor() { this.slackUrl = "slackのパス" this.channel = "#channel" this.icon = ":penguin" this.userName = 'penguin' } sendMessage(text) { var payload={ "text": text, "channel" : this.channel, "username": this.userName, "icon_emoji": this.icon }; var options = { "method" : "POST", "payload" : JSON.stringify(payload), "muteHttpExceptions": false, } UrlFetchApp.fetch(this.slackUrl, options); } }
Ruby
require 'singleton' require 'uri' require 'net/http' require 'openssl' class Slack include Singleton def initialize(channel, icon_emoji) @channel = channel @icon_emoji = icon_emoji @url = "slackのパス(configとかにでも定義しておく)" end def send_message(message) slack_params = { text: message, channel: @channel, icon_emoji: @icon_emoji } uri = URI.parse(@url) http = Net::HTTP.new(uri.host, uri.port) if uri.scheme == "https" http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE end http.start do request = Net::HTTP::Post.new(uri.path) request.set_form_data(payload: slack_params.to_json) http.request(request) end end end