add class to wrap sensitive values
This commit is contained in:
parent
cca1aa4604
commit
aa907dfa5f
39
lib/sensitive.rb
Normal file
39
lib/sensitive.rb
Normal file
@ -0,0 +1,39 @@
|
||||
class Sensitive
|
||||
alias_method :eql?, :==
|
||||
alias_method :equal?, :==
|
||||
|
||||
def initialize(v, ch: "*", head: 2, tail: 2)
|
||||
@v = v
|
||||
@ch = ch
|
||||
@head = head
|
||||
@tail = tail
|
||||
end
|
||||
|
||||
def mask(v)
|
||||
"".concat(v[0, @head], @ch * (v.length - (@head + @tail)), v[-@tail, @tail])
|
||||
end
|
||||
|
||||
def unwrap
|
||||
@v
|
||||
end
|
||||
|
||||
def length
|
||||
@v.length
|
||||
end
|
||||
|
||||
def to_s
|
||||
mask @v
|
||||
end
|
||||
|
||||
def inspect
|
||||
"#<#{self.class.name} @v=#{wrap}>"
|
||||
end
|
||||
|
||||
def hash
|
||||
@v.hash
|
||||
end
|
||||
|
||||
def ==(other)
|
||||
other.is_a?(Sensitive) && other.hash == hash
|
||||
end
|
||||
end
|
26
spec/sensitive_spec.rb
Normal file
26
spec/sensitive_spec.rb
Normal file
@ -0,0 +1,26 @@
|
||||
require "minitest/autorun"
|
||||
|
||||
$LOAD_PATH.unshift File.dirname(__FILE__) + "/../lib"
|
||||
|
||||
require "sensitive"
|
||||
|
||||
ALPHABET = ('a' .. 'z').reduce(:concat)
|
||||
|
||||
describe "Sensitive" do
|
||||
before do
|
||||
@s = Sensitive.new ALPHABET
|
||||
end
|
||||
|
||||
it "test initialize" do
|
||||
_(@s.to_s).must_equal "ab" + "*" * 22 + "yz"
|
||||
end
|
||||
|
||||
it "test initialize" do
|
||||
_(@s.unwrap).must_equal ALPHABET
|
||||
end
|
||||
|
||||
it "test using different mask character" do
|
||||
s = Sensitive.new ALPHABET, ch: "x"
|
||||
_(s.to_s).must_equal "x"
|
||||
end
|
||||
end
|
26
test/test_sensitive.rb
Normal file
26
test/test_sensitive.rb
Normal file
@ -0,0 +1,26 @@
|
||||
require "minitest/autorun"
|
||||
|
||||
$LOAD_PATH.unshift File.dirname(__FILE__) + "/../lib"
|
||||
|
||||
require "sensitive"
|
||||
|
||||
ALPHABET = ("a".."z").reduce(:concat)
|
||||
|
||||
class TestSensitive < Minitest::Test
|
||||
def setup
|
||||
@s = Sensitive.new ALPHABET
|
||||
end
|
||||
|
||||
def test_initialize
|
||||
assert_equal @s.to_s, "ab" + "*" * 22 + "yz"
|
||||
end
|
||||
|
||||
def test_unwrap
|
||||
assert_equal @s.unwrap, ALPHABET
|
||||
end
|
||||
|
||||
def test_using_a_different_mask_character
|
||||
s = Sensitive.new ALPHABET, ch: "x"
|
||||
assert_equal s.to_s, "ab" + "x" * 22 + "yz"
|
||||
end
|
||||
end
|
Loading…
x
Reference in New Issue
Block a user