wikisys 0.2.0 → 0.3.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.
Files changed (6) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/lib/wikisys.rb +198 -24
  5. metadata +31 -10
  6. metadata.gz.sig +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bffc9856824a5b8afe8648ea585e3fbe2400ff94e7d0c0fbb0f622b138b8f7e6
4
- data.tar.gz: c2acad35e8fe2361cadabe919004a2f203bf687a1efdc43e061351a3fda11678
3
+ metadata.gz: c1d9909e650b607db0429fcf09233a3775f1493fca6ae612354c205e4dccf69d
4
+ data.tar.gz: 646db1e4c483057d9b7d220edbd0164d9f9dce8e90408faf55da71aea2e661b4
5
5
  SHA512:
6
- metadata.gz: 0fc14b79eb6eca3034f904be493787d8058e8d85699f612d0c1749e2bc4536c20fa7c08b36e81b04f0ac7c8ae8955884f86565a3a027348c218acd181898bc3e
7
- data.tar.gz: 9f499b325c14ed3dc204d21c928756a5b27cae725c824f718056cdece85c1729b44f62734d1723a1282585ad5b7bf5fc71c035647851b88bcdf09b0430b9b71b
6
+ metadata.gz: 856dfe0a483521ef2db25f220df0891f23ad2bb99d5b77b136a18df40965c9a51cc2ac1ac7789cc8345ac372fd4768b4ff93b656fc22f418479bf7351f96579f
7
+ data.tar.gz: 3cab93f28ea693edd42c273f8a5a387ed8811825943e7859a3e0ff38e3c2be877f226fd5bde967aac8d766d40dfecfbf3e71803dbabbaf4dee81d0cdd128eeee
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -3,12 +3,15 @@
3
3
  # file: wikisys.rb
4
4
 
5
5
  require 'dxlite'
6
+ require 'dir-to-xml'
7
+ require 'mindwords'
6
8
  require 'martile'
7
9
 
8
10
  module Wikisys
9
11
 
10
12
  class Wiki
11
13
 
14
+ attr_accessor :title, :content, :tags
12
15
  attr_reader :to_xml
13
16
 
14
17
  def initialize(filepath='.', entries: 'entries.json', debug: false)
@@ -17,17 +20,22 @@ module Wikisys
17
20
  @page = ''
18
21
  @debug = debug
19
22
 
20
- @entries = if File.exists?(entries) then
23
+ @entries = if entries.is_a? DxLite then
24
+
25
+ entries
26
+
27
+ elsif File.exists?(entries) then
21
28
 
22
29
  DxLite.new(entries)
23
30
 
24
31
  else
25
32
 
26
- DxLite.new('entries/entry(title, tags)', filepath: entries)
33
+ DxLite.new('entries/entry(title, tags)')
27
34
 
28
35
  end
29
36
 
30
37
  end
38
+
31
39
 
32
40
  def page(title)
33
41
 
@@ -48,8 +56,8 @@ module Wikisys
48
56
  make_page(title, raw_content.lines.last.chomp[/(?<=\+ )/]) unless r
49
57
 
50
58
  write_md title, raw_content
51
-
52
- @to_xml = build_xml raw_content
59
+ title, content, tags = read_md()
60
+ @to_xml = build_xml title, content, tags
53
61
  write_xml title, @to_xml
54
62
 
55
63
 
@@ -58,13 +66,65 @@ module Wikisys
58
66
 
59
67
  end
60
68
 
69
+ def modify_build(filename)
70
+
71
+ @title, @content, @tags = read_md(filename)
72
+
73
+ # find the entry
74
+ # modify the tags if necessary
75
+
76
+ r = @entries.find_by_title @title
77
+ puts 'r: ' + r.inspect if @debug
78
+ return unless r
79
+
80
+ write_xml(@title, build_xml(@title, @content, @tags))
81
+
82
+ r.tags = @tags.join(' ') if r.tags != @tags
83
+
84
+ end
85
+
86
+ def new_build(filename)
87
+
88
+ @title, @content, @tags = read_md(filename)
89
+ @entries.create title: @title, tags: @tags.join(' ')
90
+
91
+ puts 'md contents: ' + [@title, @content, @tags].inspect if @debug
92
+ write_xml(@title, build_xml(@title, @content, @tags))
93
+
94
+ end
95
+
61
96
  private
62
97
 
63
- def build_xml(content)
98
+ def read_md(filename)
64
99
 
