fayeソース研究所のメモ
1、オブジェクトをどのように深くコピーしますか?
def self.copy_object(object)
Marshal.load(Marshal.dump(object))
end
2,faye定義ログレベルの表示方法
faye開発の際、fayeのログを表示する必要があります.ソースファイルを見ることで、fayeのログレベルを定義できます.
https://github.com/faye/faye/blob/master/lib/faye/mixins/logging.rb
faye.ruでは、以下のように定義する
Faye::Loggin.log_level = :info
3,lambdaを使用して実行可能ブロックを定義する方法
resume = lambda do
calls += 1
loop.call
end
resume.call
4,文字列がutf-8符号化であるか否かを判断する
# http://www.w3.org/International/questions/qa-forms-utf-8.en.php
UTF8_MATCH =/^([\x00-\x7F]|[\xC2-\xDF][\x80-\xBF]|\xE0[\xA0-\xBF][\x80-\xBF]|[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}|\xED[\x80-\x9F][\x80-\xBF]|\xF0[\x90-\xBF][\x80-\xBF]{2}|[\xF1-\xF3][\x80-\xBF]{3}|\xF4[\x80-\x8F][\x80-\xBF]{2})*$/
def self.valid_utf8?(byte_array)
UTF8_MATCH =~ byte_array.pack('C*') ? true : false
end
5、ログ記録で、使用しますか?疑問符を対応する文字列に置換
参照例:
message = "hello, ? world, that is ?".gsub(/\?/).each do |x|
“nice”
end
6,どのように1つのオブジェクトの名前【string】を取得します
banner="[#{level.to_s.upcase}][#{self.class.name}]など:
module A
class B
puts "bbbbbbbbbbbbbbb"
end
end
b = A::B.new
b.class.name => # "A::B"
7、方法を動的に定義するにはどうすればいいですか?
define_Method(メソッド名){|メソッドパラメータ|メソッド定義主体}=====
メソッド名(メソッドパラメータ)do
メソッドボディ
end
8、文字列の中で必要な文字列を取得する方法
string.match(/reg/)[0]
あるいはstringを用いる.gsub(/reg/,"").downcase
9,文字列をクラス名「video」に変換する方法.camelize.singularize.constantize "user".capitalize.constantize 10では、配列とHashでHashを選択するにはどうすればいいですか?[app, options].grep(Hash).first 11,fayeにはランダムな128ビットの文字列生成関数があり、ランダムな文字列を生成する.具体的なコードは以下の通りです.
ID_LENGTH = 128
アドレス:https://github.com/chucai/faye/blob/master/lib/faye/engines/proxy.rb
def self.copy_object(object)
Marshal.load(Marshal.dump(object))
end
2,faye定義ログレベルの表示方法
faye開発の際、fayeのログを表示する必要があります.ソースファイルを見ることで、fayeのログレベルを定義できます.
https://github.com/faye/faye/blob/master/lib/faye/mixins/logging.rb
LOG_LEVELS = {
:error => 3,
:warn => 2,
:info => 1,
:debug => 0
}
faye.ruでは、以下のように定義する
Faye::Loggin.log_level = :info
3,lambdaを使用して実行可能ブロックを定義する方法
resume = lambda do
calls += 1
loop.call
end
resume.call
4,文字列がutf-8符号化であるか否かを判断する
# http://www.w3.org/International/questions/qa-forms-utf-8.en.php
UTF8_MATCH =/^([\x00-\x7F]|[\xC2-\xDF][\x80-\xBF]|\xE0[\xA0-\xBF][\x80-\xBF]|[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}|\xED[\x80-\x9F][\x80-\xBF]|\xF0[\x90-\xBF][\x80-\xBF]{2}|[\xF1-\xF3][\x80-\xBF]{3}|\xF4[\x80-\x8F][\x80-\xBF]{2})*$/
def self.valid_utf8?(byte_array)
UTF8_MATCH =~ byte_array.pack('C*') ? true : false
end
5、ログ記録で、使用しますか?疑問符を対応する文字列に置換
message
=
message_args
.
shift
.
gsub
(
/\?/
)
do
Faye
.
to_json
(
message_args
.
shift
)
end
参照例:
message = "hello, ? world, that is ?".gsub(/\?/).each do |x|
“nice”
end
6,どのように1つのオブジェクトの名前【string】を取得します
banner="[#{level.to_s.upcase}][#{self.class.name}]など:
module A
class B
puts "bbbbbbbbbbbbbbb"
end
end
b = A::B.new
b.class.name => # "A::B"
7、方法を動的に定義するにはどうすればいいですか?
LOG_LEVELS
.
each
do
|
level
,
value
|
define_method
(
level
)
{
|*
args
|
log
(
args
,
level
)
}
end
define_Method(メソッド名){|メソッドパラメータ|メソッド定義主体}=====
メソッド名(メソッドパラメータ)do
メソッドボディ
end
8、文字列の中で必要な文字列を取得する方法
string.match(/reg/)[0]
あるいはstringを用いる.gsub(/reg/,"").downcase
9,文字列をクラス名「video」に変換する方法.camelize.singularize.constantize "user".capitalize.constantize 10では、配列とHashでHashを選択するにはどうすればいいですか?[app, options].grep(Hash).first 11,fayeにはランダムな128ビットの文字列生成関数があり、ランダムな文字列を生成する.具体的なコードは以下の通りです.
def random(bitlength = ID_LENGTH)
limit = 2 ** bitlength - 1
max_size = limit.to_s(36).size
string = rand(limit).to_s(36)
string = '0' + string while string.size < max_size
string
end
ID_LENGTH = 128
アドレス:https://github.com/chucai/faye/blob/master/lib/faye/engines/proxy.rb