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.
- data/CHANGELOG +21 -12
- data/LICENSE +19 -0
- data/QUICKSTART.rdoc +7 -7
- data/README.rdoc +10 -28
- data/Rakefile +8 -31
- data/VERSION +1 -0
- data/lib/radius.rb +3 -2
- data/lib/radius/context.rb +21 -13
- data/lib/radius/delegating_open_struct.rb +6 -0
- data/lib/radius/ord_string.rb +13 -0
- data/lib/radius/parse_tag.rb +1 -1
- data/lib/radius/parser.rb +25 -11
- data/lib/radius/parser/JavaScanner$Flavor.class +0 -0
- data/lib/radius/parser/JavaScanner$Tag.class +0 -0
- data/lib/radius/parser/JavaScanner.class +0 -0
- data/lib/radius/parser/JavaScanner.java +634 -0
- data/lib/radius/parser/JavaScanner.rl +179 -0
- data/lib/radius/parser/java_scanner.jar +0 -0
- data/lib/radius/parser/scanner.rb +1255 -0
- data/lib/radius/parser/{scan.rl → scanner.rl} +6 -4
- data/lib/radius/parser/squiggle_scanner.rb +1238 -0
- data/lib/radius/parser/squiggle_scanner.rl +126 -0
- data/lib/radius/utility.rb +10 -0
- data/lib/radius/version.rb +6 -12
- data/tasks/jeweler.rake +22 -0
- data/tasks/rdoc.rake +13 -0
- data/tasks/rubinius.rake +4 -0
- data/tasks/scan.rake +64 -12
- data/tasks/test.rake +7 -0
- data/test/benchmarks.rb +35 -0
- data/test/context_test.rb +2 -2
- data/test/multithreaded_test.rb +63 -0
- data/test/ord_string_test.rb +18 -0
- data/test/parser_test.rb +21 -4
- data/test/quickstart_test.rb +9 -11
- data/test/squiggle_test.rb +281 -0
- data/test/test_helper.rb +10 -2
- data/test/utility_test.rb +30 -0
- metadata +67 -64
- data.tar.gz.sig +0 -0
- data/Manifest.txt +0 -21
- data/lib/radius/parser/scan.rb +0 -700
- metadata.gz.sig +0 -0
data/test/quickstart_test.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require File.
|
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 "<
|
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
|
-
|
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
|
-
|
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
|
data/test/test_helper.rb
CHANGED
@@ -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
|
-
|
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:
|
36
|
-
default_executable:
|
21
|
+
date: 2011-06-13 00:00:00 Z
|
37
22
|
dependencies:
|
38
23
|
- !ruby/object:Gem::Dependency
|
39
|
-
name:
|
40
|
-
|
41
|
-
|
42
|
-
|
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
|
-
|
47
|
-
|
48
|
-
-
|
49
|
-
|
31
|
+
hash: 3
|
32
|
+
segments:
|
33
|
+
- 0
|
34
|
+
version: "0"
|
50
35
|
type: :development
|
51
|
-
|
52
|
-
|
53
|
-
|
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
|
-
-
|
67
|
-
-
|
44
|
+
- CHANGELOG
|
45
|
+
- LICENSE
|
68
46
|
- QUICKSTART.rdoc
|
47
|
+
- README.rdoc
|
69
48
|
files:
|
70
49
|
- CHANGELOG
|
71
|
-
-
|
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/
|
82
|
-
- lib/radius/parser/
|
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
|
-
|
92
|
-
homepage: http://radius
|
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
|
-
|
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
|
-
|
112
|
-
|
112
|
+
hash: 25
|
113
|
+
segments:
|
114
|
+
- 1
|
115
|
+
- 3
|
116
|
+
- 1
|
117
|
+
version: 1.3.1
|
113
118
|
requirements: []
|
114
119
|
|
115
|
-
rubyforge_project:
|
116
|
-
rubygems_version: 1.
|
120
|
+
rubyforge_project:
|
121
|
+
rubygems_version: 1.8.5
|
117
122
|
signing_key:
|
118
123
|
specification_version: 3
|
119
|
-
summary:
|
120
|
-
test_files:
|
121
|
-
|
122
|
-
- test/parser_test.rb
|
123
|
-
- test/quickstart_test.rb
|
124
|
+
summary: A tag-based templating language for Ruby.
|
125
|
+
test_files: []
|
126
|
+
|