weblet 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/weblet.rb +62 -21
  5. metadata +24 -4
  6. metadata.gz.sig +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: db2437f118c3c20ae3793072517fb43614ab736e31ceddb2e94c25e9f5f7f2f6
4
- data.tar.gz: 2624d3afc74ac2dc93867e4423614c483b6f26f091f27c081335210799d93222
3
+ metadata.gz: a554a34daec79c81fca1f25d822c6d0ceb784f9e86b8420cd6fada8372057995
4
+ data.tar.gz: 22ba08494032e5b230e5837baab8c821b23321a3d4cb91b507fe99ca6afa0fd2
5
5
  SHA512:
6
- metadata.gz: b464034193c7a1972c1554423198bb48a3b07cf97737b278c048d25ee59bbfa2b189514a6b35143e9d1352b0c1f1dae4b27afdc85c1c54bf77733a7392f92b3a
7
- data.tar.gz: b715617193855dbbde52a3ac3dd78bc22ab6c1af7643c6a329f78f778f5d7018c09f3b92a07edd01c86890609a71777911a1d7de17be041d515e635418fb4bd2
6
+ metadata.gz: e665e8e8b68bd5fb7de8020b5f648087e4d8abeaf8580118a1f2ea786820dd69f359252ed51a502e171b9b59d9f3928f1ec457502e8eb5e9c52e1c15c632c917
7
+ data.tar.gz: be1d18c638b4628bfad7da54e717d476df9b339dc74233f08efa03dc5ca6ddc7ec42b0e377d97197c4dc85f8e04c911073fe817f20e44eed965e83b01791aae6
checksums.yaml.gz.sig CHANGED
Binary file
data.tar.gz.sig CHANGED
Binary file
data/lib/weblet.rb CHANGED
@@ -3,14 +3,25 @@
3
3
  # file: weblet.rb
4
4
 
5
5
  require 'rexle'
6
+ require 'rxfhelper'
6
7
 
7
8
 
8
9
  class WebletBuilder
9
10
 
10
- def initialize(s, debug: false)
11
+ def initialize(s, marker: nil, debug: false)
11
12
 
12
- @debug = debug
13
- @a = build(scan(s.strip))
13
+ @marker, @debug = marker, debug
14
+
15
+ s.strip!
16
+
17
+ # the default marker is the hash symbol (#) but the client can set their
18
+ # own marker by simply using their custom symbol in the 1st line of input
19
+ @marker ||= s[0]
20
+
21
+ a = scan(s.strip)
22
+ puts 'a: ' + a.inspect if @debug
23
+
24
+ @a = build(a)
14
25
  @a.unshift *['weblet', {}, '']
15
26
 
16
27
  end
@@ -23,7 +34,7 @@ class WebletBuilder
23
34
 
24
35
  def scan(s, indent=0)
25
36
 
