mindwords 0.6.6 → 0.8.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: ec2890a679fe960fc09d401fc33fa57c735b4e8ba940dfa02834880d2f92320a
4
- data.tar.gz: 2829b18b62650d5f49986113e67e01127331b89e17aaee698219220f3fae6387
3
+ metadata.gz: 1f5bf74dd560883c0f522b3bf9eb94ba34e1655360347bb25871762e4c592cc1
4
+ data.tar.gz: 8da5c28a10e9086c72f82eb7615af347da8ec80432249f4716f866c6450b8baf
5
5
  SHA512:
6
- metadata.gz: cd62b5aa44b6227a0028e990369dfa582d0b5c32bbee93969a37456cdc2e787d6d25108d3f4279e1422bd95ce107c01622b9167ab43407c2aa0627a6d0ec2989
7
- data.tar.gz: af4672aef859de43270d5a16d422815670e7e093282a19c901358d2770fd95276080c1594125a3215c3b0f1ce9b17d9ed6603b6e91dd6ae05b8b2764fb1484cc
6
+ metadata.gz: 361eee1873d6b3aa00ccfc415485c86723e28f398b19824d2e9f7b42322304579a9d672db7e4f13b5caa6711fee38028c4a0e361bdddf27451417a77a5476d64
7
+ data.tar.gz: 1eb29c350266e6122059017955e2ae615fb8368aec887df5fc6a6ac18aed7d8a3fbfe1ea0cdc6e6fe2050a55d0b7b9cd753e1280d2b101a0a765d9d6d29603fa
checksums.yaml.gz.sig CHANGED
Binary file
data/lib/mindwords.rb CHANGED
@@ -3,8 +3,10 @@
3
3
  # file: mindwords.rb
4
4
 
5
5
  require 'rexle'
6
- require 'rxfhelper'
6
+ require 'rxfreadwrite'
7
7
  require 'line-tree'
8
+ require 'polyrex'
9
+
8
10
 
9
11
  module HashCopy
10
12
  refine Hash do
@@ -19,7 +21,9 @@ end
19
21
  class MindWords
20
22
  using ColouredText
21
23
  using HashCopy
24
+ include RXFReadWriteModule
22
25
 
26
+ attr_reader :words_missing
23
27
  attr_accessor :lines, :filepath
24
28
 
25
29
  def initialize(raws='', parent: nil, debug: false)
@@ -64,14 +68,14 @@ class MindWords
64
68
  found = search(title)
65
69
  found.hashtags() if found
66
70
  else
67
- @parent.attributes[:hashtags].split if @parent
71
+ @parent.attributes[:hashtags].split if @parent and @parent.attributes[:hashtags]
68
72
  end
69
73
 
70
74
  end
71
75
 
72
76
  def import(raws)
73
77
 
74
- s, type = RXFHelper.read raws
78
+ s, type = RXFReader.read raws
75
79
 
76
80
  @filepath = raws if type == :file or type == :dfs
77
81
  lines = (s.strip.gsub(/(^\n|\r)/,'') + "\n").lines.uniq
@@ -124,7 +128,7 @@ class MindWords
124
128
 
125
129
  puts 'before save' if @debug
126
130
 
127
- File.write file, to_s()
131
+ FileX.write file, to_s()
128
132
 
129
133
  end
130
134
 
@@ -344,6 +348,7 @@ class MindWords
344
348
 
345
349
  a = rexlize(h)
346
350
  doc = Rexle.new(['root', {}, '', *a])
351
+ puts 'doc.xml: ' + doc.xml(pretty: true) if @debug
347
352
 
348
353
  # apply node nesting
349
354
 
@@ -360,6 +365,7 @@ class MindWords
360
365
 
361
366
  end
362
367
 
368
+ puts 'after nesting; doc.xml: ' + doc.xml(pretty: true) if @debug
363
369
 
364
370
  # remove duplicates which appear in the same branch above the nested node
365
371
  rm_duplicates(doc)
@@ -407,6 +413,45 @@ class MindWords
407
413
 
408
414
  @outline = treeize node
409
415
 
