Created
December 11, 2020 01:59
-
-
Save nagait84/ca349389ed006f2f20010157bf511cab to your computer and use it in GitHub Desktop.
【Rails】ハッシュに破壊的メソッドを追加したクラスを定義
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# ハッシュを拡張して破壊的メソッドを追加したクラスを定義 | |
class HashWithDestructiveMethods < Hash | |
class << self | |
def [](*args) | |
new.merge!(Hash[*args]) | |
end | |
end | |
alias_method :regular_writer, :[]= unless method_defined?(:regular_writer) | |
def initialize(constructor = {}) | |
super() | |
constructor.each_pair do |k, v| | |
regular_writer(k, v) | |
end | |
end | |
# @!group Destructive methods | |
# FIXME: ここにほしい変換メソッドをいっぱい追加する | |
# ハッシュの値を整数型(Integer)に変換 | |
def to_i!(key) | |
self[key] = self[key].to_i | |
end | |
# ハッシュの値を日付型(Date)に変換 | |
def to_date!(key) | |
self[key] = self[key].to_date | |
end | |
# ハッシュの値を日時型(Datetime)に変換 | |
def to_datetime!(key) | |
self[key] = self[key].to_datetime | |
end | |
# @!endgroup | |
# ハッシュクラスに変換 | |
# @return [Hash] | |
def to_hash | |
new_hash = {} | |
each do |key, value| | |
new_hash[key] = value | |
end | |
new_hash | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Usage