radius 0.6.1 → 0.7.0.prerelease

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. data/CHANGELOG +21 -12
  2. data/LICENSE +19 -0
  3. data/QUICKSTART.rdoc +7 -7
  4. data/README.rdoc +10 -28
  5. data/Rakefile +8 -31
  6. data/VERSION +1 -0
  7. data/lib/radius.rb +3 -2
  8. data/lib/radius/context.rb +21 -13
  9. data/lib/radius/delegating_open_struct.rb +6 -0
  10. data/lib/radius/ord_string.rb +13 -0
  11. data/lib/radius/parse_tag.rb +1 -1
  12. data/lib/radius/parser.rb +25 -11
  13. data/lib/radius/parser/JavaScanner$Flavor.class +0 -0
  14. data/lib/radius/parser/JavaScanner$Tag.class +0 -0
  15. data/lib/radius/parser/JavaScanner.class +0 -0
  16. data/lib/radius/parser/JavaScanner.java +634 -0
  17. data/lib/radius/parser/JavaScanner.rl +179 -0
  18. data/lib/radius/parser/java_scanner.jar +0 -0
  19. data/lib/radius/parser/scanner.rb +1255 -0
  20. data/lib/radius/parser/{scan.rl → scanner.rl} +6 -4
  21. data/lib/radius/parser/squiggle_scanner.rb +1238 -0
  22. data/lib/radius/parser/squiggle_scanner.rl +126 -0
  23. data/lib/radius/utility.rb +10 -0
  24. data/lib/radius/version.rb +6 -12
  25. data/tasks/jeweler.rake +22 -0
  26. data/tasks/rdoc.rake +13 -0
  27. data/tasks/rubinius.rake +4 -0
  28. data/tasks/scan.rake +64 -12
  29. data/tasks/test.rake +7 -0
  30. data/test/benchmarks.rb +35 -0
  31. data/test/context_test.rb +2 -2
  32. data/test/multithreaded_test.rb +63 -0
  33. data/test/ord_string_test.rb +18 -0
  34. data/test/parser_test.rb +21 -4
  35. data/test/quickstart_test.rb +9 -11
  36. data/test/squiggle_test.rb +281 -0
  37. data/test/test_helper.rb +10 -2
  38. data/test/utility_test.rb +30 -0
  39. metadata +67 -64
  40. data.tar.gz.sig +0 -0
  41. data/Manifest.txt +0 -21
  42. data/lib/radius/parser/scan.rb +0 -700
  43. metadata.gz.sig +0 -0
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), 'test_helper')
1
+ require File.expand_path(File.dirname(__FILE__) + '/test_helper')
2
2
 
3
3
  class QuickstartTest < Test::Unit::TestCase
4
4
 
@@ -20,7 +20,7 @@ class QuickstartTest < Test::Unit::TestCase
20
20
  RedCloth.new(contents).to_html
21
21
  end
22
22
  parser = Radius::Parser.new(context)
23
- assert_equal "<h1>Hello <b>World</b>!</h1>", parser.parse('<radius:textile>h1. Hello **World**!</radius:textile>')
23
+ assert_equal "<p>Hello <b>World</b>!</p>", parser.parse('<radius:textile>Hello **World**!</radius:textile>')
24
24
  end
25
25
 
26
26
  def test_nested_example
@@ -68,15 +68,14 @@ class QuickstartTest < Test::Unit::TestCase
68
68
  attr_accessor :name, :age, :email
69
69
  end
70
70
  def test_exposing_objects_example
71
- context = Radius::Context.new
72
- parser = Radius::Parser.new(context)
71
+ parser = Radius::Parser.new
73
72
 
74
- context.define_tag "count", :for => 1
73
+ parser.context.define_tag "count", :for => 1
75
74
  assert_equal "1", parser.parse("<radius:count />")
76
75
 
77
76
  user = User.new
78
77
  user.name, user.age, user.email = "John", 29, "john@example.com"
79
- context.define_tag "user", :for => user, :expose => [ :name, :age, :email ]
78
+ parser.context.define_tag "user", :for => user, :expose => [ :name, :age, :email ]
80
79
  assert_equal "John", parser.parse("<radius:user><radius:name /></radius:user>")
81
80
 
