Skip to content

Instantly share code, notes, and snippets.

# `where` 句に渡す値はRuby Worldでcastされていてもいいんじゃないのか、と思ったので意見が聞きたいです。
#
# いま、ARのカラムに暗号化を噛ませるgemを書いているのだけど、入力値が変換されずにクエリなるので、暗号化/復号化したクエリの値が一致せず辛い。
# 可能であれば、AR::Type::XXX#castでserialize時に値をcastしたい
# Boolean/Decimalなどはserialize時に一切castしない `def serialize(value); value end`
# Current: castされないため、入力値をそのままクエリに投げている
User.attribute(:id, :boolean)
User.where(id: 'string').to_sql #=> SELECT `users`.* FROM `users` WHERE `users`.`id` = 'string'
User.where(id: true).to_sql #=> SELECT `users`.* FROM `users` WHERE `users`.`id` = TRUE
# frozen_string_literal: true
module ActiveModelType
class BitmapType < ActiveModel::Type::Value
delegate :type, to: :subtype
attr_reader :name, :mapping, :subtype
def initialize(name, mapping, subtype)
@name = name
require 'csv'
translations = Hash.new { |h, k| h[k] = Hash.new(&h.default_proc) }
headers = ['key', 'ja', 'en', '...']
CSV.open('i18n.csv', 'r', col_sep: "\t", headers: true) do |csv|
csv.each do |row|
locales = csv.headers - ['key']
locales.each do |locale|
require 'csv'
def to_chained_key(result, hash, prefix = nil)
hash.each do |key, value|
current_key = [prefix, key].compact.join('.')
if value.is_a?(Hash)
to_chained_key(result, value, current_key)
else
result[current_key] = value
@alpaca-tc
alpaca-tc / Install neovim
Created December 6, 2016 10:16
neovimを新しいサーバーに入れる
cd $HOME
mkdir -p usr
mkdir -p src
cd src
wget https://cmake.org/files/v3.7/cmake-3.7.1.tar.gz
mkdir .deps
tar -xvf cmake-3.7.1.tar.gz
cd cmake-3.7.1
./configure --prefix=$HOME/usr
@alpaca-tc
alpaca-tc / pixivFACTORY rake stats
Created November 30, 2016 09:54
pixivFACTORY rake stats
+----------------------+--------+--------+---------+---------+-----+-------+
| Name | Lines | LOC | Classes | Methods | M/C | LOC/M |
+----------------------+--------+--------+---------+---------+-----+-------+
| Controllers | 4140 | 3263 | 96 | 480 | 5 | 4 |
| Helpers | 380 | 309 | 0 | 26 | 0 | 9 |
| Jobs | 269 | 188 | 10 | 18 | 1 | 8 |
| Models | 22388 | 18693 | 478 | 1362 | 2 | 11 |
| Mailers | 186 | 149 | 8 | 22 | 2 | 4 |
| Javascripts | 358075 | 154714 | 78 | 14248 | 182 | 8 |
| Libraries | 2637 | 2036 | 55 | 234 | 4 | 6 |

Rails

  1. Gemをアップデート
  • Railsをアップデートしずに、バージョンをあげられるgemはあらかじめアップデートしておく
  • Gemfileを編集する。gemによってはRails5に対応していない場合があるので、一旦Rails以外をコメントアウト → ひとつずつコメントインしてinstallする → 最後にDiffをチェックする(downgradeしてないか) これが一番速い
    • vim Gemfile → 編集する → bundle install → 繰り返す
  • いくつかのgemは修正版がリリースされていないのでgithubから直接DLしてる 例: gem 'sinatra', github: 'sinatra/sinatra', ref: 'a5da6fa82c...'
  • Deprecatedなエラーが出るgemは直してPR送ってあげる
  1. この段階ではおそらく./bin/rails consoleがwarningやエラーを吐きまくるので、一つずつ直していく。
  • deprecatedなオプションは削除する。
誰でも書き込めったー
irb(main):001:0> Object.const_get('A')
NameError: uninitialized constant Object::A
irb(main):002:0> :A
NameError: uninitialized constant A
irb(main):003:0> Object.const_get('A')
NameError: uninitialized constant A
require 'pry'
class FlashStar
RELATION = {# {{{
A: [
%i(B),
%i(E),
%i(J I C),
%i(F G D),
],