citrus 1.5.1 → 1.5.2

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.
@@ -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"