82
81
  assert_equal "John", parser.parse("<radius:user:name />")
@@ -94,16 +93,15 @@ class QuickstartTest < Test::Unit::TestCase
94
93
  end
95
94
 
96
95
  def test_tag_globals_example
97
- context = Radius::Context.new
98
- parser = Radius::Parser.new(context)
96
+ parser = Radius::Parser.new
99
97
 
100
- context.define_tag "inc" do |tag|
98
+ parser.context.define_tag "inc" do |tag|
101
99
  tag.globals.count ||= 0
102
100
  tag.globals.count += 1
103
101
  ""
104
102
  end
105
103
 
106
- context.define_tag "count" do |tag|
104
+ parser.context.define_tag "count" do |tag|
107
105
  tag.globals.count || 0
108
106
  end
109
107
 
@@ -150,4 +148,4 @@ class QuickstartTest < Test::Unit::TestCase
150
148
  assert_raises(Radius::UndefinedTagError) { parser.parse('<r:name />') } # raises a Radius::UndefinedTagError exception
151
149
  end
152
150
 
153
- end
151
+ end
@@ -0,0 +1,281 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/test_helper')
2
+ require 'radius/parser/squiggle_scanner'
3
+
4
+ class RadiusSquiggleTest < Test::Unit::TestCase
5
+ include RadiusTestHelper
6
+
7
+ def setup
8
+ @context = new_context
9
+ @parser = Radius::Parser.new(@context, :scanner => Radius::SquiggleScanner.new)
10
+ end
11
+
12
+ def test_sane_scanner_default
13
+ assert !Radius::Parser.new.scanner.is_a?(Radius::SquiggleScanner)
14
+ end
15
+
16
+ def test_initialize_with_params
17
+ @parser = Radius::Parser.new(:scanner => Radius::SquiggleScanner.new)
18
+ assert_kind_of Radius::SquiggleScanner, @parser.scanner
19
+ end
20
+
21
+ def test_parse_individual_tags_and_parameters
22
+ define_tag "add" do |tag|
23
+ tag.attr["param1"].to_i + tag.attr["param2"].to_i
24
+ end
25
+ assert_parse_output "{3}", %[{{ add param1="1" param2='2'/}}]
26
+ end
27
+
28
+ def test_parse_attributes
29
+ attributes = %[{"a"=>"1", "b"=>"2", "c"=>"3", "d"=>"'"}]
30
+ assert_parse_output attributes, %[{attr a="1" b='2'c="3"d="'" /}]
31
+ assert_parse_output attributes, %[{attr a="1" b='2'c="3"d="'"}{/attr}]
32
+ end
33
+
34
+ def test_parse_attributes_with_slashes_or_angle_brackets
35
+ slash = %[{"slash"=>"/"}]
36
+ angle = %[{"angle"=>">"}]
37
+ assert_parse_output slash, %[{attr slash="/"}{/attr}]
38
+ assert_parse_output slash, %[{attr slash="/"}{attr /}{/attr}]
39
+ assert_parse_output angle, %[{attr angle=">"}{/attr}]
40
+ end
41
+
42
+ def test_parse_quotes
43
+ assert_parse_output "test []", %[{echo value="test" /} {wrap attr="test"}{/wrap}]
44
+ end
45
+
46
+ def test_things_that_should_be_left_alone
47
+ [
48
+ %[ test="2"="4" ],
49
+ %[="2" ]
50
+ ].each do |middle|
51
+ assert_parsed_is_unchanged "{attr#{middle}/}"
52
+ assert_parsed_is_unchanged "{attr#{middle}}"
53
+ end
54
+ end
55
+
56
+ def test_tags_inside_html_tags
57
+ assert_parse_output %[<div class="xzibit">tags in yo tags</div>],
58
+ %[<div class="{reverse}tibizx{/reverse}">tags in yo tags</div>]
59
+ end
60
+
61
+ def test_parse_result_is_always_a_string
62
+ define_tag("twelve") { 12 }
63
+ assert_parse_output "12", "{ twelve /}"
64
+ end
65
+
66
+ def test_parse_double_tags
67
+ assert_parse_output "test".reverse, "{reverse}test{/reverse}"
68
+ assert_parse_output "tset TEST", "{reverse}test{/reverse} {capitalize}test{/capitalize}"
69
+ end
70
+
71
+ def test_parse_tag_nesting
72
+ define_tag("parent", :for => '')
73
+ define_tag("parent:child", :for => '')
74
+ define_tag("extra", :for => '')
75
+ define_tag("nesting") { |tag| tag.nesting }
76
+ define_tag("extra:nesting") { |tag| tag.nesting.gsub(':', ' > ') }
77
+ define_tag("parent:child:nesting") { |tag| tag.nesting.gsub(':', ' * ') }
78
+ assert_parse_output "nesting", "{nesting /}"
79
+ assert_parse_output "parent:nesting", "{parent:nesting /}"
80
+ assert_parse_output "extra > nesting", "{extra:nesting /}"
81
+ assert_parse_output "parent * child * nesting", "{parent:child:nesting /}"
82
+ assert_parse_output "parent > extra > nesting", "{parent:extra:nesting /}"
83
+ assert_parse_output "parent > child > extra > nesting", "{parent:child:extra:nesting /}"
84
+ assert_parse_output "parent * extra * child * nesting", "{parent:extra:child:nesting /}"
85
+ assert_parse_output "parent > extra > child > extra > nesting", "{parent:extra:child:extra:nesting /}"
86
+ assert_parse_output "parent > extra > child > extra > nesting", "{parent}{extra}{child}{extra}{nesting /}{/extra}{/child}{/extra}{/parent}"
87
+ assert_parse_output "extra * parent * child * nesting", "{extra:parent:child:nesting /}"
88
+ assert_parse_output "extra > parent > nesting", "{extra}{parent:nesting /}{/extra}"
89
+ assert_parse_output "extra * parent * child * nesting", "{extra:parent}{child:nesting /}{/extra:parent}"
90
+ assert_raises(Radius::UndefinedTagError) { @parser.parse("{child /}") }
91
+ end
92
+ def test_parse_tag_nesting_2
93
+ define_tag("parent", :for => '')
94
+ define_tag("parent:child", :for => '')
95
+ define_tag("content") { |tag| tag.nesting }
96
+ assert_parse_output 'parent:child:content', '{parent}{child:content /}{/parent}'
97
+ end
98
+
99
+ def test_parse_tag__binding_do_missing
100
+ define_tag 'test' do |tag|
101
+ tag.missing!
102
+ end
103
+ e = assert_raises(Radius::UndefinedTagError) { @parser.parse("{test /}") }
104
+ assert_equal "undefined tag `test'", e.message
105
+ end
106
+
107
+ def test_parse_chirpy_bird
108
+ # :> chirp chirp
109
+ assert_parse_output "<:", "<:"
110
+ end
111
+
112
+ def test_parse_tag__binding_render_tag
113
+ define_tag('test') { |tag| "Hello #{tag.attr['name']}!" }
114
+ define_tag('hello') { |tag| tag.render('test', tag.attr) }
115
+ assert_parse_output 'Hello John!', '{hello name="John" /}'
116
+ end
117
+
118
+ def test_accessing_tag_attributes_through_tag_indexer
119
+ define_tag('test') { |tag| "Hello #{tag['name']}!" }
120
+ assert_parse_output 'Hello John!', '{test name="John" /}'
121
+ end
122
+
123
+ def test_parse_tag__binding_render_tag_with_block
124
+ define_tag('test') { |tag| "Hello #{tag.expand}!" }
125
+ define_tag('hello') { |tag| tag.render('test') { tag.expand } }
126
+ assert_parse_output 'Hello John!', '{hello}John{/hello}'
127
+ end
128
+
129
+ def test_tag_locals
130
+ define_tag "outer" do |tag|
131
+ tag.locals.var = 'outer'
132
+ tag.expand
133
+ end
134
+ define_tag "outer:inner" do |tag|
135
+ tag.locals.var = 'inner'
136
+ tag.expand
137
+ end
138
+ define_tag "outer:var" do |tag|
139
+ tag.locals.var
140
+ end
141
+ assert_parse_output 'outer', "{outer}{var /}{/outer}"
142
+ assert_parse_output 'outer:inner:outer', "{outer}{var /}:{inner}{var /}{/inner}:{var /}{/outer}"
143
+ assert_parse_output 'outer:inner:outer:inner:outer', "{outer}{var /}:{inner}{var /}:{outer}{var /}{/outer}:{var /}{/inner}:{var /}{/outer}"
144
+ assert_parse_output 'outer', "{outer:var /}"
145
+ end
146
+
147
+ def test_tag_globals
148
+ define_tag "set" do |tag|
149
+ tag.globals.var = tag.attr['value']
150
+ ''
151
+ end
152
+ define_tag "var" do |tag|
153
+ tag.globals.var
154
+ end
155
+ assert_parse_output " true false", %[{var /} {set value="true" /} {var /} {set value="false" /} {var /}]
156
+ end
157
+
158
+ def test_parse_loops
159
+ @item = nil
160
+ define_tag "each" do |tag|
161
+ result = []
162
+ ["Larry", "Moe", "Curly"].each do |item|
163
+ tag.locals.item = item
164
+ result << tag.expand
165
+ end
166
+ result.join(tag.attr["between"] || "")
167
+ end
168
+ define_tag "each:item" do |tag|
169
+ tag.locals.item
170
+ end
171
+ assert_parse_output %[Three Stooges: "Larry", "Moe", "Curly"], %[Three Stooges: {each between=", "}"{item /}"{/each}]
172
+ end
173
+
174
+ def test_parse_speed
175
+ define_tag "set" do |tag|
176
+ tag.globals.var = tag.attr['value']
177
+ ''
178
+ end
179
+ define_tag "var" do |tag|
180
+ tag.globals.var
181
+ end
182
+ parts = %w{decima nobis augue at facer processus commodo legentis odio lectorum dolore nulla esse lius qui nonummy ullamcorper erat ii notare}
183
+ multiplier = parts.map{|p| "#{p}=\"#{rand}\""}.join(' ')
184
+ assert_nothing_raised do
185
+ Timeout.timeout(10) do
186
+ assert_parse_output " false", %[{set value="false" #{multiplier} /} {var /}]
187
+ end
188
+ end
189
+ end
190
+
191
+ def test_tag_option_for
192
+ define_tag 'fun', :for => 'just for kicks'
193
+ assert_parse_output 'just for kicks', '{fun /}'
194
+ end
195
+
196
+ def test_tag_expose_option
197
+ define_tag 'user', :for => users.first, :expose => ['name', :age]
198
+ assert_parse_output 'John', '{user:name /}'
199
+ assert_parse_output '25', '{user}{age /}{/user}'
200
+ e = assert_raises(Radius::UndefinedTagError) { @parser.parse "{user:email /}" }
201
+ assert_equal "undefined tag `email'", e.message
202
+ end
203
+
204
+ def test_tag_expose_attributes_option_on_by_default
205
+ define_tag 'user', :for => user_with_attributes
206
+ assert_parse_output 'John', '{user:name /}'
207
+ end
208
+ def test_tag_expose_attributes_set_to_false
209
+ define_tag 'user_without_attributes', :for => user_with_attributes, :attributes => false
210
+ assert_raises(Radius::UndefinedTagError) { @parser.parse "{user_without_attributes:name /}" }
211
+ end
212
+
213
+ def test_tag_options_must_contain_a_for_option_if_methods_are_exposed
214
+ e = assert_raises(ArgumentError) { define_tag('fun', :expose => :today) { 'test' } }
215
+ assert_equal "tag definition must contain a :for option when used with the :expose option", e.message
216
+ end
217
+
218
+ def test_parse_fail_on_missing_end_tag
219
+ assert_raises(Radius::MissingEndTagError) { @parser.parse("{reverse}") }
220
+ end
221
+
222
+ def test_parse_fail_on_wrong_end_tag
223
+ assert_raises(Radius::WrongEndTagError) { @parser.parse("{reverse}{capitalize}{/reverse}") }
224
+ end
225
+
226
+ def test_copyin_global_values
227
+ @context.globals.foo = 'bar'
228
+ assert_equal 'bar', Radius::Parser.new(@context).context.globals.foo
229
+ end
230
+
231
+ def test_does_not_pollute_copied_globals
232
+ @context.globals.foo = 'bar'
233
+ parser = Radius::Parser.new(@context)
234
+ parser.context.globals.foo = '[baz]'
235
+ assert_equal 'bar', @context.globals.foo
236
+ end
237
+
238
+ def test_parse_with_other_namespaces
239
+ @parser = Radius::Parser.new(@context, :tag_prefix => 'r')
240
+ assert_equal "{fb:test}hello world{/fb:test}", @parser.parse("{fb:test}hello world{/fb:test}")
241
+ end
242
+
243
+ protected
244
+
245
+ def assert_parse_output(output, input, message = nil)
246
+ r = @parser.parse(input)
247
+ assert_equal(output, r, message)
248
+ end
249
+
250
+ def assert_parsed_is_unchanged(something)
251
+ assert_parse_output something, something
252
+ end
253
+
254
+ class User
255
+ attr_accessor :name, :age, :email, :friend
256
+ def initialize(name, age, email)
257
+ @name, @age, @email = name, age, email
258
+ end
259
+ def <=>(other)
260
+ name <=> other.name
261
+ end
262
+ end
263
+
264
+ class UserWithAttributes < User
265
+ def attributes
266
+ { :name => name, :age => age, :email => email }
267
+ end
268
+ end
269
+
270
+ def users
271
+ [
272
+ User.new('John', 25, 'test@johnwlong.com'),
273
+ User.new('James', 27, 'test@jameslong.com')
274
+ ]
275
+ end
276
+
277
+ def user_with_attributes
278
+ UserWithAttributes.new('John', 25, 'test@johnwlong.com')
279
+ end
280
+
281
+ end
@@ -1,3 +1,4 @@
1
+ require 'rubygems'
1
2
  require 'timeout'
2
3
 
3
4
  unless defined? RADIUS_LIB
@@ -15,14 +16,21 @@ unless defined? RADIUS_LIB
15
16
  Radius::Context.new do |c|
16
17
  c.define_tag("reverse" ) { |tag| tag.expand.reverse }
17
18
  c.define_tag("capitalize") { |tag| tag.expand.upcase }
18
- c.define_tag("attr" ) { |tag| tag.attr.inspect }
19
19
  c.define_tag("echo" ) { |tag| tag.attr['value'] }
20
20
  c.define_tag("wrap" ) { |tag| "[#{tag.expand}]" }
21
+ c.define_tag("attr") do |tag|
22
+ kv = tag.attr.keys.sort.collect{|k| "#{k.inspect}=>#{tag[k].inspect}"}
23
+ "{#{kv.join(', ')}}"
24
+ end
21
25
  end
22
26
  end
23
27
 
24
28
  def define_tag(name, options = {}, &block)
29
+ @parser.context.define_tag name, options, &block
30
+ end
31
+
32
+ def define_global_tag(name, options = {}, &block)
25
33
  @context.define_tag name, options, &block
26
34
  end
27
35
  end
28
- end
36
+ end
@@ -0,0 +1,30 @@
1
+ require 'test/unit'
2
+ require 'radius'
3
+
4
+ class RadiusUtilityTest < Test::Unit::TestCase
5
+
6
+ def test_symbolize_keys
7
+ h = Radius::Utility.symbolize_keys({ 'a' => 1, :b => 2 })
8
+ assert_equal h[:a], 1
9
+ assert_equal h[:b], 2
10
+ end
11
+
12
+ def test_impartial_hash_delete
13
+ h = { 'a' => 1, :b => 2 }
14
+ assert_equal Radius::Utility.impartial_hash_delete(h, :a), 1
15
+ assert_equal Radius::Utility.impartial_hash_delete(h, 'b'), 2
16
+ assert_equal h.empty?, true
17
+ end
18
+
19
+ def test_constantize
20
+ assert_equal Radius::Utility.constantize('String'), String
21
+ end
22
+
23
+ def test_camelize
24
+ assert_equal Radius::Utility.camelize('ab_cd_ef'), 'AbCdEf'
25
+ end
26
+
27
+ def test_array_to_s
28
+ assert_equal Radius::Utility.array_to_s(['a', 1, [:c]]), 'a1c'
29
+ end
30
+ end
metadata CHANGED
@@ -1,7 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: radius
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ hash: 1092611506
5
+ prerelease: 6
6
+ segments:
7
+ - 0
8
+ - 7
9
+ - 0
10
+ - prerelease
11
+ version: 0.7.0.prerelease
5
12
  platform: ruby
6
13
  authors:
7
14
  - John W. Long (me@johnwlong.com)
@@ -9,115 +16,111 @@ authors:
9
16
  - Bryce Kerley (bkerley@brycekerley.net)
10
17
  autorequire:
11
18
  bindir: bin
12
- cert_chain:
13
- - |
14
- -----BEGIN CERTIFICATE-----
15
- MIIDLjCCAhagAwIBAgIBADANBgkqhkiG9w0BAQUFADA9MQswCQYDVQQDDAJtZTEZ
16
- MBcGCgmSJomT8ixkARkWCWpvaG53bG9uZzETMBEGCgmSJomT8ixkARkWA2NvbTAe
17
- Fw0wNzA5MjUwNTA3MDNaFw0wODA5MjQwNTA3MDNaMD0xCzAJBgNVBAMMAm1lMRkw
18
- FwYKCZImiZPyLGQBGRYJam9obndsb25nMRMwEQYKCZImiZPyLGQBGRYDY29tMIIB
19
- IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8MjmSgpGWiy+PyyumoFLnA/w
20
- gOymrqEIoHwlNRV8Z2RcZkrUHuKnFcH8ShqRww+/1BBnDJlx2rGrQ8d2W75f+xKj
21
- hxVwA+eFbLtpMMe1E0qfD69F2sQk5/+dB7WwtF4kI0vt/rHne4hYj7dN/OeJ248q
22
- dfZbxohWzSlPg0zopxlQ7WuFjZKclkUNx9Euv7K04imu4i7Q5ThCldV3VVrBFqCq
23
- VhI8lAeg7Yln1t6SaPLQ3AqQlq2hk8MA7APy4LdWaN03cunfKwkHVVwPaSD8ualr
24
- wrBQsmIrc4f3h9hJq0Ri1u/k4B2CTxaRLA34mb7MrpwZo5RqFd3x512MJaqfhQID
25
- AQABozkwNzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQU2eSXhP+B
26
- 7zF3qc5Rrb75aLF7BXowDQYJKoZIhvcNAQEFBQADggEBAFdj2/TsGJSaeFXoMixS
27
- ojVHMctKErQkA2pRM7URVyeLljJweAies3qlfpPSuUTcWFLpJf7+So1CNrU7OzXa
28
- UNAIhlWzz+knSeMahQWyMQvNGW3nt07PEkaosVdsi/Y6hO+YKNiZicBFuKw7fFUl
29
- 1FQHJMmy4+bTXxWl6RUymFiDhIjagLHbr09igGHaIOptys1k7Fxpx3xBDNr/IC0H
30
- c5GbUePwwNafnjsl9cQo3Xka285/d0IOT4grVUmAeLAh601oR/YGtsHDC7B0jWqq
31
- S4yE0yydTjVFpgazHI/CP2fneTHKbaf+H6jwNRzKN9HtcDpP2yO0tYhtmMotuZUd
32
- qXI=
33
- -----END CERTIFICATE-----
19
+ cert_chain: []
34
20
 
35
- date: 2009-09-16 00:00:00 -04:00
36
- default_executable:
21
+ date: 2011-06-13 00:00:00 Z
37
22
  dependencies:
38
23
  - !ruby/object:Gem::Dependency
39
- name: newgem
40
- type: :development
41
- version_requirement:
42
- version_requirements: !ruby/object:Gem::Requirement
24
+ name: RedCloth
25
+ prerelease: false
26
+ requirement: &id001 !ruby/object:Gem::Requirement
27
+ none: false
43
28
  requirements:
44
29
  - - ">="
45
30
  - !ruby/object:Gem::Version
46
- version: 1.5.2
47
- version:
48
- - !ruby/object:Gem::Dependency
49
- name: hoe
31
+ hash: 3
32
+ segments:
33
+ - 0
34
+ version: "0"
50
35
  type: :development
51
- version_requirement:
52
- version_requirements: !ruby/object:Gem::Requirement
53
- requirements:
54
- - - ">="
55
- - !ruby/object:Gem::Version
56
- version: 2.3.3
57
- version:
58
- description: ""
59
- email:
60
- - me@johnwlong.com
36
+ version_requirements: *id001
37
+ description: Radius is a powerful tag-based template language for Ruby inspired by the template languages used in MovableType and TextPattern. It uses tags similar to XML, but can be used to generate any form of plain text (HTML, e-mail, etc...).
38
+ email: me@johnwlong.com
61
39
  executables: []
62
40
 
63
41
  extensions: []
64
42
 
65
43
  extra_rdoc_files:
66
- - Manifest.txt
67
- - README.rdoc
44
+ - CHANGELOG
45
+ - LICENSE
68
46
  - QUICKSTART.rdoc
47
+ - README.rdoc
69
48
  files:
70
49
  - CHANGELOG
71
- - Manifest.txt
50
+ - LICENSE
72
51
  - QUICKSTART.rdoc
73
52
  - README.rdoc
74
53
  - Rakefile
54
+ - VERSION
75
55
  - lib/radius.rb
76
56
  - lib/radius/context.rb
77
57
  - lib/radius/delegating_open_struct.rb
78
58
  - lib/radius/error.rb
59
+ - lib/radius/ord_string.rb
79
60
  - lib/radius/parse_tag.rb
80
61
  - lib/radius/parser.rb
81
- - lib/radius/parser/scan.rb
82
- - lib/radius/parser/scan.rl
62
+ - lib/radius/parser/JavaScanner$Flavor.class
63
+ - lib/radius/parser/JavaScanner$Tag.class
64
+ - lib/radius/parser/JavaScanner.class
65
+ - lib/radius/parser/JavaScanner.java
66
+ - lib/radius/parser/JavaScanner.rl
67
+ - lib/radius/parser/java_scanner.jar
68
+ - lib/radius/parser/scanner.rb
69
+ - lib/radius/parser/scanner.rl
70
+ - lib/radius/parser/squiggle_scanner.rb
71
+ - lib/radius/parser/squiggle_scanner.rl
83
72
  - lib/radius/tag_binding.rb
84
73
  - lib/radius/tag_definitions.rb
85
74
  - lib/radius/utility.rb
86
75
  - lib/radius/version.rb
76
+ - tasks/jeweler.rake
77
+ - tasks/rdoc.rake
78
+ - tasks/rubinius.rake
87
79
  - tasks/scan.rake
80
+ - tasks/test.rake
81
+ - test/benchmarks.rb
88
82
  - test/context_test.rb
83
+ - test/multithreaded_test.rb
84
+ - test/ord_string_test.rb
89
85
  - test/parser_test.rb
86
+ - test/quickstart_test.rb
87
+ - test/squiggle_test.rb
90
88
  - test/test_helper.rb
91
- has_rdoc: true
92
- homepage: http://radius.rubyforge.org
89
+ - test/utility_test.rb
90
+ homepage: http://github.com/jlong/radius
93
91
  licenses: []
94
92
 
95
93
  post_install_message:
96
- rdoc_options:
97
- - --main
98
- - README.rdoc
94
+ rdoc_options: []
95
+
99
96
  require_paths:
100
97
  - lib
101
98
  required_ruby_version: !ruby/object:Gem::Requirement
99
+ none: false
102
100
  requirements:
103
101
  - - ">="
104
102
  - !ruby/object:Gem::Version
103
+ hash: 3
104
+ segments:
105
+ - 0
105
106
  version: "0"
106
- version:
107
107
  required_rubygems_version: !ruby/object:Gem::Requirement
108
+ none: false
108
109
  requirements:
109
- - - ">="
110
+ - - ">"
110
111
  - !ruby/object:Gem::Version
111
- version: "0"
112
- version:
112
+ hash: 25
113
+ segments:
114
+ - 1
115
+ - 3
116
+ - 1
117
+ version: 1.3.1
113
118
  requirements: []
114
119
 
115
- rubyforge_project: radius
116
- rubygems_version: 1.3.4
120
+ rubyforge_project:
121
+ rubygems_version: 1.8.5
117
122
  signing_key:
118
123
  specification_version: 3
119
- summary: ""
120
- test_files:
121
- - test/context_test.rb
122
- - test/parser_test.rb
123
- - test/quickstart_test.rb
124
+ summary: A tag-based templating language for Ruby.
125
+ test_files: []
126
+