Module: Rison
- Defined in:
- lib/rison.rb,
lib/rison/dump.rb,
lib/rison/lexer.rb,
lib/rison/parser.rb,
lib/rison/grammar.rb,
lib/rison/evaluator.rb
Defined Under Namespace
Classes: Evaluator, Grammar, LexerSpec, Parser
Constant Summary
collapse
- LEXER =
Dhaka::Lexer.new(LexerSpec)
- EVALUATOR =
Evaluator.new
Class Method Summary
collapse
Class Method Details
.dump(object) ⇒ Object
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
# File 'lib/rison/dump.rb', line 2
def self.dump(object)
case object
when NilClass then '!n'
when TrueClass then '!t'
when FalseClass then '!f'
when Symbol then dump(object.to_s)
when Rational then object.to_f.to_s
when Numeric then object.to_s
when String
if object.empty?
"''"
elsif id?(object)
object
else
quote(object)
end
when Hash
'(%s)' % (object.sort_by { |k, v| k.to_s }.map { |(k, v)| '%s:%s' % [ dump(k), dump(v) ] } * ',')
when Array
'!(%s)' % (object.map { |x| dump(x) } * ',')
else
raise ArgumentError, 'cannot serialize: %p' % object
end
end
|
.escape(string) ⇒ Object
40
41
42
|
# File 'lib/rison/dump.rb', line 40
def self.escape(string)
string.gsub('!', '!!').gsub("'", "!'")
end
|
.evaluate(parsed) ⇒ Object
26
27
28
|
# File 'lib/rison.rb', line 26
def self.evaluate(parsed)
EVALUATOR.evaluate(parsed)
end
|
.id?(string) ⇒ Boolean
44
45
46
|
# File 'lib/rison/dump.rb', line 44
def self.id?(string)
string !~ /^(-|\d)/ && string !~ /['!:(),*@$ ]/
end
|
.lex(data) ⇒ Object
18
19
20
|
# File 'lib/rison.rb', line 18
def self.lex(data)
LEXER.lex(data.to_s)
end
|
.load(data) ⇒ Object
9
10
11
|
# File 'lib/rison.rb', line 9
def self.load(data)
evaluate(parse(lex(data)))
end
|
.parse(lexed) ⇒ Object
22
23
24
|
# File 'lib/rison.rb', line 22
def self.parse(lexed)
Parser.parse(lexed)
end
|
.quote(string) ⇒ Object
36
37
38
|
# File 'lib/rison/dump.rb', line 36
def self.quote(string)
"'%s'" % escape(string)
end
|