mindwords 0.6.6 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
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