416
+ # ----
417
+
418
+ # It's common for words to be missing from the outline, either because
419
+ # they have erroneously been flagged as redundant or lack specific hashtag
420
+ # context. Below, we attempt to identify the missing words with a
421
+ # suggestion on how to fix it.
422
+
423
+ words = @outline.lines.map(&:strip)
424
+ orig_words = to_s().lines.map {|x| x[/^[^#]+(?= #)/]}.compact
425
+ @words_missing = orig_words - words
426
+
427
+ if @words_missing.any? then
428
+
429
+ tags = []
430
+ @words_missing.inject(tags) do |r,word|
431
+
432
+ found = to_s().lines.grep(/#{word}/)
433
+
434
+ if found then
435
+ r << found.first.scan(/#\w+/).map {|x| x[1..-1]}
436
+ else
437
+ r
438
+ end
439
+
440
+ end
441
+
442
+ add_sugg = tags.uniq.map do |atag|
443
+ ("%s #%s" % [atag[0], atag[1]]).bg_black
444
+ end
445
+
446
+ puts ('@words_missing: ' + @words_missing.join(', ') ).warn
447
+ puts "suggestion: try adding the following:".info
448
+ puts add_sugg.join("\n")
449
+ puts
450
+
451
+ end
452
+
453
+ # ----
454
+
410
455
  node.root.each_recursive do |e|
411
456
 
412
457
  e.attributes[:id] = e.attributes[:title].downcase.gsub(/ +/,'-')
@@ -535,3 +580,99 @@ EOF
535
580
  end
536
581
 
537
582
  end
583
+
584
+ class MindWordsPlus
585
+
586
+ attr_reader :to_px
587
+
588
+ def initialize(s, fields: %w(title content), debug: false)
589
+
590
+ lt = LineTree.new(s)
591
+ h = lt.to_h
592
+
593
+ mw = MindWords.new(h.keys.join("\n"))
594
+ outline = mw.to_outline
595
+
596
+ out = outline.lines.map do |line|
597
+
598
+ word = line[/\w[^$]+/]
599
+
600
+ found = h.keys.find do |key, value|
601
+
602
+ if debug then
603
+ puts 'key2: ' + key[/^[^#]+(?= #)/].inspect
604
+ puts 'word: ' + word.chomp.inspect
605
+ end
606
+
607
+ word.chomp == key[/^[^#]+(?= #)/]
608
+ end
609
+
610
+ puts 'found: ' + found.inspect if debug
611
+
612
+ if found and h[found][:body] then
613
+ puts '***' + h[found][:body].keys.inspect if debug
614
+ line.chomp + ' # ' + h[found][:body].keys.join('<br/>') + "\n"
615
+ else
616
+ line
617
+ end
618
+
619
+ end
620
+
621
+ puts out.join if debug
622
+
623
+ px = Polyrex.new(schema: "entries[title]/entry[#{fields.join(', ')}]",
624
+ delimiter: ' # ')
625
+ px.import out.join
626
+ @px = px
627
+
628
+ end
629
+
630
+ def to_ph()
631
+
632
+ lines = []
633
+
634
+ @px.each_recursive do |x, parent, level|
635
+
636
+ if level.to_i < 3 then
637
+ line = ("\n" + '#' * (level.to_i + 1)) + ' ' + x.title + "\n\n"
638
+ else
639
+ line = '*' + ' ' + x.title + "\n"
640
+ end
641
+
642
+ if x.content.length >= 1 then
643
+ txt = '- ' + x.content.gsub('&lt;','<').gsub('&gt;','>')
644
+ line += "\n" + txt.gsub('<br/>',"\n- ") + "\n"
645
+ end
646
+
647
+ lines << line
648
+
649
+ end
650
+
651
+ lines.join.gsub(/\n\n\n/,"\n\n")
652
+ end
653
+
654
+ def to_px()
655
+ @px
656
+ end
657
+
658
+ def to_tree()
659
+
660
+ lines = []
661
+ @px.each_recursive do |x, parent, level|
662
+
663
+ line = (' ' * level) + x.title
664
+
665
+ if x.content.length >= 1 then
666
+ txt = x.content.gsub('&lt;','<').gsub('&gt;','>')
667
+ indent = ' ' * (level+1) + '* '
668
+ line += "\n" + indent + txt.gsub('<br/>',"\n" + indent)
669
+ end
670
+
671
+ lines << line
672
+ end
673
+
674
+ lines.join("\n")
675
+
676
+ end
677
+
678
+ end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mindwords
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.6
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Robertson
@@ -11,72 +11,52 @@ cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
13
  MIIEXjCCAsagAwIBAgIBATANBgkqhkiG9w0BAQsFADAsMSowKAYDVQQDDCFnZW1t
14
- YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMjEwMTA2MDAzNzI2WhcN
15
- MjIwMTA2MDAzNzI2WjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
16
- cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCnNKTu
17
- gn/UJQjyq6a2T4UUemzEz8RnPLYDFkt+iM4mXm7dqSkZ5EdSEHdJ26r2P07yZjyB
18
- wg/WciIAG2tStBa9Kz3JLe4PveWMTlWDy0SruFAlUYVo8xaZjJmn7eAYFQz9mvVM
19
- 6HYp0ov8hDtYiDuhcmJ9tlVciusDcGuF9J9XoG3wH75EgRCVbxVXPTufhJNxAfmg
20
- Z8Z6pGm6gVRZ4YJ50+14vwTyyTjB3uFmJtjIn4UhDmAP3l1YUEQq0RCqEgdigzu7
21
- k1gX0A5Fs+5BKqK9kTlpZuceDH4Hqcmm4DPZ+asiXIYoRetlYaw/QJMpVpgOQ4tU
22
- PP0ZGl/QUSmrru/5uK+P4xOUL07O1dd+K6tyR8SC3Gh4Wzow8rUtyh7cXPz58bGY
23
- RtZaWPTWgz8FZs3S7NcIBdGU0Hlj8Z5QL26LatKIRsJz1yNaV8dRWZbhU9ML6RRJ
24
- 7T2avgjLyj1WWyx3Sg8afxxZ0Odp5wBc1LiqdqI+OybheGZdR1z17k/Xyj8CAwEA
25
- AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUWkD96lfk
26
- uPyGnc/MJwjZ5vZICwEwJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
14
+ YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMjIwMTI3MTQ1NDM4WhcN
15
+ MjMwMTI3MTQ1NDM4WjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
16
+ cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQC5j1vd
17
+ M1N+azakESYbM6MEesfRhcOCklUmUNk5LlHcrtoySInNFd9ky7EMilTg8hRPrf5m
18
+ YgEx9+6V4iAGhRrkmyPdjGbNvgjyGqPjzouwtElA1SIh6geIaiDr3GAQQ4Amez/g
19
+ jM0bh1xybLIhBxUJ+QDB/MCyWX7c6Lf2mmbWpKJJi9DxdgZT19nD5VrjLE989UwN
20
+ XOt/jc8s9zc3RFNadSTqVAWXXUb8F9Uh0zrkNwJD0jhmpHEyg7uZ6cHrxD9zZbLf
21
+ YLJFU+QgPCSUkJX3KUcLbpwHJbmwVbaRwHz16AanbyvBa3jHBOTLoRywpvjPQuec
22
+ vr+4cUzHHad9G329gwk9F/3VY0KMtvjxwsRKJ6R+0QacNNG/uyzDirlPfx2N9qy/
23
+ +vxoLS8NDLDG7lxa+vSXqBhfBlUGUTV+N3g7zwUQOfLetAza48Mzlhbtom/7GhXW
24
+ RLyW+RLWrNZmyxzmcTzIXMJknJcdh1lErfqlK4xJoFjoOz+Ezt91yfqo7pcCAwEA
25
+ AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUsko1pK7R
26
+ 6H51ylxgR7A2RLZ7B6UwJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
27
27
  c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1hc3RlckBqYW1lc3JvYmVydHNvbi5ldTAN
28
- BgkqhkiG9w0BAQsFAAOCAYEAbe9+Fvsl1/YO5V70fwm9KI6qDR8TBYVSgFBBHnBb
29
- vua8Qp+neqsLq/NVF/MAgBa8klFOw0LLPjKphKLSbJd7pb34etJytsIWcF2WLCGG
30
- s9JBtt3URieOcvKVyCnjAA4aQ3YGvgaM3t94y/LaoSQZEgu8385NczGI8GCFSEV5
31
- 0pv/71aTh42DuIbFrF5Qf7XMncgMzxZuVWaWuU25Nh4bK6swzSV8Pba89c8LhVj2
32
- WUxqYCA9Lrgw2H/RWxQIXS1xQ+zXLHc+ExzJ/qEDef7wsz3wIYRoGHbhciXxLHce
33
- +0EOblxngt+AdCB4PmQlVA5LdFSRzxMv84tGrnhAGefjGPe1KzegthuN7sl0yugD
34
- tiF/wCtUE7D7XQOINuJSGP2e+9XU3GmTZQvrdEuOO3LcTSU9jfn04leXaQ4pwv2M
35
- aWH7D2AmhOpqNwWnPHzWR/yzpigAVTrvpHfRxZleQj6Z/090nIH2KR0RdioMmPFq
36
- 3+574KQzs/gR9Y5a+iMcvHRN
28
+ BgkqhkiG9w0BAQsFAAOCAYEAR1wfQlkrJf5zvVkq5Cl2fcXYKRnhk8N9lxUZPA2Z
29
+ nXfHed/9gdLpGLQHV91Q0W2taDFDnOpRj3e2dZxdihrJ4qJJ55w9cUgGcpqTjmgE
30
+ p/5Pxgy25wdHte0URJvy4fnIB0NjVe+pTLENGLhk9O+ktKxfI5b+3ImOHLirfsiM
31
+ Nt1J9bxPr++9WzOnvOBNpt+dSZE42/mEAoVHCLGp06XSCuj3TRE93TetO5K8Rqrz
32
+ Gr2rktYjmK75ckHc2Owb7k5q4MhENXDF0w+boTHKwhZ3YZ23ORWBAAe6EWZ5CJif
33
+ ACsKYTamTZJ1XtnSuwfZJ66HujeZDeDeU4Jn0IWl0Ocpuf5cGdgZdQ/jlA02M4Ev
34
+ 1IAsJkbXAdPHh9mLKUSeH2E1qJ8tg7MFVdBZMkvG4PNXXEk5fzijsrxrXbpY4IgW
35
+ eUqhPOSrxIRLebVebvo/SHN6+ed3Q1tXowsbLGCT9QwqbaZ5MZ7zks92mIWeJvsA
36
+ JdpabIXfcOANNKd0ha4NO+Yu
37
37
  -----END CERTIFICATE-----
38
- date: 2022-01-02 00:00:00.000000000 Z
38
+ date: 2022-03-16 00:00:00.000000000 Z
39
39
  dependencies:
40
40
  - !ruby/object:Gem::Dependency
41
- name: line-tree
41
+ name: polyrex
42
42
  requirement: !ruby/object:Gem::Requirement
43
43
  requirements:
44
44
  - - "~>"
45
45
  - !ruby/object:Gem::Version
46
- version: '0.9'
46
+ version: '1.4'
47
47
  - - ">="
48
48
  - !ruby/object:Gem::Version
49
- version: 0.9.3
49
+ version: 1.4.1
50
50
  type: :runtime
51
51
  prerelease: false
52
52
  version_requirements: !ruby/object:Gem::Requirement
53
53
  requirements:
54
54
  - - "~>"
55
55
  - !ruby/object:Gem::Version
56
- version: '0.9'
56
+ version: '1.4'
57
57
  - - ">="
58
58
  - !ruby/object:Gem::Version
59
- version: 0.9.3
60
- - !ruby/object:Gem::Dependency
61
- name: rxfhelper
62
- requirement: !ruby/object:Gem::Requirement
63
- requirements:
64
- - - "~>"
65
- - !ruby/object:Gem::Version
66
- version: '1.1'
67
- - - ">="
68
- - !ruby/object:Gem::Version
69
- version: 1.1.3
70
- type: :runtime
71
- prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
73
- requirements:
74
- - - "~>"
75
- - !ruby/object:Gem::Version
76
- version: '1.1'
77
- - - ">="
78
- - !ruby/object:Gem::Version
79
- version: 1.1.3
59
+ version: 1.4.1
80
60
  description:
81
61
  email: digital.robertson@gmail.com
82
62
  executables: []
@@ -103,8 +83,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
103
83
  - !ruby/object:Gem::Version
104
84
  version: '0'
105
85
  requirements: []
106
- rubyforge_project:
107
- rubygems_version: 2.7.10
86
+ rubygems_version: 3.2.22
108
87
  signing_key:
109
88
  specification_version: 4
110
89
  summary: Helps get what's in your mind into a structure using words and hashtags.
metadata.gz.sig CHANGED
Binary file