26
- a = s.split(/(?=^#{' ' * indent}#)/)
37
+ a = s.split(/(?=^#{(' ' * indent) + @marker})/)
27
38
  return a unless a.length > 1
28
39
 
29
40
  a.map {|x| scan(x, indent+1)}
@@ -32,21 +43,23 @@ class WebletBuilder
32
43
 
33
44
  def build(a)
34
45
 
46
+ puts 'a: ' + a.inspect if @debug
47
+
35
48
  a.map do |x|
36
49
 
37
50
  puts 'x: ' + x.inspect if @debug
38
51
 
39
- if x.is_a? String then
40
- head, body = x.split("\n", 2)
41
- [:node, {id: head[/#(\w+)/,1]}, '',['![', {}, body.strip]]
42
- elsif x.length < 2
43
- x.flatten!(1)
44
- head, body = x.shift.split("\n", 2)
45
- [:node, {id: head[/#(\w+)/,1].rstrip}, '',['![', {}, body.rstrip, ]]
46
- else
47
- x.flatten!(1)
48
- head, body = x.shift.split("\n", 2)
49
- [:node, {id: head[/#(\w+)/,1].rstrip}, body.rstrip, *build(x)]
52
+ if x[0].is_a? String then
53
+
54
+ head, body = x[0].split("\n", 2)
55
+ [:node, {id: head[/#{@marker}(\w+)/,1]}, '',['![', {}, body.strip]]
56
+
57
+ elsif x[0] and x[0].is_a? Array
58
+
59
+ head, body = x[0][0].split("\n", 2)
60
+ [:node, {id: head[/#{@marker}(\w+)/,1]}, '', \
61
+ ['![', {}, body.to_s.strip], *build(x[1..-1])]
62
+
50
63
  end
51
64
 
52
65
  end
@@ -57,12 +70,14 @@ end
57
70
 
58
71
  class Weblet
59
72
 
60
- def initialize(raws, b, debug: false)
73
+ def initialize(raws, b, marker: nil, debug: false)
61
74
 
62
75
  @debug = debug
76
+
77
+ s, _ = RXFHelper.read(raws.strip)
63
78
 
64
- raws.strip!
65
- obj = raws[0] == '<' ? raws : WebletBuilder.new(raws, debug: debug).to_a
79
+ obj = s[0] == '<' ? s : WebletBuilder.new(s, marker: marker, \
80
+ debug: debug).to_a
66
81
  @doc = Rexle.new(obj)
67
82
  @h = scan @doc.root
68
83
  @b = b
@@ -79,13 +94,18 @@ class Weblet
79
94
 
80
95
  def render(*args)
81
96
 
97
+ @b = args.pop if args.last.is_a? Binding
98
+
82
99
  if args.first.is_a? String then
83
- path = args.first.split('/',2).map(&:to_sym)
100
+ path = args.first.split('/').map(&:to_sym)
84
101
  else
85
102
  path = *args.flatten(1)
86
103
  end
87
104
 
88
- r = @h.dig *path
105
+ #r = @h.dig *path
106
+ r = digx(@h, path)
107
+
108
+ puts 'r: ' + r.inspect if @debug
89
109
 
90
110
  if r.nil? then
91
111
  found = @doc.root.element("//node[@id='#{path.join}']")
@@ -97,6 +117,20 @@ class Weblet
97
117
  end
98
118
 
99
119
  private
120
+
121
+ def digx(obj, a)
122
+
123
+ h = obj.is_a?(Array) ? obj.last : obj
124
+
125
+ r = h.dig(a.shift)
126
+
127
+ if a.any? then
128
+ digx(r, a)
129
+ else
130
+ r.is_a?(Array) ? r.first : r
131
+ end
132
+
133
+ end
100
134
 
101
135
  def scan(node)
102
136
 
@@ -108,7 +142,14 @@ class Weblet
108
142
 
109
143
  puts 'nodes: ' + nodes.inspect if @debug
110
144
 
111
- r = nodes.any? ? scan(e) : e.cdatas.join()
145
+ r = if nodes.any? then
146
+
147
+ r2 = scan(e)
148
+ e.cdatas.any? ? [e.cdatas.join(), r2] : r2
149
+
150
+ else
151
+ e.cdatas.join()
152
+ end
112
153
 
113
154
  [e.attributes[:id].to_sym, r]
114
155
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: weblet
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,7 +35,7 @@ cert_chain:
35
35
  mKbvoKGru7nPXh4E/ArWQ70Yz24o3lwGZW3XLzwdLPKB8MiOOGuTARkCWFEYT5tE
36
36
  We42rjyhFeidBuSZp6/7Wwlo
37
37
  -----END CERTIFICATE-----
38
- date: 2021-04-03 00:00:00.000000000 Z
38
+ date: 2021-04-04 00:00:00.000000000 Z
39
39
  dependencies:
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: rexle
@@ -46,7 +46,7 @@ dependencies:
46
46
  version: '1.5'
47
47
  - - ">="
48
48
  - !ruby/object:Gem::Version
49
- version: 1.5.10
49
+ version: 1.5.11
50
50
  type: :runtime
51
51
  prerelease: false
52
52
  version_requirements: !ruby/object:Gem::Requirement
@@ -56,7 +56,27 @@ dependencies:
56
56
  version: '1.5'
57
57
  - - ">="
58
58
  - !ruby/object:Gem::Version
59
- version: 1.5.10
59
+ version: 1.5.11
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
60
80
  description:
61
81
  email: digital.robertson@gmail.com
62
82
  executables: []
metadata.gz.sig CHANGED
Binary file