fabulator 0.0.15 → 0.0.16
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.
- data/History.txt +7 -0
- data/VERSION +1 -1
- data/features/functions.feature +1 -1
- data/features/library.feature +8 -3
- data/features/paths.feature +9 -0
- data/features/simple-statemachine.feature +3 -0
- data/lib/fabulator/expr/parser.rb +1 -1
- data/lib/fabulator/expr/path_expr.rb +3 -10
- data/lib/fabulator/expr/predicates.rb +1 -1
- data/lib/fabulator/lib/action.rb +7 -1
- data/lib/fabulator/lib/function.rb +8 -0
- data/xsm_expression_parser.racc +1 -1
- metadata +4 -4
data/History.txt
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
=== 0.0.16 2010-12-28
|
2
|
+
|
3
|
+
* 3 minor enhancements:
|
4
|
+
* Template functions dedent their text.
|
5
|
+
* Functions can be immediately followed by predicates
|
6
|
+
* Actions defined in a library can have a f:select attribute now
|
7
|
+
|
1
8
|
=== 0.0.15 2010-12-09
|
2
9
|
|
3
10
|
* 1 minor enhancement:
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.16
|
data/features/functions.feature
CHANGED
@@ -173,7 +173,7 @@ Feature: Function calls and lists
|
|
173
173
|
Scenario: Random numbers
|
174
174
|
Given a context
|
175
175
|
And the prefix f as "http://dh.tamu.edu/ns/fabulator/1.0#"
|
176
|
-
When I run the expression (f:random(5) <
|
176
|
+
When I run the expression (f:random(5) < 6)
|
177
177
|
Then I should get 1 item
|
178
178
|
And item 0 should be [f:true()]
|
179
179
|
|
data/features/library.feature
CHANGED
@@ -38,6 +38,9 @@ Feature: Libraries
|
|
38
38
|
<l:attribute l:name="foo" l:eval="false" />
|
39
39
|
<f:value f:path="/actn4foo" f:select="f:eval($foo)" />
|
40
40
|
</l:action>
|
41
|
+
<l:action l:name="test-select" l:has-select="true">
|
42
|
+
<f:value f:path="/test-select" f:select="f:eval($select)" />
|
43
|
+
</l:action>
|
41
44
|
<l:template l:name="tmpl">
|
42
45
|
Foo
|
43
46
|
</l:template>
|
@@ -58,12 +61,14 @@ Feature: Libraries
|
|
58
61
|
>
|
59
62
|
<m:actn3 m:path="/actn3" />
|
60
63
|
<m:actn4 m:foo="bar" />
|
64
|
+
<m:test-select f:select="123" />
|
61
65
|
</f:application>
|
62
66
|
"""
|
63
67
|
Then the expression (/actn3) should equal [3]
|
64
68
|
And the expression (/actn4foo) should equal ['bar']
|
69
|
+
And the expression (/test-select) should equal [123]
|
65
70
|
And the expression (m:fctn(3,2)) should equal [1]
|
66
71
|
And the expression (m:fctn2(2,3)) should equal [1]
|
67
|
-
And the expression (
|
68
|
-
And the expression (
|
69
|
-
And the expression (f:normalize-space(m:tmpl3('Foo'))) should equal ['<p>
|
72
|
+
And the expression (m:tmpl()) should equal ['Foo']
|
73
|
+
And the expression (m:tmpl2('Foo')) should equal ['Foo']
|
74
|
+
And the expression (f:normalize-space(m:tmpl3('Foo'))) should equal ['<p>Foo</p>']
|
data/features/paths.feature
CHANGED
@@ -89,3 +89,12 @@ Feature: Path expressions
|
|
89
89
|
And item 1 should be ['ccc']
|
90
90
|
And item 2 should be ['dd']
|
91
91
|
|
92
|
+
@array
|
93
|
+
Scenario: Predicates after function calls
|
94
|
+
Given a context
|
95
|
+
And the prefix f as "http://dh.tamu.edu/ns/fabulator/1.0#"
|
96
|
+
When I run the expression (f:split('The brown faux fox fur', ' ')[f:starts-with?(., 'f')])
|
97
|
+
Then I should get 3 items
|
98
|
+
And item 0 should be ['faux']
|
99
|
+
And item 1 should be ['fox']
|
100
|
+
And item 2 should be ['fur']
|
@@ -226,11 +226,14 @@ Feature: Simple state machines
|
|
226
226
|
</f:choose>
|
227
227
|
</f:variable>
|
228
228
|
<f:value f:path="/new-post/filter" f:select="$filter" />
|
229
|
+
<f:variable f:name="fillter" f:select="$filter" />
|
230
|
+
<f:value f:path="/new-post/fillter" f:select="$fillter" />
|
229
231
|
</f:application>
|
230
232
|
"""
|
231
233
|
Then the expression (/foo) should equal [3]
|
232
234
|
Then the expression (/bar) should equal [3]
|
233
235
|
Then the expression (/new-post/filter) should equal ['Markdown']
|
236
|
+
Then the expression (/new-post/fillter) should equal ['Markdown']
|
234
237
|
|
235
238
|
@var
|
236
239
|
Scenario: simple machine with a <variable /> and <value />
|
@@ -1396,7 +1396,7 @@ module_eval(<<'.,.,', 'xsm_expression_parser.racc', 115)
|
|
1396
1396
|
|
1397
1397
|
module_eval(<<'.,.,', 'xsm_expression_parser.racc', 116)
|
1398
1398
|
def _reduce_63(val, _values, result)
|
1399
|
-
result = Fabulator::Expr::PathExpr.new(val[0], val[1], val[2])
|
1399
|
+
result = ((val[1].nil? || val[1].empty?) && (val[2].nil? || val[2].empty?)) ? val[0] : Fabulator::Expr::PathExpr.new(val[0], val[1], val[2])
|
1400
1400
|
result
|
1401
1401
|
end
|
1402
1402
|
.,.,
|
@@ -3,7 +3,7 @@ module Fabulator
|
|
3
3
|
class PathExpr
|
4
4
|
def initialize(pe, predicates, segment)
|
5
5
|
@primary_expr = pe
|
6
|
-
@predicates = predicates
|
6
|
+
@predicates = Fabulator::Expr::Predicates.new(nil, predicates)
|
7
7
|
@segment = (segment.is_a?(Array) ? segment : [ segment ]) - [nil]
|
8
8
|
end
|
9
9
|
|
@@ -24,15 +24,8 @@ module Fabulator
|
|
24
24
|
|
25
25
|
possible.each do |e|
|
26
26
|
next if e.nil?
|
27
|
-
|
28
|
-
|
29
|
-
if !p.test(context.with_root(e))
|
30
|
-
not_pass = true
|
31
|
-
break
|
32
|
-
end
|
33
|
-
end
|
34
|
-
next if not_pass
|
35
|
-
pos = [ e ]
|
27
|
+
pos = @predicates.run(context.with_root(e), autovivify)
|
28
|
+
next if pos.empty?
|
36
29
|
@segment.each do |s|
|
37
30
|
pos = pos.collect{ |p|
|
38
31
|
s.run(context.with_root(p), autovivify)
|
@@ -10,7 +10,7 @@ module Fabulator
|
|
10
10
|
# we want to run through all of the predicates and return true if
|
11
11
|
# they all return true
|
12
12
|
result = [ ]
|
13
|
-
possible = @axis.run(context, autovivify)
|
13
|
+
possible = @axis.nil? ? [ context.root ] : @axis.run(context, autovivify)
|
14
14
|
return possible if @predicates.nil? || @predicates.empty?
|
15
15
|
@predicates.each do |p|
|
16
16
|
n_p = [ ]
|
data/lib/fabulator/lib/action.rb
CHANGED
@@ -24,6 +24,10 @@ module Fabulator
|
|
24
24
|
end
|
25
25
|
ret
|
26
26
|
end
|
27
|
+
|
28
|
+
def has_select?
|
29
|
+
@has_select
|
30
|
+
end
|
27
31
|
end
|
28
32
|
|
29
33
|
class ActionRef
|
@@ -54,7 +58,9 @@ module Fabulator
|
|
54
58
|
ctx.set_var('actions', ctx.root.anon_node( @actions, [ FAB_NS, 'expression' ]))
|
55
59
|
end
|
56
60
|
if action.has_select?
|
57
|
-
|
61
|
+
v = @context.attribute(Fabulator::FAB_NS, 'select', { :eval => true })
|
62
|
+
|
63
|
+
ctx.set_var('select', ctx.root.anon_node( v, [ FAB_NS, 'expression' ]))
|
58
64
|
end
|
59
65
|
ret = action.run(ctx)
|
60
66
|
end
|
@@ -103,6 +103,14 @@ module Fabulator
|
|
103
103
|
end
|
104
104
|
end
|
105
105
|
end
|
106
|
+
s.gsub!(/^\s+/, '')
|
107
|
+
s.gsub!(/\s+$/, '')
|
108
|
+
# we want to see if we need to remove a whitespace prefix
|
109
|
+
indent = s.
|
110
|
+
split(/[\x0a\0x0d]/).
|
111
|
+
map{|l| (v=l[/^([\s]+)/].to_s.length; v==0)? nil : v }.
|
112
|
+
compact.min
|
113
|
+
s.gsub!(/^#{' '*indent.to_i}/, '')
|
106
114
|
s = @wrapper.first + s + @wrapper.last
|
107
115
|
return [ context.root.anon_node(s, [ FAB_NS, 'string' ]) ]
|
108
116
|
end
|
data/xsm_expression_parser.racc
CHANGED
@@ -114,7 +114,7 @@ rule
|
|
114
114
|
| union_expr_x PIPE path_expr { result = val[0] + [ val[2] ] }
|
115
115
|
|
116
116
|
path_expr: location_path { result = Fabulator::Expr::PathExpr.new(nil, [], val[0]) } #result = Fabulator::Expr::PathExpr.new(nil, [], val[0]) }
|
117
|
-
| primary_expr predicates segment { result = Fabulator::Expr::PathExpr.new(val[0], val[1], val[2]) }
|
117
|
+
| primary_expr predicates segment { result = ((val[1].nil? || val[1].empty?) && (val[2].nil? || val[2].empty?)) ? val[0] : Fabulator::Expr::PathExpr.new(val[0], val[1], val[2]) }
|
118
118
|
|
119
119
|
segment:
|
120
120
|
| SLASH relative_location_path { result = val[1] }
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fabulator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 63
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 16
|
10
|
+
version: 0.0.16
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- James Smith
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-12-
|
18
|
+
date: 2010-12-28 00:00:00 +00:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|