fabulator-grammar 0.0.5 → 0.0.6

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 CHANGED
@@ -1,3 +1,9 @@
1
+ === 0.0.6 2010-12-08
2
+
3
+ * 1 minor enhancement:
4
+ * Compute the regex for character sets/classes as they are built since
5
+ BitSet objects don't survive YAML serialization
6
+
1
7
  === 0.0.5 2010-10-26
2
8
 
3
9
  * 1 minor enhancement:
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.5
1
+ 0.0.6
@@ -31,8 +31,8 @@ Feature: Grammars embedded in libraries
31
31
  </g:grammar>
32
32
  </l:library>
33
33
  """
34
- Then the expression (m:something?('a0A')) should equal [f:true()]
35
- And the expression (m:something?('a0a')) should equal [f:false()]
34
+ Then the expression (m:something?('a0A')) should be true
35
+ And the expression (m:something?('a0a')) should be false
36
36
  And the expression (m:something('a0A')/NUMBER) should equal ['0']
37
37
  And the expression (m:something2('a0A')/foo) should equal ['0']
38
38
 
@@ -73,11 +73,31 @@ Feature: Grammars embedded in libraries
73
73
  <f:value-of f:select="$1 - $2" />
74
74
  </l:function>
75
75
  <l:action l:name="actn" l:has-actions="true">
76
+ <l:attribute l:name="foo" />
76
77
  <f:value-of f:select="f:eval($actions) * 3" />
77
78
  </l:action>
78
79
  <l:action l:name="actn2" l:has-actions="true">
79
80
  <my:actn><f:value-of f:select="f:eval($actions) * 5" /></my:actn>
80
81
  </l:action>
82
+ <l:action l:name="actn3">
83
+ <l:attribute l:name="path" l:eval="true" />
84
+ <f:value f:path="f:eval($path)" f:select="3" />
85
+ </l:action>
86
+ <l:action l:name="actn4">
87
+ <l:attribute l:name="foo" l:eval="false" />
88
+ <f:value f:path="/actn4foo" f:select="f:eval($foo)" />
89
+ </l:action>
90
+ <l:template l:name="tmpl">
91
+ Foo
92
+ </l:template>
93
+ <l:template l:name="tmpl2">
94
+ <f:value-of f:select="$1" />
95
+ </l:template>
96
+ <l:template l:name="tmpl3">
97
+ <p>
98
+ <f:value-of f:select="$1" />
99
+ </p>
100
+ </l:template>
81
101
  </l:library>
82
102
  """
83
103
  And the statemachine
@@ -85,6 +105,8 @@ Feature: Grammars embedded in libraries
85
105
  <f:application xmlns:f="http://dh.tamu.edu/ns/fabulator/1.0#"
86
106
  xmlns:m="http://example.com/ns/grammar"
87
107
  >
108
+ <m:actn3 m:path="/actn3" />
109
+ <m:actn4 m:foo="bar" />
88
110
  <f:view f:name="start">
89
111
  <f:goes-to f:view="step1">
90
112
  <f:params>
@@ -116,6 +138,8 @@ Feature: Grammars embedded in libraries
116
138
  </f:application>
117
139
  """
118
140
  Then it should be in the 'start' state
141
+ And the expression (/actn3) should equal [3]
142
+ And the expression (/actn4foo) should equal ['bar']
119
143
  When I run it with the following params:
120
144
  | key | value |
121
145
  | foo | bar a0a que |
@@ -139,3 +163,6 @@ Feature: Grammars embedded in libraries
139
163
  Then it should be in the 'stop' state
140
164
  And the expression (/bar) should equal ['a0B']
141
165
  And the expression (m:fctn(3,2)) should equal [1]
166
+ And the expression (f:normalize-space(m:tmpl())) should equal ['Foo']
167
+ And the expression (f:normalize-space(m:tmpl2('Foo'))) should equal ['Foo']
168
+ And the expression (f:normalize-space(m:tmpl3('Foo'))) should equal ['<p> Foo </p>']
@@ -98,6 +98,14 @@ Then /the (expression \(.*\)) should equal (\[.*\])/ do |x, y|
98
98
  a.first.value.should == b.first.value
99
99
  end
100
100
 
101
+ Then /the (expression \(.*\)) should be true/ do |x|
102
+ x.run(@context).first.value.should == true
103
+ end
104
+
105
+ Then /the (expression \(.*\)) should be false/ do |x|
106
+ x.run(@context).first.value.should == false
107
+ end
108
+
101
109
  Then /the (expression \(.*\)) should be nil/ do |x|
102
110
  x.run(@context).first.should == nil
103
111
  end
@@ -73,7 +73,7 @@ module Fabulator
73
73
  nom.gsub!(/\?$/, '')
74
74
  ret = matching ? strings.collect{ |s| self.match(context, nom, s) } :
75
75
  strings.collect{ |s| self.parse(context, nom, s) }
76
- #ret -= [ nil ]
76
+ ret -= [ nil ]
77
77
  if matching
78
78
  ret = ret.collect{ |r| context.root.anon_node(!!r, [FAB_NS, 'boolean']) }
79
79
  else
@@ -30,6 +30,7 @@ module Fabulator::Grammar::Expr
30
30
  }
31
31
  end
32
32
  end
33
+ self.compute_regex
33
34
  end
34
35
 
35
36
  def set
@@ -38,20 +39,27 @@ module Fabulator::Grammar::Expr
38
39
 
39
40
  def or(c)
40
41
  @set = @set | c.set
42
+ self.compute_regex
41
43
  self
42
44
  end
43
45
 
44
46
  def but_not(c)
45
47
  @set = @set - c.set
48
+ self.compute_regex
46
49
  self
47
50
  end
48
51
 
49
52
  # for now, we restrict ourselves to 8-bit characters
50
53
  def universal
51
54
  @set.on(0..0xff)
55
+ self.compute_regex
52
56
  end
53
57
 
54
58
  def to_regex
59
+ @regex
60
+ end
61
+
62
+ def compute_regex
55
63
  # want a compact set of ranges for the regex
56
64
  set_def = ''
57
65
  @set.to_ary.each do |r|
@@ -62,9 +70,9 @@ module Fabulator::Grammar::Expr
62
70
  end
63
71
  end
64
72
  if set_def == ''
65
- return %r{.}
73
+ @regex = %r{.}
66
74
  else
67
- %r{[#{set_def}]}
75
+ @regex = %r{[#{set_def}]}
68
76
  end
69
77
  end
70
78
  end
@@ -89,6 +97,7 @@ module Fabulator::Grammar::Expr
89
97
 
90
98
  def initialize(cs)
91
99
  @set = BitSet.new.on(@@charsets[cs.downcase] || [])
100
+ self.compute_regex
92
101
  end
93
102
  end
94
103
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fabulator-grammar
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
4
+ hash: 19
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 5
10
- version: 0.0.5
9
+ - 6
10
+ version: 0.0.6
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-10-26 00:00:00 +00:00
18
+ date: 2010-12-08 00:00:00 +00:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency