diff options
author | Dimid Duchovny <dimidd@gmail.com> | 2018-01-23 22:34:22 +0200 |
---|---|---|
committer | Dimid Duchovny <dimidd@gmail.com> | 2018-01-23 22:34:22 +0200 |
commit | 1c701717d10879d492d8b55fb8ca2f1c53d7e13f (patch) | |
tree | 3d79d935e11c880174473583c14438bd4cd09785 | |
parent | c7e0972eb81e53ddbe1def3d6d8439dcb6b907e4 (diff) | |
download | msgthr-1c701717d10879d492d8b55fb8ca2f1c53d7e13f.tar.gz |
The motivation is to allow the client to have a custom code executed, whenever a child is added. Signed-off-by: Dimid Duchovny <dimidd@gmail.com>
-rw-r--r-- | lib/msgthr.rb | 6 | ||||
-rw-r--r-- | test/test_msgthr.rb | 9 |
2 files changed, 13 insertions, 2 deletions
diff --git a/lib/msgthr.rb b/lib/msgthr.rb index 1517f28..d88b32b 100644 --- a/lib/msgthr.rb +++ b/lib/msgthr.rb @@ -166,12 +166,16 @@ class Msgthr # but do not change existing links or loop if prev && !cont.parent && !cont.has_descendent(prev) prev.add_child(cont) + yield(prev, cont) if block_given? end prev = cont end # set parent of this message to be the last element in refs - prev.add_child(cur) if prev + if prev + prev.add_child(cur) + yield(prev, cur) if block_given? + end end end diff --git a/test/test_msgthr.rb b/test/test_msgthr.rb index b14e135..0f31762 100644 --- a/test/test_msgthr.rb +++ b/test/test_msgthr.rb @@ -6,8 +6,15 @@ require 'msgthr' class TestMsgthr < Test::Unit::TestCase def test_msgthr thr = Msgthr.new + parent_child = '' + # Note that C is added after B, + # hence it's message will be empty after adding B + expected_parent_child = '->B' thr.add('a', %w(c b), 'abc') - thr.add('b', %w(c), 'B') + thr.add('b', %w(c), 'B') do |parent, child| + parent_child = "#{parent.msg}->#{child.msg}" + end + assert_equal parent_child, expected_parent_child thr.add('c', nil, 'c') thr.add('D', nil, 'D') thr.add('d', %w(missing), 'd') |