msgthr 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5482fc1e20bf45ed07ee4b3eacc93eccd28c3f28195550d1629cb5d21919f42b
4
- data.tar.gz: eaca3d5d6ef9840154d6b5fd70033382bdbb9fe3863f726585b7ef6d0d7dfae1
3
+ metadata.gz: 56db4fab8d4e41d33e1ed27c204951ef6cecda14043fcb63d6e6b801d587935d
4
+ data.tar.gz: e221116c16f9eb8afbfaaa2e1e6f6e8217216f27f5ec9440d7a65e99221960ea
5
5
  SHA512:
6
- metadata.gz: e73d95955bd492e97bd2c129986da0658df78fe82e185218195a769e77643b858bee1c64de84c94bb8e7baf6b5a611cad08ac492072ad25812c70821563dfc66
7
- data.tar.gz: f12ec74ea787a1d09ccd20c191429bfafe0f291dfffa3fded5e4966efa1b8b82aad0e8653c06c1728e0a6ba06ee4703f63ffe2cf5a40e58a1cdb6d63c56c84d8
6
+ metadata.gz: 27c95fed5bfedc2bbc14cb19c2e42254337fb491730dfad26f4d59f7e6d9c5a7e90d81c1d0414ad746b7b8ad8267b061aef3f67740cf206e1aa8a8df4877954d
7
+ data.tar.gz: ad141c93c430a0600ff00b7c504a3237682858abd4238b8820830348f54527674d662e81445470821b4c68cbeba4ffdc51a6b149cc8e0a1a720a1981337b1990
data/GNUmakefile CHANGED
@@ -4,7 +4,7 @@ all::
4
4
  pkg = msgthr
5
5
  RUBY = ruby
6
6
  lib := lib
7
- VERSION := 1.1.0
7
+ VERSION := 1.2.0
8
8
  RSYNC_DEST := 80x24.org:/srv/80x24/msgthr/
9
9
 
10
10
  RSYNC = rsync
data/lib/msgthr.rb CHANGED
@@ -148,7 +148,18 @@ class Msgthr
148
148
  # If +mid+ is a String, it is recommended to freeze the string before
149
149
  # calling this method to avoid wasting memory on hash keys. Likewise
150
150
  # is true for any String objects in +refs+.
151
- def add(mid, refs, msg)
151
+ #
152
+ # Adding a message could link 2 messages in Msgthr,
153
+ # by making one message a child of the other.
154
+ # It's possible to have a callback called when a child is added
155
+ # by passing a block to this method.
156
+ # This block can access the child and parent messages. E.g.
157
+ #
158
+ # msgthr.add(0, nil, '0')
159
+ # msgthr.add(1, [0], '1') do |parent, child|
160
+ # puts "#{parent.mid} -> #{child.mid}"
161
+ # end
162
+ def add(mid, refs, msg) # :yields: parent, child
152
163
  @state == :init or raise StateError, "cannot add when already #@state"
153
164
 
154
165
  cur = @id_table[mid] ||= Msgthr::Container.new(mid)
@@ -166,12 +177,16 @@ class Msgthr
166
177
  # but do not change existing links or loop
167
178
  if prev && !cont.parent && !cont.has_descendent(prev)
168
179
  prev.add_child(cont)
180
+ yield(prev, cont) if block_given?
169
181
  end
170
182
  prev = cont
171
183
  end
172
184
 
173
185
  # set parent of this message to be the last element in refs
174
- prev.add_child(cur) if prev
186
+ if prev
187
+ prev.add_child(cur)
188
+ yield(prev, cur) if block_given?
189
+ end
175
190
  end
176
191
  end
177
192
 
data/msgthr.gemspec CHANGED
@@ -4,7 +4,7 @@
4
4
  Gem::Specification.new do |s|
5
5
  manifest = File.read('.manifest').split(/\n/)
6
6
  s.name = %q{msgthr}
7
- s.version = ENV['VERSION'] || '1.1.0'
7
+ s.version = ENV['VERSION'] || '1.2.0'
8
8
  s.authors = ['msgthr hackers']
9
9
  s.summary = 'container-agnostic, non-recursive message threading'
10
10
  s.description = File.read('README').split(/\n\n/)[1].strip
data/test/test_msgthr.rb CHANGED
@@ -6,8 +6,15 @@ require 'msgthr'
6
6
  class TestMsgthr < Test::Unit::TestCase
7
7
  def test_msgthr
8
8
  thr = Msgthr.new
9
+ parent_child = ''
10
+ # Note that C is added after B,
11
+ # hence it's message will be empty after adding B
12
+ expected_parent_child = '->B'
9
13
  thr.add('a', %w(c b), 'abc')
10
- thr.add('b', %w(c), 'B')
14
+ thr.add('b', %w(c), 'B') do |parent, child|
15
+ parent_child = "#{parent.msg}->#{child.msg}"
16
+ end
17
+ assert_equal parent_child, expected_parent_child
11
18
  thr.add('c', nil, 'c')
12
19
  thr.add('D', nil, 'D')
13
20
  thr.add('d', %w(missing), 'd')
@@ -95,4 +102,46 @@ EOF
95
102
  EOF
96
103
  assert_equal exp, out
97
104
  end
105
+
106
+ def test_add_child_callback
107
+ thr = Msgthr.new
108
+ threads = {}
109
+ [1, 11, 12, 2, 21, 211].each{ |id| threads[id] = [id]}
110
+ my_add = lambda do |id, refs, msg|
111
+ thr.add(id, refs, msg) do |parent, child|
112
+ threads[child.mid] = threads[parent.mid]
113
+ end
114
+ end
115
+ # Create the following structure
116
+ # 1
117
+ # \
118
+ # | 1.1
119
+ # \
120
+ # 1.2
121
+ # 2
122
+ # \
123
+ # 2.1
124
+ # \
125
+ # 2.1.1
126
+ my_add.call(1, nil, '1')
127
+ my_add.call(11, [1], '1.1')
128
+ my_add.call(12, [1], '1.2')
129
+ my_add.call(2, nil, '2')
130
+ my_add.call(21, [2], '2.1')
131
+ my_add.call(211, [21], '2.1.1')
132
+
133
+ thr.thread!
134
+ thr.rootset.each do |cnt|
135
+ threads[cnt.mid][0] = cnt.msg
136
+ end
137
+
138
+ assert_equal threads[1], threads[11]
139
+ assert_equal threads[1], threads[12]
140
+ assert_equal threads[2], threads[21]
141
+ assert_equal threads[2], threads[211]
142
+ assert_equal threads[21], threads[211]
143
+ assert_equal threads[1][0], '1'
144
+ assert_equal threads[2][0], '2'
145
+ end
146
+
98
147
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: msgthr
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - msgthr hackers
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-12-31 00:00:00.000000000 Z
11
+ date: 2018-01-25 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: |-
14
14
  Pure Ruby message threading based on the algorithm described by