Class: Object

Inherits:
BasicObject
Defined in:
lib/decentworks/hexdigest_support/object.rb,
sig/decentworks/hexdigest_support/object.rbs

Instance Method Summary collapse

Instance Method Details

#to_hexdigest_input::String

ハッシュ値化の入力(型 + 値)

MEMO: #to_hexdigest_sourceは値を文字列へ射影するだけなので単射にならない。 型を添えないと :a と "a"、1 と "1" が同じ入力になり、内容の異なる オブジェクト同士が同じダイジェストになってしまう

MEMO: 引用・エスケープと決定性の検査はHexdigestSupport側へ切り出している。 #inspectに任せると実行環境のロケールで出力が変わるため (詳細はinput.rbのMEMOを参照)

MEMO: 検査を#to_hexdigest_sourceではなく本メソッドで行うのは、ここが すべての値が通る唯一の経路であるため。オーバーライドされた #to_hexdigest_sourceが返した値も同じように検査される

MEMO: 循環参照の検出も同じ理由でここに置く。要素を辿るのは各型の #to_hexdigest_sourceだが、その入り口は必ず本メソッドを通るため、 独自クラス同士が参照しあう循環も検出できる

Returns:

  • (::String)


63
64
65
66
67
68
# File 'lib/decentworks/hexdigest_support/object.rb', line 63

def to_hexdigest_input
  source = ::Decentworks::HexdigestSupport.detect_circular_reference(self) { to_hexdigest_source }
  ::Decentworks::HexdigestSupport.validate_source!(source, self)

  "#{to_hexdigest_type}:#{::Decentworks::HexdigestSupport.quote(source)}"
end

#to_hexdigest_source::String

ハッシュ値を求めるためのオリジナルの値

MEMO: #to_s以外で値を指定する場合は、本メソッドをオーバーライドすること。 型の識別は#to_hexdigest_inputが担うため、オーバーライド側で 型を意識する必要はない

MEMO: #to_sも本メソッドも実装していないオブジェクトは、既定のObject#to_sが 返すオブジェクトIDが値になってしまう。#to_hexdigest_inputで検査して 例外にしているため、そのままダイジェストになることはない

Returns:

  • (::String)


90
# File 'lib/decentworks/hexdigest_support/object.rb', line 90

def to_hexdigest_source = to_s

#to_hexdigest_type::String

ハッシュ値化に用いる型の識別子

MEMO: 無名クラスは#nameがnilのため、名前を持つ祖先クラスまで遡る。 #ancestorsではなく#superclassを辿るのは、無名クラスがincludeしている モジュール名を型として拾ってしまうのを避けるため

Returns:

  • (::String)


75
76
77
78
79
# File 'lib/decentworks/hexdigest_support/object.rb', line 75

def to_hexdigest_type
  klass = self.class
  klass = klass.superclass until klass.name
  klass.name
end

#to_md5_hexdigest::String Also known as: to_md_hexdigest

MD5でハッシュ値化(16進数)

Returns:

  • (::String)


10
# File 'lib/decentworks/hexdigest_support/object.rb', line 10

def to_md5_hexdigest = ::Digest::MD5.hexdigest(to_salted_hexdigest_input)

#to_rmd160_hexdigest::String Also known as: to_rmd_hexdigest

RMD160でハッシュ値化(16進数)

Returns:

  • (::String)


13
# File 'lib/decentworks/hexdigest_support/object.rb', line 13

def to_rmd160_hexdigest = ::Digest::RMD160.hexdigest(to_salted_hexdigest_input)

#to_salted_hexdigest_input::String

ソルトを前置したハッシュ値化の入力

MEMO: ソルトはダイジェストを求める直前に一度だけ前置する。#to_hexdigest_inputに 含めてしまうと、配列やハッシュの要素ごとに再帰的にソルトが混入し、 構造によってソルトの出現回数が変わってしまう

Returns:

  • (::String)


44
# File 'lib/decentworks/hexdigest_support/object.rb', line 44

def to_salted_hexdigest_input = "#{::Decentworks::HexdigestSupport.salt}#{to_hexdigest_input}"

#to_sha1_hexdigest::String

SHA1でハッシュ値化(16進数)

Returns:

  • (::String)


16
# File 'lib/decentworks/hexdigest_support/object.rb', line 16

def to_sha1_hexdigest = ::Digest::SHA1.hexdigest(to_salted_hexdigest_input)

#to_sha256_hexdigest::String Also known as: to_sha_hexdigest

SHA256でハッシュ値化(16進数)

Returns:

  • (::String)


19
# File 'lib/decentworks/hexdigest_support/object.rb', line 19

def to_sha256_hexdigest = ::Digest::SHA256.hexdigest(to_salted_hexdigest_input)

#to_sha384_hexdigest::String

SHA384でハッシュ値化(16進数)

Returns:

  • (::String)


22
# File 'lib/decentworks/hexdigest_support/object.rb', line 22

def to_sha384_hexdigest = ::Digest::SHA384.hexdigest(to_salted_hexdigest_input)

#to_sha512_hexdigest::String

SHA512でハッシュ値化(16進数)

Returns:

  • (::String)


25
# File 'lib/decentworks/hexdigest_support/object.rb', line 25

def to_sha512_hexdigest = ::Digest::SHA512.hexdigest(to_salted_hexdigest_input)