65
- s = content.gsub(/\[\[[^\]]+\]\]/) do |raw_link|
100
+ filepath = File.join(@filepath, 'md', filename)
101
+ return unless File.exists? filepath
102
+
103
+ s = File.read(filepath).strip
104
+
105
+ # read the title
106
+ title = s.lines.first.chomp.sub(/^# +/,'')
107
+
108
+ # read the hashtags if there is any
109
+ tagsline = s.lines.last[/^ *\+ +(.*)/,1]
110
+
111
+ if tagsline then
112
+
113
+ [title, s.lines[1..-2].join, tagsline.split]
114
+
115
+ else
116
+
117
+ [title, s.lines[1..--1].join, []]
118
+
119
+ end
120
+
121
+ end
66
122
 
67
- title = raw_link[2..-3].strip
123
+
124
+ def build_xml(title, content, tags)
125
+
126
+ puts 'content: ' + content.inspect if @debug
127
+ s = content.gsub(/\[\[[^\]]+\]\]/) do |raw_link|
68
128
 
69
129
  r = @entries.find_by_title title
70
130
 
@@ -88,12 +148,11 @@ module Wikisys
88
148
  end
89
149
 
90
150
 
91
- heading = "<heading>%s</heading>" % s.lines.first.chomp
92
- tags = ''
151
+ heading = "<heading>%s</heading>" % title
93
152
 
94
- if s.lines.last[0] = '+' then
153
+ if tags.any? then
95
154
 
96
- list = s.lines.last[2..-1].split.map {|tag| " <tag>%s</tag>" % tag}
155
+ list = tags.map {|tag| " <tag>%s</tag>" % tag}
97
156
  tags = "<tags>\n%s\n </tags>" % list.join("\n")
98
157
 
99
158
  body = "<body>\n %s </body>" % \
@@ -110,6 +169,15 @@ module Wikisys
110
169
 
111
170
  end
112
171
 
