citrus 1.5.1 → 1.5.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,6 +1,10 @@
1
+ $LOAD_PATH.unshift(File.expand_path('../lib', __FILE__))
2
+
3
+ require 'citrus'
4
+
1
5
  Gem::Specification.new do |s|
2
6
  s.name = 'citrus'
3
- s.version = '1.5.1'
7
+ s.version = Citrus.version
4
8
  s.date = '2010-08-17'
5
9
 
6
10
  s.summary = 'Parsing Expressions for Ruby'
@@ -4,7 +4,7 @@
4
4
  #
5
5
  # http://mjijackson.com/citrus
6
6
  module Citrus
7
- VERSION = [1, 5, 1]
7
+ VERSION = [1, 5, 2]
8
8
 
9
9
  Infinity = 1.0 / 0
10
10
 
@@ -982,5 +982,7 @@ class Object
982
982
  def grammar(name, &block)
983
983
  obj = respond_to?(:const_set) ? self : Object
984
984
  obj.const_set(name, Citrus::Grammar.new(&block))
985
+ rescue NameError
986
+ raise ArgumentError, 'Invalid grammar name: %s' % name
985
987
  end
986
988
  end
@@ -10,45 +10,29 @@ module Citrus
10
10
 
11
11
  rule :file do
12
12
  all(:space, zero_or_more(any(:require, :grammar))) {
13
- def requires
14
- find(:require)
15
- end
16
-
17
- def grammars
18
- find(:grammar)
19
- end
20
-
21
13
  def value
22
- requires.each {|r| require r.value }
23
- grammars.map {|g| g.value }
14
+ find(:require).each {|r| require r.value }
15
+ find(:grammar).map {|g| g.value }
24
16
  end
25
17
  }
26
18
  end
27
19
 
28
20
  rule :grammar do
29
21
  all(:grammar_keyword, :module_name, :grammar_body, :end_keyword) {
30
- def includes
31
- find(:include)
32
- end
33
-
34
22
  def modules
35
- includes.map {|inc| eval(inc.value, TOPLEVEL_BINDING) }
23
+ find(:include).map {|inc| eval(inc.value, TOPLEVEL_BINDING) }
36
24
  end
37
25
 
38
26
  def root
39
27
  find(:root).last
40
28
  end
41
29
 
42
- def rules
43
- find(:rule)
44
- end
45
-
46
30
  def value
47
31
  code = '%s = Citrus::Grammar.new' % module_name.value
48
32
  grammar = eval(code, TOPLEVEL_BINDING)
49
33
  modules.each {|mod| grammar.include(mod) }
50
34
  grammar.root(root.value) if root
51
- rules.each {|rule| grammar.rule(rule.rule_name.value, rule.value) }
35
+ find(:rule).each {|r| grammar.rule(r.rule_name.value, r.value) }
52
36
  grammar
53
37
  end
54
38
  }
@@ -131,4 +131,10 @@ class GrammarTest < Test::Unit::TestCase
131
131
  assert_equal(str.length, match.length)
132
132
  end
133
133
 
134
+ def test_global_grammar
135
+ assert_raise ArgumentError do
136
+ grammar(:abc)
137
+ end
138
+ end
139
+
134
140
  end
metadata CHANGED
@@ -1,13 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: citrus
3
3
  version: !ruby/object:Gem::Version
4
- hash: 1
5
4
  prerelease: false
6
5
  segments:
7
6
  - 1
8
7
  - 5
9
- - 1
10
- version: 1.5.1
8
+ - 2
9
+ version: 1.5.2
11
10
  platform: ruby
12
11
  authors:
13
12
  - Michael Jackson
@@ -26,7 +25,6 @@ dependencies:
26
25
  requirements:
27
26
  - - ">="
28
27
  - !ruby/object:Gem::Version
29
- hash: 3
30
28
  segments:
31
29
  - 0
32
30
  version: "0"
@@ -40,7 +38,6 @@ dependencies:
40
38
  requirements:
41
39
  - - ">="
42
40
  - !ruby/object:Gem::Version
43
- hash: 3
44
41
  segments:
45
42
  - 0
46
43
  version: "0"
@@ -118,7 +115,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
118
115
  requirements:
119
116
  - - ">="
120
117
  - !ruby/object:Gem::Version
121
- hash: 3
122
118
  segments:
123
119
  - 0
124
120
  version: "0"
@@ -127,7 +123,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
127
123
  requirements:
128
124
  - - ">="
129
125
  - !ruby/object:Gem::Version
130
- hash: 3
131
126
  segments:
132
127
  - 0
133
128
  version: "0"