172
+ def write_xml(title, content)
173
+
174
+ filepath = File.join(File.absolute_path(@filepath), 'xml',
175
+ title.gsub(/ +/,'_') + '.xml')
176
+ FileUtils.mkdir_p File.dirname(filepath)
177
+ File.write filepath, content
178
+
179
+ end
180
+
113
181
  def make_page(title, raw_tags=title.downcase.gsub(/['\.\(\)]/,''))
114
182
 
115
183
  tags = raw_tags.split.join(' ')
@@ -121,13 +189,12 @@ module Wikisys
121
189
 
122
190
  return s
123
191
 
124
- end
192
+ end
125
193
 
126
- def read_md(title)
127
-
128
- filepath = File.join(File.absolute_path(@filepath), 'md',
129
- title.gsub(/ +/,'_') + '.md')
130
- File.read(title.gsub(/ +/,'_') + '.md')
194
+ def read_md_file(filename)
195
+
196
+ filepath = File.join(@filepath, 'md', filename)
197
+ File.read(filepath)
131
198
 
132
199
  end
133
200
 
@@ -138,17 +205,124 @@ module Wikisys
138
205
  FileUtils.mkdir_p File.dirname(filepath)
139
206
  File.write filepath, content
140
207
 
208
+ end
209
+
210
+ end
211
+
212
+ class Pages
213
+
214
+ attr_accessor :mw, :entries
215
+
216
+ def initialize(filepath='.', debug: false)
217
+
218
+ @filepath, @debug = filepath, debug
219
+
220
+ entries_file = File.join(@filepath, 'entries.txt')
221
+
222
+ if File.exists?(entries_file) then
223
+ @entries = DxLite.new(entries_file)
224
+ else
225
+ @entries = DxLite.new('entries/entry(title, tags)')
226
+ @entries.save entries_file
227
+ end
228
+
229
+ # check for the mindwords raw document file
230
+ mindwords_file = File.join(@filepath, 'mindwords.txt')
231
+
232
+ if File.exists?(mindwords_file) then
233
+ @mw = MindWords.new(mindwords_file)
234
+ else
235
+ @mw = MindWords.new
236
+ @mw.filepath = mindwords_file
237
+ end
238
+
239
+ scan_md_files()
240
+
141
241
  end
142
242
 
143
- def write_xml(title, content)
243
+ private
244
+
245
+
246
+ # Check if any of the md files have been modified or newly created
247
+ #
248
+ def scan_md_files()
144
249
 
145
- filepath = File.join(File.absolute_path(@filepath), 'xml',
146
- title.gsub(/ +/,'_') + '.xml')
147
- FileUtils.mkdir_p File.dirname(filepath)
148
- File.write filepath, content
250
+ filepath = File.join(@filepath, 'md')
251
+ puts 'about to scan ' + filepath.inspect if @debug
252
+ dir = DirToXML.new(filepath, index: 'dir.json', debug: @debug)
253
+ h = dir.activity
254
+ puts 'h: ' + h.inspect if @debug
149
255
 
150
- end
256
+ pg = Wiki.new @filepath, entries: @entries
257
+
258
+
259
+ h[:new].each do |filename|
260
+
261
+ pg.new_build(filename)
262
+ update_mw(pg.title, pg.tags)
263
+
264
+ end
265
+
266
+ h[:modified].each do |filename|
267
+
268
+ pg.modify_build(filename)
269
+ update_mw(pg.title, pg.tags)
270
+
271
+ end
272
+
273
+ @entries.save
274
+ @mw.save if @mw.lines.any?
275
+
276
+ end # /scan_md_files
151
277
 
152
- end
278
+ def update_mw(title, line_tags)
279
+
280
+ # read the file
153
281
 
282
+ tags = line_tags.reject {|x| x =~ /#{title.strip}/i}
283
+ puts 'tags: ' + tags.inspect if @debug
284
+ puts 'title: ' + title.inspect if @debug
285
+
286
+ return if tags.empty?
287
+
288
+ line = title + ' ' + tags.map {|x| "#" + x }.join(' ') + "\n"
289
+ puts 'line: ' + line.inspect if @debug
290
+
291
+ # does the tagsline contain the topic hashtag?
292
+
293
+ #if tagsline =~ /#/ # not yet implemented
294
+
295
+
296
+
297
+ # check if the title already exists
298
+ found = @mw.lines.grep(/^#{title} +(?=#)/i)
299
+
300
+ if found.any? then
301
+
302
+ found_tags = found.first.scan(/(?<=#)\w+/)
303
+
304
+ if @debug then
305
+
306
+ puts 'tags: ' + tags.inspect
307
+ puts 'found_tags: ' + found_tags.inspect
308
+
309
+ end
310
+
311
+ new_tags = tags - found_tags
312
+
313
+ # add the new tags to the mindwords line
314
+
315
+ hashtags = (found_tags + new_tags).map {|x| '#' + x }.join(' ')
316
+
317
+ i = @mw.lines.index(found.first)
318
+ @mw.lines[i] = line
319
+
320
+ else
321
+
322
+ @mw.lines << line
323
+
324
+ end
325
+
326
+ end
327
+ end
154
328
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wikisys
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Robertson
@@ -35,28 +35,48 @@ cert_chain:
35
35
  O3SRDzvvWXrwDFGyRDmGqdEw51FKHPw/6pk4ci0QPIvQEgOyPKfdSesPWmNmtxpf
36
36
  KX/89ohIpftt89vtcCI21R5u
37
37
  -----END CERTIFICATE-----
38
- date: 2020-06-22 00:00:00.000000000 Z
38
+ date: 2021-01-29 00:00:00.000000000 Z
39
39
  dependencies:
40
40
  - !ruby/object:Gem::Dependency
41
- name: dxlite
41
+ name: dir-to-xml
42
42
  requirement: !ruby/object:Gem::Requirement
43
43
  requirements:
44
44
  - - "~>"
45
45
  - !ruby/object:Gem::Version
46
- version: '0.2'
46
+ version: '1.0'
47
47
  - - ">="
48
48
  - !ruby/object:Gem::Version
49
- version: 0.2.2
49
+ version: 1.0.4
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.2'
56
+ version: '1.0'
57
57
  - - ">="
58
58
  - !ruby/object:Gem::Version
59
- version: 0.2.2
59
+ version: 1.0.4
60
+ - !ruby/object:Gem::Dependency
61
+ name: mindwords
62
+ requirement: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - "~>"
65
+ - !ruby/object:Gem::Version
66
+ version: '0.5'
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: 0.5.3
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - "~>"
75
+ - !ruby/object:Gem::Version
76
+ version: '0.5'
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: 0.5.3
60
80
  - !ruby/object:Gem::Dependency
61
81
  name: martile
62
82
  requirement: !ruby/object:Gem::Requirement
@@ -66,7 +86,7 @@ dependencies:
66
86
  version: '1.4'
67
87
  - - ">="
68
88
  - !ruby/object:Gem::Version
69
- version: 1.4.3
89
+ version: 1.4.6
70
90
  type: :runtime
71
91
  prerelease: false
72
92
  version_requirements: !ruby/object:Gem::Requirement
@@ -76,7 +96,7 @@ dependencies:
76
96
  version: '1.4'
77
97
  - - ">="
78
98
  - !ruby/object:Gem::Version
79
- version: 1.4.3
99
+ version: 1.4.6
80
100
  description:
81
101
  email: james@jamesrobertson.eu
82
102
  executables: []
@@ -103,7 +123,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
103
123
  - !ruby/object:Gem::Version
104
124
  version: '0'
105
125
  requirements: []
106
- rubygems_version: 3.0.3
126
+ rubyforge_project:
127
+ rubygems_version: 2.7.10
107
128
  signing_key:
108
129
  specification_version: 4
109
130
  summary: A poor man's wiki.
metadata.gz.sig CHANGED
Binary file